# 中小学数学卷子自动生成系统文档 ## 注意事项(已经经过终端测试) 为了方便助教检查,将此注意事项放在最前面: - 有关功能中的查重: 实现了双重查重机制: 内存级查重 - 当前会话中生成的题目查重 文件级查重 - 历史生成的所有题目查重 主要代码在 AbstractQuestionGenerator 类和FileServiceImpl中: - 测试时的java-version; java version "23" 2024-09-17 Java(TM) SE Runtime Environment (build 23+37-2369) Java HotSpot(TM) 64-Bit Server VM (build 23+37-2369, mixed mode, sharing) - 使用可执行文件:在cmd中运行,如果是在登录时一直出现用户名密码不匹配,可输入chcp 65001(成功运行); - 在powershell中运行,# 设置 .NET 控制台输入/输出编码为 UTF-8; [Console]::InputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 - 运行指令 java -jar 可执行文件 - 生成的文件(存放的题目)会保存在可执行文件存放的文件夹中的exam_papers文件夹中(若没有会创建该文件夹); - 由于需求文件中有些提示词的连接并不是很流畅,我是尽可能按照提示词来写的;且需求文档的描述并不是特别清晰,在此提出是为了表明某些情况并不是提示信息错误,而是为了合理可能稍作改动; - 例如只有输入 切换成XX 但是XX并不是正确选项时才会给出“请输入小学、初中和高中三个选项中的一个”,而输入的文字信息没有关键词 切换为,或者输入的数字范围不对,则会给出其他的提示词, ## 项目概述 这是一个中小学数学卷子自动生成系统,支持小学、初中和高中三个难度级别的数学题目生成。系统具有用户认证、题目生成、文件保存和查重等功能。 ## 系统架构 ### 核心类结构 ``` src/ ├── Main.java # 程序入口和主控制逻辑 ├── 业务接口层/ │ ├── IAuthService.java # 用户认证服务接口 │ ├── IFileService.java # 文件服务接口 │ ├── IQuestionFactory.java # 题目工厂接口 │ └── IQuestionService.java # 题目服务接口 ├── 业务实现层/ │ ├── AuthServiceImpl.java # 认证服务实现 │ ├── FileServiceImpl.java # 文件服务实现 │ ├── QuestionServiceImpl.java # 题目服务实现 │ └── QuestionFactory.java # 题目工厂实现 ├── 抽象基类/ │ └── AbstractQuestionGenerator.java # 题目生成器抽象基类 ├── 实体类/ │ ├── User.java # 用户实体 │ └── Question.java # 题目实体 ├── 工具类/ │ ├── DifficultyLevel.java # 难度等级枚举 │ └── Validator.java # 输入验证工具 └── 配置文件/ ├── .gitignore ├── codeStyleConfig.xml ├── misc.xml ├── modules.xml └── workspace.xml ``` ## 核心功能模块说明 ### 1. 用户认证模块 (`IAuthService`) **功能**:管理用户登录认证 **实现类**:`AuthServiceImpl` - 预置了三个难度等级的用户账户 - 小学:张三1/张三2/张三3 (密码:123) - 初中:李四1/李四2/李四3 (密码:123) - 高中:王五1/王五2/王五3 (密码:123) ### 2. 题目生成模块 (`IQuestionFactory`) **核心类**: - `AbstractQuestionGenerator`:题目生成器抽象基类 - `QuestionFactory`:具体题目生成实现 **题目生成逻辑**: - **小学**:基础四则运算,支持括号 - **初中**:增加平方和开方运算 - **高中**:增加三角函数运算 ### 3. 文件服务模块 (`IFileService`) **实现类**:`FileServiceImpl` - 按用户分目录保存题目文件 - 支持题目内容查重 - 文件路径:`./exam_papers/用户名/时间戳.txt` ### 4. 题目服务模块 (`IQuestionService`) **实现类**:`QuestionServiceImpl` - 协调题目生成和文件保存 - 提供完整的题目生成流程 ## 使用指南 ### 启动程序 ```bash 在idea中运行Main即可,在终端运行可执行文件按照注意事项中提到的方法即可; ``` ### 操作流程 1. **登录**:输入用户名和密码(用空格隔开) 2. **生成题目**:输入题目数量(10-30) 3. **切换难度**:输入"切换为小学/初中/高中" 4. **退出用户**:输入"-1" ### 示例会话 ``` === 中小学数学卷子自动生成程序 === 请输入用户名和密码(用空格隔开): 张三1 123 当前选择为小学出题 准备生成小学数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录) 20 题目已生成并保存到: ./exam_papers/张三1/2024-01-01-10-30-45.txt 生成完成!可以继续生成题目或切换难度 切换为初中 准备生成初中数学题目,请输入生成题目数量 ``` ## 技术特点 ### 1. 设计模式应用 - **工厂模式**:题目生成器工厂 - **策略模式**:不同难度级别的题目生成策略 - **依赖注入**:通过构造函数注入依赖 ### 2. 查重机制 - 内存级查重(当前会话) - 文件级查重(历史题目) - 避免生成重复题目 ### 3. 异常处理 - 文件操作异常处理 - 输入验证机制 - 备用题目生成策略 ## 配置说明 ### 项目配置 - **JDK版本**:22 - **代码风格**:Google Style - **输出目录**:`./exam_papers/` ### 文件结构配置 ```xml ``` ---