# 快捷键训练比赛系统
这是一个独立的小程序。学生账号直接使用原分组系统的 `selfgroup.db`;训练相关数据表也创建在同一个数据库里,但都带 `trainer_` 前缀,不会改动原来的分组表。
## 启动
在本仓库根目录执行:
```bash
python3 shortcut_trainer/app.py
```
- 学生端:
- 教师端:
程序默认用 IPv4/IPv6 双栈监听所有网卡。启动日志会尽量列出本机可访问地址;学生从局域网访问时,选择老师电脑的局域网 IPv4,例如 `http://192.168.1.20:8010/`。
训练页使用 6 种高区分度整屏背景色,并显示超大页码水印,老师从学生屏幕缩略图即可快速确认是否切到了指定页面。
## 共享数据库
程序默认直接使用项目根目录:
```text
selfgroup.db
```
它读取其中的 `students` 表,登录会话写入原来的 `sessions` 表;训练数据保存在这些新表:
```text
trainer_presence
trainer_rounds
trainer_scores
trainer_events
```
所以你在原分组系统教师后台修改学生密码后,学生立刻可以用新密码登录快捷键训练系统。
如果你把 `selfgroup.db` 拷贝到了 `shortcut_trainer/` 目录,这个拷贝文件不会再被使用。可以移走它,避免以后混淆。如需指定其它共享数据库,可这样启动:
```bash
SHARED_DB=/path/to/selfgroup.db python3 shortcut_trainer/app.py
```
## 学生账号
教师端「学生账号」面板可以搜索学生、重置密码、添加新账号,改动直接写入共享的 `selfgroup.db`。
程序启动时会自动补齐这些测试账号(若学号已存在则跳过):
| 学号 | 姓名 | 班级 | 密码 |
| --- | --- | --- | --- |
| test01 | 测试甲 | 测试 | test1234 |
| test02 | 测试乙 | 测试 | test1234 |
| test03 | 测试丙 | 测试 | test1234 |
| test04 | 测试丁 | 测试 | test1234 |
| test05 | 测试戊 | 测试 | test1234 |
程序启动时会自动读取学生名单库,优先使用:
1. `shortcut_trainer/selfgroup.db`(如果你把数据库拷贝到了这里)
2. 项目根目录的 `selfgroup.db`
教师端使用同一个 `settings` 表里的 `teacher_username` 和 `teacher_password`。如果原分组系统已修改过教师密码,快捷键教师端也使用修改后的密码。
## 课堂流程
1. 学生登录首页,允许 Chrome 弹出窗口。
2. 学生打开 4–6 个训练页;也可按 `Alt+P/Q/R/T/Y/U`。
3. 教师端用可视化表单发布指令:先选目标页面,再选“点击指定按钮”“多步快捷键”“右键菜单”“窗口操作”或“演示链接”,最后选具体目标;不需要手写 JSON。
4. 学生完成操作后,教师端实时显示前 10 名。
训练页按钮做成 Word 式功能面板:`Alt+K` 展开检测面板(`C` 燃料检查、`D` 系统诊断),`Alt+H` 展开推进面板(`R` 火箭准备、`T` 通讯开启),`Alt+B` 展开保障面板(`P` 备用电源、`L` 外部链接)。`L` 之后再按 `A` 打开百度,或按 `B` 打开 Bilibili。也可以继续用 `Alt+1` 到 `Alt+6` 或鼠标点击,判定相同。
## 可自动判定的操作
- 打开指定训练页;
- 点击指定页面按钮(支持按钮序号或名称:火箭准备、燃料检查、通讯开启、系统诊断、备用电源、外部链接);
- 页面自定义右键菜单 + `E/R/C`;
- 外部链接菜单:`Alt+B` 后按 `L`,再按 `A` 打开百度或 `B` 打开 Bilibili。
## 浏览器限制
Chrome/Windows 会优先处理 `Ctrl+T`、`Ctrl+W`、`Ctrl+N`、`Alt+F4`、`Win+D` 等系统级快捷键;普通网页通常无法可靠拦截这些按键,也无法检测学生手工输入网址或真实窗口菜单。这些内容适合演示和人工观察。训练系统用自定义组合键和模拟窗口完成可计分练习。