import java.io.IOException; import java.util.List; import java.util.Scanner; /** * 数学卷子自动生成程序主类 */ public class MathPaperGenerator { private UserManager userManager; private MathProblemGenerator problemGenerator; private FileManager fileManager; private Scanner scanner; public MathPaperGenerator() { this.userManager = new UserManager(); this.problemGenerator = new MathProblemGenerator(); this.fileManager = new FileManager(); this.scanner = new Scanner(System.in); } /** * 程序主入口 */ public static void main(String[] args) { MathPaperGenerator generator = new MathPaperGenerator(); generator.run(); } /** * 运行主程序 */ public void run() { System.out.println("欢迎使用中小学数学卷子自动生成程序!"); System.out.println("=" + "=".repeat(40)); while (true) { User currentUser = login(); if (currentUser != null) { handleUserSession(currentUser); } } } /*用户登录*/ private User login() { while (true) { System.out.print("请输入用户名和密码(用空格隔开): "); String input = scanner.nextLine().trim(); if (input.isEmpty()) { System.out.println("输入不能为空,请重新输入。"); continue; } String[] parts = input.split("\\s+"); String username = parts[0]; String password = parts[1]; User user = userManager.authenticate(username, password); if (user != null) { System.out.println("登录成功!当前选择为 " + user.getUserType() + " 出题"); return user; } else { System.out.println("请输入正确的用户名、密码"); } } } /** * 处理用户会话 * @param user 当前登录用户 */ private void handleUserSession(User user) { String currentDifficulty = user.getUserType(); while (true) { System.out.println("准备生成 " + currentDifficulty + " 数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):"); String input = scanner.nextLine().trim(); // 检查是否要切换类型 if (input.startsWith("切换为")) { String newType = input.substring(3).trim(); if (userManager.isValidUserType(newType)) { currentDifficulty = newType; System.out.println("已切换为 " + newType + " 出题模式"); continue; } else { System.out.println("请输入小学、初中和高中三个选项中的一个"); continue; } } try { int count = Integer.parseInt(input); if (count == -1) { System.out.println("退出当前用户,重新登录..."); System.out.println(); return; } if (count < 10 || count > 30) { System.out.println("题目数量必须在10-30之间,请重新输入。"); continue; } // 生成题目 generateAndSavePaper(user, currentDifficulty, count); } catch (NumberFormatException e) { System.out.println("请输入有效的数字。"); } } } /** * 生成并保存题目 * @param user 用户 * @param difficulty 难度 * @param count 题目数量 */ private void generateAndSavePaper(User user, String difficulty, int count) { try { System.out.println("正在生成 " + count + " 道 " + difficulty + " 数学题目..."); // 生成不重复的题目 List problems = fileManager.generateUniqueProblems( user, problemGenerator, count, difficulty); if (problems.size() < count) { System.out.println("注意:由于重复限制,实际生成了 " + problems.size() + " 道题目。"); } // 保存到文件 String filePath = fileManager.savePaperToFile(user, problems, difficulty); System.out.println("题目生成完成!"); System.out.println("文件已保存至: " + filePath); System.out.println("题目预览:"); System.out.println("-" + "-".repeat(30)); // 显示前5道题目作为预览 int previewCount = Math.min(5, problems.size()); for (int i = 0; i < previewCount; i++) { System.out.println((i + 1) + ". " + problems.get(i).toString()); } if (problems.size() > 5) { System.out.println("... 还有 " + (problems.size() - 5) + " 道题目"); } System.out.println("-" + "-".repeat(30)); System.out.println(); } catch (IOException e) { System.err.println("保存文件时出错: " + e.getMessage()); } catch (Exception e) { System.err.println("生成题目时出错: " + e.getMessage()); } } }