1.0_CSP-J/S 第二轮 仿真考试系统

📄 约 2,547 字 · ⏱ 大约 7 分钟

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 步)

  1. 教师端:双击 CSP监考端.exe → 首次启动自动生成示例考试配置(exam\exam.json)→ 在「考试设置」里改名单与题目 → 保存配置。
  2. 启动服务:进入「实时监考台」→ 点「启动服务」(左上角显示 本机IP:端口)→ 点「导出考生端连接包」,把该目录连 CSP考生端.exe 一起拷到每台考生机。
  3. 考生端:双击 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 加同网段地址的命令。

九、已知限制

  1. Ctrl+Alt+Del 无法被应用层拦截(操作系统保留);自由模式下也不限制切窗口,真实考场请配合人工巡视。
  2. 锁屏与焦点抢占属于"应用层仿真",不是内核级安全软件;如需硬隔离请配合还原卡 / 组策略。
  3. 题面使用 IE 内核(WebBrowser)渲染,兼容到 IE8;极端复杂的 HTML/CSS 可能显示不完整,建议使用 Markdown 子集。
  4. 首次运行监听端口时,Windows 防火墙可能弹窗,必须选择"允许";否则考生机连不上。
  5. 若考生账户对 D:\ 根目录无写权限(部分学校策略),请把答题根目录改为 D:\CSP\ 等可写目录。
  6. 一个考点建议只用一台监考端、一个端口;端口被占用时会自动向后顺延,请以界面显示为准。

十、版本

v1.0 · 2026-10 · 适用于 CSP-J/S 第二轮机试的课堂仿真与赛前演练

📰 每日速递 更多 →