用户注册登录案例分析(集合)
A:有哪些类
B:类有哪些东西
C:类与类之间关系
用户类{用户名,密码,构造方法,成员方法}
假如用户很多,登录注册放入成员方法的话难以维护,所以将用户细分为用户基本描述类和用户操作类
测试类{main方法}
测试类创建用户基本描述对象和用户基本操作对象,使用其功能
用户基本描述类 cn.itcast.pojo
用户操作接口 cn.itcast.dao //规范操作
后面用数据库实现登录注册就只修改操作类,接口定义的规则不变
用户操作类 cn.itcast.dao.impl
user 用户基本类
package cn.itcast.pojo;
public class User {
private String username;
private String password;
public User() {
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
userdao 用户操作接口
package cn.itcast.dao;
import cn.itcast.pojo.User;
public interface UserDao {
public abstract boolean isLogin(String username,String password);
public abstract void regist(User user);
}
userdaoimpl 用户基本操作类实现接口
package cn.itcast.dao.Impl;
import cn.itcast.dao.UserDao;
import cn.itcast.pojo.User;
import java.util.ArrayList;
public class UserDaoImpl implements UserDao {
private ArrayList<User> arry = new ArrayList<>();
@Override
public boolean isLogin(String username, String password) {
for (User item : arry)
if(item.getUsername().equals(username) && item.getPassword().equals(password))
return true;
return false;
}
@Override
public void regist(User user) {
arry.add(user);
}
}
test 测试类
package cn.itcast.test;
import cn.itcast.dao.Impl.UserDaoImpl;
import cn.itcast.dao.UserDao;
import cn.itcast.pojo.User;
import java.util.Scanner;
public class UserTest {
public static void main(String[] args) {
while (true) {
System.out.println("--------欢迎光临--------");
System.out.println("1 登录");
System.out.println("2 注册");
System.out.println("3 退出");
System.out.println("请输入");
Scanner sc = new Scanner(System.in);
String choice = sc.nextLine();
UserDao ud = new UserDaoImpl(); //多态.多个地方使用放到外面做全局
switch (choice) {
case "1":
System.out.println("--------登录--------");
System.out.println("请输入用户名");
String username = sc.nextLine();
System.out.println("请输入密码");
String password = sc.nextLine();
//UserDao ud=new UserDaoImpl();
if (ud.isLogin(username, password)) {
System.out.println("登陆成功");
} else
System.out.println("登陆失败");
System.exit(0);
//break;是跳出switch
case "2":
System.out.println("--------注册--------");
System.out.println("请输入用户名");
String newusername = sc.nextLine();
System.out.println("请输入密码");
String newpassword = sc.nextLine();
User user = new User();
user.setUsername(newusername);
user.setPassword(newpassword);
//UserDaoImpl ud=new UserDaoImpl(); //具体类使用
//UserDao ud=new UserDaoImpl();
ud.regist(user);
System.out.println("请输入密码");
break;
case "3":
System.out.println("欢迎下次光临");
System.exit(0);
}
}
}
}
但是有个问题是注册和登录不能共用一个集合,因为注册和登录会创建两次ud,是不同的ud,所以创建两个的是不同的集合。
--------欢迎光临--------
1 登录
2 注册
3 退出
请输入
2
--------注册--------
请输入用户名
admin
请输入密码
admin
请输入密码
--------欢迎光临--------
1 登录
2 注册
3 退出
请输入
1
--------登录--------
请输入用户名
admin
请输入密码
admin
登陆失败
为了能让多个方法共用一个集合,可以把集合前加上static(静态变量被所有对象拥有)
package cn.itcast.dao.Impl;
import cn.itcast.dao.UserDao;
import cn.itcast.pojo.User;
import java.util.ArrayList;
public class UserDaoImpl implements UserDao {
private static ArrayList<User> arry = new ArrayList<>();
@Override
public boolean isLogin(String username, String password) {
for (User item : arry)
if(item.getUsername().equals(username) && item.getPassword().equals(password))
return true;
return false;
}
@Override
public void regist(User user) {
arry.add(user);
}
}