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