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.
|
|
4 months ago | |
|---|---|---|
| .vscode | 4 months ago | |
| build | 4 months ago | |
| doc | 4 months ago | |
| src | 4 months ago | |
| .gitignore | 4 months ago | |
| README.md | 4 months ago | |
README.md
hqqiproject
数学考试系统 - 项目说明文档
项目概述
这是一个基于C++实现的智能数学题目生成系统,支持小学、初中、高中三个不同难度级别的题目自动生成。系统具有用户管理、题目查重、文件保存和日志记录等完整功能。
项目结构
核心模块
| 模块 | 文件 | 功能描述 |
|---|---|---|
| 主程序 | main.cc |
程序入口,系统配置和启动 |
| 系统核心 | exam_system.h/.cc |
系统主流程控制,用户会话管理 |
| 题目生成 | problem_generator.h/.cc |
不同难度题目生成器实现 |
| 文件管理 | file_manager.h/.cc |
用户目录和题目文件管理 |
| 查重服务 | duplicate_checker.h |
题目重复性检查 |
| 输入验证 | input_validator.h/.cc |
各类输入数据验证 |
| 日志系统 | logger.h/.cc |
分级日志记录 |
详细设计说明
1. 系统架构
graph TD
A[ExamSystem<br/>系统控制中心] --> B[ProblemGenerator<br/>题目生成器]
A --> C[FileManager<br/>文件管理器]
A --> D[DuplicateChecker<br/>查重服务]
B --> B1[小学生成器]
B --> B2[初中生成器]
B --> B3[高中生成器]
C --> C1[目录操作]
C --> C2[文件操作]
D --> D1[历史题目管理]
D --> D2[重复检查]
架构分层说明
| 层次 | 组件 | 职责 | 设计模式 |
|---|---|---|---|
| 用户交互层 | 用户界面 | 控制台I/O处理 | - |
| 核心控制层 | ExamSystem | 系统流程控制 | 状态模式 |
| 业务逻辑层 | ProblemGenerator等 | 核心业务处理 | 工厂模式、策略模式 |
| 数据访问层 | FileManager | 数据持久化 | - |
| 基础设施层 | Logger等 | 支撑服务 | 单例模式 |
| 数据存储层 | 文件系统 | 数据存储 | - |
2. 用户管理
预置用户账户:
- 小学组:张三1、张三2、张三3
- 初中组:李四1、李四2、李四3
- 高中组:王五1、王五2、王五3
- 密码:均为"123"
3. 题目生成器设计
3.1 小学题目生成器 (PrimarySchoolGenerator)
- 运算符:+、-、×、÷
- 特点:确保计算结果不为负数
- 操作数:2-5个
- 数值范围:1-100
示例题目:15 + 23 - 7 × 3
3.2 初中题目生成器 (MiddleSchoolGenerator)
- 新增运算符:平方(²)、开根号(√)
- 特点:至少包含一个特殊运算符
- 操作数:1-5个
示例题目:(5)² + √16 × 3
3.3 高中题目生成器 (HighSchoolGenerator)
- 新增运算符:sin、cos、tan
- 特点:包含三角函数计算
- 角度范围:0-360度
示例题目:sin(45°) + cos(90°) × 2
4. 核心算法实现
4.1 表达式求值算法
// 处理运算符优先级:先乘除,后加减
int EvaluateExpression(const std::string& expression) {
// 1. 分词处理
// 2. 第一遍:处理乘除法
// 3. 第二遍:处理加减法
// 4. 返回最终结果
}
4.2 题目查重机制
- 基于用户名的题目历史记录
- 实时检查新生成题目是否重复
- 支持历史题目加载
4.3 文件命名策略
// 格式:YYYY-MM-DD-HH-MM-SS.txt
std::string GenerateFilename() {
//1.获取当前时间
//2.生成格式字符串
//3.返回文件名
}
5. 系统配置参数
| 参数 | 值 | 说明 |
|---|---|---|
| 最小题目数量 | 10 | 单次生成最少题目数 |
| 最大题目数量 | 30 | 单次生成最多题目数 |
| 操作数最小值 | 1 | 题目中数字的最小值 |
| 操作数最大值 | 100 | 题目中数字的最大值 |
| 最大操作数个数 | 5 | 单个题目最多包含的数字个数 |
6. 使用流程
-
启动系统
./exam_system -
用户登录
请输入用户名和密码(用空格隔开): 张三1 123 -
题目生成
当前选择为小学出题 准备生成小学数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录): 15 -
类型切换
切换为初中 准备生成初中数学题目,请输入生成题目数量... -
退出登录
准备生成小学数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录): -1
7. 文件存储结构
项目根目录/
├── 张三1/
│ ├── 2025-01-15-10-30-45.txt
│ └── 2025-01-15-11-15-20.txt
├── 李四1/
│ └── 2025-01-15-09-45-10.txt
└── 王五1/
└── 2025-01-15-14-20-35.txt
8. 设计模式应用
8.1 工厂模式
std::unique_ptr<ProblemGenerator> factory =
ProblemGeneratorFactory::CreateGenerator("小学");
8.2 策略模式
不同难度的题目生成器实现统一的ProblemGenerator接口
8.3 单例模式
日志系统和文件管理器使用静态方法提供全局访问
9.系统要求
操作系统
- 仅支持 Windows 系统
- 不支持 Linux、macOS 等其他操作系统
编译器要求
- 支持 C++17 标准的编译器
- 推荐使用:
- Microsoft Visual Studio 2017 或更高版本
- MinGW-w64 (GCC 8.0 或更高版本)
- Clang with MSVC backend
10.编译和运行
先到src目录下
cd src
编译命令:
g++ -std=c++17 -Wall -Wextra -I. -Iexam_system -Ifile_manager -Ilogger -o exam_system main/main.cc exam_system/exam_system.cc exam_system/problem_generator.cc exam_system/duplicate_checker.cc exam_system/input_validator.cc file_manager/file_manager.cc logger/logger.cc
或者
cd ../build
--config Debug --target all -j 12 --
运行:
.\exam_system.exe