前端代码更新,说明文档更新 #4

Merged
hnu202326010112 merged 1 commits from liumuxue_branch into develop 3 months ago

@ -1,2 +1,113 @@
# teamwork-project
## 项目简介
这是一个面向小学、初中和高中学生的数学学习软件采用图形化界面操作提供数学题目生成、在线考试、成绩记录等功能。项目基于C++和Qt框架开发实现了完整的用户注册、登录、考试和成绩管理流程。
## 项目特点
1.多学段支持:覆盖小学、初中、高中三个学段的数学题目
2.安全认证:支持用户注册、登录、密码修改功能
3.智能出题:根据学段自动生成相应难度的数学题目
4.实时评分:自动批改试卷并显示详细成绩
5.数据持久化:本地文件存储用户数据和考试记录
6.邮箱验证:支持真实邮箱验证码发送功能
## 功能模块
## 用户管理
1.用户注册:邮箱验证、密码强度校验
2.用户登录:安全的身份认证
3.密码修改:支持在线修改密码
## 考试系统
1.题目生成:根据学段生成不同难度的选择题
2.考试界面:清晰的题目展示和选项选择
3.进度跟踪:实时显示答题进度
4.成绩统计:自动计算得分和正确率
## 数据管理
1.用户数据:本地文件存储用户信息
2.考试记录:保存历史考试成绩
3.题目文件:导出生成的题目试卷
## 技术架构
## 前端界面
Qt Widgets跨平台的图形界面框架
响应式设计:自适应不同屏幕尺寸
美观UI现代化的界面风格设计
## 后端逻辑
C++11/14核心业务逻辑实现
面向对象设计:模块化的类结构
跨平台支持Windows/Linux/macOS兼容
## 核心类说明
## 前端类
MainWindow主窗口控制器
LoginWidget登录界面
RegisterWidget注册界面
MainMenuWidget主菜单界面
ExamWidget考试界面
ResultWidget成绩界面
## 后端类
User用户信息管理
UserManager用户认证和注册
QuestionGenerator题目生成器
FileSaver文件存储管理
## 项目结构
teamwork-project/
├── src/ # 源代码目录
│ ├── frontend/ # 前端代码目录
│ │ ├── mathlearningApp.pro # Qt项目配置文件
│ │ ├── main.cpp # 程序入口
│ │ ├── mainwindow.h/cpp # 主窗口控制器
│ │ ├── loginwidget.h/cpp # 登录界面
│ │ ├── registerwidget.h/cpp # 注册界面
│ │ ├── mainmenuwidget.h/cpp # 主菜单界面
│ │ ├── examwidget.h/cpp # 考试界面
│ │ └── resultwidget.h/cpp # 成绩界面
│ └── backend/ # 后端代码目录
│ ├── user.h/cpp # 用户类
│ ├── usermanage.h/cpp # 用户管理
│ ├── questiongenerator.h/cpp # 题目生成器
│ └── filesaver.h/cpp # 文件存储
└── doc/ # 文档目录
└── README.md # 项目说明
## 编译运行
双击.exe文件运行
## 环境要求
Qt 5.12 或更高版本
C++11 兼容编译器
CMake 3.10 或更高版本
## 使用说明
## 首次使用
运行程序,进入登录界面
点击"注册新账号"创建用户账户
输入邮箱获取验证码完成注册
设置符合要求的密码6-10位包含大小写字母和数字
## 参加考试
登录成功后进入主菜单
选择考试年级和题目数量5-30题
点击"开始考试"进入考试界面
逐题作答,可前后翻页检查
提交后查看成绩和正确率
## 架构设计说明
## 前后端分离
前端负责UI展示、用户交互、界面逻辑
后端:负责业务逻辑、数据处理、算法实现
通信方式:通过类接口和信号槽机制进行通信
## 设计模式
MVC模式清晰的数据-视图-控制器分离
观察者模式通过Qt信号槽实现组件间通信
单例模式:用户管理等核心服务
## 问题反馈
如在使用过程中遇到问题请联系开发团队或提交Issue。

@ -27,19 +27,19 @@ signals:
private slots:
void onNextClicked();
void onPreviousClicked(); // 新增:上一题
void onPreviousClicked(); // 上一题
void onSubmitClicked();
private:
void showQuestion(int index);
void generateOptions();
void updateButtonStates(); // 新增:更新按钮状态
void updateButtonStates(); // 更新按钮状态
QLabel *questionLabel;
QLabel *progressLabel;
QButtonGroup *optionGroup;
QRadioButton *optionButtons[4];
QPushButton *previousButton; // 新增:上一题按钮
QPushButton *previousButton; // 上一题按钮
QPushButton *nextButton;
QPushButton *submitButton;

@ -76,7 +76,7 @@ MainMenuWidget::MainMenuWidget(QWidget *parent) : QWidget(parent)
"}");
startButton->setFixedSize(150, 50);
// 退出登录按钮 - 修改为与开始考试按钮相同大小
// 退出登录按钮
logoutButton = new QPushButton("退出登录");
logoutButton->setStyleSheet("QPushButton {"
"background-color: #95a5a6;"

@ -17,15 +17,15 @@ class MainMenuWidget : public QWidget
public:
explicit MainMenuWidget(QWidget *parent = nullptr);
void setUserInfo(const std::wstring& username, const std::wstring& grade);
QString getSelectedGrade() const; // 新增方法
QString getSelectedGrade() const;
signals:
void startExam(int questionCount);
void logoutRequested(); // 新增信号:退出登录
void logoutRequested(); // 退出登录
private slots:
void onStartExamClicked();
void onLogoutClicked(); // 新增槽函数:处理退出登录
void onLogoutClicked(); // 处理退出登录
private:
QLabel *welcomeLabel;
@ -33,7 +33,7 @@ private:
QComboBox *gradeComboBox;
QSpinBox *questionCountSpinBox;
QPushButton *startButton;
QPushButton *logoutButton; // 新增:退出登录按钮
QPushButton *logoutButton; // 退出登录按钮
};
#endif

@ -27,7 +27,7 @@ private slots:
void showResult(int score, int total);
void onUserLoggedIn(User* user);
void onRegisterSuccess();
void onLogoutRequested(); // 新增:处理退出登录
void onLogoutRequested(); // 处理退出登录
private:
QStackedWidget *stackedWidget;

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget"/>
<widget class="QMenuBar" name="menubar"/>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
Loading…
Cancel
Save