parent
e2085370ba
commit
50f01a65eb
@ -0,0 +1,33 @@
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* 用户仓库的内存实现。
|
||||
* 在程序启动时预加载所有预设的用户账户。
|
||||
*/
|
||||
public class InMemoryUserRepository implements UserRepository {
|
||||
|
||||
private static final Map<String, User> userDatabase = new ConcurrentHashMap<>();
|
||||
|
||||
// 静态初始化块,用于加载预设用户数据
|
||||
static {
|
||||
// 小学老师
|
||||
userDatabase.put("primary_teacher1", new User("primary_teacher1", "p123", EducationLevel.PRIMARY));
|
||||
userDatabase.put("primary_teacher2", new User("primary_teacher2", "p123", EducationLevel.PRIMARY));
|
||||
userDatabase.put("primary_teacher3", new User("primary_teacher3", "p123", EducationLevel.PRIMARY));
|
||||
// 初中老师
|
||||
userDatabase.put("middle_teacher1", new User("middle_teacher1", "m123", EducationLevel.MIDDLE));
|
||||
userDatabase.put("middle_teacher2", new User("middle_teacher2", "m123", EducationLevel.MIDDLE));
|
||||
userDatabase.put("middle_teacher3", new User("middle_teacher3", "m123", EducationLevel.MIDDLE));
|
||||
// 高中老师
|
||||
userDatabase.put("high_teacher1", new User("high_teacher1", "h123", EducationLevel.HIGH));
|
||||
userDatabase.put("high_teacher2", new User("high_teacher2", "h123", EducationLevel.HIGH));
|
||||
userDatabase.put("high_teacher3", new User("high_teacher3", "h123", EducationLevel.HIGH));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<User> findByUsername(String username) {
|
||||
return Optional.ofNullable(userDatabase.get(username));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,82 @@
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* 文件服务的文本文件实现。
|
||||
* 负责将题目读写到本地文件系统。
|
||||
*/
|
||||
public class TextFilePersistence implements IFileService {
|
||||
|
||||
private static final DateTimeFormatter FILE_NAME_FORMATTER =
|
||||
DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss");
|
||||
// 正则表达式用于从文件中提取表达式部分,例如 "1. 3 + 5 = 8" -> "3 + 5"
|
||||
private static final Pattern EXPRESSION_PATTERN = Pattern.compile("^\\d+\\.\\s*(.*?)\\s*=.*$");
|
||||
|
||||
|
||||
@Override
|
||||
public void saveProblems(User user, List<Equation> problems) {
|
||||
String userDirectoryPath = user.getStoragePath();
|
||||
try {
|
||||
Files.createDirectories(Paths.get(userDirectoryPath));
|
||||
String fileName = LocalDateTime.now().format(FILE_NAME_FORMATTER) + ".txt";
|
||||
Path filePath = Paths.get(userDirectoryPath, fileName);
|
||||
|
||||
try (PrintWriter writer = new PrintWriter(Files.newBufferedWriter(filePath))) {
|
||||
for (int i = 0; i < problems.size(); i++) {
|
||||
writer.println((i + 1) + ". " + problems.get(i).toString());
|
||||
if (i < problems.size() - 1) {
|
||||
writer.println(); // 每题之间空一行
|
||||
}
|
||||
}
|
||||
System.out.println("题目已成功保存至: " + filePath.toAbsolutePath());
|
||||
}
|
||||
} catch (IOException e) {
|
||||
System.err.println("错误:无法保存文件。 " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> loadAllProblemHistory(User user) {
|
||||
Set<String> history = new HashSet<>();
|
||||
File userDirectory = new File(user.getStoragePath());
|
||||
|
||||
if (!userDirectory.exists() ||!userDirectory.isDirectory()) {
|
||||
return history; // 目录不存在,没有历史记录
|
||||
}
|
||||
|
||||
File files = userDirectory.listFiles((dir, name) -> name.endsWith(".txt"));
|
||||
if (files == null) {
|
||||
return history;
|
||||
}
|
||||
|
||||
for (File file : files) {
|
||||
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
|
||||
String line;
|
||||
while ((line = reader.readLine())!= null) {
|
||||
Matcher matcher = EXPRESSION_PATTERN.matcher(line);
|
||||
if (matcher.matches()) {
|
||||
// 此处不进行规范化,因为生成器在检查时会进行规范化
|
||||
// 直接添加文件中的表达式字符串
|
||||
history.add(matcher.group(1).trim());
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
System.err.println("警告:读取历史文件失败 " + file.getName() + "。 " + e.getMessage());
|
||||
}
|
||||
}
|
||||
return history;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in new issue