|
|
# ExamGenerator 项目
|
|
|
|
|
|
本项目是一个 **数学试题自动生成系统**,支持 **小学、初中、高中** 三个年级的数学题目。
|
|
|
系统采用 **抽象类 + 子类继承** 的设计模式,分别实现不同年级的出题逻辑,并支持用户登录、题目查重和自动保存功能。
|
|
|
|
|
|
---
|
|
|
|
|
|
## 📂 项目结构
|
|
|
|
|
|
```
|
|
|
ExamGenerator/
|
|
|
├── main.py # 主入口程序
|
|
|
├── exam_generator.py # 考试生成器核心逻辑(含查重)
|
|
|
├── account_manager.py # 用户账户管理模块
|
|
|
├── history_manager.py # 历史管理模块(负责保存/读取历史题目)
|
|
|
├── generators/ # 出题生成器目录
|
|
|
│ ├── base_generator.py # 抽象类:出题生成器基类
|
|
|
│ ├── primary_generator.py # 小学出题生成器
|
|
|
│ ├── junior_generator.py # 初中出题生成器
|
|
|
│ └── senior_generator.py # 高中出题生成器
|
|
|
└── exams/ # 保存生成的试卷目录
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 功能介绍
|
|
|
|
|
|
### 用户登录
|
|
|
|
|
|
* 支持小学、初中、高中账号登录
|
|
|
* 登录后自动进入对应出题模式
|
|
|
|
|
|
### 出题生成
|
|
|
|
|
|
* 小学:四则运算
|
|
|
* 初中:四则运算 + 平方/开方
|
|
|
* 高中:四则运算 + 三角函数
|
|
|
|
|
|
### 历史查重
|
|
|
|
|
|
* `HistoryManager` 只负责保存和读取历史题目
|
|
|
* **查重逻辑已集成在 `ExamGenerator._generate_and_save_questions`**,生成题目时会自动避免重复
|
|
|
|
|
|
### 题目保存
|
|
|
|
|
|
* 生成的题目自动保存为 `.txt` 文件
|
|
|
* 文件名格式:`YYYY-MM-DD-HH-MM-SS.txt`
|
|
|
|
|
|
---
|
|
|
|
|
|
## 使用方法
|
|
|
|
|
|
### 运行项目(开发环境)
|
|
|
|
|
|
```bash
|
|
|
cd ExamGenerator
|
|
|
python main.py
|
|
|
```
|
|
|
|
|
|
### 登录系统
|
|
|
|
|
|
* 输入用户名和密码(例如:`张三1 123`)
|
|
|
* 系统会识别年级,并提示你输入要生成的题目数量
|
|
|
|
|
|
### 生成题目
|
|
|
|
|
|
* 输入 `10-30` 之间的数字,生成对应数量的数学题
|
|
|
* 输入 `-1` 可退出当前用户
|
|
|
* 输入 `切换为 小学/初中/高中` 可切换出题难度
|
|
|
|
|
|
---
|
|
|
|
|
|
## 技术亮点
|
|
|
|
|
|
* **抽象类设计**:使用 `BaseQuestionGenerator` 定义统一接口,小学/初中/高中继承实现
|
|
|
* **模块化结构**:按功能拆分文件,便于维护和扩展
|
|
|
* **查重机制优化**:查重逻辑整合进 `ExamGenerator`,`HistoryManager` 仅负责保存/读取
|
|
|
* **可扩展性强**:后续可新增 “大学” 出题生成器,只需继承抽象类即可
|
|
|
|
|
|
---
|
|
|
|
|
|
## ⚠️ 注意事项
|
|
|
|
|
|
* 默认账号信息存放在 `exam_generator.py` 中
|
|
|
* 生成的题目文件会自动存放在 `exams/用户名/` 目录下
|
|
|
* Python 版本需 **>= 3.8**
|
|
|
|
|
|
---
|
|
|
|
|
|
## 发布与运行(Release 版本)
|
|
|
|
|
|
### Windows 平台
|
|
|
|
|
|
1. 打包:
|
|
|
|
|
|
```bash
|
|
|
pyinstaller --onefile main.py
|
|
|
```
|
|
|
|
|
|
生成的 `main.exe` 位于 `dist/` 目录。
|
|
|
|
|
|
2. 运行方式:
|
|
|
|
|
|
```bash
|
|
|
main.exe
|
|
|
```
|
|
|
|
|
|
### Linux 平台
|
|
|
|
|
|
1. 打包:
|
|
|
|
|
|
```bash
|
|
|
pyinstaller --onefile main.py
|
|
|
```
|
|
|
|
|
|
生成的可执行文件在 `dist/main`。
|
|
|
|
|
|
2. 运行方式:
|
|
|
|
|
|
```bash
|
|
|
./main
|
|
|
```
|
|
|
|
|
|
* 确保执行权限:`chmod +x main`
|
|
|
* 注意 Linux 路径分隔符为 `/`
|
|
|
|
|
|
---
|
|
|
|
|
|
## 参数设置
|
|
|
|
|
|
发布版本运行时,需要在交互过程中输入以下参数:
|
|
|
|
|
|
* **用户名**
|
|
|
|
|
|
* 例如:`张三1`
|
|
|
* 用于识别所属年级(小学/初中/高中)
|
|
|
|
|
|
* **密码**
|
|
|
|
|
|
* 默认均为 `123`(可在 `exam_generator.py` 中修改)
|
|
|
|
|
|
* **题目数量**
|
|
|
|
|
|
* 输入范围:`10 - 30`
|
|
|
* 系统会生成对应数量的题目
|
|
|
* 输入 `-1` 退出当前用户
|
|
|
|
|
|
* **切换难度**
|
|
|
|
|
|
* 输入 `切换为 小学` / `切换为 初中` / `切换为 高中`
|
|
|
* 可在运行中调整题目难度
|
|
|
|
|
|
---
|
|
|
|
|
|
## 开发环境 vs 发布环境
|
|
|
|
|
|
* **开发环境**:本地运行,需 Python >= 3.8
|
|
|
* **发布环境**:打包成可执行文件(Windows 为 `.exe`,Linux 为二进制文件),用户无需安装 Python
|
|
|
* **跨平台差异**:注意路径分隔符和执行权限的不同
|
|
|
|
|
|
---
|