|
|
# 中小学数学卷子自动生成程序
|
|
|
|
|
|
## 项目概述
|
|
|
|
|
|
本项目是一个基于C++开发的中小学数学卷子自动生成程序,面向小学、初中和高中数学老师,能够根据不同学段的难度要求自动生成数学题目并保存为试卷文件。
|
|
|
|
|
|
## 功能特性
|
|
|
|
|
|
### 1. 用户登录系统
|
|
|
- 预设小学、初中、高中各3个教师账号
|
|
|
- 用户名密码验证机制
|
|
|
- 根据账户类型自动识别出题难度
|
|
|
|
|
|
### 2. 智能题目生成
|
|
|
- **小学题目**:2-3个操作数,数值范围1-50,支持加减乘除和括号运算
|
|
|
- **初中题目**:3-4个操作数,数值范围1-100,支持加减乘除和括号运算,并能计算平方和开根号
|
|
|
- **高中题目**:4-5个操作数,数值范围1-100,支持加减乘除和括号运算,并能计算平方和开根号,而且题目中至少有一个sin,cos或tan运算符
|
|
|
|
|
|
|
|
|
### 3. 题目管理
|
|
|
- 自动避免同一教师生成重复题目
|
|
|
- 按教师账号创建独立文件夹
|
|
|
- 以时间戳命名保存试卷文件(年-月-日-时-分-秒.txt)
|
|
|
|
|
|
### 4. 灵活的类型切换
|
|
|
- 登录后可切换不同学段出题类型
|
|
|
- 支持命令行快速切换
|
|
|
|
|
|
## 预设账号信息
|
|
|
|
|
|
| 学段 | 用户名 | 密码 |
|
|
|
|------|--------|------|
|
|
|
| 小学 | 张三1 | 123 |
|
|
|
| 小学 | 张三2 | 123 |
|
|
|
| 小学 | 张三3 | 123 |
|
|
|
| 初中 | 李四1 | 123 |
|
|
|
| 初中 | 李四2 | 123 |
|
|
|
| 初中 | 李四3 | 123 |
|
|
|
| 高中 | 王五1 | 123 |
|
|
|
| 高中 | 王五2 | 123 |
|
|
|
| 高中 | 王五3 | 123 |
|
|
|
|
|
|
## 编译和运行
|
|
|
|
|
|
### 编译要求
|
|
|
- C++17 或更高版本
|
|
|
- 支持 `<filesystem>` 库的编译器(如 GCC 8+ 或 Clang 7+)
|
|
|
|
|
|
### 编译方法
|
|
|
|
|
|
#### 使用 Makefile(推荐)
|
|
|
```bash
|
|
|
cd src
|
|
|
make
|
|
|
```
|
|
|
|
|
|
#### 手动编译
|
|
|
```bash
|
|
|
cd src
|
|
|
g++ -std=c++17 -Wall -Wextra -O2 -o math_exam_generator main.cc app.cc auth.cc exam.cc login.cc utils.cc
|
|
|
```
|
|
|
|
|
|
### 运行程序
|
|
|
```bash
|
|
|
cd src
|
|
|
# Windows
|
|
|
./math_exam_generator.exe
|
|
|
# Linux / macOS
|
|
|
./math_exam_generator
|
|
|
```
|
|
|
|
|
|
## 使用说明
|
|
|
|
|
|
### 1. 登录
|
|
|
启动程序后,输入用户名和密码,用空格隔开:
|
|
|
```
|
|
|
请输入用户名和密码(用空格隔开): 张三1 123
|
|
|
```
|
|
|
|
|
|
### 2. 生成试卷
|
|
|
登录成功后,输入要生成的题目数量(10-30题):
|
|
|
```
|
|
|
准备生成小学数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):20
|
|
|
```
|
|
|
|
|
|
### 3. 切换类型
|
|
|
在登录状态下,可以切换出题类型:
|
|
|
```
|
|
|
切换为初中
|
|
|
```
|
|
|
|
|
|
### 4. 退出登录
|
|
|
输入 -1 可退出当前用户,重新登录:
|
|
|
```
|
|
|
准备生成小学数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):-1
|
|
|
```
|
|
|
|
|
|
## 文件结构
|
|
|
|
|
|
```
|
|
|
项目根目录/
|
|
|
├── doc/ # 文档目录
|
|
|
│ ├── README.md # 详细说明
|
|
|
│ ├── README_root.md # 根目录说明
|
|
|
│ └── 个人项目使用大模型后人工修改代码一览表.docx # 人工修改记录
|
|
|
└── src/ # 源代码目录
|
|
|
├── Makefile # 编译配置
|
|
|
├── app.cc # 应用逻辑
|
|
|
├── auth.cc # 用户认证模块
|
|
|
├── exam.cc # 试卷生成模块
|
|
|
├── include/ # 头文件目录
|
|
|
│ ├── app.h
|
|
|
│ ├── auth.h
|
|
|
│ ├── exam.h
|
|
|
│ ├── login.h
|
|
|
│ └── utils.h
|
|
|
├── libgcc_s_seh-1.dll # MinGW 运行时库
|
|
|
├── libstdc++-6.dll # C++ 标准库
|
|
|
├── libwinpthread-1.dll # 线程库
|
|
|
├── login.cc # 登录逻辑
|
|
|
├── main.cc # 主程序入口
|
|
|
├── math_exam_generator.exe # 可执行文件(Windows)
|
|
|
├── paper/ # 试卷存储目录(运行时生成)
|
|
|
│ └── 张三1/ # 用户文件夹示例
|
|
|
└── utils.cc # 工具函数
|
|
|
|
|
|
```
|
|
|
*注:程序运行时,会在`src`目录下自动生成`paper`文件夹,用于存放用户生成的试卷。*
|
|
|
|
|
|
```
|
|
|
src/
|
|
|
└── paper/
|
|
|
└── [用户名]/ # 自动生成的用户文件夹
|
|
|
└── 年-月-日-时-分-秒.txt # 生成的试卷文件
|
|
|
```
|
|
|
|
|
|
## 试卷格式示例
|
|
|
|
|
|
```
|
|
|
1. 25 + 18 - 7 = ?
|
|
|
|
|
|
2. 42 - 15 + 23 = ?
|
|
|
|
|
|
3. 8 + 17 - 9 + 14 = ?
|
|
|
|
|
|
4. 36 * 4 - 20 = ?
|
|
|
|
|
|
5. 16^2 - 4 = ?
|
|
|
|
|
|
6. 2^3 - 1 = ?
|
|
|
|
|
|
7. sin(30°) = ?
|
|
|
|
|
|
8. cos(60°) = ?
|
|
|
|
|
|
9. tan(45°) +2= ?
|
|
|
```
|
|
|
|
|
|
## 技术特点
|
|
|
|
|
|
- **面向对象设计**:使用类封装功能模块
|
|
|
- **STL 容器**:使用 vector、map、set 等容器管理数据
|
|
|
- **文件系统操作**:使用 C++17 `<filesystem>` 进行文件管理
|
|
|
- **随机数生成**:使用现代 C++ 随机数生成器
|
|
|
- **显式输入校验**:对用户输入进行验证,避免使用异常进行控制流
|
|
|
- **统一命名与常量**:函数采用 UpperCamelCase,常量统一 `k` 前缀
|
|
|
- **头文件守卫**:统一为 `MEG_*_H_` 形式,保持一致性
|
|
|
|
|
|
## 开发环境
|
|
|
|
|
|
- 编程语言:C++17
|
|
|
- 编译器:GCC 8+ / Clang 7+ / MSVC 2019+
|
|
|
- 操作系统:Windows / Linux / macOS
|
|
|
|
|
|
## 版本控制
|
|
|
|
|
|
本项目使用Git进行版本控制:
|
|
|
- `main` 分支:稳定版本
|
|
|
- `develop` 分支:开发版本
|
|
|
|
|
|
## 作者
|
|
|
|
|
|
软件2301班 - 沈永佳
|
|
|
|
|
|
## 客户机部署步骤(详细)
|
|
|
|
|
|
本节说明如何在客户机(以 Windows 为主)部署并运行本程序。
|
|
|
|
|
|
### 一、系统要求
|
|
|
- 操作系统:Windows 10/11(64 位)
|
|
|
- 磁盘空间:至少 100 MB(用于保存试卷与历史)
|
|
|
- 运行权限:对安装目录具有读写权限(建议在用户目录或桌面下)
|
|
|
|
|
|
### 二、部署包内容
|
|
|
将以下文件放在同一目录(建议目录名如 `MathExamGenerator/`):
|
|
|
- `math_exam_generator.exe`(主程序)
|
|
|
- `libgcc_s_seh-1.dll`(运行时依赖)
|
|
|
- `libstdc++-6.dll`(运行时依赖)
|
|
|
- `libwinpthread-1.dll`(运行时依赖)
|
|
|
|
|
|
以上三个 DLL 为 MinGW/GCC 运行时依赖,必须与可执行文件位于同一目录。
|
|
|
|
|
|
### 三、Windows 客户机部署步骤
|
|
|
1. 在客户机上创建目录,例如:`C:\\Users\\<用户名>\\Desktop\\MathExamGenerator`。
|
|
|
2. 将部署包中的 1 个可执行文件与 3 个 DLL 一并复制到该目录。
|
|
|
3. 首次运行方式:
|
|
|
- 双击 `math_exam_generator.exe`,或
|
|
|
- 在 PowerShell 中进入目录并执行:`./math_exam_generator.exe`
|
|
|
4. 程序将打开控制台提示登录与生成试卷(见“运行与使用”)。
|
|
|
|
|
|
### 四、运行与使用
|
|
|
- 登录账号(预置示例,可用于验证部署是否成功):
|
|
|
- 小学:`张三1`、`张三2`、`张三3`(密码均为 `123`)
|
|
|
- 初中:`李四1`、`李四2`、`李四3`(密码均为 `123`)
|
|
|
- 高中:`王五1`、`王五2`、`王五3`(密码均为 `123`)
|
|
|
- 登录成功后,程序会提示:
|
|
|
- 输入生成题目数量(范围 `10`–`30`),如输入 `20`。
|
|
|
- 支持指令切换难度:输入 `切换为小学`、`切换为初中`、`切换为高中`。
|
|
|
- 输入 `-1` 退出当前登录用户并返回登录界面。
|
|
|
- 按 `Ctrl+C` 可中断当前交互并安全返回主流程。
|
|
|
|
|
|
### 五、试卷保存位置与历史
|
|
|
- 程序会在当前工作目录下自动创建:`paper/<用户名>/`。
|
|
|
- 每次生成的试卷文件命名格式:`YYYY-MM-DD-HH-MM-SS.txt`(时间戳)。
|
|
|
- 同目录下会维护 `/.history.txt`,用于避免重复题目。
|
|
|
|
|
|
### 六、升级与卸载
|
|
|
- 升级:
|
|
|
- 用新版本的 `math_exam_generator.exe` 直接替换旧文件(保持目录结构与 DLL 不变)。
|
|
|
- 建议保留 `paper/` 目录以延续历史记录。
|
|
|
- 卸载:
|
|
|
- 删除安装目录(例如 `MathExamGenerator/`)。
|
|
|
- 如不再需要历史与试卷,可一并删除 `paper/` 目录。
|
|
|
|
|
|
### 七、常见问题(FAQ)
|
|
|
- 运行时报错“缺少 DLL”或“找不到入口”:
|
|
|
- 请确认 `libgcc_s_seh-1.dll`、`libstdc++-6.dll`、`libwinpthread-1.dll` 与可执行文件在同一目录。
|
|
|
- 中文显示异常或乱码:
|
|
|
- 建议在 Windows Terminal/PowerShell 中运行,程序已内置中文本地化处理;如仍异常,请尝试切换终端字体或编码。
|
|
|
- 无法生成试卷或提示无权限:
|
|
|
- 确认安装目录对当前用户有写权限;避免使用受限制的系统目录(如 `C:\\Program Files`)。
|
|
|
- 题目数量提示不在范围:
|
|
|
- 请输入 `10`–`30` 的整数;否则程序会提示重新输入。
|
|
|
|
|
|
### 八、Linux / macOS 编译与部署(可选)
|
|
|
- 在具备 `g++` 的环境下编译:
|
|
|
```bash
|
|
|
cd src
|
|
|
make
|
|
|
# 或
|
|
|
g++ -std=c++17 -Wall -Wextra -O2 -o math_exam_generator main.cc app.cc auth.cc exam.cc login.cc utils.cc
|
|
|
```
|
|
|
- 将生成的可执行文件 `math_exam_generator` 放置到目标目录并运行:`./math_exam_generator`
|