Commit Graph
72 Commits
Author SHA1 Message Date
xuyueandClaude Opus 5.5 ab933d1896 学生窗体的密码框不再被浏览器自动填上平台的用户名和密码:设了 PasswordChar / UseSystemPasswordChar 的文本框改成普通文本框加 -webkit-text-security 遮成圆点,浏览器不把它当登录表单(不支持该属性的浏览器才退回密码框并标 new-password);文本框、下拉框、表格单元格编辑框都加 autocomplete="off",不弹以前输入过的内容。所有任务共用这个控件,项目 1 任务 1 的登录、添加用户窗体都覆盖到
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 12:57:28 +08:00
xuyueandClaude Opus 5.5 50dced4d37 串口下拉框去掉电脑自带的 COM1,只留实训台上的 COM2–COM5;展开时每个串口后面用灰字标出接的设备(ADAM-4017+、ADAM-4150、ZigBee 协调器、LED 屏),选中后的值还是 COM2 这样的串口名,和真机一致。项目 5 任务 3 跳过 COM1 的写法照书保留,任务说明补一句;使用说明、设计方案同步;按位置选串口的测试下标跟着改
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 20:41:18 +08:00
xuyueandClaude Opus 5.5 50946467f6 窗体显示和 WinForms 对齐:文本框、下拉框、列表框、日期选择默认白底黑字,不沿用父控件的颜色(项目 8 白字分组框里的文本框填了字看不见);下拉框的背景色能显示、展开的列表跟着下拉框的颜色和字体;分组框、面板禁用时里面的控件也禁用(变灰、不响应操作,Enabled 读出 false 并触发 EnabledChanged);禁用的控件设了颜色也画灰字;窗体、文本框等设透明背景色和 WinForms 一样报错,设计器里也不提供"透明";多行文本框按 ScrollBars 显示滚动条;标签的边框和 TextAlign、窗体的 ControlBox、复选框的不确定状态能显示;设计器里 Enabled = false 的控件和 VS 一样照常显示
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 16:41:46 +08:00
xuyueandClaude Opus 5.5 a2f03ee57f 实验页:编辑区和运行区之间的竖条上的小箭头换成竖排文字"收起运行区""展开运行区",竖条加宽到 22px
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 16:41:46 +08:00
xuyueandClaude Opus 5.5 e177753ad6 数据库页面:对象资源管理器加库和表的图标,表缩进挂在库下面(左边竖线),一眼分得清层级;标签页内容改成占标签栏下面剩下的高度,不再多出 39px 撑出整页滚动条;查询补全写了 FROM / JOIN 后只列用到的表的列。设计器画布窄时操作栏折行、不显示提示文字,不再撑出横向滚动条。使用说明的数据库截图同步
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 16:06:13 +08:00
xuyueandClaude Opus 5.5 f9a2739353 数据库页面的对象资源管理器简化成“库 → 表”两层:去掉“数据库”“表”“列”三层文件夹和 emoji;头部“+ 新建库”和刷新,每个库下面“+ 新建表”;点表名打开编辑前 200 行(已经开着就切过去),库和表右边的 ⋯ 和右键是同一个菜单(新建表 / 新建查询 / 删除数据库;编辑数据 / 查询前 1000 行 / 设计表结构 / 删除表),⋯ 打开的菜单出在按钮下面;鼠标停在表名上显示列。顶部去掉重复的“新建数据库”按钮;使用说明、数据库截图和设计方案同步
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 15:23:42 +08:00
xuyueandClaude Opus 5.5 b292d38ba7 查询窗口加自动补全:T-SQL 关键字、函数、数据类型(中文说明,只列服务器能执行的),当前数据库的表名和列名;FROM / JOIN 等后面敲空格弹出表名,"表名."或"别名."只列这张表的列,USE 后面列数据库;字符串和注释里不弹出
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 15:01:57 +08:00
xuyueandClaude Opus 5.5 d6e891cdb0 使用说明:截图点击后在页面上放大(按窗口大小,最多放大 2 倍),点任意处或按 Esc 关闭
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 14:53:54 +08:00
xuyueandClaude Opus 5.5 53005e69e4 使用说明配截图:学生部分 9 张(我的作业、实验页、任务面板、设计器、运行出错、实训台、自己检查、评分结果、数据库),老师部分 4 张(名单、布置作业、评阅、成绩);WebP 共约 350 KB,按需加载,点击看原图
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 12:01:38 +08:00
xuyueandClaude Opus 5.5 313acf2453 使用说明同步最近的改动:报错和运行出错显示在窗体下面、放大后可以停止、双击工具箱的放置规则、两盏照明灯、数据库页面默认用刚才的实验;常见问题加"只显示已停止"
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 11:49:31 +08:00
xuyueandClaude Opus 5.5 b7e7f77fb0 实训台:加 ADAM-4150 DO1 照明灯的卡片(项目 7 用);滑块松开后等服务器回传同样的值再换回,键盘方向键连按不再丢步
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 11:43:16 +08:00
xuyue b3d6e1f88f update
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
2026-10-27 11:39:26 +08:00
xuyueandClaude Opus 5.5 f6024dc113 试用前走查的修改:报错看得见、学生找得到作业、运行区和设计器的若干体验问题
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
- 运行区:编译错误、运行异常、控制台输出和保存的图片移到窗体下面,不再被实训台挤成 0 高;缩放和放大按钮移到桌面上方,不压窗体的关闭按钮;放大后也能停止程序;点停止后清掉窗体
- 运行异常:常见 .NET 异常配中文说明,显示出错的文件、行号和方法,点击跳到代码
- 运行中的下拉列表挂到页面最外层,能伸出窗体和分组框(小窗体也能选到 COM4、COM5)
- 学生登录后进"我的作业";任务面板从工具栏下面开始,不挡导航;记住上次做的实验,从数据库页面返回、恢复数据时默认用它
- 代码页和设计页左栏都占 3/5,文件标签放不下时换行;实验选择框加宽;关闭粘性滚动
- 设计器:双击生成的事件方法带缩进;双击工具箱放进选中控件所在的容器并错开位置;新控件比容器宽时按比例缩小;无边框窗体不画标题栏
- 中文界面:代码编辑器(查找替换等)、属性窗口的颜色选项
- SQL:DATEADD、DATEDIFF、DATEPART 的日期单位(day、hour)解析成 IdentifierLiteral 时报"不支持",补上
- 项目 8 的预置环境数据改成建库那天之前的 7 天;p6-t3 评分项改为"按日期查询环境数据"
- 没有 AI 建议时不显示"全部采纳 AI 建议"和相关说明;导出 CSV 只给纯数字的文字加制表符

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 08:49:42 +08:00
xuyueandClaude Opus 5.5 da623fa648 任务名重新设计:用学生要做的程序命名,10 个字以内,去掉实现采集…数据和设备型号;项目 8 用模块:步骤写法;p6-t3 改为按日期查询环境数据,与内容一致
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 23:32:19 +08:00
xuyueandClaude Opus 5.5 e4c53f5e55 名单改为用户名、密码两列;去掉姓名前的班级代号,学生用姓名登录;别班已有同名学生时报错,不再转班
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 21:49:50 +08:00
xuyueandClaude Opus 5.5 61a32e900d 实验下拉菜单按项目分组;路线图更新到已上线、待一个班试用
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 21:39:40 +08:00
xuyueandClaude Opus 5.5 4ce800c77f compose 传入 SIM_GRADE_CONCURRENCY,.env.example 补上说明
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 21:13:30 +08:00
xuyueandClaude Opus 5.5 de277d3e9d 用 bun fmt 格式化全部代码和文档
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
- bunfig.toml 的 [fmt]:不写分号、单引号、一行最长 160,和原来的写法一致
- .prettierignore:docs/教材摘要/ 是书上的摘录,不格式化
- 模板里一行写两条语句的事件处理(@keydown.delete、@dblclick)改成调用方法:去掉分号后拆成两行,Vue 编译不过

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 14:02:33 +08:00
xuyueandClaude Opus 5.5 d4b8bf9241 任务说明补齐 23 份;设计器支持窗体改名
- 其余 21 个实验的 task.md:控件名照示例代码,"在平台上怎么试"和评分步骤一致,列出书上的印刷错误和控件名不一致
- 窗体改名:属性窗口里选中窗体可以改名称,类名、构造函数、new X()、Program.cs 和两个文件名一起改;方法名和字符串不变
- 11 个主窗体不叫 Form1 的实验,任务说明提示先改窗体名再双击生成 Load 事件
- 测试:表头只认分隔行上面那一行,数据行里出现"名称"不再被当成表头

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:55:39 +08:00
xuyueandClaude Opus 5.5 90b739a2c7 任务说明:实验页"任务"面板、布置作业时可改写;先写项目 3 任务 2、项目 6 任务 2 两份
- 每个实验一份 task.md(任务目标、控件名表格、实现步骤、和书上不一样的地方、在平台上怎么试)
- 工具栏"评价项"改成"任务":上面是任务说明,下面是评价项和自己检查;不遮挡页面,第一次打开实验时自动打开
- 自己写的 Markdown 子集渲染,先转义全部 HTML(老师可以改写说明)
- 作业保存任务说明(新列 task),以前布置的作业用实验现在的说明
- 测试:任务说明表格里的控件名都在示例的 Designer.cs 里
- 修改作业时实验下拉框显示标题而不是编号

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 10:04:05 +08:00
xuyueandClaude Opus 5.5 3b9f635c35 使用说明页:学生和老师的操作步骤、上课前后注意事项、常见问题
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
/help 没登录也能看,老师登录后多出老师部分;登录页和各页顶栏在新标签页打开。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 09:46:00 +08:00
xuyueandClaude Opus 5.5 27fdc3615d 试用前排查:WebSocket 心跳与断线重连、登录失败按账号限制、旧浏览器提示
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
- 服务器 30 秒发一次 ping:Nginx Proxy Manager 默认 60 秒没数据就断开,窗体开着不操作程序会被结束
- 连接意外断开时提示、清掉失效的窗体、自动重连,连上后提示重新运行
- 登录失败:同一账号 10 次只锁这个账号,同一 IP 300 次,登录成功不再清零 IP 计数
- index.html:浏览器太旧时说明原因和解决办法,加载慢时提示稍等

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 09:05:05 +08:00
xuyueandClaude Opus 5.5 982b1297aa 试用前准备:全班模拟压测、评分并发 6→16、手动备份与恢复
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
- test/classroom.ts:45 个虚拟学生走一遍登录、运行、自测、提交,统计每个环节等多久
- 评分并发可配置(SIM_GRADE_CONCURRENCY,默认 16),提交队列同时评的份数跟着走;
  2 核实测项目 8 任务 3 全班自测从约 4 分钟降到约 1.5 分钟
