看到这个需求,我们需要明确这几个问题:
(1)有哪些类;
(2)类中都有哪些东西;
(3)类和类之间是什么关系。
分析:
按模块分
1)按功能划分;
2)按模块划分;
3)也可以先按功能分,再按模块分。
按模块分
用户类 User类
测试类 UserTest类
按功能分
登录,注册
包的命名:Dao(data Access Object)数据访问对象
开发的命名
实体类:User类,提供Username和password
Dao:面向接口编程 UserDao 针对用户操作的接口,里面有两个抽象方法
登录功能();返回一个boolean类型
注册功能();无返回值
还有接口实现类:UserDaoImpl,逻辑代码都在这个类中。
接下来,我们具体看一下代码
public class User {
//成员变量
private String name ;
private String password ;
public User() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
public interface UserDao {
/**
* 这是用户的登录功能
* @param username 登录的用户名
* @param password 登录的密码
* @return 返回值表示登录是否成功,如果是true,表示登录;false,登录失败
*/
public abstract boolean isLogin(String username,String password) ;
/**
* 这是用户的注册功能,一旦注册,就注册成功
* @param user 需要注册的用户
*/
public abstract void regist(User user) ;
}
public class UserDaoImpl implements UserDao {
//多个功能共同使用这个集合,把它放到成员变量位置
//为了不让外界访问
//如何共用这个对象
private static ArrayList<User> list = new ArrayList<User>() ;
@Override
public boolean isLogin(String username, String password) {
//假设登录失败
boolean flag = false ;
//遍历集合
for(User u: list) {
//判断:用户输入的用户和密码是否和集合中存储的用户名和密码是否一致
if(u.getName().equals(username) && u.getPassword().equals(password)) {
//登录成功
flag = true ;
break ;
}
}
return flag ;
}
@Override
public void regist(User user) {
//注册的逻辑
//需要将用户都存储到集合中
//将用户添加到集合中
list.add(user) ;
}
}
public class UserTest {
public static void main(String[] args) {
//为了保证多次进行选择,使用while循环
while(true) {
//给用户提供一些选择,需要一些界面
System.out.println("------------------欢迎光临-------------------");
System.out.println("1 登录");
System.out.println("2 注册");
System.out.println("3 退出");
//多个逻辑都需要调用注册和登录.所以放到switch外面,共同可以使用
UserDao ud = new UserDaoImpl() ;
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//录入数据
System.out.println("请输入您的选择:");
String choice = sc.nextLine() ;
//简单思考,用swtich语句
switch(choice) {
case "1":
//登录
System.out.println("请输入您的用户名:");
String username = sc.nextLine() ;
System.out.println("请输入您的密码:");
String password = sc.nextLine() ;
//调用登录功能
boolean flag = ud.isLogin(username, password) ;
if(flag) {
System.out.println("登录成功,可以开始玩游戏了吗?");
System.out.println("开始玩游戏了!y/n");
//猜数字小游戏...
while(true) {
String result = sc.nextLine() ;
if(result.equalsIgnoreCase("y")) {
GuessNumberGame.start();
System.out.println("还玩吗?y/n");
}else {
break ;
}
}
//break ;
System.out.println("谢谢使用,下次再来...");
System.exit(0);
}else {
System.out.println("您的用户名或者密码错误...");
}
break;
case "2":
//注册
System.out.println("请输入您的用户名:");
String newUserName = sc.nextLine() ;
System.out.println("请输入您的密码:");
String newPassword = sc.nextLine() ;
//将用户名和密码封装到User对象中
User user = new User() ;
user.setName(newUserName);
user.setPassword(newPassword);
//调用注册功能
//创建Dao对象
//UserDao ud = new UserDaoImpl() ;
ud.regist(user);
System.out.println("注册成功....");
break;
case "3":
//退出
default :
System.out.println("谢谢使用,下次再来");
System.exit(0); //退出jvm
break ;
}
}
}
}