|
|
|
|
@ -26,17 +26,15 @@ public class ConsoleUI {
|
|
|
|
|
* 启动并运行整个用户界面主循环。
|
|
|
|
|
*/
|
|
|
|
|
public void run() {
|
|
|
|
|
//TODO:警告:(29, 9) 'while' 语句不能在未抛出异常的情况下完成
|
|
|
|
|
//TODO:警告:(29, 9) 'while' 语句不能在未抛出异常的情况下完成
|
|
|
|
|
while (true) {
|
|
|
|
|
Optional<User> userOptional = handleLogin();
|
|
|
|
|
userOptional.ifPresent(this::showUserMenu);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// --- 以下方法与之前的Main类完全相同,只是从static变为实例方法 ---
|
|
|
|
|
|
|
|
|
|
private Optional<User> handleLogin() {
|
|
|
|
|
printHeader("欢迎登录中小学数学卷子自动生成平台");
|
|
|
|
|
printHeader("用户登录"); // 统一标题格式
|
|
|
|
|
System.out.print("请输入用户名和密码 (用空格隔开): (输入 exit 退出程序)\n> ");
|
|
|
|
|
String line = scanner.nextLine();
|
|
|
|
|
|
|
|
|
|
@ -89,34 +87,38 @@ public class ConsoleUI {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 处理切换难度的子菜单,加入循环以处理无效输入。
|
|
|
|
|
*/
|
|
|
|
|
private Level handleLevelSwitchMenu(Level currentLevel) {
|
|
|
|
|
printHeader("请选择难度级别");
|
|
|
|
|
System.out.println("1. 小学 (+, -, *, /, 括号)");
|
|
|
|
|
System.out.println("2. 初中 (包含平方、开根号)");
|
|
|
|
|
System.out.println("3. 高中 (包含三角函数)");
|
|
|
|
|
System.out.println("0. 返回主菜单");
|
|
|
|
|
printSeparator();
|
|
|
|
|
System.out.print("请选择 (0-3): ");
|
|
|
|
|
String choice = scanner.nextLine().trim();
|
|
|
|
|
|
|
|
|
|
Level newLevel = switch (choice) {
|
|
|
|
|
case "1" -> Level.PRIMARY;
|
|
|
|
|
case "2" -> Level.JUNIOR_HIGH;
|
|
|
|
|
case "3" -> Level.SENIOR_HIGH;
|
|
|
|
|
case "0" -> null;
|
|
|
|
|
default -> {
|
|
|
|
|
System.out.println("无效输入,请重新选择。");
|
|
|
|
|
yield currentLevel;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
while (true) { // <-- 增加循环
|
|
|
|
|
printHeader("请选择难度级别");
|
|
|
|
|
System.out.println("1. 小学 (+, -, *, /, 括号)");
|
|
|
|
|
System.out.println("2. 初中 (包含平方、开根号)");
|
|
|
|
|
System.out.println("3. 高中 (包含三角函数)");
|
|
|
|
|
System.out.println("0. 返回主菜单");
|
|
|
|
|
printSeparator();
|
|
|
|
|
System.out.print("请选择 (0-3): ");
|
|
|
|
|
String choice = scanner.nextLine().trim();
|
|
|
|
|
|
|
|
|
|
if (newLevel != null && newLevel != currentLevel) {
|
|
|
|
|
System.out.println("难度已成功切换为 " + newLevel.getChineseName() + "。");
|
|
|
|
|
return newLevel;
|
|
|
|
|
} else if (newLevel == null) {
|
|
|
|
|
System.out.println("已返回主菜单。");
|
|
|
|
|
switch (choice) {
|
|
|
|
|
case "1":
|
|
|
|
|
System.out.println("难度已成功切换为 " + Level.PRIMARY.getChineseName() + "。");
|
|
|
|
|
return Level.PRIMARY; // 直接返回,退出循环
|
|
|
|
|
case "2":
|
|
|
|
|
System.out.println("难度已成功切换为 " + Level.JUNIOR_HIGH.getChineseName() + "。");
|
|
|
|
|
return Level.JUNIOR_HIGH; // 直接返回,退出循环
|
|
|
|
|
case "3":
|
|
|
|
|
System.out.println("难度已成功切换为 " + Level.SENIOR_HIGH.getChineseName() + "。");
|
|
|
|
|
return Level.SENIOR_HIGH; // 直接返回,退出循环
|
|
|
|
|
case "0":
|
|
|
|
|
System.out.println("已返回主菜单。");
|
|
|
|
|
return currentLevel; // 返回当前难度,退出循环
|
|
|
|
|
default:
|
|
|
|
|
// 如果输入无效,打印提示信息,循环将继续,要求用户重新输入
|
|
|
|
|
System.out.println("无效输入,请输入 0-3 之间的数字。");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return currentLevel;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void handleGeneration(User user, Level currentLevel) {
|
|
|
|
|
|