- 检查的默认等待 2 秒→5 秒,机器忙时不再误判正确的程序
- 删除学生时删除他的数据库(编号会重新用给新学生)
- deploy/backup.sh、deploy/restore.sh:手动备份到宿主机 backups/,恢复前先备份

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 20:08:31 +08:00
xuyueandClaude Opus 5.5 e8058376dd 评阅页不显示项目资源类;编译、往返时间只给老师看
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
- 评阅页的代码标签不再列出平台生成的 Properties/Resources.Designer.cs(和实验页一致)
- 自由练习里编译、启动、往返时间只给老师显示,学生看不到这些开发用的数字

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 18:56:07 +08:00
xuyueandClaude Opus 5.5 c217eb5ca0 素材图片在高分辨率屏幕上清晰显示;项目资源对话框点整行勾选
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
- 素材库每张图另外渲染一份两倍尺寸(name.2x.png),build-gallery.sh 把图片编号(原尺寸 PNG 的
  SHA-1,和运行器给图片的编号相同)和两倍图写进 index.json
- 网页认出素材图片(按编号或素材网址),图片框用 srcset、背景用 image-set,系统缩放 150%、200%
  的屏幕上不再发虚;学生程序读到的仍是原尺寸图片,宽高、评分都不变
- 素材清单 index.json 每次向服务器确认(不再缓存一小时),部署新素材后立即生效
- 项目资源对话框:点整行就能勾选(原来只能点复选框,"试听"不会勾选);缩略图用灰色棋盘格底,
  透明背景上的白色图片(ico_title)也看得见

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 18:49:34 +08:00
xuyueandClaude Opus 5.5 f304fc1ffc 窄屏工具栏不换行;数据库页面提示更新
- 屏幕宽度不到 1600 时不显示编译、往返时间(给开发看的),平台名、保存状态、链接不换行,
  1366 宽的机房电脑上工具栏是一行
