|
|
|
|
|
# 中小学数学卷子自动生成系统文档
|
|
|
|
|
|
## 注意事项(已经经过终端测试)
|
|
|
|
|
|
为了方便助教检查,将此注意事项放在最前面:
|
|
|
- 有关功能中的查重:
|
|
|
|
|
|
实现了双重查重机制:
|
|
|
|
|
|
内存级查重 - 当前会话中生成的题目查重
|
|
|
文件级查重 - 历史生成的所有题目查重
|
|
|
主要代码在 AbstractQuestionGenerator 类和FileServiceImpl中:
|
|
|
- 测试时的java-version; java version "23" 2024-09-17
|
|
|
Java(TM) SE Runtime Environment (build 23+37-2369)
|
|
|
Java HotSpot(TM) 64-Bit Server VM (build 23+37-2369, mixed mode, sharing)
|
|
|
- 使用可执行文件:在cmd中运行,如果是在登录时一直出现用户名密码不匹配,可输入chcp 65001(成功运行);
|
|
|
- 在powershell中运行,# 设置 .NET 控制台输入/输出编码为 UTF-8;
|
|
|
[Console]::InputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
|
- 运行指令 java -jar 可执行文件
|
|
|
- 生成的文件(存放的题目)会保存在可执行文件存放的文件夹中的exam_papers文件夹中(若没有会创建该文件夹);
|
|
|
- 由于需求文件中有些提示词的连接并不是很流畅,我是尽可能按照提示词来写的;且需求文档的描述并不是特别清晰,在此提出是为了表明某些情况并不是提示信息错误,而是为了合理可能稍作改动;
|
|
|
- 例如只有输入 切换成XX 但是XX并不是正确选项时才会给出“请输入小学、初中和高中三个选项中的一个”,而输入的文字信息没有关键词 切换为,或者输入的数字范围不对,则会给出其他的提示词,
|
|
|
|
|
|
|
|
|
## 项目概述
|
|
|
|
|
|
这是一个中小学数学卷子自动生成系统,支持小学、初中和高中三个难度级别的数学题目生成。系统具有用户认证、题目生成、文件保存和查重等功能。
|
|
|
|
|
|
## 系统架构
|
|
|
|
|
|
### 核心类结构
|
|
|
|
|
|
```
|
|
|
src/
|
|
|
├── Main.java # 程序入口和主控制逻辑
|
|
|
├── 业务接口层/
|
|
|
│ ├── IAuthService.java # 用户认证服务接口
|
|
|
│ ├── IFileService.java # 文件服务接口
|
|
|
│ ├── IQuestionFactory.java # 题目工厂接口
|
|
|
│ └── IQuestionService.java # 题目服务接口
|
|
|
├── 业务实现层/
|
|
|
│ ├── AuthServiceImpl.java # 认证服务实现
|
|
|
│ ├── FileServiceImpl.java # 文件服务实现
|
|
|
│ ├── QuestionServiceImpl.java # 题目服务实现
|
|
|
│ └── QuestionFactory.java # 题目工厂实现
|
|
|
├── 抽象基类/
|
|
|
│ └── AbstractQuestionGenerator.java # 题目生成器抽象基类
|
|
|
├── 实体类/
|
|
|
│ ├── User.java # 用户实体
|
|
|
│ └── Question.java # 题目实体
|
|
|
├── 工具类/
|
|
|
│ ├── DifficultyLevel.java # 难度等级枚举
|
|
|
│ └── Validator.java # 输入验证工具
|
|
|
└── 配置文件/
|
|
|
├── .gitignore
|
|
|
├── codeStyleConfig.xml
|
|
|
├── misc.xml
|
|
|
├── modules.xml
|
|
|
└── workspace.xml
|
|
|
```
|
|
|
|
|
|
## 核心功能模块说明
|
|
|
|
|
|
### 1. 用户认证模块 (`IAuthService`)
|
|
|
|
|
|
**功能**:管理用户登录认证
|
|
|
|
|
|
**实现类**:`AuthServiceImpl`
|
|
|
- 预置了三个难度等级的用户账户
|
|
|
- 小学:张三1/张三2/张三3 (密码:123)
|
|
|
- 初中:李四1/李四2/李四3 (密码:123)
|
|
|
- 高中:王五1/王五2/王五3 (密码:123)
|
|
|
|
|
|
### 2. 题目生成模块 (`IQuestionFactory`)
|
|
|
|
|
|
**核心类**:
|
|
|
- `AbstractQuestionGenerator`:题目生成器抽象基类
|
|
|
- `QuestionFactory`:具体题目生成实现
|
|
|
|
|
|
**题目生成逻辑**:
|
|
|
- **小学**:基础四则运算,支持括号
|
|
|
- **初中**:增加平方和开方运算
|
|
|
- **高中**:增加三角函数运算
|
|
|
|
|
|
### 3. 文件服务模块 (`IFileService`)
|
|
|
|
|
|
**实现类**:`FileServiceImpl`
|
|
|
- 按用户分目录保存题目文件
|
|
|
- 支持题目内容查重
|
|
|
- 文件路径:`./exam_papers/用户名/时间戳.txt`
|
|
|
|
|
|
### 4. 题目服务模块 (`IQuestionService`)
|
|
|
|
|
|
**实现类**:`QuestionServiceImpl`
|
|
|
- 协调题目生成和文件保存
|
|
|
- 提供完整的题目生成流程
|
|
|
|
|
|
## 使用指南
|
|
|
|
|
|
### 启动程序
|
|
|
```bash
|
|
|
在idea中运行Main即可,在终端运行可执行文件按照注意事项中提到的方法即可;
|
|
|
```
|
|
|
|
|
|
### 操作流程
|
|
|
1. **登录**:输入用户名和密码(用空格隔开)
|
|
|
2. **生成题目**:输入题目数量(10-30)
|
|
|
3. **切换难度**:输入"切换为小学/初中/高中"
|
|
|
4. **退出用户**:输入"-1"
|
|
|
|
|
|
### 示例会话
|
|
|
```
|
|
|
=== 中小学数学卷子自动生成程序 ===
|
|
|
请输入用户名和密码(用空格隔开): 张三1 123
|
|
|
当前选择为小学出题
|
|
|
准备生成小学数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录)
|
|
|
20
|
|
|
题目已生成并保存到: ./exam_papers/张三1/2024-01-01-10-30-45.txt
|
|
|
生成完成!可以继续生成题目或切换难度
|
|
|
切换为初中
|
|
|
准备生成初中数学题目,请输入生成题目数量
|
|
|
```
|
|
|
|
|
|
## 技术特点
|
|
|
|
|
|
### 1. 设计模式应用
|
|
|
- **工厂模式**:题目生成器工厂
|
|
|
- **策略模式**:不同难度级别的题目生成策略
|
|
|
- **依赖注入**:通过构造函数注入依赖
|
|
|
|
|
|
### 2. 查重机制
|
|
|
- 内存级查重(当前会话)
|
|
|
- 文件级查重(历史题目)
|
|
|
- 避免生成重复题目
|
|
|
|
|
|
### 3. 异常处理
|
|
|
- 文件操作异常处理
|
|
|
- 输入验证机制
|
|
|
- 备用题目生成策略
|
|
|
|
|
|
## 配置说明
|
|
|
|
|
|
### 项目配置
|
|
|
- **JDK版本**:22
|
|
|
- **代码风格**:Google Style
|
|
|
- **输出目录**:`./exam_papers/`
|
|
|
|
|
|
### 文件结构配置
|
|
|
```xml
|
|
|
<!-- misc.xml -->
|
|
|
<project version="4">
|
|
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_22" />
|
|
|
</project>
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|