# 中小学数学卷子自动生成程序 > 专为数学教师打造的智能试卷生成解决方案 ## 项目简介 🎯 **中小学数学卷子自动生成程序**是一个专为中小学数学老师设计的智能试卷生成系统。系统能够根据不同学段(小学、初中、高中)自动生成相应难度的数学题目,并保存为规范的试卷文件。 ## 功能特性 ### 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 questions)` - 保存试卷(相对路径,与被执行文件同级,每个账号一个文件夹) - `loadHistoryQuestions(String username)` - 加载历史题目 - `getUserOutputPath(String username)` - 获取用户输出路径 ## 🚀 使用说明 ### 运行环境 - JDK 版本:JDK 25 及以上 - 支持系统:Windows(Win10/Win11) - 编码要求:windows需要切换编码 ## ⚙️ 环境配置 ### Java环境检查 在运行程序前,请确保您的系统已正确安装Java环境: ```bash # 检查Java运行时环境 java -version # 检查Java编译器 javac -version ``` ✅ **要求**:确保两个命令都能正确显示版本信息,且版本为JDK 25及以上。 ### 字符编码设置(重要) 由于程序包含中文字符,需要正确设置编码: #### 在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`文件: - 题目数量范围 - 操作数范围 - 输出目录等