# eaxmSystem # 数学学习考试系统 ## 项目简介 一个基于C++和Qt框架开发的跨平台数学学习考试系统,支持小学、初中、高中三个学段的数学题目生成、在线答题、成绩统计等功能。系统采用前后端分离架构。 ## 功能特性 ### 🔐 用户管理 - 用户注册(邮箱验证码验证) - 用户登录/登出 - 密码修改 - 个人信息查看 ### 📚 题目生成 - **小学**:基础四则运算,确保结果非负 - **初中**:包含平方、开根号运算 - **高中**:包含三角函数运算 - 智能查重,避免重复题目 - 历史题目保存和加载 ### 🎯 考试功能 - 自定义题目数量(5-50题) - 实时答题进度显示 - 上一题/下一题导航 - 自动批改和成绩统计 - 错题回顾 ### 💾 数据管理 - 用户数据持久化存储 - 题目历史记录保存 - 自动备份和恢复 ## 技术栈 ### 前端 - **框架**:Qt 5/6 - **语言**:C++ - **UI组件**:QWidget、QStackedWidget、QPushButton等 ### 后端 - **核心架构**:模块化设计,工厂模式 - **数学计算**:表达式解析和求值 - **文件管理**:CSV格式用户数据,TXT格式题目存储 - **邮件服务**:libcurl + SMTP协议 ### 开发工具 - **编译器**:支持C++11的编译器(gcc/clang/MSVC) - **构建工具**:CMake - **版本控制**:Git ## 项目结构 ``` MathExamSystem/ ├── frontend/ # 前端界面 │ ├── base_widget.h/.cc # 基础窗口组件 │ ├── login_widget.h/.cc # 登录注册界面 │ ├── selection_widget.h/.cc # 难度选择界面 │ ├── question_widget.h/.cc # 答题界面 │ ├── result_widget.h/.cc # 成绩显示界面 │ ├── main_window.h/.cc # 主窗口管理 │ └── change_password_dialog.h/.cc # 修改密码对话框 ├── backend/ # 后端核心 │ ├── exam_system/ # 考试系统核心 │ │ ├── exam_system.h/.cc # 系统控制层 │ │ ├── problem_generator.h/.cc # 题目生成器 │ │ ├── duplicate_checker.h/.cc # 重复检查器 │ │ └── input_validator.h/.cc # 输入验证器 │ ├── file_manager/ # 文件管理 │ │ └── file_manager.h/.cc │ └── logger/ # 日志系统 │ └── logger.h/.cc ├── shared/ # 共享接口 │ └── backend_interface.h/.cc # 前后端通信接口 ├── main.cc # 程序入口 └── CMakeLists.txt # 构建配置 ``` ## 环境要求 ### 系统要求 - **Windows**: Windows 10/11, Visual Studio 2019+ - **Linux**: Ubuntu 18.04+, CentOS 7+ - **macOS**: macOS 10.14+ ### 依赖库 ```bash # Ubuntu/Debian sudo apt-get update sudo apt-get install build-essential cmake qt6-base-dev libcurl4-openssl-dev # CentOS/RHEL sudo yum groupinstall "Development Tools" sudo yum install cmake qt6-qtbase-devel libcurl-devel # macOS (Homebrew) brew install cmake qt6 curl ``` ## 编译和运行 ### 1. 克隆项目 ```bash git clone cd MathExamSystem ``` ### 2. 创建构建目录 ```bash mkdir build cd build ``` ### 3. 配置项目 ```bash cmake .. ``` ### 4. 编译项目 ```bash # Linux/macOS make -j4 # Windows (Visual Studio) cmake --build . --config Release ``` ### 5. 运行程序 ```bash # Linux/macOS ./MathExamSystem # Windows ./Release/MathExamSystem.exe ``` ## 使用指南 ### 首次使用 1. **启动程序**:运行编译后的可执行文件 2. **注册账号**: - 点击"注册新账号" - 输入邮箱地址,点击"发送验证码" - 检查邮箱获取验证码并填写 - 设置用户名和密码(6-10位,包含大小写字母和数字) - 点击"注册" 3. **登录系统**: - 输入用户名和密码 - 点击"登录" ### 开始学习 1. **选择难度**: - 小学:基础四则运算 - 初中:包含平方、开根号 - 高中:包含三角函数 2. **设置题目数量**:通过数字选择框设置(5-50题) 3. **开始测试**:点击"开始测试"进入答题界面 ### 答题流程 1. **阅读题目**:仔细阅读题目内容 2. **选择答案**:从A、B、C、D四个选项中选择 3. **导航题目**: - 使用"上一题"、"下一题"按钮切换 - 最后一题显示"提交试卷"按钮 4. **提交答案**:完成所有题目后提交 ### 查看结果 - 系统自动批改并显示得分 - 查看正确题目数量和总题目数 - 可选择"继续做题"或"退出" ## 配置说明 ### 邮件服务配置 如需使用邮箱验证功能,请编辑 `backend_interface.cc` 中的邮箱配置: ```cpp email_config_.smtp_server = "smtp.163.com"; email_config_.smtp_port = 587; email_config_.username = "your_email@163.com"; email_config_.password = "your_authorization_code"; ``` **注意**: - 使用163邮箱需要开启SMTP服务并获取授权码 - 授权码不是登录密码 - 其他邮箱服务商配置类似 ### 数据文件说明 - `users.csv`:用户数据文件(自动生成) - `用户名/` 目录:用户题目历史记录 - 日志输出到控制台 ## 常见问题 ### Q: 编译时找不到Qt库 A: 确保已安装Qt开发包,并设置正确的CMAKE_PREFIX_PATH ```bash cmake -DCMAKE_PREFIX_PATH=/path/to/qt .. ``` ### Q: 邮件发送失败 A: 1. 检查邮箱配置是否正确 2. 确认网络连接正常 3. 检查防火墙设置 ### Q: 题目生成失败 A: 1. 检查是否有写入权限 2. 确认磁盘空间充足 ### Q: 程序崩溃 A: 1. 检查依赖库版本兼容性 2. 查看控制台输出的错误信息 ## 开发指南 ### 添加新的题目类型 1. 在 `problem_generator.h` 中定义新的生成器类 2. 实现 `GenerateProblem()` 方法 3. 在工厂类中注册新的生成器 ### 扩展用户界面 1. 继承 `BaseWidget` 创建新的界面组件 2. 在 `main_window.h` 中声明新的界面 3. 在 `main_window.cc` 中管理界面切换 ## 类说明请看doc/ExamSystem.md