ADD file via upload

main
hnu202326010320 7 months ago
parent 6eb4dcc91e
commit 6a88bc6ace

@ -0,0 +1,174 @@
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));
// 使用说明(菜单提示)
System.out.println("使用说明:");
System.out.println(" - 输入题目数量10-30生成试卷");
System.out.println(" - 输入 切换为 小学/初中/高中 来切换难度,例如:切换为 初中");
System.out.println(" - 输入 -1 退出当前用户,重新登录");
System.out.println();
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() + " 出题");
// 登录后提示如何切换难度
System.out.println("提示:您可以在数量输入处键入 切换为 小学/初中/高中 来切换难度,例如:切换为 初中");
return user;
} else {
System.out.println("请输入正确的用户名、密码");
}
}
}
/**
*
* @param user
*/
private void handleUserSession(User user) {
String currentDifficulty = user.getUserType();
while (true) {
// 原提示替换为更详细的说明
System.out.println("准备生成 " + currentDifficulty + " 数学题目请输入题目数量10-30。");
System.out.println("提示:输入 切换为 小学/初中/高中 可切换难度(例如:切换为 初中);输入 -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<MathProblem> 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();
// 生成完成后的操作提示
System.out.println("提示:如需切换难度,请在下一次输入中键入 切换为 小学/初中/高中,例如:切换为 高中。");
System.out.println("直接输入新的题目数量10-30将继续使用当前难度输入 -1 退出当前用户。");
} catch (IOException e) {
System.err.println("保存文件时出错: " + e.getMessage());
} catch (Exception e) {
System.err.println("生成题目时出错: " + e.getMessage());
}
}
}
Loading…
Cancel
Save