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.

254 lines
8.6 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.

# 中小学数学卷子自动生成程序
## 项目概述
本项目是一个基于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/1164 位)
- 磁盘空间:至少 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`