- 数据库页面的提示:运行要用数据库的实验时自动建库,"恢复实验初始数据"用来恢复成初始数据

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 18:44:04 +08:00
xuyueandClaude Opus 5.5 fe62d50881 设计大窗体:运行区可收起、设计器缩放;工具箱补图标
- 编辑区和运行区之间的竖条点一下收起运行区,代码和设计器占满宽度;点"运行"自动展开,浏览器记住选择
- 设计器缩放:适应宽度(默认,只缩小不放大)、100%、75%、50%;缩放时拖动、改大小、
  双击、拖入控件的坐标按比例换算(教材项目 8 的窗体有 1043×791)
- 工具箱给列表框、图片框、日期时间选择器、滑动条、数据表格、图表、媒体播放器补上图标

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 18:42:14 +08:00
xuyueandClaude Opus 5.5 f256b313f7 实验页"评价项"和自测:提交前自己检查,不计分
- 工具栏"评价项"打开侧栏,列出自动检查的功能项(作业显示布置时的规则和各项分值)
- "自己检查"在服务器上按评分规则运行学生现在的程序,逐项显示通过与否和原因;不计分、不留记录,
  自由练习和作业都能用;每人同时一次,结果保留到下一次,之后改过代码提示结果可能过时;
  和提交评分共用全站并发上限
