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
谢谢使用,欢迎下次再来