|
|
|
|
@ -16,7 +16,14 @@ public class ConsoleUI {
|
|
|
|
|
private final Authenticator authenticator;
|
|
|
|
|
private final PaperService paperService;
|
|
|
|
|
|
|
|
|
|
// 通过构造函数接收依赖的服务,这是一种常见的设计模式(依赖注入)
|
|
|
|
|
/**
|
|
|
|
|
* ConsoleUI的构造函数。
|
|
|
|
|
* 通过构造函数接收依赖的服务,这是一种常见的设计模式(依赖注入),
|
|
|
|
|
* 使得UI层不负责创建服务,只负责使用。
|
|
|
|
|
*
|
|
|
|
|
* @param authenticator 认证服务实例。
|
|
|
|
|
* @param paperService 试卷服务实例。
|
|
|
|
|
*/
|
|
|
|
|
public ConsoleUI(Authenticator authenticator, PaperService paperService) {
|
|
|
|
|
this.authenticator = authenticator;
|
|
|
|
|
this.paperService = paperService;
|
|
|
|
|
@ -32,7 +39,11 @@ public class ConsoleUI {
|
|
|
|
|
userOptional.ifPresent(this::showUserMenu);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 私有辅助方法,处理用户登录流程。
|
|
|
|
|
*
|
|
|
|
|
* @return 登录成功的用户Optional,如果登录失败或格式错误则返回空Optional。
|
|
|
|
|
*/
|
|
|
|
|
private Optional<User> handleLogin() {
|
|
|
|
|
printHeader("用户登录"); // 统一标题格式
|
|
|
|
|
System.out.print("请输入用户名和密码 (用空格隔开): (输入 exit 退出程序)\n> ");
|
|
|
|
|
@ -55,7 +66,11 @@ public class ConsoleUI {
|
|
|
|
|
}
|
|
|
|
|
return userOptional;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 私有辅助方法,显示登录后的用户主菜单和处理用户操作。
|
|
|
|
|
*
|
|
|
|
|
* @param user 当前已登录的用户对象。
|
|
|
|
|
*/
|
|
|
|
|
private void showUserMenu(User user) {
|
|
|
|
|
Level currentLevel = user.level();
|
|
|
|
|
System.out.println("\n登录成功! 欢迎 " + user.username());
|
|
|
|
|
@ -88,7 +103,10 @@ public class ConsoleUI {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 处理切换难度的子菜单,加入循环以处理无效输入。
|
|
|
|
|
* 私有辅助方法,处理切换难度的子菜单,加入循环以处理无效输入。
|
|
|
|
|
*
|
|
|
|
|
* @param currentLevel 当前的难度级别。
|
|
|
|
|
* @return 用户选择的新的难度级别,如果选择返回则为原级别。
|
|
|
|
|
*/
|
|
|
|
|
private Level handleLevelSwitchMenu(Level currentLevel) {
|
|
|
|
|
while (true) { // <-- 增加循环
|
|
|
|
|
@ -120,7 +138,12 @@ public class ConsoleUI {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 私有辅助方法,处理生成题目的逻辑。
|
|
|
|
|
*
|
|
|
|
|
* @param user 当前登录的用户。
|
|
|
|
|
* @param currentLevel 当前选择的难度级别。
|
|
|
|
|
*/
|
|
|
|
|
private void handleGeneration(User user, Level currentLevel) {
|
|
|
|
|
printHeader("生成 " + currentLevel.getChineseName() + " 题目");
|
|
|
|
|
System.out.print("请输入生成题目数量 (10-30,输入 0 返回主菜单): ");
|
|
|
|
|
@ -139,13 +162,19 @@ public class ConsoleUI {
|
|
|
|
|
System.out.println("输入无效,请输入一个有效的数字。");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 私有辅助方法,打印美化后的标题行。
|
|
|
|
|
*
|
|
|
|
|
* @param title 要显示的标题文本。
|
|
|
|
|
*/
|
|
|
|
|
private void printHeader(String title) {
|
|
|
|
|
printSeparator();
|
|
|
|
|
System.out.println(title);
|
|
|
|
|
printSeparator();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 私有辅助方法,打印分割线。
|
|
|
|
|
*/
|
|
|
|
|
private void printSeparator() {
|
|
|
|
|
System.out.println("======================================================");
|
|
|
|
|
}
|
|
|
|
|
|