- 实验的评价项接口学生也能用(老师布置作业的对话框改用它)
- 修正:运行区的窗体和"放大"按钮会盖住网页的抽屉和对话框

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 18:35:25 +08:00
xuyueandClaude Opus 5.5 aadb2c9e93 Bun 升级到 1.4.4(Docker 镜像和 CI)
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 18:27:17 +08:00
xuyueandClaude Opus 5.5 751c4c964d 修复 CI:评分操作控件前等它出现;README 更新待办
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
- 点击、输入、选择、选日期、点单元格前最多等 3 秒让控件出现:上一步刚打开的窗体
  (ShowDialog 前在 Load 里查数据库)在 CI 上来不及显示,p8-t5"按时间段查找"报找不到 dateTimePicker1
- README"尚未完成"去掉已完成的项目 8,列出试用和第 4 阶段的内容

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 18:24:41 +08:00
xuyueandClaude Opus 5.5 65a1b3a81e 项目 8 智慧校园管理平台:5 个任务的示例、自绘素材、WisdomCampus 数据库
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
- 示例 p8-t1…t5(代码逐个累加):主界面、校园环境界面、环境采集与分析(路灯手动 / 自动控制、
  LED 推送、自动推送火情、7 天温度图表)、校园安防(入侵提示、摄像机方向、拍照入库)、历史图片
  (按日期查询、左右切换),各有评分规则
- 按书补全参考工程里空着的"推送LED信息""自动控制",给"自动推送火情"绑定 CheckedChanged
  (书上第 23 步写成了 ch_autoLamp);任务 5 每次查询前清空 Keys
