用户登录注册案例(集合版)

用户登录注册案例(集合版)分析:

需求:用户登录注册案例(集合版)。

按照如下的操作,可以让我们更符合面向对象思想
    A:有哪些类呢?
    B:每个类有哪些东西呢?
    C:类与类之间的关系是什么呢?
    
分析:
    A:有哪些类呢?
        用户类
        测试类
    B:每个类有哪些东西呢?
        用户类:
            成员变量:用户名,密码
            构造方法:无参构造
            成员方法:getXxx()/setXxx()
                   登录
                   注册
                       
            假如用户类的内容比较多,将来维护起来就比较麻烦,为了更清晰的分类,我们就把用户又划分成了两类
                用户基本描述类
                    成员变量:用户名,密码
                    构造方法:无参构造   
                    成员方法:getXxx()/setXxx()
                用户操作类
                    登录
                    注册
        测试类:
            main方法。
    C:类与类之间的关系是什么呢?
        在测试类中创建用户操作类和用户基本描述类的对象,并使用其功能。
        
分包:
    A:功能划分
    B:模块划分
    C:先按模块划分,再按功能划分
    
今天我们选择按照功能划分:
    用户基本描述类包 cn.itcast.pojo
    用户操作接口 cn.itcast.dao
    用户操作类包 cn.itcast.dao.impl
        今天是集合实现,过几天是IO实现,再过几天是GUI实现,就业班我们就是数据库实现
    用户测试类 cn.itcast.test

用户登录注册案例分析图解:

  

示例代码如下:

  这是用户基本描述类

 1 package cn.itcast.pojo;
 2 
 3 /**
 4  * 这是用户基本描述类
 5  * 
 6  * @author 风清扬
 7  * @version V1.0
 8  * 
 9  */
