需求:
用户登录注册案例
按照如下操作,可以让我们更符合面向对象思想:
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 packagecn.lzl.pojo;2 /**
3 * 这是用户的基本描述类4 *5 *@authorLZL6 *7 *@versionV1.08 */
9 public classUser {10 //成员变量
11 privateString username;12 privateString password;13
14 //无参构造
15 publicUser() {16 }17
18 //成员方法
19 publicString getUsername() {20 returnusername;21 }22
23 public voidsetUsername(String username) {24 this.username =username;25 }26
27 publicString getPassword() {28 returnpassword;29 }30
31 public voidsetPassword(String password) {32 this.password =password;33 }34
35
36
37 }
用户操作接口:cn.lzl.dao
1 packagecn.lzl.Dao.impl;2
3 importcn.lzl.pojo.User;4
5 /**
6 * 这是针对用户进行操作的接口7 *8 *@authorLZL9 *10 *@versionV1.011 */
12 public interfaceUserDao {13 /**
14 * 这是用户进行登陆的功能15 *16 *@paramusername17 * 用户名18 *@paramuserpassworld19 * 密码20 *@return是否登陆成功21 */
22 public abstract booleanisLogin(String username, String passworld);23
24 /**
25 * 这是用户进行注册的功能 PS:如果方法的参数列表大于3种,就创建一个类,调用这个类26 *27 *@paramuser28 * 用户信息29 */
30 public abstract voidregist(User user);31
32 }
用户操作类包:cn.lzl.dao.impl(集合版)
1 packagecn.lzl.Dao.impl;2
3 /**
4 * 这是用户操作类包(集合版)5 *6 *@authorLZL7 *8 *9 */
10 importjava.util.ArrayList;11
12 importcn.lzl.pojo.User;13
14 public class UserDaoimpl implementsUserDao {15 //因为登陆和注册要共用同一个集合(服务端),所以用static修饰
16 private static ArrayList array = new ArrayList();17
18 public booleanisLogin(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 returnflag;30 }31
32 public voidregist(User user) {33 //用户注册时,把用户信息添加到集合中
34 array.add(user);35 }36
37 }
随机数小游戏类:
1 packagecn.lzl.GuessGame;2
3 importjava.util.Scanner;4
5 /**
6 * 这是个猜数字的小游戏 1-1007 *8 *@authorLZL9 *10 *11 */
12 public classGuessNmuber {13 //无参构造
14 publicGuessNmuber(){15
16 }17 public static voidstart (){18 //产生一个随机数
19 int number = (int)(Math.random() * 100) + 1;20
21 //定义一个统计变量
22 int count = 0;23 //进入循环,直到猜中才退出,猜错就重新来,并进行计数
24 while(true){25
26 //键盘录入猜测数据
27 Scanner sc = newScanner(System.in);28 System.out.println("请输入你的猜测:");29 int num =sc.nextInt();30 count ++;31 //猜测数据进行对比
32 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 packagecn.lzl.test;2
3 importjava.util.Scanner;4
5 importcn.lzl.Dao.impl.UserDao;6 importcn.lzl.Dao.impl.UserDaoimpl;7 importcn.lzl.GuessGame.GuessNmuber;8 importcn.lzl.pojo.User;9
10 /**
11 * 这是用户测试类 测试用户登录、注册、退出以及登陆成功后进行的小游戏功能12 *13 *@authorLZL14 *15 *@versionV1.016 */
17 public classUserTest {18
19 public static voidmain(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 = newScanner(System.in);28 System.out.println("请输入你的选择:");29 //为了后面的录入信息的方便,我所有的数据录入全部用字符接收
30 String choise =sc.nextLine();31
32
33 //由于登陆和注册都要调用UserDao类里面的方法,所以写在switch语句外面
34 UserDao ud = newUserDaoimpl();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 = newUser();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 }