java 17 -1 用户登陆注册案例(集合版)

需求:
  用户登录注册案例

按照如下操作,可以让我们更符合面向对象思想:
  A:这个案例有哪些类
  B:每个类中又有哪些东西
  C:类与类之间的关系

分析:
  A:这个案例有哪些类
    用户类
    测试类
  B:每个类中又有哪些东西
    用户类:
      成员变量:用户名、密码
      构造方法:无参构造
      成员方法:getXxx()、setXxx()
           登陆,注册

  但,如果用户类的内容过多的时候,维护起来比较麻烦。
  所以,为了以后维护起来比较容易,我们需要更清晰的分类:
  用户类可以再分为2个类:

    用户基本描述类:
      成员变量:用户名、密码
      构造方法:无参构造
      成员方法:getXxx()、setXxx()
    用户操作类:
      登陆、注册

  测试类:
    main方法

  C:类与类之间的关系是什么呢?
    在测试类中创建用户操作类和用户描述类的对象,并使用它们的功能

分包:
     A:按照功能划分
   B:按照模块划分
   C:先按照模块划分,再按照功能划分

这次先按照功能划分:
  用户基本描述类:cn.lzl.pojo
  用户操作接口:cn.lzl.dao
  用户操作类包:cn.lzl.dao.impl
          这次做的是集合实现,过几天是IO实现,再继续就是GUI实现,接着就是数据库实现
  用户测试类:cn.lzl.test

另外添加了一个小游戏类


用户基本描述类:cn.lzl.pojo

 1 package cn.lzl.pojo;
 2 /**
 3  * 这是用户的基本描述类
 4  * 
 5  * @author LZL
 6  * 
 7  *@version V1.0
 8  */
 9 public class User {
10     //成员变量
11     private String username;
12     private String password;
13         
14     //无参构造
15     public User() {
16     }
17 
18     //成员方法
19     public String getUsername() {
20         return username;
21     }
22 
23     public void setUsername(String username) {
24         this.username = username;
25     }
26 
27     public String getPassword() {
28         return password;
29     }
30 
31     public void setPassword(String password) {
32         this.password = password;
33     }
34     
35 
36     
37 }

 

用户操作接口:cn.lzl.dao

 1 package cn.lzl.Dao.impl;
 2 
 3 import cn.lzl.pojo.User;
 4 
 5 /**
 6  * 这是针对用户进行操作的接口
 7  * 
 8  * @author LZL
 9  * 
10  * @version V1.0
11  */
12 public interface UserDao {
13     /**
14      * 这是用户进行登陆的功能
15      * 
16      * @param username
17      *            用户名
18      * @param userpassworld
19      *            密码
20      * @return 是否登陆成功
21      */
22     public abstract boolean isLogin(String username, String passworld);
23 
24     /**
25      * 这是用户进行注册的功能 PS:如果方法的参数列表大于3种,就创建一个类,调用这个类
26      * 
27      * @param user
28      *            用户信息
29      */
30     public abstract void regist(User user);
31 
32 }

 

用户操作类包:cn.lzl.dao.impl(集合版)

 1 package cn.lzl.Dao.impl;
 2 
 3 /**
 4  * 这是用户操作类包(集合版)
 5  * 
 6  * @author LZL
 7  * 
 8  * 
 9  */
10 import java.util.ArrayList;
11 
12 import cn.lzl.pojo.User;
13 
14 public class UserDaoimpl implements UserDao {
15     // 因为登陆和注册要共用同一个集合(服务端),所以用static修饰
16     private static ArrayList<User> array = new ArrayList<User>();
17 
18     public boolean isLogin(String username, String password) {
19         boolean flag = false;
20         // 对集合进行遍历,获取里面的每一个用户名和密码,来跟录入的用户名和密码进行比较
21         for (User user : array) {
22             if (user.getUsername().equals(username)
23                     && user.getPassword().equals(password)) {
24                 flag = true;
25                 break;
26             }
27         }
28 
29         return flag;
30     }
31 
32     public void regist(User user) {
33         //用户注册时,把用户信息添加到集合中
34         array.add(user);
35     }
36 
37 }

 

