Compare commits

...

13 Commits

@ -1 +1,9 @@
# Personal_Project # Personal_Project
- 1.src文件夹下包含.java文件以及编译后的.class文件
- 2.doc文件夹下包含本项目的说明文档包括项目结构核心功能使用流程面向对象设计API文档等
- 3.MANIFEST.MF为JAVA JAR清单文件Math.bat为Windows批处理文件目的为方便用户运行
- 4."个人使用大模型后人工修改代码表"作为附件,说明大模型代码更改部分
- 5.MathQuestionGenerator.jar作为可执行文件可通过下述命令执行
- 6.使用方法详见说明文档,此处简述两种:
- 1下载项目后在项目目录下双击Math.bat运行
- 2或在MathQuestionGenerator.jar所在目录下通过命令行命令java -jar MathQuestionGenerator.jar

@ -1,321 +1,321 @@
# 数学题目生成系统 - 项目说明 # 数学题目生成系统 - 项目说明
## 项目概述 ## 项目概述
本项目是一个基于Java的数学题目生成系统专门为不同学段小学、初中、高中的教师设计。系统能够根据教师类型自动生成相应难度的数学题目并支持题目查重、文件存储等功能。 本项目是一个基于Java的数学题目生成系统专门为不同学段小学、初中、高中的教师设计。系统能够根据教师类型自动生成相应难度的数学题目并支持题目查重、文件存储等功能。
## 项目结构 ## 项目结构
``` ```
Personal_Project/ Personal_Project/
├── src/ # 源代码目录 ├── src/ # 源代码目录
│ ├── Main.java # 程序入口类 │ ├── Main.java # 程序入口类
│ ├── SysFunc.java # 系统功能类(登录、操作界面) │ ├── SysFunc.java # 系统功能类(登录、操作界面)
│ ├── Teacher.java # 教师抽象基类 │ ├── Teacher.java # 教师抽象基类
│ ├── PrimaryTea.java # 小学教师类 │ ├── PrimaryTea.java # 小学教师类
│ ├── JuniorTea.java # 初中教师类 │ ├── JuniorTea.java # 初中教师类
│ └── SeniorTea.java # 高中教师类 │ └── SeniorTea.java # 高中教师类
├── doc/ # 文档目录 ├── doc/ # 文档目录
│ └── 项目说明.md # 项目说明文档 │ └── 项目说明.md # 项目说明文档
├── MANIFEST.MF # JAVA JAR清单文件 ├── MANIFEST.MF # JAVA JAR清单文件
├── 运行程序.bat # Windows批处理文件 ├── 运行程序.bat # Windows批处理文件
├── 张三1/ # 教师个人文件夹(自动生成) ├── 张三1/ # 教师个人文件夹(自动生成)
├── 张三2/ ├── 张三2/
├── 张三3/ ├── 张三3/
├── 李四1/ ├── 李四1/
├── 李四2/ ├── 李四2/
├── 李四3/ ├── 李四3/
├── 王五1/ ├── 王五1/
├── 王五2/ ├── 王五2/
└── 王五3/ └── 王五3/
``` ```
## 运行环境 ## 运行环境
- **语言**Java21.0.4 - **语言**Java21.0.4
- **Windows环境**Windows11 cmd或powershell终端管理员 (win10或以下版本可能无法识别SysFuc类中的ANSI编码而产生字符乱码) 注意在终端您需要设置编码chcp 936 - **Windows环境**Windows11 cmd或powershell终端管理员 (win10或以下版本可能无法识别SysFuc类中的ANSI编码而产生字符乱码) 注意在终端您需要设置编码chcp 936
- **Linux环境**ubuntu22.04.5 LTS; 注意终端运行时需要确认编码格式为UTF-8下述而后将Main.java中scanner参数"GBK"删去后重新编译并生成.jar文件以解决乱码问题 - **Linux环境**ubuntu22.04.5 LTS; 注意终端运行时需要确认编码格式为UTF-8下述而后将Main.java中scanner参数"GBK"删去后重新编译并生成.jar文件以解决乱码问题
- __编译命令如下(进入项目目录): - __编译命令如下(进入项目目录):
- __javac src/*.java - __javac src/*.java
- __jar cfm MathQuestionGenerator.jar(名称可换) MANIFEST.MF src/*.class - __jar cfm MathQuestionGenerator.jar(名称可换) MANIFEST.MF src/*.class
- __java -jar MathQuestionGenerator.jar - __java -jar MathQuestionGenerator.jar
- **编码**WINDOWS下标准输入scanner为GBK支持中文输入,文件保存为UTF-8 - **编码**WINDOWS下标准输入scanner为GBK支持中文输入,文件保存为UTF-8
-__您可以在终端通过输入命令chcp查看当前编码936为GBK65001为UTF-8 (一般是GBK这种情况不需要额外设置编码格式) -__您可以在终端通过输入命令chcp查看当前编码936为GBK65001为UTF-8 (一般是GBK这种情况不需要额外设置编码格式)
UBUNTU下标准输入scanner默认UTF-8文件保存为UTF-8 UBUNTU下标准输入scanner默认UTF-8文件保存为UTF-8
-__您可以通过echo $LANG查看当前编码并通过export LANG=en_US.UTF-8暂时设置编码格式为UTF-8 (一般是UTF-8只需要删去Main中scanner的"GBK"参数即可) -__您可以通过echo $LANG查看当前编码并通过export LANG=en_US.UTF-8暂时设置编码格式为UTF-8 (一般是UTF-8只需要删去Main中scanner的"GBK"参数即可)
- **依赖**纯Java标准库无需额外依赖 - **依赖**纯Java标准库无需额外依赖
## 运行方法 ## 运行方法
- **通用**-下载MathQuestionGenerator.jar(可自行更改名字) - **通用**-下载MathQuestionGenerator.jar(可自行更改名字)
-完成环境设置以及编码格式设置,见上述运行环境 -完成环境设置以及编码格式设置,见上述运行环境
-通过java -jar MathQuestionGenerator.jar运行 -通过java -jar MathQuestionGenerator.jar运行
- **批处理**Windows11环境下您可以打开项目目录双击Math.bat文件直接运行 - **批处理**Windows11环境下您可以打开项目目录双击Math.bat文件直接运行
-以这种方式运行,您可能会遇到切换不了中文输入的问题,建议您复制一段中文然后粘贴,删除后再输入中文 (小概率) -以这种方式运行,您可能会遇到切换不了中文输入的问题,建议您复制一段中文然后粘贴,删除后再输入中文 (小概率)
## 使用流程 ## 使用流程
1. **保存文件**:将项目保存至同一目录 1. **保存文件**:将项目保存至同一目录
2. **启动程序**:见上述"运行方法" 2. **启动程序**:见上述"运行方法"
3. **用户登录**:根据提示输入预置的用户名和密码(格式:用户名 密码) 3. **用户登录**:根据提示输入预置的用户名和密码(格式:用户名 密码)
4. **选择模式**:系统显示当前出题类型,可选择切换 4. **选择模式**:系统显示当前出题类型,可选择切换
5. **切换类型**:输入" 切换** "切换至对应出题类型 5. **切换类型**:输入" 切换** "切换至对应出题类型
6. **生成题目**输入题目数量10-30 6. **生成题目**输入题目数量10-30
7. **查看结果**:题目生成后显示保存路径 7. **查看结果**:题目生成后显示保存路径
8. **重复使用**:题目生成后可选择继续生成或切换难度 8. **重复使用**:题目生成后可选择继续生成或切换难度
9. **退出登录**:输入题目数量为-1则退出当前用户可重新登录 9. **退出登录**:输入题目数量为-1则退出当前用户可重新登录
10. **退出系统**:可选返回登陆或者退出系统 10. **退出系统**:可选返回登陆或者退出系统
## 核心功能 ## 核心功能
### 1. 用户管理 ### 1. 用户管理
- **预置用户**系统预置了9名教师用户3名小学、3名初中、3名高中 - **预置用户**系统预置了9名教师用户3名小学、3名初中、3名高中
- **登录验证**:支持用户名和密码验证登录 - **登录验证**:支持用户名和密码验证登录
- **个人文件夹**:每个教师登录后自动创建个人文件夹用于存储生成的题目 - **个人文件夹**:每个教师登录后自动创建个人文件夹用于存储生成的题目
### 2. 题目生成 ### 2. 题目生成
- **学段适配**:根据教师类型生成相应难度的数学题目 - **学段适配**:根据教师类型生成相应难度的数学题目
- **类型切换**:可以切换指定类型出题 - **类型切换**:可以切换指定类型出题
- **题目数量**支持一次性生成10-30道题目 - **题目数量**支持一次性生成10-30道题目
- **随机生成**:题目内容和结构随机生成,确保多样性 - **随机生成**:题目内容和结构随机生成,确保多样性
### 3. 题目类型 ### 3. 题目类型
- **小学题目**:包含加减乘除四则运算,支持括号 - **小学题目**:包含加减乘除四则运算,支持括号
- **初中题目**:在小学基础上增加平方(^2)和开方(√)运算 - **初中题目**:在小学基础上增加平方(^2)和开方(√)运算
- **高中题目**:在初中基础上增加三角函数(sin, cos, tan)运算 - **高中题目**:在初中基础上增加三角函数(sin, cos, tan)运算
### 4. 查重机制 ### 4. 查重机制
- **自动查重**:生成题目时会检查是否与个人历史题目重复 - **自动查重**:生成题目时会检查是否与个人历史题目重复
- **文件扫描**:扫描教师个人文件夹中的所有历史题目文件 - **文件扫描**:扫描教师个人文件夹中的所有历史题目文件
- **重复处理**:发现重复题目会自动重新生成 - **重复处理**:发现重复题目会自动重新生成
### 5. 文件管理 ### 5. 文件管理
- **自动存储**:生成的题目自动保存到教师个人文件夹 - **自动存储**:生成的题目自动保存到教师个人文件夹
- **时间戳命名**:文件名包含生成时间,便于管理 - **时间戳命名**:文件名包含生成时间,便于管理
- **格式规范**:题目按序号排列,格式统一 - **格式规范**:题目按序号排列,格式统一
## 技术特点 ## 技术特点
### 面向对象设计 ### 面向对象设计
- **继承体系**:使用抽象类`Teacher`作为基类,三个具体子类实现不同学段的题目生成 - **继承体系**:使用抽象类`Teacher`作为基类,三个具体子类实现不同学段的题目生成
- **统一方法**:由'Teacher'实现子类都具有的类似结构 - **统一方法**:由'Teacher'实现子类都具有的类似结构
- **多态应用**:通过抽象方法实现不同学段题目的差异化生成 - **多态应用**:通过抽象方法实现不同学段题目的差异化生成
- **封装性**:将用户信息、文件操作等功能封装在相应的类中 - **封装性**:将用户信息、文件操作等功能封装在相应的类中
### 算法设计 ### 算法设计
- **随机算法**使用Java Random类确保题目的随机性 - **随机算法**使用Java Random类确保题目的随机性
- **括号处理**:智能添加括号,保证表达式合理性 - **括号处理**:智能添加括号,保证表达式合理性
- **操作符分布**:合理分布不同难度的操作符 - **操作符分布**:合理分布不同难度的操作符
### 文件操作 ### 文件操作
- **NIO API**使用Java NIO进行高效的文件读写操作 - **NIO API**使用Java NIO进行高效的文件读写操作
- **异常处理**:完善的异常处理机制确保程序稳定性 - **异常处理**:完善的异常处理机制确保程序稳定性
- **路径管理**:自动创建和管理教师个人文件夹以及题目文档 - **路径管理**:自动创建和管理教师个人文件夹以及题目文档
## 预置用户信息 ## 预置用户信息
| 用户名 | 密码 | 类型 | 初始类型 | | 用户名 | 密码 | 类型 | 初始类型 |
|--------|------|------|----------| |--------|------|------|----------|
| 张三1 | 123 | 小学教师 | 小学 | | 张三1 | 123 | 小学教师 | 小学 |
| 张三2 | 123 | 小学教师 | 小学 | | 张三2 | 123 | 小学教师 | 小学 |
| 张三3 | 123 | 小学教师 | 小学 | | 张三3 | 123 | 小学教师 | 小学 |
| 李四1 | 123 | 初中教师 | 初中 | | 李四1 | 123 | 初中教师 | 初中 |
| 李四2 | 123 | 初中教师 | 初中 | | 李四2 | 123 | 初中教师 | 初中 |
| 李四3 | 123 | 初中教师 | 初中 | | 李四3 | 123 | 初中教师 | 初中 |
| 王五1 | 123 | 高中教师 | 高中 | | 王五1 | 123 | 高中教师 | 高中 |
| 王五2 | 123 | 高中教师 | 高中 | | 王五2 | 123 | 高中教师 | 高中 |
| 王五3 | 123 | 高中教师 | 高中 | | 王五3 | 123 | 高中教师 | 高中 |
## API文档 ## API文档
### Teacher 抽象基类 ### Teacher 抽象基类
#### 构造函数 #### 构造函数
```java ```java
public Teacher(String name, String password, String path) public Teacher(String name, String password, String path)
``` ```
- **参数** - **参数**
- `name`: 教师用户名 - `name`: 教师用户名
- `password`: 教师密码 - `password`: 教师密码
- `path`: 教师文件夹路径可为null自动创建 - `path`: 教师文件夹路径可为null后续自动创建)
#### 公共方法 #### 公共方法
```java ```java
public boolean checkDuplicate(String question) public boolean checkDuplicate(String question)
``` ```
- **功能**: 检查题目是否与历史题目重复 - **功能**: 检查题目是否与历史题目重复
- **参数**: `question` - 待检查的题目字符串 - **参数**: `question` - 待检查的题目字符串
- **返回**: `true` - 存在重复,`false` - 无重复 - **返回**: `true` - 存在重复,`false` - 无重复
```java ```java
public String generatePath() public String generatePath()
``` ```
- **功能**: 生成题目文件的相对存储路径 - **功能**: 生成题目文件的相对存储路径
- **返回**: 包含时间戳的文件路径 - **返回**: 包含时间戳的文件路径
```java ```java
public String generateEX(int num) public String generateEX(int num)
``` ```
- **功能**: 生成指定数量的题目并保存到文件 - **功能**: 生成指定数量的题目并保存到文件
- **参数**: `num` - 题目数量10-30 - **参数**: `num` - 题目数量10-30
- **返回**: 保存题目的文件路径 - **返回**: 保存题目的文件路径
#### 抽象方法 #### 抽象方法
```java ```java
protected abstract String generateSingleQuestion() protected abstract String generateSingleQuestion()
``` ```
- **功能**: 生成单个题目(由子类实现) - **功能**: 生成单个题目(由子类实现)
- **返回**: 题目字符串 - **返回**: 题目字符串
```java ```java
public abstract String getType() public abstract String getType()
``` ```
- **功能**: 返回教师类型 - **功能**: 返回教师类型
- **返回**: "小学"、"初中"或"高中" - **返回**: "小学"、"初中"或"高中"
### SysFunc 系统功能类 ### SysFunc 系统功能类
#### 静态字段 #### 静态字段
```java ```java
static final int LEAST_NUM = 10 // 最小题目数量 static final int LEAST_NUM = 10 // 最小题目数量
static final int MAX_NUM = 30 // 最大题目数量 static final int MAX_NUM = 30 // 最大题目数量
static ArrayList<Teacher> teachers // 用户列表 static ArrayList<Teacher> teachers // 用户列表
static Teacher teacher // 当前用户 static Teacher teacher // 当前用户
static HashMap<String, Integer> typeMap // 类型映射 static HashMap<String, Integer> typeMap // 类型映射
``` ```
#### 静态方法 #### 静态方法
```java ```java
public static void init() public static void init()
``` ```
- **功能**: 初始化系统,预加载用户数据 - **功能**: 初始化系统,预加载用户数据
```java ```java
public static Teacher login(Scanner scanner) public static Teacher login(Scanner scanner)
``` ```
- **功能**: 用户登录界面 - **功能**: 用户登录界面
- **参数**: `scanner` - 输入扫描器 - **参数**: `scanner` - 输入扫描器
- **返回**: 登录成功的教师对象 - **返回**: 登录成功的教师对象
```java ```java
public static void ShiftType(Scanner scanner) public static void ShiftType(Scanner scanner)
``` ```
- **功能**: 切换出题类型界面 - **功能**: 切换出题类型界面
- **参数**: `scanner` - 输入扫描器 - **参数**: `scanner` - 输入扫描器
```java ```java
public static void Operate(Scanner scanner) public static void Operate(Scanner scanner)
``` ```
- **功能**: 主操作界面,处理题目生成流程 - **功能**: 主操作界面,处理题目生成流程
- **参数**: `scanner` - 输入扫描器 - **参数**: `scanner` - 输入扫描器
### PrimaryTea 小学教师类 ### PrimaryTea 小学教师类
#### 构造函数 #### 构造函数
```java ```java
public PrimaryTea(String name, String password, String path) public PrimaryTea(String name, String password, String path)
``` ```
#### 特有方法 #### 特有方法
```java ```java
public void getRandom() public void getRandom()
``` ```
- **功能**: 生成随机操作数和括号位置 - **功能**: 生成随机操作数和括号位置
#### 重写方法 #### 重写方法
```java ```java
@Override @Override
protected String generateSingleQuestion() protected String generateSingleQuestion()
``` ```
- **功能**: 生成小学难度数学题目(四则运算) - **功能**: 生成小学难度数学题目(四则运算)
```java ```java
@Override @Override
public String getType() public String getType()
``` ```
- **返回**: "小学" - **返回**: "小学"
### JuniorTea 初中教师类 ### JuniorTea 初中教师类
#### 构造函数 #### 构造函数
```java ```java
public JuniorTea(String name, String password, String path) public JuniorTea(String name, String password, String path)
``` ```
#### 特有方法 #### 特有方法
```java ```java
public void getRandom() public void getRandom()
``` ```
- **功能**: 生成随机操作数、特殊运算符和括号位置 - **功能**: 生成随机操作数、特殊运算符和括号位置
#### 重写方法 #### 重写方法
```java ```java
@Override @Override
protected String generateSingleQuestion() protected String generateSingleQuestion()
``` ```
- **功能**: 生成初中难度数学题目(四则运算 + 平方/开方) - **功能**: 生成初中难度数学题目(四则运算 + 平方/开方)
```java ```java
@Override @Override
public String getType() public String getType()
``` ```
- **返回**: "初中" - **返回**: "初中"
### SeniorTea 高中教师类 ### SeniorTea 高中教师类
#### 构造函数 #### 构造函数
```java ```java
public SeniorTea(String name, String password, String path) public SeniorTea(String name, String password, String path)
``` ```
#### 特有方法 #### 特有方法
```java ```java
public void getRandom() public void getRandom()
``` ```
- **功能**: 生成随机操作数、三角函数和括号位置 - **功能**: 生成随机操作数、三角函数和括号位置
#### 重写方法 #### 重写方法
```java ```java
@Override @Override
protected String generateSingleQuestion() protected String generateSingleQuestion()
``` ```
- **功能**: 生成高中难度数学题目(四则运算 + 三角函数) - **功能**: 生成高中难度数学题目(四则运算 + 三角函数)
```java ```java
@Override @Override
public String getType() public String getType()
``` ```
- **返回**: "高中" - **返回**: "高中"
### Main 程序入口类 ### Main 程序入口类
#### 主方法 #### 主方法
```java ```java
public static void main(String[] args) public static void main(String[] args)
``` ```
- **功能**: 程序入口点,启动数学题目生成系统 - **功能**: 程序入口点,启动数学题目生成系统
- **流程**: - **流程**:
1. 初始化系统 1. 初始化系统
2. 创建GBK编码的Scanner 2. 创建GBK编码的Scanner
3. 进入主循环(登录 → 操作 → 退出选择) 3. 进入主循环(登录 → 操作 → 退出选择)
## 扩展性 ## 扩展性
系统具有良好的扩展性,可以通过以下方式增强功能: 系统具有良好的扩展性,可以通过以下方式增强功能:
- 添加用户注册功能 - 添加用户注册功能
- 添加新的学段类型 - 添加新的学段类型
- 增加新的数学运算类型 - 增加新的数学运算类型
- 支持自定义题目难度 - 支持自定义题目难度
- 添加题目答案计算功能 - 添加题目答案计算功能
- 支持批量导入导出 - 支持批量导入导出
## 项目价值 ## 项目价值
本项目展示了面向对象编程的实际应用,体现了良好的软件工程实践,包括: 本项目展示了面向对象编程的实际应用,体现了良好的软件工程实践,包括:
- 清晰的代码结构 - 清晰的代码结构
- 符合Google编码规范的设计编写 - 符合Google编码规范的设计编写
- 合理,扩展性良好的类设计 - 合理,扩展性良好的类设计
- 完善的异常处理 - 完善的异常处理
- 用户友好的交互界面 - 用户友好的交互界面
- 实用的业务功能 - 实用的业务功能
该系统可以实际应用于教育场景,帮助教师快速生成练习题,提高教学效率。 该系统可以实际应用于教育场景,帮助教师快速生成练习题,提高教学效率。

Loading…
Cancel
Save