You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
7.5 KiB
7.5 KiB
中小学数学卷子自动生成程序
项目简介
这是一个命令行界面的数学题目自动生成程序,专为小学、初中和高中数学老师设计。程序可以根据不同难度级别(小学、初中、高中)自动生成符合相应教学要求的数学题目,并支持题目查重功能,确保每位老师生成的题目不会重复。
功能特点
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(基于生成时间) - 每个用户有独立的文件夹存储题目(文件夹名为用户名)
- 题目包含题号,每题之间空一行,便于阅读
使用说明
登录
- 运行程序后,输入用户名和密码(用空格分隔)
- 验证成功后,系统提示当前选择的出题级别
- 验证失败则提示重新输入
生成题目
- 登录成功后,系统提示输入题目数量
- 输入10-30之间的数字生成对应数量的题目
- 系统将显示生成的题目并保存到用户文件夹
- 输入-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-5个操作数
- 若只有1个操作数,则必须是平方或根号表达式
- 有50%概率生成平方或根号操作数
- 确保每道题至少有一个平方或开根号运算
- 高中题目:
- 题目包含1-5个操作数
- 若只有1个操作数,则强制生成三角函数表达式
- 支持sin、cos、tan三种三角函数
- 确保每道题至少有一个三角函数
- 查重机制:使用HashSet高效检测重复题目,设置最大尝试次数避免死循环
运行环境
- Java 8及以上版本
- 支持Windows和Linux操作系统(清屏功能自适应)
扩展建议
- 添加自定义操作数范围和运算符的功能
- 实现题目答案自动计算功能
- 支持更多类型的数学表达式和运算符号
- 添加图形用户界面,提升用户体验
- 实现用户注册和密码修改功能
- 支持题目导入导出功能
编译与运行
Windows PowerShell编码设置 (重要)
注意:在Windows PowerShell控制台运行程序前,请先执行以下命令设置编码,否则可能导致中文显示错误或运行的异常:
[Console]::InputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
通过源代码编译运行
- 编译:
javac -d out src/*.java - 运行:
java -cp out Main
通过JAR包运行
- 直接运行JAR包:
java -jar out/artifacts/relentless1_jar/relentless1.jar
注意事项
- 题目数量必须在10-30之间,否则会提示重新输入
- 切换难度时,请确保输入格式正确:
切换为 级别名称 - 程序会在当前目录下创建用户文件夹存储题目文件
- 为保证查重功能正常,请勿手动修改用户文件夹中的题目文件格式