# kang ## 项目简介 本项目是一个基于命令行的**中小学数学试卷自动生成程序**。旨在帮助小学、初中和高中数学教师快速、批量地生成符合对应难度要求的数学练习试卷。程序支持用户登录、难度切换、题目数量自定义,并具备**题目查重**和**结果文件保存**功能,确保生成的试卷具有实用性和唯一性。 ## 核心功能 1. **多用户登录与权限管理:** * 预设小学、初中、高中三类账户,通过命令行输入用户名和密码登录。 * 登录成功后,系统自动识别并显示当前的出题类型。 2. **分级难度出题:** * 支持小学、初中、高中三个难度等级的题目生成。 * **小学:** 仅包含 `+`, `-`, `*`, `/` 和 `()` 运算。 * **初中:** 题目中**至少包含一个**平方或开根号运算。 * **高中:** 题目中**至少包含一个** `sin`, `cos` 或 `tan` 三角函数运算。 * 所有题目操作数在 1-5 个之间,操作数取值范围为 1-100。 3. **试卷生成与数量控制:** * 用户可输入所需生成的题目数量,有效范围为 **10 到 30** 题。 * 输入 `-1` 可退出当前用户登录状态。 4. **题目查重机制:** * **强大的查重功能:** 确保同一用户新生成的试卷中的题目,不与该用户**历史已生成**的任何题目重复。 5. **难度切换功能:** * 登录状态下,用户可通过输入 `切换为XX` (XX 为小学/初中/高中) 随时切换出题类型。 6. **结果保存:** * 生成的试卷将自动保存到以用户名命名的文件夹下。 * 文件命名格式为:`年-月-日-时-分-秒.txt`。 * 试卷内容包含题号,每题之间空一行。 ## 技术栈 本项目主要采用 **Java** 语言开发,并遵循面向对象的设计原则。 * **主要语言:** Java * **开发环境:** JDK 8+ * **核心设计:** 接口/抽象类定义(如 `QuestionGenerator`),具体类实现(如 `ElementaryQuestionGenerator`),以实现不同难度题目的解耦和扩展。 ## 目录结构与规范 本项目遵循头歌项目提交规范,采用以下目录结构: ``` MathQuestionGenerator/ ├── src/ │ ├── com/ │ │ └── mathgen/ │ │ ├── Main.java │ │ ├── auth/ │ │ │ ├── AuthService.java │ │ │ └── User.java │ │ ├── enums/ │ │ │ └── AccountType.java │ │ ├── io/ │ │ │ └── FileService.java │ │ ├── question/ │ │ │ ├── ElementaryQuestionGenerator.java │ │ │ ├── HighSchoolQuestionGenerator.java │ │ │ ├── MiddleSchoolQuestionGenerator.java │ │ │ ├── Question.java │ │ │ └── QuestionGenerator.java │ │ └── util/ │ │ ├── ExpressionBuilder.java │ │ └── RandomUtil.java ``` ### Git 提交规范 * **分支管理:** 设有 `main` 和 `develop` 两个分支。 * `main`:存放稳定、可发布版本。 * `develop`:存放最新开发版本。 * **提交流程:** 代码需先提交到 `develop` 分支,测试正常后方可合并到 `main` 分支。 ## 安装与运行 ### 1. 先决条件 * 已安装 **Java Development Kit (JDK 8 或更高版本)**。 * 已安装 **Git**。 ### 2. 获取代码 使用 Git 克隆项目到本地: ```bash git clone [您的项目仓库地址] cd [您的项目名称] ``` ## 使用指南 程序启动后,将进入登录界面。 ### 1. 用户登录 在命令行输入用户名和密码,用空格隔开: ``` 请输入用户名和密码(用空格隔开): 张三1 123 ``` **预设账户信息(供测试):** | 账户类型 | 账户 | 密码 | | :--- | :--- | :--- | | **小学** | 张三1, 张三2, 张三3 | 123 | | **初中** | 李四1, 李四2, 李四3 | 123 | | **高中** | 王五1, 王五2, 王五3 | 123 | ### 2. 生成试卷 登录成功后,系统会提示当前出题类型,并要求输入题目数量: ``` 当前选择为小学 出题 准备生成小学数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录): 20 ``` ### 3. 切换出题类型 在提示输入题目数量的界面,输入切换命令: ``` 切换为高中 ``` 系统将确认切换并再次提示输入题目数量: ``` 系统提示“准备生成高中数学题目,请输入生成题目数量” ``` ### 4. 退出登录 在提示输入题目数量的界面,输入 `-1` 即可退出当前用户,返回登录界面: ``` -1 ```