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.
 
 
 
 
zyh fbdbbb9cd1
取消日志输出
3 months ago
.vscode 基本实现 3 months ago
build/Desktop_Qt_6_5_3_MinGW_64_bit-Debug 初版 3 months ago
debug 完善页面显示 3 months ago
doc 最终版 3 months ago
release 完善页面显示 3 months ago
src 最终版 3 months ago
.qmake.stash 初步实现带UI界面的系统 3 months ago
C++.gitignore 加了ignore文件 3 months ago
Makefile 基本实现 3 months ago
Makefile.Debug 完善页面显示 3 months ago
Makefile.Release 完善页面显示 3 months ago
README.md 最终版 3 months ago
examSystem.pro 取消日志输出 3 months ago
examSystem.pro.user 初版 3 months ago
examSystem.pro.user.d4e5c96 初版 3 months ago
examSystem_zh_CN.ts 基本实现 3 months ago
mainwindow.ui 基本实现 3 months ago
ui_mainwindow.h 基本实现 3 months ago
users.csv 最终版 3 months ago

README.md

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+

依赖库

# 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. 克隆项目

git clone <repository-url>
cd MathExamSystem

2. 创建构建目录

mkdir build
cd build

3. 配置项目

cmake ..

4. 编译项目

# Linux/macOS
make -j4

# Windows (Visual Studio)
cmake --build . --config Release

5. 运行程序

# 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 中的邮箱配置:

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

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