fangqiongMa 7 months ago
parent 35cda96a76
commit 30b592507c

@ -0,0 +1,111 @@
# 中小学数学题生成系统 README
## 一、项目介绍
本系统是一款面向中小学场景的数学题自动生成工具,支持按学段(小学/初中/高中)生成对应难度题目,集成登录验证、学段切换、重复题目检测、本地保存等功能,满足教学练习中的题目生成需求。
## 二、运行环境要求
| 依赖项 | 版本要求 | 说明 |
|--------------|-------------------------|--------------------------|
| JDK | JDK 1.8 及以上 | 需配置 `JAVA_HOME` 环境变量 |
| 运行载体 | 可执行 JAR / IntelliJ IDEA | 推荐直接运行 JAR 包 |
| 操作系统 | Windows 10/11、macOS | 跨平台兼容 |
## 三、核心功能说明
### 1. 登录验证
- **预设测试账户**(按学段分类):
- 小学:`张三1/123`、`张三2/123`、`张三3/123`
- 初中:`李四1/123`、`李四2/123`、`李四3/123`
- 高中:`王五1/123`、`王五2/123`、`王五3/123`
- **输入校验**:支持用户名密码格式检测,错误时提示“输入格式错误”或“用户名/密码错误”。
### 2. 题目生成(按学段区分)
- **小学题**:无负数、可整除的加减乘除运算(支持括号,如 `(4 + 6) × 3`
- **初中题**:小学题基础上新增平方(`^2`)、根号(`√`),如 `5^2 - √16`
- **高中题**:小学题基础上新增三角函数(`sin`/`cos`/`tan`),如 `tan(45) + 8`
- **数量限制**:每次生成 10-30 道题,超出范围会提示调整。
### 3. 学段切换
- **操作逻辑**登录后选择“1-切换学段”或“0-保持当前学段”,支持小学/初中/高中三选一。
- **错误处理**输入非“0/1”或非学段名称如“大学”提示重新输入直至合法。
### 4. 重复题目检测(查重)
- **检测范围**:自动扫描当前用户文件夹下所有历史 `.txt` 题目文件。
- **匹配规则**:排除题号干扰,仅精确对比题目内容(如 `2 + 3` 不会与 `12 + 3` 误判重复)。
- **处理方式**:生成重复题目时自动重新生成,确保输出题目无重复。
### 5. 题目保存
- **保存路径**:项目根目录自动创建“用户名”文件夹(如 `张三1`),题目保存在该文件夹内。
- **文件名格式**`yyyy-MM-dd-HH-mm-ss.txt`(时间戳命名,避免文件覆盖)。
- **内容格式**(带题号+空行分隔):
```
1. 3 + 7 × 2
2. sin(30) + √9
```
## 四、使用步骤
### 方式1直接运行 JAR 包(推荐)
1. **获取 JAR 包**:从项目 `out/artifacts/` 目录复制 `MyProject.jar` 到目标文件夹(如 `D:\MathTool`)。
2. **打开命令行**
- Windows`Win + R` 输入 `cmd`,进入 JAR 所在目录(示例:`cd D:\MathTool`)。
- 解决中文乱码:执行 `chcp 65001`(切换 cmd 编码为 UTF-8
3. **启动系统**:执行 `java -jar MyProject.jar`
4. **操作流程**
① 输入预设账户(如 `张三1 123`)登录;
② 选择“0-保持学段”或“1-切换学段”;
③ 输入题目数量10-30等待生成保存
④ 生成后可选择“-2 继续出题”“-1 返回主页”“-3 退出系统”。
### 方式2IntelliJ IDEA 中运行
1. **导入项目**:打开 IDEA → 选择“Open” → 导入项目文件夹(`MyProject`)。
2. **配置 JDK**`File → Project Structure → Project SDK` 选择 JDK 1.8 及以上。
3. **启动主类**:找到 `src/Main.java` → 右键“Run Main.main()”。
4. **后续操作**同“方式1”步骤4。
## 五、项目目录结构
```
MyProject/
├─ src/ # 源码目录
│ ├─ account/ # 登录相关类
│ │ ├─ Account.java # 账户实体(用户名/密码/学段)
│ │ ├─ AccountService.java # 登录接口
│ │ └─ SimpleAccountService.java # 登录实现(预设账户)
│ ├─ persistence/ # 持久化相关类
│ │ ├─ FileSaver.java # 题目保存类
│ │ └─ QuestionChecker.java # 查重类
│ ├─ question/ # 题目生成相关类
│ │ ├─ Question.java # 题目实体(内容/答案)
│ │ ├─ QuestionGenerator.java # 题目生成接口
│ │ ├─ PrimaryQuestionGenerator.java # 小学题生成
│ │ ├─ MiddleQuestionGenerator.java # 初中题生成
│ │ └─ HighQuestionGenerator.java # 高中题生成
│ └─ Main.java # 程序入口(主类)
├─ out/ # 编译输出目录
│ └─ artifacts/ # JAR 包输出目录MyProject.jar
└─ README.md # 项目说明文档
```
## 六、常见问题FAQ
### Q1运行 JAR 提示“找不到或无法加载主类”?
A1重新通过 IDEA 导出 JAR`File → Project Structure → Artifacts → Build`),确保导出路径正确。
### Q2输入中文用户名/密码后显示乱码?
A2在 cmd 中先执行 `chcp 65001` 切换编码,再运行 JAR。
### Q3账户正确却提示“登录失败”
A3确认输入时用 **半角空格**(英文空格)分隔用户名和密码,避免全角空格(中文空格)。
### Q4生成题目后找不到文件
A4文件保存在“项目根目录/用户名/时间戳.txt”示例`MyProject/张三1/2024-05-20-15-40-00.txt`。
## 七、代码规范说明
1. **设计原则**:采用“接口先行”模式(如 `AccountService`、`QuestionGenerator`),降低模块耦合。
2. **方法行数**:所有方法行数 ≤ 40 行,通过拆分逻辑(如 `generateAndSaveQuestions`)提升可读性。
3. **容错处理**:包含输入校验、异常捕获(如 `NumberFormatException`)、空值判断,避免程序崩溃。
4. **命名规范**:遵循 Java 标准(类名 PascalCase、方法名 camelCase语义化命名`switchType`、`questionLoop`)。
Loading…
Cancel
Save