|
|
# 项目完成总结
|
|
|
|
|
|
## 项目概述
|
|
|
|
|
|
本项目是一个**课堂随机点名系统**,采用**PyQt5前端 + FastAPI后端**的架构实现。系统支持随机点名和顺序点名两种模式,具有完整的积分管理、数据可视化和Excel导入导出功能。
|
|
|
|
|
|
## 已完成功能
|
|
|
|
|
|
### ✅ 基础功能
|
|
|
|
|
|
1. **学生管理**
|
|
|
- ✅ 从Excel文件导入学生名单(学号、姓名、专业)
|
|
|
- ✅ 保存到MySQL数据库
|
|
|
- ✅ 查看学生列表
|
|
|
- ✅ 删除学生功能
|
|
|
|
|
|
2. **点名功能**
|
|
|
- ✅ 随机点名(积分越高,被点概率越低)
|
|
|
- ✅ 按学号顺序点名
|
|
|
- ✅ 显示被点学生的姓名和学号
|
|
|
- ✅ 记录学生到达情况
|
|
|
- ✅ 记录回答问题情况
|
|
|
|
|
|
3. **积分系统**
|
|
|
- ✅ 初始积分为0
|
|
|
- ✅ 点到且到达:+1分
|
|
|
- ✅ 回答问题评分:
|
|
|
- 准确重复问题:+0.5分
|
|
|
- 不能重复问题:-1分
|
|
|
- 准确回答问题:+0.5-3分(可自定义)
|
|
|
- ✅ 总积分越高,被随机点到的概率越低(使用反比例函数实现)
|
|
|
|
|
|
4. **数据可视化**
|
|
|
- ✅ 积分排名柱形图
|
|
|
- ✅ 积分排名折线图
|
|
|
- ✅ 显示积分和点名次数的双Y轴图表
|
|
|
- ✅ 可切换图表类型
|
|
|
- ✅ 可调整显示数量
|
|
|
|
|
|
5. **数据导出**
|
|
|
- ✅ 导出积分详单(Excel格式)
|
|
|
- ✅ 包含学号、姓名、专业、随机点名次数、总积分
|
|
|
|
|
|
### ✅ 进阶功能
|
|
|
|
|
|
1. **点名转移权**
|
|
|
- ✅ 被点名两次后自动获得一次转移权
|
|
|
- ✅ 支持转移点名给其他同学
|
|
|
|
|
|
2. **随机事件系统**
|
|
|
- ✅ 双倍加分:积分翻倍
|
|
|
- ✅ 疯狂星期四:积分增加50%
|
|
|
- ✅ 幸运星:积分增加20%
|
|
|
- ✅ 30%概率触发特殊事件
|
|
|
|
|
|
## 技术实现
|
|
|
|
|
|
### 后端技术栈
|
|
|
- **FastAPI**: 现代、快速的Web框架,自动生成API文档
|
|
|
- **SQLAlchemy**: ORM框架,数据库操作
|
|
|
- **Pydantic**: 数据验证和序列化
|
|
|
- **Pandas + OpenPyXL**: Excel文件处理
|
|
|
- **PyMySQL**: MySQL数据库驱动
|
|
|
|
|
|
### 前端技术栈
|
|
|
- **PyQt5**: 跨平台GUI框架
|
|
|
- **Matplotlib**: 数据可视化
|
|
|
- **Requests**: HTTP客户端,与后端通信
|
|
|
|
|
|
### 核心算法
|
|
|
|
|
|
1. **加权随机算法**:
|
|
|
```python
|
|
|
权重 = 1 / (积分 + 1)
|
|
|
```
|
|
|
- 积分越低,权重越高
|
|
|
- 确保所有学生都有被点到的可能
|
|
|
|
|
|
2. **积分计算**:
|
|
|
```
|
|
|
总积分变化 = (到达分 + 重复问题分 + 回答问题分) × 事件倍数
|
|
|
```
|
|
|
|
|
|
## 项目结构
|
|
|
|
|
|
```
|
|
|
.
|
|
|
├── backend/ # FastAPI后端
|
|
|
│ ├── main.py # 主程序入口
|
|
|
│ ├── config.py # 配置文件
|
|
|
│ ├── models.py # 数据库模型
|
|
|
│ ├── routers/ # API路由
|
|
|
│ └── utils/ # 工具函数
|
|
|
├── frontend/ # PyQt5前端
|
|
|
│ ├── main.py # 主程序入口
|
|
|
│ ├── main_window.py # 主窗口
|
|
|
│ ├── widgets/ # 自定义组件
|
|
|
│ └── utils/ # 工具函数
|
|
|
├── data/ # 数据文件
|
|
|
├── docs/ # 文档
|
|
|
├── scripts/ # 脚本
|
|
|
└── requirements.txt # 依赖包
|
|
|
```
|
|
|
|
|
|
## 原型设计
|
|
|
|
|
|
- **工具选择**: 墨刀(Modao)
|
|
|
- **选择理由**: 免费、易用、支持交互式原型、中文支持好
|
|
|
- **设计内容**:
|
|
|
- 主界面布局(标签页设计)
|
|
|
- 各功能模块界面设计
|
|
|
- 交互流程设计
|
|
|
- **文档位置**: `docs/prototype.md`
|
|
|
|
|
|
## 使用说明
|
|
|
|
|
|
### 快速开始
|
|
|
|
|
|
1. **安装依赖**:
|
|
|
```bash
|
|
|
pip install -r requirements.txt
|
|
|
```
|
|
|
|
|
|
2. **配置数据库**:
|
|
|
- 编辑 `backend/config.py`
|
|
|
- 填入MySQL数据库连接信息
|
|
|
|
|
|
3. **启动应用**:
|
|
|
|
|
|
- 启动后端:
|
|
|
|
|
|
```bash
|
|
|
# 在./backend/config中配置数据库参数
|
|
|
export DB_PASSWORD=${数据库密码}
|
|
|
# 选择是否进行测试数据库开发
|
|
|
export DEV_MOD=TEST
|
|
|
|
|
|
```
|
|
|
|
|
|
- 启动前端:`python frontend/main.py`
|
|
|
|
|
|
|
|
|
```bash
|
|
|
python -m frontend.main
|
|
|
```
|
|
|
|
|
|
|
|
|
## 文件清单
|
|
|
|
|
|
### 核心代码文件
|
|
|
- ✅ `backend/main.py` - 后端主程序
|
|
|
- ✅ `backend/models.py` - 数据库模型
|
|
|
- ✅ `backend/routers/` - API路由(3个文件)
|
|
|
- ✅ `backend/utils/` - 工具函数(3个文件)
|
|
|
- ✅ `frontend/main.py` - 前端主程序
|
|
|
- ✅ `frontend/main_window.py` - 主窗口
|
|
|
- ✅ `frontend/widgets/` - 界面组件(4个文件)
|
|
|
- ✅ `frontend/utils/api_client.py` - API客户端
|
|
|
|
|
|
### 配置文件
|
|
|
- ✅ `requirements.txt` - Python依赖
|
|
|
- ✅ `backend/config.py` - 数据库配置
|
|
|
- ✅ `.gitignore` - Git忽略文件
|
|
|
|
|
|
### 文档文件
|
|
|
- ✅ `README.md` - 项目说明
|
|
|
- ✅ `启动说明.md` - 启动和使用说明
|
|
|
- ✅ `项目结构说明.md` - 项目结构详解
|
|
|
- ✅ `docs/prototype.md` - 原型设计说明
|
|
|
- ✅ `项目完成总结.md` - 本文件
|
|
|
|
|
|
### 脚本文件
|
|
|
- ✅ `scripts/create_sample_excel.py` - 创建示例Excel
|
|
|
- ✅ `start_backend.sh` - 仅启动后端
|
|
|
- ✅ `start_frontend.sh` - 仅启动前端
|
|
|
|
|
|
## 特色功能
|
|
|
|
|
|
1. **智能概率算法**:确保积分低的学生有更多被点机会,平衡课堂参与度
|
|
|
|
|
|
2. **随机事件系统**:增加点名的趣味性和随机性
|
|
|
|
|
|
3. **转移权机制**:被点名两次后可转移,增加互动性
|
|
|
|
|
|
4. **数据可视化**:直观展示积分排名和点名次数
|
|
|
|
|
|
5. **完整的Excel支持**:导入学生名单,导出积分详单
|
|
|
|
|
|
## 注意事项
|
|
|
|
|
|
1. **数据库配置**:
|
|
|
- 需要先创建MySQL数据库
|
|
|
- 配置信息在 `backend/config.py`
|
|
|
|
|
|
2. **端口占用**:
|
|
|
- 后端默认使用8000端口
|
|
|
- 如被占用,修改 `backend/config.py` 中的 `API_PORT`
|
|
|
|
|
|
4. **API文档**:
|
|
|
- 后端启动后访问 http://127.0.0.1:8000/docs 查看API文档
|
|
|
|
|
|
|