用户登录注册案例(集合版)分析:
需求:用户登录注册案例(集合版)。
按照如下的操作,可以让我们更符合面向对象思想
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 }
这是针对用户进行操作的接口
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 }
这是用户操作的具体实现类(集合版)
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 }
这是用户测试类
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 }