|
|
|
|
@ -1,154 +0,0 @@
|
|
|
|
|
# 🎓 潘俊晖-符晋康结对项目
|
|
|
|
|
|
|
|
|
|
> 一个基于 **Python + PySide6** 的图形化应用,支持用户登录/注册、选择难度等级(小学 / 初中 / 高中),并自动生成随机数学题目进行答题与评分。
|
|
|
|
|
> 项目包含完整的用户管理系统(注册验证、密码加密、登录验证)、多级题库生成器与答题评测功能。
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 📁 项目结构
|
|
|
|
|
|
|
|
|
|
## 🚀 程序入口:`main.py`
|
|
|
|
|
|
|
|
|
|
```Python
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
appwin = AppWindow()
|
|
|
|
|
appwin.run()
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 主要职责
|
|
|
|
|
|
|
|
|
|
- 初始化 Qt 应用 (`QApplication`)
|
|
|
|
|
|
|
|
|
|
- 创建 `AppController` 控制器
|
|
|
|
|
|
|
|
|
|
- 初始化所有窗口(登录、注册、等级选择、答题、结果)
|
|
|
|
|
|
|
|
|
|
- 控制各个窗口的切换逻辑(如登录后进入题目选择界面)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 🧠 控制器层:`AppController`
|
|
|
|
|
|
|
|
|
|
负责协调用户管理与题库模块,是整个应用的业务中枢。
|
|
|
|
|
|
|
|
|
|
主要方法:
|
|
|
|
|
|
|
|
|
|
|方法|功能|
|
|
|
|
|
|---|---|
|
|
|
|
|
|`send_registration_code(email)`|发送邮箱验证码|
|
|
|
|
|
|`register_with_code(email, code, username, password)`|注册新用户|
|
|
|
|
|
|`login(identifier, password)`|用户登录(邮箱或用户名)|
|
|
|
|
|
|`change_password(old_pw, new_pw)`|修改密码|
|
|
|
|
|
|`start_quiz(level, n_questions)`|启动一个新测验|
|
|
|
|
|
|`get_current_question()`|获取当前题目|
|
|
|
|
|
|`submit_answer(index, selected_option)`|提交用户答案|
|
|
|
|
|
|`finish_quiz_and_score()`|计算并返回测验结果|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 👥 用户管理模块:`UserManager`
|
|
|
|
|
|
|
|
|
|
负责:
|
|
|
|
|
|
|
|
|
|
- 用户注册 / 登录 / 密码修改
|
|
|
|
|
|
|
|
|
|
- 邮箱验证码发送
|
|
|
|
|
|
|
|
|
|
- 安全的密码加密与验证
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 核心逻辑
|
|
|
|
|
|
|
|
|
|
#### 🔐 密码加密
|
|
|
|
|
|
|
|
|
|
使用 `PBKDF2-HMAC-SHA256` 算法进行多次迭代哈希:
|
|
|
|
|
|
|
|
|
|
`dk = hashlib.pbkdf2_hmac("sha256", password.encode(), salt, 120_000)`
|
|
|
|
|
|
|
|
|
|
#### ✉️ 注册验证码
|
|
|
|
|
|
|
|
|
|
! 在Windows上运行程序时,发送注册码似乎会变得很慢,请耐心等待。
|
|
|
|
|
|
|
|
|
|
- 生成 6 位随机验证码
|
|
|
|
|
|
|
|
|
|
- 使用 SMTP 发送邮件
|
|
|
|
|
|
|
|
|
|
- 有效期 5 分钟
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 📘 题库模块:`QuestionBank`
|
|
|
|
|
|
|
|
|
|
负责自动生成题目,支持小学、初中、高中三级难度。
|
|
|
|
|
|
|
|
|
|
### 🎯 主要功能
|
|
|
|
|
|
|
|
|
|
- 从三个不同难度的题目生成器中(`ElementaryGenerator`、`MiddleGenerator`、`HighGenerator`)创建题目
|
|
|
|
|
|
|
|
|
|
- 自动避免重复题目(通过 `existing_stems` 集合)
|
|
|
|
|
|
|
|
|
|
- 每道题包含随机生成的选项与正确答案索引
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 🖥️ 图形化界面模块:`views/`
|
|
|
|
|
|
|
|
|
|
### 主要窗口说明
|
|
|
|
|
|
|
|
|
|
|窗口类|说明|
|
|
|
|
|
|---|---|
|
|
|
|
|
|`LoginWindow`|登录界面,输入邮箱/用户名 + 密码|
|
|
|
|
|
|`RegisterWindow`|注册界面,填写邮箱、用户名、密码,获取验证码|
|
|
|
|
|
|`LevelSelectWindow`|选择题目难度(小学 / 初中 / 高中)|
|
|
|
|
|
|`QuizWindow`|答题界面,显示题目与选项,支持上一题/下一题|
|
|
|
|
|
|`ResultWindow`|显示测验成绩与正确率,支持重新测验|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 💡 项目运行
|
|
|
|
|
|
|
|
|
|
### ▶️ 运行程序
|
|
|
|
|
|
|
|
|
|
运行可执行文件 `main.py`
|
|
|
|
|
|
|
|
|
|
程序启动后将显示登录窗口:
|
|
|
|
|
|
|
|
|
|
1. 注册新用户(邮箱验证码验证)
|
|
|
|
|
|
|
|
|
|
2. 登录后选择难度
|
|
|
|
|
|
|
|
|
|
3. 自动生成题目答题
|
|
|
|
|
|
|
|
|
|
4. 提交并查看分数
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 🧭 项目设计亮点
|
|
|
|
|
|
|
|
|
|
- **MVC 架构清晰**:
|
|
|
|
|
`models` 负责数据,`controllers` 管逻辑,`views` 管界面。
|
|
|
|
|
|
|
|
|
|
- **可扩展性强**:
|
|
|
|
|
可轻松添加新的题型生成器(例如“大学”级别)。
|
|
|
|
|
|
|
|
|
|
- **安全可靠**:
|
|
|
|
|
使用 PBKDF2 密码哈希,防止明文存储。
|
|
|
|
|
|
|
|
|
|
- **用户体验好**:
|
|
|
|
|
多窗口图形界面流畅切换,支持注册验证与分数展示。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 📜 未来改进方向
|
|
|
|
|
|
|
|
|
|
- 支持错题本与历史成绩记录
|
|
|
|
|
|
|
|
|
|
- 增加“倒计时模式”
|
|
|
|
|
|
|
|
|
|
- 增加更多题型(如分数、小数、方程)
|
|
|
|
|
|
|
|
|
|
- 提供数据统计分析功能
|
|
|
|
|
|