- 素材:项目 8 的 20 多张图片全部自绘,名字和尺寸与教材一致(project8.py 生成 SVG,
  build-gallery.sh 渲染成 PNG;源文件移到 svg/)
- 数据库 WisdomCampus 按教材的表结构建(EnvironmentData、SecurityData、Users),预置 7 天环境数据
- 测试:参考答案全部通过;没绑定"自动推送火情"、开灯换错背景图片时报出对应原因
- 文档:教材 8 个项目全部有示例,共 23 个

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 15:15:00 +08:00
xuyueandClaude Opus 5.5 b20db5721e 评分规则加可见、窗体、程序退出、素材图片、图表数据点检查
- visible:控件连同所在的容器都可见;window:某个窗体打开着 / 已关闭;exited:程序已退出
- image / background 可以写素材名(如 background: day_01),按图片内容的哈希核对是不是这张素材
- points:图表每个系列至少有几个数据点
- "点击"图片框时和浏览器一样先发鼠标按下、松开(教材项目 8 的方向键按下时转动摄像机)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 15:14:49 +08:00
xuyueandClaude Opus 5.5 10c50265b2 第一次运行实验时自动建好预置的数据库
- 运行时带上当前实验;实验有 database.sql 而学生还没有其中的库时,先建好这些库
  (已有的库不动,保留学生的数据);建库失败不影响运行
- 教材项目 8 要"附加"现成的 WisdomCampus 库,学生不用先去数据库页面恢复

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 15:14:49 +08:00
xuyueandClaude Opus 5.5 5ae07b851d 路径里的反斜杠在 Linux 上换成斜杠
- 教材写 AppDomain.CurrentDomain.BaseDirectory + "Camera\\",Linux 上反斜杠会成为文件名的一部分
- 编译时把传给 System.IO(File、Directory、Path、各种 Stream)和 Image / Bitmap 读写文件方法的
  路径参数包上 Sim.Host.WindowsPaths.Fix;只包语义上确实是这些方法里名字带 path / file / dir 的
  字符串参数,不换行,编辑器里看到的仍是原代码

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 15:14:49 +08:00
xuyueandClaude Opus 5.5 2cd0111967 图表(Chart):运行时、Chart.js 绘制、设计器的"系列和图例"
- System.Windows.Forms.DataVisualization.Charting:ChartAreas、Legends、Titles、Series
  (ChartType、Points.AddXY、图例文字等),DataSource + DataBind(DataTable / DataView / DataSet,
  按 XValueMember、YValueMembers 取列);数据变化时把各系列的点发给浏览器
- 浏览器用 Chart.js 画:SeriesChartType 对应折线、柱形、饼图等,WinForms 默认的 BrightPastel 配色,不要动画
- 设计器工具箱加"图表",和 VS 一样带 ChartArea1、Legend1、Series1;属性窗口"系列和图例"对话框
  编辑系列(名称、图表类型、图例、图例文字、X / Y 值字段)和图例,按 VS 的格式和顺序写回 Designer.cs,
  对话框不管的属性原样保留,教材项目 8 的图表读入再写出逐字节不变;删除图表时一起删掉局部变量;
  设计时用示例数据预览

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 15:14:49 +08:00
xuyueandClaude Opus 5.5 d60868d912 停靠布局、背景图片、无边框窗体;运行区按比例缩小、可放大
- Dock:和 WinForms 一样按 Controls 倒序依次停靠,扣掉 Panel 边框、GroupBox 标题占的地方;
  改大小、显示隐藏、加入移出控件时重新布局;SuspendLayout / ResumeLayout / PerformLayout
- 设计器里每次修改后按同样的规则排好停靠的控件(designer/layout.ts);属性窗口加"停靠"
- BackgroundImage + BackgroundImageLayout(平铺、居中、拉伸、缩放):窗体、面板、图片框,
  设计器里从项目资源选;无边框窗体没有标题栏,大小不含边框