10 public class User {
11     // 用户名
12     private String username;
13     // 密码
14     private String password;
15 
16     public User() {
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 }
User.java

  这是针对用户进行操作的接口

 1 package cn.itcast.dao;
 2 
 3 import cn.itcast.pojo.User;
 4 
 5 /**
 6  * 这是针对用户进行操作的接口
 7  * 
 8  * @author 风清扬
 9  * @version V1.0
10  * 
11  */
12 public interface UserDao {
13     /**
14      * 这是用户登录功能
15      * 
16      * @param username
17      *            用户名
18      * @param password
19      *            密码
20      * @return 返回登录是否成功
21      */
22     public abstract boolean isLogin(String username, String password);
23 
24     /**
25      * 这是用户注册功能
26      * 
27      * @param user
28      *            要注册的用户信息
29      */
30     public abstract void regist(User user);
31 }
UserDao.java

  这是用户操作的具体实现类(集合版)

 1 package cn.itcast.dao.impl;
 2 
 3 import java.util.ArrayList;
 4 
 5 import cn.itcast.dao.UserDao;
 6 import cn.itcast.pojo.User;
 7 
 8 /**
 9  * 这是用户操作的具体实现类(集合版)
10  * 
11  * @author 风清扬
12  * @version V1.0
13  * 
14  */
15 public class UserDaoImpl implements UserDao {
16     // 为了让多个方法能够使用同一个集合,就把集合定义为成员变量
17     // 为了不让外人看到,用private修饰
18     // 普通的成员变量是每个对象所特有的
19     // private ArrayList<User> array = new ArrayList<User>();
20     // 为了让多个对象共享同一个成员变量,用static修饰
21     // 即静态的成员变量是每个对象都可以使用的
22     private static ArrayList<User> array = new ArrayList<User>();
23 
24     @Override
25     public boolean isLogin(String username, String password) {
26         // 遍历集合,获取每一个用户,并判断该用户的用户名和密码是否和传递过来的匹配
27         boolean flag = false;
28 
29         for (User u : array) {
30             if (u.getUsername().equals(username) && u.getPassword().equals(password)) {
31                 flag = true;
32                 break;
33             }
34         }
35 
36         return flag;
37     }
38 
39     @Override
40     public void regist(User user) {
41         // 把用户信息存储到集合
42         // ArrayList<User> array = new ArrayList<User>();
43         array.add(user);
44     }
45 }
UserDaoImpl.java

  这是用户测试类

  1 package cn.itcast.test;
  2 
  3 import java.util.Scanner;
  4 
  5 import cn.itcast.dao.UserDao;
  6 import cn.itcast.dao.impl.UserDaoImpl;
  7 import cn.itcast.game.GuessNumber;
  8 import cn.itcast.pojo.User;
  9 
 10 /**
 11  * 这是用户测试类
 12  * 
 13  * @author 风清扬
 14  * @version V1.0
 15  * 
 16  *        新增加了两个小问题
 17  *          A:多个对象共享同一个成员变量时,该成员变量用静态修饰
 18  *          B:循环里面如果有switch,并且在switch里面有break,那么结束的不是循环,而是switch语句
 19  * 
 20  */
 21 public class UserTest {
 22     public static void main(String[] args) {
 23         // 为了能够回来
 24         while (true) {
 25             // 欢迎界面,给出选择项
 26             System.out.println("--------------欢迎光临--------------");
 27             System.out.println("1 登录");
 28             System.out.println("2 注册");
 29             System.out.println("3 退出");
 30             System.out.println("请输入你的选择:");
 31             
 32             // 键盘录入选择,根据选择做不同的操作
 33             Scanner sc = new Scanner(System.in);
 34             // 为了后面的录入信息的方便,我所有的数据录入全部用字符串进行接收
 35             String choiceString = sc.nextLine();
 36 
 37             // switch语句的多个地方要使用它,我就定义到外面
 38             UserDao ud = new UserDaoImpl();
 39 
 40             // 经过简单的思考,我选择了switch,必须是JDK7以后,因为switch的表达式是字符串(JDK7的新特性)
 41             switch (choiceString) {
 42             case "1":
 43                 // 登录界面,请输入用户名和密码
 44                 System.out.println("--------------登录界面--------------");
 45                 System.out.println("请输入用户名:");
 46                 String username = sc.nextLine();
 47                 System.out.println("请输入密码:");
 48                 String password = sc.nextLine();
 49 
 50                 // 调用登录功能
 51                 // UserDao ud = new UserDaomImpl();
 52 
 53                 boolean flag = ud.isLogin(username, password);
 54                 if (flag) {
 55                     System.out.println("登录成功,可以开始玩游戏了");
 56 
 57                     System.out.println("你玩吗?y/n");
 58                     while (true) {
 59                         String resultString = sc.nextLine();
 60                         if (resultString.equalsIgnoreCase("y")) {
 61                             // 玩游戏
 62                             GuessNumber.start();
 63                             System.out.println("你还玩吗?y/n");
 64                         } else {
 65                             break;
 66                         }
 67                     }
 68                     
 69                     System.out.println("谢谢使用,欢迎下次再来");
 70                     
 71                     System.exit(0);
 72                     // break; // 这里的break,结束的是switch,而while循环没有结束
 73                 } else {
 74                     System.out.println("用户名或者密码有误,登录失败");
 75                 }
 76                 break;
 77             case "2":
 78                 // 注册界面,请输入用户名和密码
 79                 System.out.println("--------------注册界面--------------");
 80                 System.out.println("请输入用户名:");
 81                 String newUsername = sc.nextLine();
 82                 System.out.println("请输入密码:");
 83                 String newPassword = sc.nextLine();
 84 
 85                 // 调用注册功能
 86                 // 多态用法
 87                 // UserDao ud = new UserDaoImpl();
 88                 // 具体类用法
 89                 // UserDaoImpl udi = new UserDaoImpl();
 90 
 91                 // 把用户名和密码封装到一个对象中
 92                 User user = new User();
 93                 user.setUsername(newUsername);
 94                 user.setPassword(newPassword);
 95                 
 96                 ud.regist(user); // 肯定注册成功,因为该方法的底层调用的是ArrayList的add()方法,该方法总是返回true。
 97                 System.out.println("注册成功"); 
 98                 break;
 99             case "3":
100             default:
101                 System.out.println("谢谢使用,欢迎下次再来");
102                 System.exit(0); // 强制退出
103                 break;
104             }
105         }
106     }
107 }

  这是猜数字小游戏

 1 package cn.itcast.game;
 2 
 3 import java.util.Scanner;
 4 
 5 /**
 6  * 这是猜数字小游戏
 7  * 
 8  * @author 风清扬
 9  * @version V1.0
10  * 
11  */
12 public class GuessNumber {
13     private GuessNumber() {
14     }
15 
16     public static void start() {
17         // 产生一个随机数
18         int number = (int) (Math.random() * 100) + 1;
19 
20         // 定义一个统计变量
21         int count = 0;
22 
23         while (true) {
24             // 键盘录入一个数据
25             Scanner sc = new Scanner(System.in);
26             System.out.println("请输入数据[1-100]:");
27             int guessNumber = sc.nextInt();
28 
29             count++;
30 
31             // 判断
32             if (guessNumber > number) {
33                 System.out.println("你猜的数据" + guessNumber + "大了");
34             } else if (guessNumber < number) {
35                 System.out.println("你猜的数据" + guessNumber + "小了");
36             } else {
37                 System.out.println("恭喜你," + count + "次就猜中了");
38                 break;
39             }
40         }
41     }
42 }
View Code
原文地址:https://www.cnblogs.com/chenmingjun/p/8654721.html