第 2 章
软件概述
本软件是一套面向中小学课堂的局域网答题与测验系统:教师机运行一个轻量服务(单文件 exe 双击即用),学生机用浏览器接入,即可在教室内完成"逐题对战式实时答题""限时整卷测验"…
本页目录
2.1 软件定位与开发目的
本软件是一套面向中小学课堂的局域网答题与测验系统:教师机运行一个轻量服务(单文件 exe 双击即用),学生机用浏览器接入,即可在教室内完成"逐题对战式实时答题"“限时整卷测验"“Excel/WPS 操作题与编程题作答”,并自动完成判分、统计与报告归档。
开发目的是解决课堂教学中三个具体问题:
- 互动效率:把"教师念题、学生举手"升级为全员同屏答题、实时出排行榜,让课堂即时反馈;
- 判分负担:客观题自动判分,Excel/WPS 操作题与编程题在浏览器端自动判分,教师不再逐份批改;
- 零部署门槛:不依赖外网与云服务,不需要服务器运维,教师机双击即用,学生机打开网页即可。
2.2 面向领域与适用对象
- 面向领域:K12 信息技术与各学科课堂互动、校内测验、随堂练习、机房操作题考核。
- 适用对象:中小学教师(主持人)、学生(答题者)、学校信息管理员(账号与版本维护)。
2.3 主要功能
| 序号 | 功能模块 | 功能简述 |
|---|---|---|
| 1 | 账号与登录 | 校内唯一学号登录、邮箱登录、首次登录资料确认、防爆破锁定、多设备会话 |
| 2 | 学校与房间 | 多学校(多租户)隔离、房间创建与切换、房间码进房 |
| 3 | 题库管理 | 单选/多选/判断/填空/材料大题/编程题/Excel-WPS 操作题;富文本与图片;分类、标签;三种可见范围;题库包导入导出 |
| 4 | 组卷 | 勾选题目组卷、逐题分值、考生卷/教师卷打印、试卷房间码 |
| 5 | 实时答题 | 题池抽题、顺序/随机/抢答三种次序、选项乱序、逐题限时、作答分布、实时排行榜、现场动态、自由答题(补答)、结算归档 |
| 6 | 整卷测验 | 发起限时测验、考试码进场、答题卡、断线续答、自动交卷、多卷模式(固定/分配/自选)、收卷与公布 |
| 7 | Excel/WPS 操作题 | 三件套出题、本地判分工具生成考点、学生下载作答后提交、前端引擎判分、按小题计分、批量打包下载 |
| 8 | 编程题 OJ | 测试用例管理、浏览器内运行判分(Pyodide)、用例明细、教师重判 |
| 9 | 统计报告 | 场次报告列表、单场概览、得分分布、答题人排行、逐题分析、导出 CSV、打印 |
| 10 | 学生个人中心 | 我的记录、逐题解析、错题本与错题重做 |
| 11 | 批量导入 | 账号(CSV/xlsx)与试题批量导入,预览/冲突/错误三类行处理、失败明细导出、初始密码清单 |
| 12 | 系统更新与运维 | 程序在线升级(下载-校验-替换-回退)、题库包更新、单实例保护、一键关闭服务、日志与备份 |
2.4 技术特点
- 零依赖部署:单文件 exe(PyInstaller onefile)+ SQLite 单库,双击即用,无需安装数据库、Office 或外网。
- 纯局域网自持:数据与判分全部在本机完成,学生机只需浏览器(推荐 Chromium 内核 ≥109)。
- 浏览器内判分:Excel/WPS 操作题与编程题均在前端引擎判分(ExcelJS/HyperFormula/JSZip、Pyodide),服务端只接收结果,不需要服务器装 Office/WPS,也不消耗服务器算力。
- 多租户 + 房间双级隔离:
school_id隔离学校数据,room_code隔离班级现场,多班级并行互不影响。 - 完整作答闭环:作答明细(
attempt_items)一人一题一行,支持逐题分布、名单下钻、补答与错题本回溯。 - 可回退的自动升级:清单强制 MD5 校验、原地替换 +
.old回退备份 + 失败自动回滚;题库更新进程内合并、无需重启。 - 性能防护设计:同步端点走线程池避免阻塞事件循环、重型前端引擎懒加载、页面不可见暂停轮询、WS 断线兜底。
- 安全基线:
scrypt密码哈希、HttpOnly 会话 Cookie、登录防爆破与 IP 限流、上传白名单与尺寸上限、日志敏感字段打码、反代来源 IP 可信配置。
2.5 软件著作权登记关键信息表
| 登记项目 | 内容 |
|---|---|
| 软件全称 | 局域网答题系统 |
| 软件简称 | 题王 QKing |
| 版本号 | v2026.09.24.4 |
| 软件分类 | 应用软件 — 教育/教学管理类(课堂互动与测评) |
| 开发方式 | 独立开发 |
| 权利取得方式 | 原始取得 |
| 开发完成日期 | 2026-09-24(持续迭代) |
| 首次发表日期 | 以对外发布记录为准(系统内页脚统一显示版本号与版权文案) |
| 开发硬件环境 | x86-64 个人计算机(≥4 核 / ≥8GB 内存 / 固态硬盘) |
| 运行硬件环境 | 教师机:双核 1.6GHz 以上、空闲内存 300–400MB、磁盘剩余 ≥100MB; 学生机:任意可运行现代浏览器的 PC/平板/手机 |
| 开发操作系统 | Windows 10 / 11(64 位);打包环境另用 Windows 7 SP1 + Python 3.8.10 |
| 开发工具 / 环境 | Python 3.8.10(Win7 打包)与 Python 3.12(Win10/11 打包)、PyInstaller 5.13.2 / <6.22.1、FastAPI + Uvicorn、SQLite3、原生 JavaScript、Jinja2 |
| 运行平台 | Windows 7 SP1 及以上(32/64 位)/ Windows 10 / 11;可运行于 Linux 容器与云主机(反向代理部署) |
| 支撑软件 | 无强制第三方商业软件;浏览器:Chrome/Edge ≥109、Firefox ESR 115(Win7 推荐);可选 WPS/Excel 用于编辑学生下载的表格模板 |
| 编程语言 | Python(后端与打包运维)、JavaScript(前端与判分引擎)、HTML5 / CSS3(界面)、SQL(SQLite) |
| 源程序量 | 自研代码 134 个文件 / 48,865 行(其中 Python 72 文件 / 27,591 行;JavaScript 45 文件 / 17,131 行;HTML 14 文件 / 2,812 行;CSS 3 文件 / 1,331 行),不含第三方库与静态资源 |
| 开发目的 | 为课堂教学提供零部署、可离线运行的实时答题与自动判分系统,提高课堂互动效率、降低教师批改负担 |
| 面向领域 | K12 课堂互动、校内测验、机房操作题与编程练习考核 |
| 主要功能 | 见 2.3 功能清单(12 个功能模块) |
| 技术特点 | 见 2.4(8 项) |
2.6 系统架构
软件采用单体分层架构:单进程 FastAPI 服务 + 浏览器端富交互前端 + SQLite 单文件数据库。
┌──────────────────────────── 学生端(浏览器) ────────────────────────────┐
│ index.js 实时答题/自由答题/答题卡 exam.js 整卷作答与交卷 │
│ oj.js 编程题编辑与浏览器内判分 excelgrade/web 表格判分引擎 │
└───────────────────────────────┬─────────────────────────────────────────┘
│ HTTP / WebSocket(局域网)
┌───────────────────────────────┴─────────────────────────────────────────┐
│ 表示层 templates/*.html + static/*.css │
├─────────────────────────────────────────────────────────────────────────┤
│ 控制层 main.py(页面路由、实时答题主持台与学生作答、静态挂载、中间件) │
│ core/accounts.py core/qbank.py core/records.py core/schools.py│
│ excelgrade/api.py exepack/svc.py exepack/updatecore.py │
├─────────────────────────────────────────────────────────────────────────┤
│ 业务层 core/sitedb.py(表结构与账号域) core/qbimport.py(题库导入) │
│ core/importkit.py(导入批次) core/ojjudge.py(服务端判题) │
│ core/dbcore.py(SQLite 访问层) core/richtext.py(富文本清洗)│
│ core/db_merge_core.py(库合并) excelgrade/*(表格判分引擎) │
├─────────────────────────────────────────────────────────────────────────┤
│ 数据层 SQLite(WAL):quiz.db(26 张表) uploads/(图片) │
│ excelstore/(表格题三件套与作答) data/backup/(自动备份) │
├─────────────────────────────────────────────────────────────────────────┤
│ 运维层 exepack/:build.py 打包 / prepare 资源 / seeddb 种子库 │
│ paths 路径与日志 / config 配置 / svc 服务控制 / updatecore 升级 │
└─────────────────────────────────────────────────────────────────────────┘
2.7 代码规模统计(2026-09-24 实测)
| 类型 | 文件数 | 总行数 | 非空行数 |
|---|---|---|---|
| Python(.py) | 72 | 27,591 | 24,517 |
| JavaScript(.js,自研) | 45 | 17,131 | 16,481 |
| HTML(.html,模板) | 14 | 2,812 | 2,685 |
| CSS(.css) | 3 | 1,331 | 1,273 |
| 合计(自研) | 134 | 48,865 | 44,956 |
按目录分布:
| 模块 | 文件数 | 行数 | 职责 |
|---|---|---|---|
main.py + 顶层脚本 |
3 | 5,030 | 应用入口、实时答题与场控全部接口、OJ 规范化、测试入口 |
core/ |
12 | 9,698 | 账号/学校/题库/记录/OJ/导入/合并等业务与数据访问 |
static/ |
23 | 14,032 | 前端主逻辑(学生端、教师后台、题库、OJ、样式) |
excelgrade/ |
42 | 7,518 | 表格操作题判分引擎与接口 |
exepack/ |
17 | 6,224 | 打包、路径、配置、日志、服务控制、在线升级 |
templates/ |
13 | 2,593 | Jinja2 页面模板 |
tools/ |
24 | 3,770 | 题库审查、批量导入、演示与运维脚本 |
第三方库(
static/vendor/:wangEditor、CodeMirror、Pyodide 运行体;excelgrade/web/lib/:ExcelJS、HyperFormula、JSZip、SheetJS)合计约 5.2MB / 13 个文件,不计入自研代码量。