# 中小学数学卷子自动生成程序 ## 项目简介 这是一个命令行界面的数学题目自动生成程序,专为小学、初中和高中数学老师设计。程序可以根据不同难度级别(小学、初中、高中)自动生成符合相应教学要求的数学题目,并支持题目查重功能,确保每位老师生成的题目不会重复。 ## 功能特点 ### 1. 用户登录验证 - 支持小学、初中和高中三个级别的用户账号 - 每个级别预设3个账号,密码统一为123 - 登录成功后显示当前选择的出题级别 - 支持用户退出功能,可重新登录 ### 2. 题目生成功能 - 根据账号类型自动选择对应的难度级别生成题目 - 支持自定义生成题目数量(范围:10-30题) - 操作数范围:1-100 - 操作数个数:1-5个 - 生成题目时实时显示题目内容 ### 3. 多难度级别支持 - **小学**:仅包含加减乘除四则运算和括号,支持随机括号嵌套 - **初中**:在小学基础上增加平方和开根号运算,题目包含1-5个操作数;若只有1个操作数,则必须是平方或根号表达式;确保每道题至少包含一个平方或开根号 - **高中**:在初中基础上增加三角函数(sin、cos、tan),题目包含1-5个操作数;但若只有1个操作数,则强制为三角函数表达式;确保每道题至少包含一个三角函数 ### 4. 题目类型切换 - 支持在登录状态下切换不同难度级别的题目生成 - 输入格式:`切换为 小学/初中/高中` - 切换成功后系统清屏并提示新的难度级别 ### 5. 题目查重功能 - 自动检测新生成的题目是否与当前用户历史生成的题目重复 - 设置最大尝试次数,防止在题库不足时陷入死循环 - 确保每个用户生成的题目都是唯一的 ### 6. 文件保存功能 - 题目以文本文件形式保存 - 文件名格式:`yyyy-MM-dd-HH-mm-ss.txt`(基于生成时间) - 每个用户有独立的文件夹存储题目(文件夹名为用户名) - 题目包含题号,每题之间空一行,便于阅读 ## 使用说明 ### 登录 1. 运行程序后,输入用户名和密码(用空格分隔) 2. 验证成功后,系统提示当前选择的出题级别 3. 验证失败则提示重新输入 ### 生成题目 1. 登录成功后,系统提示输入题目数量 2. 输入10-30之间的数字生成对应数量的题目 3. 系统将显示生成的题目并保存到用户文件夹 4. 输入-1退出当前用户,返回登录界面 ### 切换难度 - 在任何提示输入题目数量的界面,输入`切换为 小学/初中/高中`即可切换题目难度 - 切换成功后,系统会提示新的难度级别 - 输入无效时,系统会提示错误信息并保持当前难度 ## 账号列表 | 级别 | 用户名 | 密码 | |------|--------|------| | 小学 | 张三1 | 123 | | 小学 | 张三2 | 123 | | 小学 | 张三3 | 123 | | 初中 | 李四1 | 123 | | 初中 | 李四2 | 123 | | 初中 | 李四3 | 123 | | 高中 | 王五1 | 123 | | 高中 | 王五2 | 123 | | 高中 | 王五3 | 123 | ## 项目结构 ``` relentless1/ ├── src/ # 源代码目录 │ ├── Main.java # 程序入口类 │ ├── User.java # 用户类 │ ├── MathQuestion.java # 数学题目类 │ ├── QuestionGenerator.java # 题目生成器 │ ├── QuestionStrategy.java # 题目策略接口 │ ├── QuestionStrategyFactory.java # 策略工厂类 │ ├── ElementaryQuestionStrategy.java # 小学题目策略 │ ├── MiddleSchoolQuestionStrategy.java # 初中题目策略 │ ├── HighSchoolQuestionStrategy.java # 高中题目策略 │ └── FileUtils.java # 文件操作工具类 ├── doc/ # 文档目录 │ └── README.md # 项目说明文档 └── [用户名]/ # 用户题目文件夹(运行时自动创建) ``` ## 技术实现 ### 设计模式 - **策略模式**:通过`QuestionStrategy`接口定义题目生成策略,不同难度级别(小学、初中、高中)实现各自的题目生成算法 - **工厂模式**:通过`QuestionStrategyFactory`根据用户角色动态创建对应的题目生成策略对象 ### 核心类功能 #### Main.java - 程序入口,处理用户交互逻辑 - 实现登录流程、题目数量输入和难度切换功能 - 包含清屏方法,提升用户体验 #### User.java - 表示用户实体,包含用户名、密码和角色属性 - 提供静态登录方法,验证用户凭据 - 用户信息硬编码在程序中,每个角色有3个预设账号 #### QuestionGenerator.java - 根据用户角色使用对应策略生成题目 - 实现题目查重逻辑,确保题目唯一性 - 协调策略选择、题目生成和文件保存 #### QuestionStrategy.java及其实现类 - `QuestionStrategy`:定义题目生成的接口 - `ElementaryQuestionStrategy`:实现小学题目的生成,包含加减乘除和括号 - `MiddleSchoolQuestionStrategy`:实现初中题目生成,增加平方和开根号运算,题目包含1-5个操作数,单操作数题目强制为平方或根号表达式,确保每道题至少包含一个平方或开根号 - `HighSchoolQuestionStrategy`:实现高中题目生成,增加三角函数(sin、cos、tan)运算,题目包含1-5个操作数,单操作数题目强制为三角函数表达式,确保每道题至少包含一个三角函数 #### MathQuestion.java - 表示单道数学题,包含题号和题目内容 #### FileUtils.java - 提供文件操作工具方法 - 生成时间戳格式的文件名 - 保存题目到用户文件夹 - 加载用户历史题目进行查重 ### 算法特点 1. **小学题目**:支持随机括号位置,确保数学表达式的多样性 2. **初中题目**: - 题目包含1-5个操作数 - 若只有1个操作数,则必须是平方或根号表达式 - 有50%概率生成平方或根号操作数 - 确保每道题至少有一个平方或开根号运算 3. **高中题目**: - 题目包含1-5个操作数 - 若只有1个操作数,则强制生成三角函数表达式 - 支持sin、cos、tan三种三角函数 - 确保每道题至少有一个三角函数 4. **查重机制**:使用HashSet高效检测重复题目,设置最大尝试次数避免死循环 ## 运行环境 - Java 8及以上版本 - 支持Windows和Linux操作系统(清屏功能自适应) ## 扩展建议 1. 添加自定义操作数范围和运算符的功能 2. 实现题目答案自动计算功能 3. 支持更多类型的数学表达式和运算符号 4. 添加图形用户界面,提升用户体验 5. 实现用户注册和密码修改功能 6. 支持题目导入导出功能 ## 编译与运行 ### Windows PowerShell编码设置 (重要) > **注意**:在Windows PowerShell控制台运行程序前,请先执行以下命令设置编码,否则可能导致中文显示错误或运行的异常: > ```powershell > [Console]::InputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 > ``` ### 通过源代码编译运行 1. 编译:`javac -d out src/*.java` 2. 运行:`java -cp out Main` ### 通过JAR包运行 1. 直接运行JAR包:`java -jar out/artifacts/relentless1_jar/relentless1.jar` ## 注意事项 1. 题目数量必须在10-30之间,否则会提示重新输入 2. 切换难度时,请确保输入格式正确:`切换为 级别名称` 3. 程序会在当前目录下创建用户文件夹存储题目文件 4. 为保证查重功能正常,请勿手动修改用户文件夹中的题目文件格式