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.
134 lines
3.5 KiB
134 lines
3.5 KiB
package com.mathlearning.service;
|
|
|
|
import com.mathlearning.model.User;
|
|
import java.io.*;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
public class UserService {
|
|
private static final String USER_DATA_FILE = "data/users.txt";
|
|
private List<User> users;
|
|
|
|
public UserService() {
|
|
this.users = loadUsers();
|
|
}
|
|
|
|
public boolean registerUser(String email, String registrationCode) {
|
|
// Check if email already exists
|
|
for (User user : users) {
|
|
if (user.getEmail().equals(email)) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
User newUser = new User(email, registrationCode);
|
|
users.add(newUser);
|
|
saveUsers();
|
|
return true;
|
|
}
|
|
|
|
public boolean completeRegistration(String email, String password) {
|
|
for (User user : users) {
|
|
if (user.getEmail().equals(email) && !user.isRegistered()) {
|
|
user.setPassword(password);
|
|
user.setRegistered(true);
|
|
saveUsers();
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public boolean login(String email, String password) {
|
|
for (User user : users) {
|
|
if (user.getEmail().equals(email)
|
|
&& user.isRegistered()
|
|
&& user.getPassword().equals(password)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public boolean changePassword(String email, String oldPassword, String newPassword) {
|
|
for (User user : users) {
|
|
if (user.getEmail().equals(email) && user.getPassword().equals(oldPassword)) {
|
|
user.setPassword(newPassword);
|
|
saveUsers();
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public User getUserByEmail(String email) {
|
|
for (User user : users) {
|
|
if (user.getEmail().equals(email)) {
|
|
return user;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public boolean updateUser(User updatedUser) {
|
|
for (int i = 0; i < users.size(); i++) {
|
|
if (users.get(i).getEmail().equals(updatedUser.getEmail())) {
|
|
users.set(i, updatedUser);
|
|
saveUsers();
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private List<User> loadUsers() {
|
|
List<User> userList = new ArrayList<>();
|
|
try {
|
|
File file = new File(USER_DATA_FILE);
|
|
if (!file.exists()) {
|
|
return userList;
|
|
}
|
|
|
|
BufferedReader reader = new BufferedReader(new FileReader(file));
|
|
String line;
|
|
while ((line = reader.readLine()) != null) {
|
|
String[] parts = line.split("\\|");
|
|
if (parts.length >= 4) {
|
|
User user = new User(parts[0], parts[1]);
|
|
user.setPassword(parts[2]);
|
|
user.setRegistered(Boolean.parseBoolean(parts[3]));
|
|
userList.add(user);
|
|
}
|
|
}
|
|
reader.close();
|
|
} catch (IOException e) {
|
|
System.out.println("加载用户数据失败: " + e.getMessage());
|
|
}
|
|
return userList;
|
|
}
|
|
|
|
private void saveUsers() {
|
|
try {
|
|
File file = new File(USER_DATA_FILE);
|
|
file.getParentFile().mkdirs();
|
|
|
|
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
|
|
for (User user : users) {
|
|
String line =
|
|
user.getEmail()
|
|
+ "|"
|
|
+ user.getRegistrationCode()
|
|
+ "|"
|
|
+ (user.getPassword() != null ? user.getPassword() : "")
|
|
+ "|"
|
|
+ user.isRegistered();
|
|
writer.write(line);
|
|
writer.newLine();
|
|
}
|
|
writer.close();
|
|
} catch (IOException e) {
|
|
System.out.println("保存用户数据失败: " + e.getMessage());
|
|
}
|
|
}
|
|
}
|