随机数小游戏类:

 1 package cn.lzl.GuessGame;
 2 
 3 import java.util.Scanner;
 4 
 5 /**
 6  * 这是个猜数字的小游戏 1-100
 7  *
 8  * @author LZL
 9  *
10  *
11  */
12 public class GuessNmuber {
13     //无参构造
14     public  GuessNmuber(){
15         
16     }
17     public static void start (){
18         //产生一个随机数
19         int number = (int)(Math.random() * 100) + 1 ;
20         
21         //定义一个统计变量
22         int count = 0;
23         //进入循环,直到猜中才退出,猜错就重新来,并进行计数
24         while(true){
25         
26         //键盘录入猜测数据
27         Scanner sc = new Scanner(System.in);
28         System.out.println("请输入你的猜测:");
29         int num = sc.nextInt();
30         count ++;
31         //猜测数据进行对比
32         if(num < number){
33             System.out.println("你猜的数字"+num+"小了");
34         }
35         else if(num > number){
36             System.out.println("你猜的数字"+num+"大了");
37         }
38         else{
39             System.out.println("恭喜你,猜了"+count+"次,猜中了");
40             break;
41         }
42     }
43 }
44 }

 

用户测试类:cn.lzl.test

  1 package cn.lzl.test;
  2 
  3 import java.util.Scanner;
  4 
  5 import cn.lzl.Dao.impl.UserDao;
  6 import cn.lzl.Dao.impl.UserDaoimpl;
  7 import cn.lzl.GuessGame.GuessNmuber;
  8 import cn.lzl.pojo.User;
  9 
 10 /**
 11  * 这是用户测试类 测试用户登录、注册、退出以及登陆成功后进行的小游戏功能
 12  * 
 13  * @author LZL
 14  * 
 15  * @version V1.0
 16  */
 17 public class UserTest {
 18 
 19     public static void main(String[] args) {
 20         //为了让用户注册完毕后,能立刻进行登陆
 21         while(true){
 22         //欢迎界面
 23         System.out.println("---------欢迎---------");
 24         System.out.println("1  登陆");
 25         System.out.println("2  注册");
 26         System.out.println("3  退出");
 27         Scanner sc = new Scanner(System.in);
 28         System.out.println("请输入你的选择:");
 29         // 为了后面的录入信息的方便,我所有的数据录入全部用字符接收
 30         String choise = sc.nextLine();
 31         
 32         
 33         //由于登陆和注册都要调用UserDao类里面的方法,所以写在switch语句外面
 34         UserDao ud = new UserDaoimpl();
 35         switch (choise) {
 36         
 37         case "1"://进入登陆界面
 38             
 39             System.out.println("---------用户登陆---------");
 40             System.out.println("请输入用户名:");
 41             String username = sc.nextLine();
 42             System.out.println("请输入密码:");
 43             String password = sc.nextLine();
 44             
 45             //调用用户登录功能 
 46             //UserDao ud = new UserDaoimpl();//多态调用
 47             boolean flag = ud.isLogin(username, password);
 48             if(flag){
 49                 
 50                 System.out.println("登陆成功,可以玩游戏了");
 51                 System.out.println("你想要玩吗? Y / N");
 52                 
 53                 while(true){//进入循环,直到游戏结束
 54                     //键盘输入是否玩游戏选项        
 55                     String result = sc.nextLine();
 56                 if(result.equalsIgnoreCase("y")){//忽略大小写对比
 57                     //调用游戏类
 58                     GuessNmuber.start();
 59                     //结束后再次选择
 60                     System.out.println("你还想玩吗?Y / N");
 61                 }else{
 62                         break;
 63                     }
 64                 }
 65                 System.out.println("谢谢使用,欢迎下次再来");
 66                 System.exit(0);
 67                 // break; //这里写break,结束的是switch
 68                 
 69                 }
 70             else{
 71                 System.out.println("登录失败,用户名或者密码错误");
 72             }
 73             
 74             break;
 75         
 76         case "2":
 77             //进入注册界面
 78             System.out.println("---------用户登陆---------");
 79             System.out.println("请输入用户名:");
 80             String newusername = sc.nextLine();
 81             System.out.println("请输入密码:");
 82             String newpassword = sc.nextLine();
 83             
 84             //由于用户注册需要的是一个对象,所以上面的内容要进行封装成一个对象
 85             User us = new User();
 86             us.setUsername(newusername);
 87             us.setPassword(newpassword);
 88             
 89             //调用用户注册方法
 90             ud.regist(us);
 91             System.out.println("注册成功");
 92             
 93             break;
 94         case "3":
 95             System.out.println("谢谢使用,欢迎下次再来");
 96             System.exit(0);//选择3和其他选项,都认为是退出程序    
 97             break;
 98         default:
 99             System.out.println("输入错误,程序退出");
100             System.exit(0);//选择3和其他选项,都认为是退出程序    
101             break;
102         }
103     }
104 }
105 }

 

posted @ 2016-09-23 15:40  卡拉瓦  阅读(681)  评论(0编辑  收藏  举报