- 背景色沿用父控件:没设背景色的标签、面板、分组框等画父控件的背景色(不是背景图片),
  和 WinForms 一样;分组框标题处边框断开、透出背景;文本框的 BackColor 生效
- 图片框可以放子控件,把鼠标按下、松开发给程序
- 运行区:窗体比运行区大时整体按比例缩小并显示比例;"放大"占满整个网页(窗体在左、实训台在右),Esc 还原
- Paint 事件:VS 双击面板生成的空 panel1_Paint 能编译(平台由浏览器绘制,不触发)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 15:14:34 +08:00
xuyueandClaude Opus 5.5 42e258ddcd 实验页新建、删除类
- "+ 新建类":输入类名,可以带文件夹(SQLHelpers/SQLBLL),文件夹成为命名空间的一段,
  模板和 VS 2012 的类模板一样;检查重名、非法名字
- 自己建的类可以删除(窗体、Program.cs、项目资源类不能用这个删)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 15:13:28 +08:00
xuyueandClaude Opus 5.5 13c3e4c3ec 数据库:参数化的日期字符串比较时也转换格式
- 教材项目 8 用参数传 "2024/1/23  23:59:59"(日期和时间之间两个空格)做 BETWEEN,
  比较时用 tsql_cmp 把形如日期的字符串转成标准格式;日期和时间之间允许多个空格

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 15:13:28 +08:00
xuyueandClaude Opus 5.5 19d6872d80 清理运行时的编译警告
- 媒体播放器内部的 Controls 类改名 PlayerControls,不再隐藏 Control.Controls
- DataGridView 的 CellEnter、RowEnter 不触发,标明不报"从不使用"

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 15:13:28 +08:00
xuyueandClaude Opus 5.5 eedf1aa2fb 项目 7 情景控制:虚拟时钟、项目资源、Windows Media Player、TrackBar
- 虚拟时钟:实训台时钟面板可拨时间、1×/10×/60× 倍速、恢复真实时间;编译时把
  DateTime.Now / Today / UtcNow 改写成 SimClock;评分规则加 clock 步骤
- 项目资源(Properties.Resources):平台素材库(自绘开关图片、合成门铃声),"项目资源"对话框勾选,
  平台生成 Properties/Resources.Designer.cs;设计器图片框的"图片"属性可选资源;程序目录下的 Resources
  指向素材库;未添加资源时给中文提示
- Windows Media Player(AxWMPLib):设置 URL 自动播放、Ctlcontrols.play/stop,浏览器里播放声音,
  实训台加广播喇叭;编译时给窗体嵌空资源,OcxState 取到 null 不报错;图片和声音统一按内容缓存(blob)
- TrackBar:拖动、点轨道、方向键,先 ValueChanged 再 Scroll;设计器加"滑动条""媒体播放器"
- 评分规则加 value、media 检查;示例项目 7 任务 1–3(修正书上开关灯判断写反、漏填串口列表)
- 修正:Properties/ 下的资源类不当作窗体;带命名空间的 System.AppDomain.CurrentDomain.BaseDirectory 放行
- 测试:虚拟时钟、TrackBar、项目 7 示例评分、作业起点带资源类

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 14:11:05 +08:00
xuyueandClaude Opus 5.5 a9af26c2d6 修复 CI:评分点表格前等那一行出现;程序出错时优先报异常;CPU 超时不再生成 core dump
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
- 评分的"点 / 修改表格单元格"步骤最多等 5 秒,让上一步(保存后重新查询)刷新出的行出现;
  CI(2 核、整套测试同时跑)上 p6-t2"删除"一项因此偶发失败
