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.

160 lines
5.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 中小学数学卷子自动生成系统文档
## 注意事项(已经经过终端测试)
为了方便助教检查,将此注意事项放在最前面:
- 有关功能中的查重:
实现了双重查重机制:
内存级查重 - 当前会话中生成的题目查重
文件级查重 - 历史生成的所有题目查重
主要代码在 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>
```
---