# 项目完成总结

## 项目概述

本项目是一个**课堂随机点名系统**，采用**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 -m backend.main 

```
   `python backend/main.py`
   - 启动前端：`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` - 仅启动前端

## 特色功能

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文档


