1 #4

Merged
hnu202326010410 merged 2 commits from develop into main 5 months ago

@ -1,2 +1,264 @@
# ERICPROJECT
# 中小学数学卷子自动生成程序
> 专为数学教师打造的智能试卷生成解决方案
## 项目简介
🎯 **中小学数学卷子自动生成程序**是一个专为中小学数学老师设计的智能试卷生成系统。系统能够根据不同学段(小学、初中、高中)自动生成相应难度的数学题目,并保存为规范的试卷文件。
## 功能特性
### 1. 🔐 用户认证系统
- 预设小学、初中、高中各三个教师账号
- 支持用户名密码登录验证
- 登录后显示当前学段类型
### 2. 🎲 智能题目生成
- **小学题目**:基础四则运算,保证减法不产生负数,随机按规则添加括号
- **初中题目**:包含平方和开方运算
- **高中题目**:包含三角函数运算
- 操作数范围1-100
- 操作数数量1-5个
- 题目数量10-30道
### 3. 🔍 题目查重机制
- 自动检测历史生成的题目
- 确保新生成的题目不与已有题目重复
### 4. 🔄 学段切换功能
- 支持登录状态下切换出题学段
- 实时更新出题难度
### 5. 💾 文件管理
- 按用户分目录存储试卷
- 文件名格式:`年-月-日-时-分-秒.txt`
- 题目格式规范,包含题号和空行
## 文件结构
```
项目根目录/
├── AccountManager.java
├── BaseQuestionGenerator.java
├── Constants.java
├── FileManager.java
├── HighQuestionGenerator.java
├── MathExamGenerator.java
├── MiddleQuestionGenerator.java
├── PrimaryQuestionGenerator.java
└── output/
├── 张三1/
├── 李四1/
└── 王五1/
```
## 系统架构
### 核心类说明
#### 1. `MathExamGenerator` - 程序入口
**主要职责**:系统主控制器,协调各个模块的工作流程
**核心函数**
- `main(String[] args)` - 程序入口点
- `run()` - 主循环控制
- `processLogin()` - 处理用户登录
#### 2. `AccountManager` - 账号管理
**主要职责**:管理用户账户信息和身份验证
**核心函数**
- `authenticate(String username, String password)` - 用户认证
- `switchStage(String newStage)` - 切换学段
- `getCurrentStage()` - 获取当前学段
#### 3. `BaseQuestionGenerator` - 题目生成基类
**主要职责**:定义题目生成的通用接口和公共功能
**核心函数**
- `generateQuestion()` - 生成单个题目
- `checkDuplicate(String question)` - 检查题目重复
- `generateOperands()` - 生成操作数
#### 4. 具体题目生成器
- `PrimaryQuestionGenerator` - 小学题目生成
- `MiddleQuestionGenerator` - 初中题目生成
- `HighQuestionGenerator` - 高中题目生成
#### 5. `FileManager` - 文件管理
**主要职责**:处理试卷文件的保存和读取
**核心函数**
- `saveExamPaper(String username, List<String> questions)` - 保存试卷(相对路径,与被执行文件同级,每个账号一个文件夹)
- `loadHistoryQuestions(String username)` - 加载历史题目
- `getUserOutputPath(String username)` - 获取用户输出路径
## 🚀 使用说明
### 运行环境
- JDK 版本JDK 25 及以上
- 支持系统WindowsWin10/Win11
- 编码要求windows需要切换编码
## ⚙️ 环境配置
### Java环境检查
在运行程序前请确保您的系统已正确安装Java环境
```bash
# 检查Java运行时环境
java -version
# 检查Java编译器
javac -version
```
**要求**确保两个命令都能正确显示版本信息且版本为JDK 8及以上。
### 字符编码设置(重要)
由于程序包含中文字符,需要正确设置编码:
#### 在Windows PowerShell中
```powershell
# 设置UTF-8编码
[Console]::InputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
# 然后运行程序
cd ..
java -jar school.jar
```
#### 在CMD命令提示符中
```cmd
# 设置UTF-8编码
chcp 65001
# 然后运行程序
cd ..
java -jar school.jar
```
⚠️ **注意**:如果未正确设置编码,可能会导致中文字符显示乱码。
### 操作流程示例
1. **登录系统**
```
请输入用户名 密码用空格分隔张三1 123
当前选择为 小学 出题
```
2. **生成题目**
```
准备生成 小学 数学题目,请输入生成题目数量(输入-1将退出当前用户重新登录15
试卷已保存output/张三1/2025-09-28-14-30-25.txt
```
3. **切换学段**
```
准备生成 小学 数学题目,请输入生成题目数量(输入-1将退出当前用户重新登录切换为初中
当前选择为 初中 出题
```
4. **退出登录**
```
准备生成 初中 数学题目,请输入生成题目数量(输入-1将退出当前用户重新登录-1
```
### 📝 题目示例
**小学题目:**
```
第1题: 45 + 23
第2题: ( 67 - 34 ) * 2
```
**初中题目:**
```
第1题: 25 + sqrt( 16 ) * 3
第2题: ( 5^2 ) - sqrt( 9 )
```
**高中题目:**
```
第1题: sin( 30 ) + 45 * 2
第2题: cos( 45 ) * ( 3^2 ) - tan( 30 )
```
## 技术特点
1. **面向对象设计**:清晰的类职责分离
2. **可扩展性**:易于添加新的题目类型
3. **健壮性**:完善的异常处理和输入验证
4. **一致性**:统一的代码风格和命名规范
5. **文档完整**:详细的代码注释
## 开发环境
- Java 8+
- 标准Java库无外部依赖
## 👥 预设账户
| 账户类型 | 账户 | 密码 | 备注 |
|---------|--------|------|------|
| 小学 | 张三1 | 123 | |
| 小学 | 张三2 | 123 | |
| 小学 | 张三3 | 123 | |
| 初中 | 李四1 | 123 | |
| 初中 | 李四2 | 123 | |
| 初中 | 李四3 | 123 | |
| 高中 | 王五1 | 123 | |
| 高中 | 王五2 | 123 | |
| 高中 | 王五3 | 123 | |
💡 **提示**:请使用上表中的账户和密码进行登录测试
## ⚠️ 注意事项
1. 首次运行会自动创建output目录
2. 题目数量必须在10-30之间
3. 切换学段时需输入完整名称(小学/初中/高中)
4. 系统会确保同一用户的题目不重复
5. 如无法生成足够题目,请删除部分历史文件或减少生成数量
6. 确保您的命令提示符使用UTF-8编码以正确显示中文
# 开发规范与优化建议
## 编码标准
- **架构设计**:采用面向对象思想,确保类结构清晰、职责明确
- **代码规范**方法长度控制在40行内保持代码简洁性
- **命名约定**遵循Java驼峰命名规则确保名称表意明确
- **注释要求**:为核心方法和复杂算法提供完整注释说明
## 异常处理
- **输入校验**:对用户输入数据进行严格的格式和有效性验证
- **异常管理**:合理使用异常处理机制捕获运行时错误
- **用户提示**:设计友好的错误提示信息,提升用户体验
## 功能拓展方向
- **难度分级**:在各学段内实现题目难度分层设计
- **题型丰富**:拓展几何、代数等多元化题目类型
- **批量操作**:支持试卷批量生成功能
- **个性化设置**:提供试卷模板自定义选项
## 技术升级路径
- **数据存储**:引入数据库管理系统存储用户和题目数据
- **界面优化**开发Web端界面改善用户交互体验
- **算法改进**:优化题目生成算法,提升题目质量
- **多语言支持**:实现系统界面国际化
## 🔧 维护说明
如需修改系统参数,请编辑`Constants.java`文件:
- 题目数量范围
- 操作数范围
- 输出目录等
Loading…
Cancel
Save