- 检查项不通过时,如果程序抛过异常,报"程序出错:…"(异常消息可能比失败的检查晚到)
- 学生程序的 CPU 时间上限软硬相同,到时直接 SIGKILL,并且不生成 core dump:
  原来先发 SIGXCPU,每个死循环都留下几 MB 的转储,本机桌面还会弹出"程序崩溃"

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 10:20:58 +08:00
xuyueandClaude Opus 5.5 670abe5921 项目 6 数据存储:仿冒 SqlClient(T-SQL 转写成 SQLite)、数据库页面、DataGridView、DateTimePicker
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
- 每个学生一套数据库,长期保存(data/databases/<用户编号>/库名.db);学生程序运行时挂进沙箱可读写
- Sim.Data:SqlConnection / SqlCommand / SqlDataReader / SqlDataAdapter / SqlCommandBuilder / SqlParameter;
  连接字符串只按库名打开学生自己的库;ScriptDom 解析 T-SQL 后按白名单转写成 SQLite 语句,
  STRICT 表 + 元数据表还原 SQL Server 的列类型,报错编号和中文信息与 SQL Server 一致;
  INSERT 不写列名时跳过自增列,日期统一格式(书上 DateTime.ToString() 拼接的日期能正确比较)
- 常驻 SQL 服务(Sim.Runner sql-server):数据库页面的查询、对象资源管理器,评分前按实验 database.sql 建库
- 数据库页面(代替 SSMS):对象资源管理器、查询窗口、编辑前 200 行、表设计器、恢复实验初始数据
- DataGridView(绑定 DataView/DataTable/DataSet,单元格修改写回 DataTable)、DateTimePicker;设计器工具箱加入
- 评分:每个检查项一份新建的实验库;新增点 / 修改表格单元格、选日期、表格里有 / 没有某行的检查
- 示例:项目 6 任务 2、3;时间格式改成和中文 Windows 一致(9:05:03);异常堆栈不暴露服务器路径
- 测试:数据库端到端、接口(每人只看到自己的库、恢复实验数据)、评分出错情况、T-SQL 生成

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 09:18:56 +08:00
xuyueandClaude Opus 5.5 6b088240da 项目 4 任务 2 网络摄像机:PictureBox、Image / Bitmap、照片列表
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
- 摄像头:自绘东围墙场景(Camera/scene.svg),按云台位置切成 640×480 帧(build-frames.ts);
  Pan 每次转一格,红外对射被遮挡时画面出现翻墙的人;类名、委托、事件参数与教材 dll 一致,
  ImageRead 每 250 ms 在后台线程触发
- Image / Bitmap 保存真实图片数据:Save、FromFile、FromStream,文件夹不存在时报 GDI+ 一般性错误;
  图片每张只发给浏览器一次(按内容哈希缓存)
- 程序所在目录(AppDomain.CurrentDomain.BaseDirectory,编译检查单独放行)和当前目录指向可写的 bin/Debug,
  沙箱里在沙箱的临时目录
- PictureBox(SizeMode、BorderStyle);设计器工具箱加"图片框";运行区显示程序保存的图片,点开看大图;
  实训台摄像头图标显示开启状态
- 评分规则加图片框显示图片、摄像头开关与转向、保存图片三种检查;示例 p4-t2-网络摄像机
- 测试:摄像头端到端、图片读写与程序目录、AppDomain 编译检查、评分出错情况

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 20:58:09 +08:00
xuyueandClaude Opus 5.5 4ed9450c02 修复:手动改过输入框后,程序再把文字设回原值时输入框不刷新
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
浏览器把用户输入发给运行器时没有同步更新自己记下的 Text,运行器再设成同样的值时,
属性看起来没变,输入框不会刷新。现在发送输入时同步记下(文本框、可输入的下拉框);
评分驱动做同样处理。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 20:41:55 +08:00
xuyueandClaude Opus 5.5 91b39603a2 项目 5 补齐:旧版线程 API(Suspend / Resume / Abort)与 ListBox
- 编译时把 Thread 的 Suspend / Resume / Abort、ThreadState、Sleep、new Thread 改写成平台的
  协作式实现:被挂起或终止的线程在 Sleep、后台改控件、调设备类库、弹提示框时停下或结束;
  ThreadStateException 等行为与 .NET Framework 一致;编辑器不再提示"已过时"
