|
|
|
|
@ -1,172 +1,164 @@
|
|
|
|
|
# 数学题目生成系统
|
|
|
|
|
|
|
|
|
|
## 项目简介
|
|
|
|
|
|
|
|
|
|
这是一个基于 Java 的命令行应用程序,用于为小学、初中和高中教师生成数学题目试卷。系统支持用户登录、题目查重、按难度生成题目,并保存为文本文件。
|
|
|
|
|
|
|
|
|
|
## 功能特点
|
|
|
|
|
|
|
|
|
|
- **多角色登录**:支持小学、初中、高中教师登录
|
|
|
|
|
- **题目生成**:根据学段生成不同难度的数学题目
|
|
|
|
|
- **题目查重**:自动检查题目是否重复,确保唯一性
|
|
|
|
|
- **试卷保存**:将生成的题目保存为带时间戳的文本文件
|
|
|
|
|
- **模式切换**:教师可在登录后切换出题学段
|
|
|
|
|
- **多次生成**:教师登录后能生成无限次试卷
|
|
|
|
|
# 项目结构图
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
GenerateMath/
|
|
|
|
|
├── doc/ # 文档和资源目录
|
|
|
|
|
│ ├── 张三1/ # 教师个人文件夹(存储生成的试卷)
|
|
|
|
|
│ ├── 张三2/
|
|
|
|
|
│ ├── 张三3/
|
|
|
|
|
│ ├── 李四1/
|
|
|
|
|
│ ├── 李四2/
|
|
|
|
|
│ ├── 李四3/
|
|
|
|
|
│ ├── 王五1/
|
|
|
|
|
│ ├── 王五2/
|
|
|
|
|
│ ├── 王五3/
|
|
|
|
|
│ ├── 小学老师账号密码本 # 小学教师认证文件(格式:用户名 密码)
|
|
|
|
|
│ ├── 初中老师账号密码本 # 初中教师认证文件
|
|
|
|
|
│ └── 高中老师账号密码本 # 高中教师认证文件
|
|
|
|
|
├── out/ # 编译输出目录
|
|
|
|
|
├── src/ # 源代码目录
|
|
|
|
|
│ ├── paper/ # 试卷生成模块
|
|
|
|
|
│ │ ├── Paper.java # 抽象试卷类(提供文件路径检查功能)
|
|
|
|
|
│ │ │ └── checkPath(File file) # 检查并创建文件路径
|
|
|
|
|
│ │ ├── PrimaryPaper.java # 小学试卷生成
|
|
|
|
|
│ │ │ └── PrimaryPaper(int problemNumber, String teacherName) # 构造函数:生成小学试卷文件
|
|
|
|
|
│ │ ├── JuniorPaper.java # 初中试卷生成
|
|
|
|
|
│ │ │ └── JuniorPaper(int problemNumber, String teacherName) # 构造函数:生成初中试卷文件
|
|
|
|
|
│ │ └── SeniorPaper.java # 高中试卷生成
|
|
|
|
|
│ │ └── SeniorPaper(int problemNumber, String teacherName) # 构造函数:生成高中试卷文件
|
|
|
|
|
│ ├── problem/ # 题目生成模块
|
|
|
|
|
│ │ ├── MathProblem.java # 抽象题目类(定义题目基本结构)
|
|
|
|
|
│ │ │ ├── content # 题目内容字符串
|
|
|
|
|
│ │ │ ├── op2[] # 基础运算符数组(+,-,×,÷)
|
|
|
|
|
│ │ │ └── examine(String teacherName) # 抽象查重方法
|
|
|
|
|
│ │ ├── PrimaryMathProblem.java # 小学数学题目生成
|
|
|
|
|
│ │ │ ├── PrimaryMathProblem() # 构造函数:生成2-5个数字的小学题目
|
|
|
|
|
│ │ │ └── examine(String teacherName) # 查重:检查教师文件夹中是否已有相同题目
|
|
|
|
|
│ │ ├── JuniorMathProblem.java # 初中数学题目生成
|
|
|
|
|
│ │ │ ├── JuniorMathProblem() # 构造函数:生成含平方、开方的初中题目
|
|
|
|
|
│ │ │ ├── opBack[] # 后缀运算符(平方、括号)
|
|
|
|
|
│ │ │ ├── opFront[] # 前缀运算符(开方、括号)
|
|
|
|
|
│ │ │ └── examine(String teacherName) # 查重方法
|
|
|
|
|
│ │ └── SeniorMathProblem.java # 高中数学题目生成
|
|
|
|
|
│ │ ├── SeniorMathProblem() # 构造函数:生成含三角函数的高中题目
|
|
|
|
|
│ │ ├── opBack[] # 后缀运算符(平方、括号)
|
|
|
|
|
│ │ ├── opFront[] # 前缀运算符(三角函数)
|
|
|
|
|
│ │ └── examine(String teacherName) # 查重方法
|
|
|
|
|
│ └── teacher/ # 教师管理模块
|
|
|
|
|
│ ├── Teacher.java # 抽象教师类(定义教师基本属性和行为)
|
|
|
|
|
│ │ ├── rank (枚举) # 教师等级:PRIMARY, JUNIOR, SENIOR
|
|
|
|
|
│ │ ├── mode # 当前出题模式
|
|
|
|
|
│ │ ├── userName # 教师用户名
|
|
|
|
|
│ │ ├── initMode() # 抽象方法:初始化出题模式提示
|
|
|
|
|
│ │ └── generatePaper(int number) # 抽象方法:生成试卷
|
|
|
|
|
│ ├── PrimaryTeacher.java # 小学教师类
|
|
|
|
|
│ │ ├── PrimaryTeacher(String name) # 构造函数
|
|
|
|
|
│ │ ├── initMode() # 输出小学出题提示信息
|
|
|
|
|
│ │ └── generatePaper(int number) # 创建PrimaryPaper对象生成试卷
|
|
|
|
|
│ ├── JuniorTeacher.java # 初中教师类
|
|
|
|
|
│ │ ├── JuniorTeacher(String name) # 构造函数
|
|
|
|
|
│ │ ├── initMode() # 输出初中出题提示信息
|
|
|
|
|
│ │ └── generatePaper(int number) # 创建JuniorPaper对象生成试卷
|
|
|
|
|
│ └── SeniorTeacher.java # 高中教师类
|
|
|
|
|
│ ├── SeniorTeacher(String name) # 构造函数
|
|
|
|
|
│ ├── initMode() # 输出高中出题提示信息
|
|
|
|
|
│ └── generatePaper(int number) # 创建SeniorPaper对象生成试卷
|
|
|
|
|
│
|
|
|
|
|
├── Main.java # 程序主入口类
|
|
|
|
|
│ ├── primary/junior/senior (静态List) # 内置账号密码列表(备用验证)
|
|
|
|
|
│ ├── log1(String bookName, String password) # 内置账号验证方法
|
|
|
|
|
│ ├── log(String bookName, String password) # 文件账号验证方法(优先读取文件)
|
|
|
|
|
│ ├── generate(Teacher teacher) # 交互式出题循环控制
|
|
|
|
|
│ └── main(String[] args) # 主方法:处理登录和用户交互
|
|
|
|
|
├── README.md # 项目说明文档
|
|
|
|
|
└── 其他配置文件... # IDE配置文件等
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 目录说明
|
|
|
|
|
|
|
|
|
|
- **doc/**: 存储教师生成的试卷文件和账号密码本
|
|
|
|
|
- **src/paper/**: 试卷生成相关类,负责创建和保存试卷
|
|
|
|
|
- **src/problem/**: 题目生成相关类,负责生成各类数学题目
|
|
|
|
|
- **src/teacher/**: 教师管理相关类,处理教师登录和权限
|
|
|
|
|
- **out/**: Java编译后的class文件输出目录
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 使用说明
|
|
|
|
|
|
|
|
|
|
### 登录系统
|
|
|
|
|
|
|
|
|
|
运行程序后,输入用户名和密码(格式:`用户名 密码`),系统会先根据密码本验证身份,
|
|
|
|
|
如果是使用jar包运行没有密码本的情况,则会采用内部字符串数组匹配的方式验证身份,验证成功后进入对应学段的出题模式。<br>
|
|
|
|
|
#### 预置账号:<br>
|
|
|
|
|
|
|
|
|
|
| 难度 | 用户名 | 密码 | 默认难度 |
|
|
|
|
|
|------|-----|-----|----------|
|
|
|
|
|
| 小学 | 张三1 | 123 | 小学 |
|
|
|
|
|
| 小学 | 张三2 | 123 | 小学 |
|
|
|
|
|
| 小学 | 张三3 | 123 | 小学 |
|
|
|
|
|
| 初中 | 李四1 | 123 | 初中 |
|
|
|
|
|
| 初中 | 李四2 | 123 | 初中 |
|
|
|
|
|
| 初中 | 李四3 | 123 | 初中 |
|
|
|
|
|
| 高中 | 王五1 | 123 | 高中 |
|
|
|
|
|
| 高中 | 王五2 | 123 | 高中 |
|
|
|
|
|
| 高中 | 王五3 | 123 | 高中 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 生成题目
|
|
|
|
|
|
|
|
|
|
登录成功后,系统会提示输入题目数量(10-30之间,包括10和30),输入后即可生成试卷并保存至 `./doc/教师姓名/` 目录下。
|
|
|
|
|
|
|
|
|
|
### 切换学段
|
|
|
|
|
|
|
|
|
|
在出题模式下,可输入以下指令切换学段:
|
|
|
|
|
- `切换为小学`
|
|
|
|
|
- `切换为初中`
|
|
|
|
|
- `切换为高中`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 退出登录
|
|
|
|
|
|
|
|
|
|
输入 `-1` 可退出当前用户,返回登录界面。
|
|
|
|
|
|
|
|
|
|
## 题目类型示例
|
|
|
|
|
|
|
|
|
|
- **小学**:四则运算,如 `12+(34-56)÷7=`
|
|
|
|
|
- **初中**:含平方和开方,如 `√25+3²=`
|
|
|
|
|
- **高中**:含三角函数,如 `sin30+cos60=`
|
|
|
|
|
|
|
|
|
|
## 文件存储
|
|
|
|
|
|
|
|
|
|
- 生成的试卷以当前时间命名,格式为:`yyyy-MM-dd-HH-mm-ss.txt`
|
|
|
|
|
|
|
|
|
|
- 保存在对应用户的文件夹下,例如:`./doc/张老师/2025-09-26-14-30-15.txt`
|
|
|
|
|
|
|
|
|
|
- 若不存在该路径,程序将自动在运行目录中创建该路径的相关文件夹
|
|
|
|
|
|
|
|
|
|
## 运行环境
|
|
|
|
|
|
|
|
|
|
1. JDK 24.0.1及更高版本
|
|
|
|
|
2. PowerShell控制台环境(支持标准输入输出):<br>
|
|
|
|
|
- 方式1(不使用JAR包):在GenerateMath文件夹下进入终端,使用命令 <br> `[Console]::InputEncoding = [System.Text.Encoding]::UTF8 `<br>
|
|
|
|
|
`[Console]::OutputEncoding = [System.Text.Encoding]::UTF8`<br> `java -cp "out\production\GenerateMath" Main -Dfile.encoding=UTF-8`
|
|
|
|
|
- 方式2(使用JAR包):在存放JAR包的文件目录下打开终端,使用命令<br>`[Console]::InputEncoding = [System.Text.Encoding]::UTF8 `<br>
|
|
|
|
|
`[Console]::OutputEncoding = [System.Text.Encoding]::UTF8`<br> `java -jar GenerateMath.jar`
|
|
|
|
|
3. cmd模式下:将PowerShell环境下的前两条命令修改为`chcp 65001`
|
|
|
|
|
|
|
|
|
|
## 注意
|
|
|
|
|
1. 登陆时账号和密码之间只能间隔一个空格,且密码后不能携带任何空白字符
|
|
|
|
|
2. 任何命令语句都要严格按照所给字符串输入,其前后不能携带任何空白字符
|
|
|
|
|
3. 填写出题数量时数字前后不能携带任何空白字符
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 未来展望
|
|
|
|
|
|
|
|
|
|
未来可考虑添加以下功能:
|
|
|
|
|
- 图形用户界面
|
|
|
|
|
- 自定义题目模板
|
|
|
|
|
# 数学题目生成系统
|
|
|
|
|
|
|
|
|
|
## 项目简介
|
|
|
|
|
|
|
|
|
|
这是一个基于 Java 的命令行应用程序,用于为小学、初中和高中教师生成数学题目试卷。系统支持用户登录、题目查重、按难度生成题目,并保存为文本文件。
|
|
|
|
|
|
|
|
|
|
## 功能特点
|
|
|
|
|
|
|
|
|
|
- **多角色登录**:支持小学、初中、高中教师登录
|
|
|
|
|
- **题目生成**:根据学段生成不同难度的数学题目
|
|
|
|
|
- **题目查重**:自动检查题目是否重复,确保唯一性
|
|
|
|
|
- **试卷保存**:将生成的题目保存为带时间戳的文本文件
|
|
|
|
|
- **模式切换**:教师可在登录后切换出题学段
|
|
|
|
|
- **多次生成**:教师登录后能生成无限次试卷
|
|
|
|
|
# 项目结构图
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
GenerateMath/
|
|
|
|
|
├── doc/ # 文档和资源目录
|
|
|
|
|
│ ├── 张三1/ # 教师个人文件夹(存储生成的试卷)
|
|
|
|
|
│ ├── 张三2/
|
|
|
|
|
│ ├── 张三3/
|
|
|
|
|
│ ├── 李四1/
|
|
|
|
|
│ ├── 李四2/
|
|
|
|
|
│ ├── 李四3/
|
|
|
|
|
│ ├── 王五1/
|
|
|
|
|
│ ├── 王五2/
|
|
|
|
|
│ ├── 王五3/
|
|
|
|
|
│ ├── 小学老师账号密码本 # 小学教师认证文件(格式:用户名 密码)
|
|
|
|
|
│ ├── 初中老师账号密码本 # 初中教师认证文件
|
|
|
|
|
│ └── 高中老师账号密码本 # 高中教师认证文件
|
|
|
|
|
├── out/ # 编译输出目录
|
|
|
|
|
├── src/ # 源代码目录
|
|
|
|
|
│ ├── paper/ # 试卷生成模块
|
|
|
|
|
│ │ ├── Paper.java # 抽象试卷类(提供文件路径检查功能)
|
|
|
|
|
│ │ │ └── checkPath(File file) # 检查并创建文件路径
|
|
|
|
|
│ │ ├── PrimaryPaper.java # 小学试卷生成
|
|
|
|
|
│ │ │ └── PrimaryPaper(int problemNumber, String teacherName) # 构造函数:生成小学试卷文件
|
|
|
|
|
│ │ ├── JuniorPaper.java # 初中试卷生成
|
|
|
|
|
│ │ │ └── JuniorPaper(int problemNumber, String teacherName) # 构造函数:生成初中试卷文件
|
|
|
|
|
│ │ └── SeniorPaper.java # 高中试卷生成
|
|
|
|
|
│ │ └── SeniorPaper(int problemNumber, String teacherName) # 构造函数:生成高中试卷文件
|
|
|
|
|
│ ├── problem/ # 题目生成模块
|
|
|
|
|
│ │ ├── MathProblem.java # 抽象题目类(定义题目基本结构)
|
|
|
|
|
│ │ │ ├── content # 题目内容字符串
|
|
|
|
|
│ │ │ ├── op2[] # 基础运算符数组(+,-,×,÷)
|
|
|
|
|
│ │ │ └── examine(String teacherName) # 抽象查重方法
|
|
|
|
|
│ │ ├── PrimaryMathProblem.java # 小学数学题目生成
|
|
|
|
|
│ │ │ ├── PrimaryMathProblem() # 构造函数:生成2-5个数字的小学题目
|
|
|
|
|
│ │ │ └── examine(String teacherName) # 查重:检查教师文件夹中是否已有相同题目
|
|
|
|
|
│ │ ├── JuniorMathProblem.java # 初中数学题目生成
|
|
|
|
|
│ │ │ ├── JuniorMathProblem() # 构造函数:生成含平方、开方的初中题目
|
|
|
|
|
│ │ │ ├── opBack[] # 后缀运算符(平方、括号)
|
|
|
|
|
│ │ │ ├── opFront[] # 前缀运算符(开方、括号)
|
|
|
|
|
│ │ │ └── examine(String teacherName) # 查重方法
|
|
|
|
|
│ │ └── SeniorMathProblem.java # 高中数学题目生成
|
|
|
|
|
│ │ ├── SeniorMathProblem() # 构造函数:生成含三角函数的高中题目
|
|
|
|
|
│ │ ├── opBack[] # 后缀运算符(平方、括号)
|
|
|
|
|
│ │ ├── opFront[] # 前缀运算符(三角函数)
|
|
|
|
|
│ │ └── examine(String teacherName) # 查重方法
|
|
|
|
|
│ └── teacher/ # 教师管理模块
|
|
|
|
|
│ ├── Teacher.java # 抽象教师类(定义教师基本属性和行为)
|
|
|
|
|
│ │ ├── rank (枚举) # 教师等级:PRIMARY, JUNIOR, SENIOR
|
|
|
|
|
│ │ ├── mode # 当前出题模式
|
|
|
|
|
│ │ ├── userName # 教师用户名
|
|
|
|
|
│ │ ├── initMode() # 抽象方法:初始化出题模式提示
|
|
|
|
|
│ │ └── generatePaper(int number) # 抽象方法:生成试卷
|
|
|
|
|
│ ├── PrimaryTeacher.java # 小学教师类
|
|
|
|
|
│ │ ├── PrimaryTeacher(String name) # 构造函数
|
|
|
|
|
│ │ ├── initMode() # 输出小学出题提示信息
|
|
|
|
|
│ │ └── generatePaper(int number) # 创建PrimaryPaper对象生成试卷
|
|
|
|
|
│ ├── JuniorTeacher.java # 初中教师类
|
|
|
|
|
│ │ ├── JuniorTeacher(String name) # 构造函数
|
|
|
|
|
│ │ ├── initMode() # 输出初中出题提示信息
|
|
|
|
|
│ │ └── generatePaper(int number) # 创建JuniorPaper对象生成试卷
|
|
|
|
|
│ └── SeniorTeacher.java # 高中教师类
|
|
|
|
|
│ ├── SeniorTeacher(String name) # 构造函数
|
|
|
|
|
│ ├── initMode() # 输出高中出题提示信息
|
|
|
|
|
│ └── generatePaper(int number) # 创建SeniorPaper对象生成试卷
|
|
|
|
|
│
|
|
|
|
|
├── Main.java # 程序主入口类
|
|
|
|
|
│ ├── primary/junior/senior (静态List) # 内置账号密码列表(备用验证)
|
|
|
|
|
│ ├── log1(String bookName, String password) # 内置账号验证方法
|
|
|
|
|
│ ├── log(String bookName, String password) # 文件账号验证方法(优先读取文件)
|
|
|
|
|
│ ├── generate(Teacher teacher) # 交互式出题循环控制
|
|
|
|
|
│ └── main(String[] args) # 主方法:处理登录和用户交互
|
|
|
|
|
├── README.md # 项目说明文档
|
|
|
|
|
└── 其他配置文件... # IDE配置文件等
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 目录说明
|
|
|
|
|
|
|
|
|
|
- **doc/**: 存储教师生成的试卷文件和账号密码本
|
|
|
|
|
- **src/paper/**: 试卷生成相关类,负责创建和保存试卷
|
|
|
|
|
- **src/problem/**: 题目生成相关类,负责生成各类数学题目
|
|
|
|
|
- **src/teacher/**: 教师管理相关类,处理教师登录和权限
|
|
|
|
|
- **out/**: Java编译后的class文件输出目录
|
|
|
|
|
|
|
|
|
|
## 类说明
|
|
|
|
|
|
|
|
|
|
- **paper**: 存储教师生成的试卷文件和账号密码本
|
|
|
|
|
- **src/paper/**: 试卷生成相关类,负责创建和保存试卷
|
|
|
|
|
- **src/problem/**: 题目生成相关类,负责生成各类数学题目
|
|
|
|
|
- **src/teacher/**: 教师管理相关类,处理教师登录和权限
|
|
|
|
|
- **out/**: Java编译后的class文件输出目录
|
|
|
|
|
|
|
|
|
|
## 使用说明
|
|
|
|
|
|
|
|
|
|
### 登录系统
|
|
|
|
|
|
|
|
|
|
运行程序后,输入用户名和密码(格式:`用户名 密码`),系统会根据密码本验证身份并进入对应学段的出题模式。
|
|
|
|
|
|
|
|
|
|
### 生成题目
|
|
|
|
|
|
|
|
|
|
登录成功后,系统会提示输入题目数量(10-30之间,包括10和30),输入后即可生成试卷并保存至 `./doc/教师姓名/` 目录下。
|
|
|
|
|
|
|
|
|
|
### 切换学段
|
|
|
|
|
|
|
|
|
|
在出题模式下,可输入以下指令切换学段:
|
|
|
|
|
- `切换为小学出题`
|
|
|
|
|
- `切换为初中出题`
|
|
|
|
|
- `切换为高中出题`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 退出登录
|
|
|
|
|
|
|
|
|
|
输入 `-1` 可退出当前用户,返回登录界面。
|
|
|
|
|
|
|
|
|
|
## 题目类型示例
|
|
|
|
|
|
|
|
|
|
- **小学**:四则运算,如 `12+(34-56)÷7=`
|
|
|
|
|
- **初中**:含平方和开方,如 `√25+3²=`
|
|
|
|
|
- **高中**:含三角函数,如 `sin30+cos60=`
|
|
|
|
|
|
|
|
|
|
## 文件存储
|
|
|
|
|
|
|
|
|
|
- 生成的试卷以当前时间命名,格式为:`yyyy-MM-dd-HH-mm-ss.txt`
|
|
|
|
|
|
|
|
|
|
- 保存在对应用户的文件夹下,例如:`./doc/张老师/2025-09-26-14-30-15.txt`
|
|
|
|
|
|
|
|
|
|
- 若不存在该路径,程序将自动在运行目录中创建该路径的相关文件夹
|
|
|
|
|
|
|
|
|
|
## 运行环境
|
|
|
|
|
|
|
|
|
|
1. Java 8 或更高版本的IDE
|
|
|
|
|
2. PowerShell控制台环境(支持标准输入输出):<br>
|
|
|
|
|
- 方式1(不使用JAR包):在GenerateMath文件夹下进入终端,使用命令 <br> `[Console]::InputEncoding = [System.Text.Encoding]::UTF8 `<br>
|
|
|
|
|
`[Console]::OutputEncoding = [System.Text.Encoding]::UTF8`<br> `java -cp "out\production\GenerateMath" Main -Dfile.encoding=UTF-8`
|
|
|
|
|
- 方式2(使用JAR包):在存放JAR包的文件目录下打开终端,使用命令<br>`[Console]::InputEncoding = [System.Text.Encoding]::UTF8 `<br>
|
|
|
|
|
`[Console]::OutputEncoding = [System.Text.Encoding]::UTF8`<br> `java -jar GenerateMath.jar`
|
|
|
|
|
3. cmd模式下:将PowerShell环境下的前两条命令修改为`chcp 65001`
|
|
|
|
|
|
|
|
|
|
## 注意
|
|
|
|
|
1. 登陆时账号和密码之间只能间隔一个空格,且密码后不能携带任何空白字符
|
|
|
|
|
2. 任何命令语句都要严格按照所给字符串输入,其前后不能携带任何空白字符
|
|
|
|
|
3. 填写出题数量时数字前后不能携带任何空白字符
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 未来展望
|
|
|
|
|
|
|
|
|
|
未来可考虑添加以下功能:
|
|
|
|
|
- 图形用户界面
|
|
|
|
|
- 自定义题目模板
|
|
|
|
|
- 试卷导出为多种格式
|