1.0_CSP-J/S 第二轮 仿真考试系统
1.0_CSP-J/S 第二轮 仿真考试系统
CSP-J/S 第二轮 仿真考试系统
给参加 CSP-J/S 第二轮(信息学奥赛复赛) 的考生做的一套机房仿真环境:做题(真实答题界面 + 锁屏 + 题面 + 规范答题目录)与 收卷(局域网实时监考、自动收卷、哈希封存、缺交校验、打包)都按真实考试流程仿真。
- 目标系统:Windows 7 SP1 及以上(Win7 / Win8 / Win10 / Win11 / Server)
- 运行依赖:.NET Framework 4.5+(Win7 通常已自带 4.0,建议装一次 4.8;本机 Win10 自带 4.8)
- 交付形态:两个免安装单文件 exe,复制即用,无需装服务端/数据库
一、交付物
| 文件 | 给谁用 | 说明 |
|---|---|---|
dist\CSP监考端.exe |
教师 / 监考员 | 命题、开考、实时监考、强制收卷、校验与打包;内置「使用手册」页(深蓝屏检视图标) |
dist\CSP考生端.exe |
考生 | 登录、等待开考、答题、交卷(亮蓝试卷图标) |
同目录的
CSPExamServer.exe/CSPExamClient.exe是英文名副本(便于命令行与批处理调用),内容完全相同。
二、功能清单
监考端(教师)
- 使用手册页:完整操作手册内嵌在 exe 资源里,左侧「使用手册」直接阅读,支持另存 HTML / 打印(无需外部文件)
- 考试设置:考试名称/编号、时长(默认 210 分钟 = 3.5 小时)、答题根目录、口令、端口、代码编辑器命令、编译检查命令、到点自动开考
- 命题:题目英文名(= 目录名 = 文件名)、中文名、组别(J/S)、分值、时限、内存、Markdown 题面(含表格/代码块/图片/LaTeX 公式,自动内联渲染、离线可用)
- 导入题目:两种方式一次导入 4 题 —— ①「导入题目包…」选 zip(结构见手册 3.3.2);②「从文件夹导入…」直接指向
普及模拟赛 N这类现成题源目录,自动识别题面标题、data\<英文名>\*.in/.out、solution\std\*.cpp - 判卷打分:本机 Dev-C++/MinGW 的
g++一键自动检测(扫 PATH、常见安装目录、注册表),逐题编译 + 逐测试点比对,按通过比例出分;兼容freopen("题名.in")文件读写写法与标准输入两种写法;可导出成绩 CSV - J / S 双卷:名单分 J、S 两栏,题目按卷归属;J 组考生登录后只看到 J 卷题目,S 组只看到 S 卷题目,两卷共用同一倒计时、分别校验与收卷
- 考生名单:只需两列 —— 粘贴或 CSV/TXT 导入(每行
考号,姓名,如LN-00001,张三),J、S 各一栏 - 实时监考台:在线人数、逐人状态、组别、剩余时间、切屏次数、最后心跳、IP / 机器名
- 控制:启动服务、开始考试、延长/缩短 5 分钟、单个收卷、强制收卷、全场广播、导出考生机分发包
- 收卷与校验:提交清单(带组别)、CCF 命名规范逐题校验(按卷)、SHA-256 封存回执、缺交名单、全场清单 CSV、封存 ZIP、一键重新封存;判分列直接显示每人总分
考生端(学生)
- 登录:服务器地址/端口/口令/考号(可由
connection.txt或命令行预置) - 等待开考界面 → 开考自动进入答题界面
- 自由窗口(默认):普通窗口,学生可随时切到 Dev-C++ / VS Code 写代码;倒计时与交卷由服务器约束,切窗口不计违规
- 可选锁屏模式:教师端勾选「锁定考生屏幕」后,考生端全屏置顶并屏蔽
Alt+Tab/Win/Ctrl+Esc/Alt+F4/Ctrl+Shift+Esc/Alt+Space,同时统计切屏次数 - 左侧题目导航(每题显示是否已按规范写入)、右侧题面(IE 内核渲染,支持 Markdown 表格/代码块/图片)
- 一键打开答题文件夹 / 打开代码编辑器(监考端可配 Dev-C++、VS Code 等)/ 按规范创建目录 / 可选编译检查
- 顶部服务器权威倒计时(断线不掉时间)、
交卷按钮、交卷后封存回执 - 时间到自动收卷:服务端下发收卷指令,客户端自动上传源文件;失败会提示联系监考
- 全过程写本地日志:切屏、被拦截的快捷键、打开编辑器、交卷哈希
三、快速开始(3 步)
- 教师端:双击
CSP监考端.exe→ 首次启动自动生成示例考试配置(exam\exam.json)→ 在「考试设置」里改名单与题目 → 保存配置。 - 启动服务:进入「实时监考台」→ 点「启动服务」(左上角显示
本机IP:端口)→ 点「导出考生端连接包」,把该目录连CSP考生端.exe一起拷到每台考生机。 - 考生端:双击
CSP考生端.exe→ 确认服务器地址 → 输入考号 → 「进入考试」→ 等待 → 开考 → 做题 → 交卷(或到点自动收卷)。教师端「收卷与校验」可导出清单与封存包。
四、CCF 目录规范(本系统会自动校验)
<答题根目录>\<考号>\<题目英文名>\<题目英文名>.cpp
例如 D:\LN-00001\power\power.cpp。目录名与文件名的大小写必须与题目英文名完全一致。
校验结果分三级:
| 级别 | 含义 | 典型情形 |
|---|---|---|
| 合规 | 完全符合规范 | power\power.cpp |
| 警告 | 可提交但有瑕疵 | 子目录大小写不一致、文件名大小写不一致、扩展名不是.cpp、同目录混入 .exe |
| 错误 | 找不到可用源文件 | 未做题、文件放错层级、考号文件夹缺失 |
注意:Windows 文件系统大小写不敏感,因此本系统用枚举目录项逐字符比对来判定大小写是否规范,而不是简单的文件存在性判断。
五、源码结构
src/
shared/ 两端共用内核(无 WinForms 依赖的也都在这里)
Json.cs 极简 JSON 编解码(不依赖 System.Web.Extensions)
Wire.cs 长度前缀 + UTF-8 JSON 的 TCP 分帧
Model.cs ExamConfig / Prob / Contestant 与示例考试
PathRule.cs CCF 目录规范校验、一键建目录
Util.cs 日志、哈希、路径、本机 IP、时间格式化
ZipWriter.cs 仅存储的 ZIP 写入器(不依赖 System.IO.Compression)
MdToHtml.cs Markdown 子集 → HTML(图片内联为 data URI)
Ui.cs 配色、字体、圆角卡片/按钮/胶囊标签/日志控件、SafeBrowser
IeMode.cs 为 WebBrowser 开启较高文档模式(只写 HKCU)
srv/ 监考端(WinForms)
Program.cs / MainForm.cs / PanelSetup.cs / PanelMonitor.cs / PanelCollect.cs
ExamServer.cs TCP 监考服务、状态机、收卷与落盘
Store.cs 收卷封存、清单 CSV、校验报告、打包 ZIP
PaperEditorForm.cs 题面编辑器(Markdown + 实时预览)
cli/ 考生端(WinForms)
Program.cs / LoginForm.cs / ExamForm.cs
ExamClient.cs 连接、心跳、倒计时、上传试卷
HotkeyGuard.cs 低级键盘钩子
tests/ E2E 自动化测试与联调脚本(不参与发布)
dist/ 构建产物
docs/ 使用手册
build.ps1 构建脚本(系统自带 csc,无需 VS / .NET SDK)
package.ps1 打包脚本(生成发布目录与 zip)
六、界面与可用性
- 窗口按屏幕工作区自适应:1280×720 / 1366×768 等小屏启动即最大化,设置页整体可滚动,题目操作按钮固定在卡片标题下方、右上角常驻「保存配置」,任何分辨率都不会被挤出可视区。
- 两个 exe 使用不同图标(
src\assets\server.ico/client.ico,由tools\MakeIcons.cs代码绘制生成,含 16~256px 多尺寸)。 - 保存前会校验题目英文名(只允许字母/数字/下划线、不可重名、≤32 字符),有硬错误会拒绝保存并指出第几题。
七、构建与测试
# 构建(需要 .NET Framework 4.x 自带的 csc.exe,本机路径已在脚本内自动探测)
powershell -ExecutionPolicy Bypass -File .\build.ps1
# 端到端自测(JSON/题面渲染/规范校验/TCP 全流程/封存 ZIP,共 51 项断言)
powershell -ExecutionPolicy Bypass -File .\tests\run-tests.ps1
# 打包发布(生成 发布包 目录与 zip)
powershell -ExecutionPolicy Bypass -File .\package.ps1
技术选型说明:本机没有 Visual Studio / .NET SDK,因此全部代码按 C# 5 语法编写,
使用系统自带的 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe 直接编译为
/target:winexe 单文件(AnyCPU),从而在 Win7 SP1 + .NET 4.x 上免安装运行。
八、跨机器部署与排障
- 考生端:连接失败会自动弹出「连接诊断」(目标地址 / 本机 IP / DNS / TCP 结果 / 5 条排查建议 / 日志路径),登录页常驻「连接诊断」「打开日志」;日志在
%TEMP%\CspExam\考生端_<机器名>_日期.log。 - 监考端:「实时监考台 → 网络诊断」显示端口监听状态、全部 IPv4、建议填写的地址、Windows 防火墙状态与规则,并可一键放行防火墙(
netsh advfirewall,需管理员);启动服务后按钮变为 「服务已启动」,同时在考试目录自动生成connection.txt供拷到考生机。 - 日志:监考端
exam\日志\监考端_日期.log(含监听 0.0.0.0:端口、本机 IPv4、建议考生端填写地址)。 - 跨网段(考生机 192.168.2.x / 监考机 192.168.1.x)也支持:考生端可填多个候选地址(逗号分隔,逐个尝试),监考端启动时把本机所有 IPv4 写进
connection.txt;诊断会区分“能 ping 通但端口不通(防火墙/服务)”与“跨网段完全不通(没有路由)”,并直接给出netsh interface ipv4 add address加同网段地址的命令。
九、已知限制
Ctrl+Alt+Del无法被应用层拦截(操作系统保留);自由模式下也不限制切窗口,真实考场请配合人工巡视。- 锁屏与焦点抢占属于"应用层仿真",不是内核级安全软件;如需硬隔离请配合还原卡 / 组策略。
- 题面使用 IE 内核(
WebBrowser)渲染,兼容到 IE8;极端复杂的 HTML/CSS 可能显示不完整,建议使用 Markdown 子集。 - 首次运行监听端口时,Windows 防火墙可能弹窗,必须选择"允许";否则考生机连不上。
- 若考生账户对
D:\根目录无写权限(部分学校策略),请把答题根目录改为D:\CSP\等可写目录。 - 一个考点建议只用一台监考端、一个端口;端口被占用时会自动向后顺延,请以界面显示为准。
十、版本
v1.0 · 2026-10 · 适用于 CSP-J/S 第二轮机试的课堂仿真与赛前演练
jhp.studio