- ListBox:列表项、单选、SelectedIndexChanged 先于 Click、删除选中项后取消选中;
  ComboBox 与 ListBox 共用 ListControl 和列表项集合;设计器工具箱加"列表框"
- 评分规则的"包含"对列表框检查所有列表项
- 示例:项目 5 任务 2(烟雾,线程)、任务 3(推送灾情,二维数组、两个窗体、ListBox),
  参考答案修正书上直接 Abort 挂起线程、烟雾记成"发现火情"的问题
- 一直不换行的 Console 输出攒满 4096 字符先发出,避免占满内存
- 测试:旧版线程 API、ListBox 事件顺序、两个示例的端到端和评分测试

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 20:33:12 +08:00
xuyueandClaude Opus 5.5 8a92354fe4 评阅页直接运行学生的程序;离开页面时结束正在运行的程序
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
- 运行区(窗体桌面、提示框、虚拟实训台、编译错误和控制台输出)抽成 RunArea 组件,实验页和评阅页共用
- 评阅页代码区加"运行"标签页:运行学生提交的代码,可以操作窗体和实训台;换学生时自动停止并清空;
  点编译错误跳到对应代码;原来的按钮改为"在新标签页运行"
- 运行会话加 close():离开实验页、评阅页时断开连接,服务器随即结束程序(之前要等 60 分钟超时)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 20:12:31 +08:00
xuyueandClaude Opus 5.5 91237b85b8 CI:升级 actions/checkout 到 v7、actions/setup-dotnet 到 v6(Node.js 24)
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
消除"Node.js 20 is deprecated"警告。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 20:01:29 +08:00
xuyueandClaude Opus 5.5 d6bcd11fb4 修复部署:数据卷属主是 root,平台用户写不进数据库
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
Docker 新建数据卷时属主是 root,而平台用普通用户(APP_UID)运行,SQLite 打不开数据库,
新容器反复退出。compose 加一个启动前只运行一次的 init-data(root 把 /data 交给平台用户),
Dockerfile 里也预先建好属于平台用户的 /data。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 19:50:00 +08:00
xuyueandClaude Opus 5.5 6096992507 修复:编译服务、语言服务 stop() 后立即清空状态
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
测试文件之间共用编译服务:上一个文件结束时 stop() 只发了结束信号,下一个文件马上发来的请求
仍交给正在退出的旧进程,随后报"编译服务意外退出"(GitHub Actions 上偶发)。现在 stop() 立即
清空进程和待回复的请求,下一次请求启动新进程。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 19:42:02 +08:00
xuyueandClaude Opus 5.5 14a82a3e24 AI 评阅:DeepSeek Flash 给老师评分项出建议分和评语,老师采纳后生效
- 学生提交时浏览器给每个窗体截图(运行时同一套 FormWindow 在屏幕外渲染),随提交保存
- 自动评分后进入 AI 评阅队列:按书上评价表给老师评分项打建议分、写评语(JSON 输出,服务器再校验、限制分数);
  发出的内容不含姓名学号;学生代码里像指令的文字一律当作品内容;学生又交了新的只评最新的
- 提示词按教材命名习惯校准("缩写_含义"、书上规定的控件名、界面上不用的标签保留默认名不扣分):
  教材参考答案 28/30,默认控件名且没有注释 15/30
- 评阅页:界面截图标签页、AI 建议卡片(采纳、重新评阅)、全部采纳(不覆盖老师已评的分)、评阅后又提交的提醒;
  成绩表显示"AI 建议,待确认";学生在老师确认前看不到 AI 的建议
- 规范提示移到 shared,服务端组装提示词时也用
- 配置 DEEPSEEK_API_KEY、AI_MODEL;部署说明提醒 NPM 调大请求体上限

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 19:37:50 +08:00