题王 QKing 局域网答题系统 · 软件说明书
第 2 章

软件概述

本软件是一套面向中小学课堂的局域网答题与测验系统:教师机运行一个轻量服务(单文件 exe 双击即用),学生机用浏览器接入,即可在教室内完成"逐题对战式实时答题""限时整卷测验"…

2.1 软件定位与开发目的

本软件是一套面向中小学课堂的局域网答题与测验系统:教师机运行一个轻量服务(单文件 exe 双击即用),学生机用浏览器接入,即可在教室内完成"逐题对战式实时答题"“限时整卷测验"“Excel/WPS 操作题与编程题作答”,并自动完成判分、统计与报告归档。

开发目的是解决课堂教学中三个具体问题:

  1. 互动效率:把"教师念题、学生举手"升级为全员同屏答题、实时出排行榜,让课堂即时反馈;
  2. 判分负担:客观题自动判分,Excel/WPS 操作题与编程题在浏览器端自动判分,教师不再逐份批改;
  3. 零部署门槛:不依赖外网与云服务,不需要服务器运维,教师机双击即用,学生机打开网页即可。

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 技术特点

  1. 零依赖部署:单文件 exe(PyInstaller onefile)+ SQLite 单库,双击即用,无需安装数据库、Office 或外网。
  2. 纯局域网自持:数据与判分全部在本机完成,学生机只需浏览器(推荐 Chromium 内核 ≥109)。
  3. 浏览器内判分:Excel/WPS 操作题与编程题均在前端引擎判分(ExcelJS/HyperFormula/JSZip、Pyodide),服务端只接收结果,不需要服务器装 Office/WPS,也不消耗服务器算力。
  4. 多租户 + 房间双级隔离:school_id 隔离学校数据,room_code 隔离班级现场,多班级并行互不影响。
  5. 完整作答闭环:作答明细(attempt_items)一人一题一行,支持逐题分布、名单下钻、补答与错题本回溯。
  6. 可回退的自动升级:清单强制 MD5 校验、原地替换 + .old 回退备份 + 失败自动回滚;题库更新进程内合并、无需重启。
  7. 性能防护设计:同步端点走线程池避免阻塞事件循环、重型前端引擎懒加载、页面不可见暂停轮询、WS 断线兜底。
  8. 安全基线: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 个文件,不计入自研代码量。