|
|
|
|
@ -11,7 +11,7 @@ User 是用户信息的封装类,用于存储单个用户的登录凭证和所
|
|
|
|
|
|
|
|
|
|
### 属性
|
|
|
|
|
- `username`:字符串类型,表示用户名。
|
|
|
|
|
- `password`:字符串类型,表示用户密码(明文存储,仅用于演示)。
|
|
|
|
|
- `password`:字符串类型,表示用户密码。
|
|
|
|
|
- `userType`:字符串类型,表示用户类型,取值为“小学”、“初中”或“高中”。
|
|
|
|
|
|
|
|
|
|
### 方法
|
|
|
|
|
@ -40,7 +40,7 @@ UserManager 负责管理所有用户账户、处理登录逻辑,并维护当
|
|
|
|
|
### 属性
|
|
|
|
|
- `users`:`Map<String, User>` 类型,以用户名为键存储所有预设用户。
|
|
|
|
|
- `currentUser`:`User` 类型,表示当前已登录的用户。
|
|
|
|
|
- `currentType`:`String` 类型,缓存当前用户类型(冗余字段,可由 currentUser 推导)。
|
|
|
|
|
- `currentType`:`String` 类型,缓存当前出题类型。
|
|
|
|
|
|
|
|
|
|
### 方法
|
|
|
|
|
- **构造方法** `UserManager()`
|
|
|
|
|
@ -76,7 +76,7 @@ UserManager 负责管理所有用户账户、处理登录逻辑,并维护当
|
|
|
|
|
|
|
|
|
|
### 方法
|
|
|
|
|
- `Expression setQuestion(int count)`
|
|
|
|
|
根据指定的操作数数量 `count`(通常为3),生成一个符合当前学段要求的数学表达式对象。返回 `Expression` 实例。
|
|
|
|
|
根据指定的操作数数量 `count`,生成一个符合当前学段要求的数学表达式对象。返回 `Expression` 实例。
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
@ -233,7 +233,66 @@ UserManager 负责管理所有用户账户、处理登录逻辑,并维护当
|
|
|
|
|
- 生成时间戳文件名(格式:`yyyy-MM-dd-HH-mm-ss.txt`)
|
|
|
|
|
- 以 UTF-8 编码写入题目,格式为 `1. 表达式\n\n2. 表达式\n\n...`
|
|
|
|
|
|
|
|
|
|
- `checkQuestion(String question, User user)`
|
|
|
|
|
- `checkQuestion(String question, User user)`
|
|
|
|
|
- 若用户目录不存在,返回 true(无需去重)
|
|
|
|
|
- 遍历该用户所有历史试卷文件
|
|
|
|
|
- 对每行去除题号
|
|
|
|
|
- 对每行去除题号,与历史文件进行匹配,如果相同则重新生成(查重功能)
|
|
|
|
|
> 去重基于字符串精确匹配,不进行数学等价判断。
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 11. AllSystem 类
|
|
|
|
|
|
|
|
|
|
### 功能概述
|
|
|
|
|
系统的主控制器,协调用户交互、流程跳转和模块调用。
|
|
|
|
|
|
|
|
|
|
### 属性
|
|
|
|
|
- `scanner`:`Scanner` 实例,用于读取用户输入
|
|
|
|
|
- `userManager`:用户管理器
|
|
|
|
|
- `fileManager`:文件管理器
|
|
|
|
|
- `questionSettingFactory`:题目生成器工厂
|
|
|
|
|
- `questionSetting`:当前使用的题目生成器
|
|
|
|
|
- `currentMode`:当前学段类型(如“小学”)
|
|
|
|
|
- `isFirstLogin`:标志是否首次登录,用于提示信息
|
|
|
|
|
- `tipMessage`:临时提示信息(如“切换成功”)
|
|
|
|
|
|
|
|
|
|
### 核心方法
|
|
|
|
|
- `clearScreen()`
|
|
|
|
|
调用系统命令 `cls`(Windows)清屏,失败时打印堆栈(不影响主流程)
|
|
|
|
|
|
|
|
|
|
- `initialize()`
|
|
|
|
|
初始化所有组件和状态变量
|
|
|
|
|
|
|
|
|
|
- `showHomeMenu()`
|
|
|
|
|
显示欢迎界面,循环处理登录输入,成功后进入 `setPaper()`
|
|
|
|
|
|
|
|
|
|
- `setPaper()`
|
|
|
|
|
提示用户输入题目数量(10~30),调用 `handleFirstInput`
|
|
|
|
|
|
|
|
|
|
- `handleFirstInput(String input)`
|
|
|
|
|
- 输入 `-1`:返回登录界面
|
|
|
|
|
- 输入 10~30:循环生成题目,调用 `checkQuestion` 去重,显示并保存
|
|
|
|
|
- 其他输入:提示重试
|
|
|
|
|
|
|
|
|
|
- `showChoiceMenu()`
|
|
|
|
|
显示主菜单,循环处理用户选择
|
|
|
|
|
|
|
|
|
|
- `handleSecondInput(String input)`
|
|
|
|
|
- 输入 `-1`:返回登录
|
|
|
|
|
- 输入 `1`:重新生成试卷
|
|
|
|
|
- 输入 `切换为XX`:解析类型,调用工厂切换 `questionSetting`,进入生成流程
|
|
|
|
|
- 其他输入:提示重试
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 12. Main 类
|
|
|
|
|
|
|
|
|
|
### 功能概述
|
|
|
|
|
程序入口类,启动整个系统。
|
|
|
|
|
|
|
|
|
|
### 方法
|
|
|
|
|
- `main(String[] args)`
|
|
|
|
|
创建 `AllSystem` 实例,调用 `showHomeMenu()` 启动交互流程
|
|
|
|
|
捕获 `IOException` 并转为运行时异常抛出
|
|
|
|
|
|
|
|
|
|
---
|