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