You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Partner_Project/src/model/UserManager.java

154 lines
3.9 KiB

package model;
import java.util.HashMap;
import java.util.Map;
/**
* 用户管理类
* 负责用户注册、登录、密码修改等功能
*/
public class UserManager {
private static final Map<String, UserInfo> users = new HashMap<>();
private static final Map<String, String> usernameToEmail = new HashMap<>(); // 用于检查用户名唯一性
/**
* 用户注册
*
* @param email 用户邮箱
* @param password 密码
* @param gradeType 年级类型
* @param username 用户名
* @return 注册是否成功
*/
public boolean register(String email, String password, GradeType gradeType, String username) {
if (users.containsKey(email) || usernameToEmail.containsKey(username)) {
return false;
}
users.put(email, new UserInfo(email, password, gradeType, username));
usernameToEmail.put(username, email);
return true;
}
/**
* 用户登录
*
* @param email 用户邮箱
* @param password 密码
* @return 用户信息对象,登录失败返回null
*/
public UserInfo login(String email, String password) {
UserInfo user = users.get(email);
if (user == null || !user.getPassword().equals(password)) {
return null;
}
return user;
}
/**
* 检查用户是否存在
*
* @param email 用户邮箱
* @return 用户是否存在
*/
public boolean userExists(String email) {
return users.containsKey(email);
}
/**
* 检查用户名是否存在
*
* @param username 用户名
* @return 用户名是否存在
*/
public boolean usernameExists(String username) {
return usernameToEmail.containsKey(username);
}
/**
* 修改密码
*
* @param email 用户邮箱
* @param oldPassword 原密码
* @param newPassword 新密码
* @return 修改是否成功
*/
public boolean changePassword(String email, String oldPassword,
String newPassword) {
UserInfo user = users.get(email);
if (user == null || !user.getPassword().equals(oldPassword)) {
return false;
}
user.setPassword(newPassword);
return true;
}
/**
* 内部类:用户信息
*/
public static class UserInfo {
private final String email;
private String password;
private final GradeType gradeType;
private final String username;
/**
* 构造用户信息
*
* @param email 邮箱
* @param password 密码
* @param gradeType 年级类型
* @param username 用户名
*/
public UserInfo(String email, String password, GradeType gradeType, String username) {
this.email = email;
this.password = password;
this.gradeType = gradeType;
this.username = username;
}
/**
* 获取邮箱
*
* @return 邮箱
*/
public String getEmail() {
return email;
}
/**
* 获取密码
*
* @return 密码
*/
public String getPassword() {
return password;
}
/**
* 设置密码
*
* @param password 新密码
*/
public void setPassword(String password) {
this.password = password;
}
/**
* 获取年级类型
*
* @return 年级类型
*/
public GradeType getGradeType() {
return gradeType;
}
/**
* 获取用户名
*
* @return 用户名
*/
public String getUsername() {
return username;
}
}
}