Java基础知识强化之集合框架笔记37:用户登录注册案例

1. 登录注册案例分析图解:

 

 

2. 用户登录案例 详细分析分包实现

(1)用户登录案例详细分析(面向对象思想

按照如下的操作,可以让我们更符合面向对象思想

  • 有哪些类呢

                用户类

                测试类

      • 每个类有哪些东西呢

                用户类:

       成员变量:用户名,密码

                        构造方法:无参构造

                        成员方法:getXxx() / setXxx()

                                          登录,注册

                       假如用户类的内容比较多,将来维护起来就比较麻烦,为了更清晰的分类,我们就把用户又划分成了两类:

                      用户基本描述类:                           

                            成员变量:用户名,密码

                                               构造方法:无参构造

                                               成员方法:getXxx() / setXxx()

                       用户操作类:

                             登录,注册

                                              

              测试类:

                         main方法

      • 类与类之间的关系是什么呢

     在测试类中创建用户操作类和用户基本描述类的对象,并使用其功能。

 

(2)用户登录案例分包

  功能划分

    模块划分

    先按模块划分,再按照功能划分

这次我们选择按照功能划分:
  用户基本描述类包:     cn.itcast.pojo
  用户操作接口:           cn.itcast.dao
  用户操作类包:             cn.itcast.dao.impl
这次是集合实现,其次是IO实现,再次是GUI实现,最终就是数据库实现
      用户测试类:              cn.itcast.test

 

3. 用户登录案例 用户基本描述类用户操作接口 实现:

(1)用户基本描述类:User

 1 package cn.itcast.pojo;
 2 
 3 /**
 4  * 
 5  * 这是用户基本描述类
 6  * @author Mr He
 7  * @version V1.0
 8  *
 9  */
10 
11 public class User {
12     //用户名
13     private String username;
14     //密码
15     private String password;
16     
17     public User() {
18         super();
19     }
20 
21     public String getUsername() {
22         return username;
23     }
24 
25     public void setUsername(String username) {
26         this.username = username;
27     }
28 
29     public String getPassword() {
30         return password;
31     }
32 
33     public void setPassword(String password) {
34         this.password = password;
35     }
36     
37 
38 }

 

(2)用户操作接口 :UserDao

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

 

4. 用户登录案例 用户操作类的具体实现:UserDaoImpl

 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  * @author  Mr He
11  * @version V1.0
12  *
13  */
14 
15 public class UserDaoImpl implements UserDao {
16     //为了让多个方法能够使用同一个集合,就把集合定义为成员变量
17     //为了不让外人看的,用private
18     //为了让多个对象共享同一个成员变量,使用static修饰
19     private static ArrayList<User> array = new ArrayList<User>();
20     
21 
22     public boolean isLogin(String username, String password) {
23         //遍历集合,获取每一个用户,并判断该用户的用户名和密码是否和传递过来的匹配
24         boolean flag = false;
25         for(User u:array) {
26             if(u.getUsername().equals(username) && u.getPassword().equals(password)) {
27                 flag = true;
28                 break;
29             }
30         }
31         
32         return flag;
33     }
34 
35     public void regist(User user) {
36         //把用户信息存储到集合
37         array.add(user);
38         
39     }
40 
41 }

 

5. 用户登录案例 猜数字游戏类:GuessNumber

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

 

6. 用户登录案例 测试类的实现:UserTest

  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 Mr He
 14  * @version V1.0
 15  * 
 16  * 新增加两个小问题:
 17  * (1)多个对象共享同一个成员变量,用静态
 18  * (2)循环里面如果有switch,并且在switch里面有break,那么结束的不是循环,而是switch语句
 19  */
 20 public class UserTest {
 21     public static void main(String[] args) {
 22 
 23         while (true) {
 24             // 欢迎界面,给出选择项
 25             System.out.println("--------------欢迎光临--------------");
 26             System.out.println("1 登录");
 27             System.out.println("2 注册");
 28             System.out.println("3 退出");
 29             System.out.println("请输入你的选择:");
 30             // 键盘录入选择,根据选择做不同的操作
 31             Scanner sc = new Scanner(System.in);
 32             // 为了后面的录入值的方便,我所有的数据录入全部用字符接收
 33             String choiceString = sc.nextLine();
 34 
 35             // switch多个地方要使用,我就定义到外面
 36             UserDao ud = new UserDaoImpl();
 37 
 38             // 经过简单的思考,我选择了switch
 39             switch (choiceString) {
 40             case "1":
 41                 // 登录界面,请输入用户名和密码
 42                 System.out.println("--------------登录界面--------------");
 43                 System.out.println("请输入用户名:");
 44                 String username = sc.nextLine();
 45                 System.out.println("请输入密码:");
 46                 String password = sc.nextLine();
 47 
 48                 // 调用登录功能
 49                 // 多态
 50                 // UserDao ud = new UserDaoImpl();
 51                 boolean flag = ud.isLogin(username, password);
 52                 if (flag) {
 53                     System.out.println("登录成功,可以开始玩游戏");
 54                     
 55                     System.out.println("你玩吗?y/n");
 56                     while (true) {
 57                         String resultString = sc.nextLine();
 58                         if (resultString.equalsIgnoreCase("y")) {
 59                             // 玩游戏
 60                             GuessNumber.start();
 61                             System.out.println("你还玩吗?y/n");
 62                         }else {
 63                             break;
 64                         }
 65                     }
 66                     
 67                     
 68                     System.out.println("谢谢使用,欢迎下次再来");
 69                     System.exit(0);
 70                     //break;//这里写break,结束的是switch语句
 71                 } else {
 72                     System.out.println("用户名或者密码有误,登录失败");
 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 user = new User();
 86                 user.setUsername(newUsername);
 87                 user.setPassword(newPassword);
 88 
 89                 // 调用注册功能
 90                 // 多态
 91                 // UserDao ud = new UserDaoImpl();
 92                 // 具体类使用
 93                 // UserDaoImpl udi = new UserDaoImpl();
 94                 ud.regist(user);
 95                 System.out.println("注册成功");
 96                 break;
 97 
 98             case "3":
 99             default:
100                 System.out.println("谢谢使用,欢迎下次再来");
101                 System.exit(0);
102                 break;
103 
104             }
105 
106         }
107     }
108 
109 }

 

7. 工程一栏图,如下:

 

8. 运行效果如下:

(1)测试运行效果1:

--------------欢迎光临--------------
1 登录
2 注册
3 退出
请输入你的选择:
2
--------------注册界面--------------
请输入用户名:
admin
请输入密码:
admin
注册成功
--------------欢迎光临--------------
1 登录
2 注册
3 退出
请输入你的选择:
1
--------------登录界面--------------
请输入用户名:
admin
请输入密码:
admin
登录成功,可以开始玩游戏
你玩吗?y/n
y
请输入一个数据(1~100):
56
你猜的数据56小了
请输入一个数据(1~100):
67
你猜的数据67小了
请输入一个数据(1~100):
78
你猜的数据78小了
请输入一个数据(1~100):
89
你猜的数据89大了
请输入一个数据(1~100):
80
你猜的数据80小了
请输入一个数据(1~100):
84
你猜的数据84小了
请输入一个数据(1~100):
85
恭喜你,7次就猜中了
你还玩吗?y/n
n
谢谢使用,欢迎下次再来

 

(2)测试运行效果2:

--------------欢迎光临--------------
1 登录
2 注册
3 退出
请输入你的选择:
2
--------------注册界面--------------
请输入用户名:
admin
请输入密码:
admin
注册成功
--------------欢迎光临--------------
1 登录
2 注册
3 退出
请输入你的选择:
1
--------------登录界面--------------
请输入用户名:
admin
请输入密码:
addd
用户名或者密码有误,登录失败
--------------欢迎光临--------------
1 登录
2 注册
3 退出
请输入你的选择:
1
--------------登录界面--------------
请输入用户名:
admin
请输入密码:
admin
登录成功,可以开始玩游戏
你玩吗?y/n
n
谢谢使用,欢迎下次再来

posted on 2015-10-05 18:47  鸿钧老祖  阅读(391)  评论(0编辑  收藏  举报

导航