xuyue and Claude Opus 5.5
5e5d29b2aa
导出 EXE:实验页工具栏"导出 EXE"把学生的程序编译成一个 exe,拷到机房电脑上双击就能控制真的实训台。编译服务照教材工程编译学生写的原始代码(.NET Framework 4.5 引用程序集,构建时只复制教材工程引用的 13 个到 netfx/;真机版设备类库),不做平台的仿真改写和 API 限制,和 VS 里一样。教材 dll(DeviceCtrlLibrary 及 API 下 7 个、WinFormsDeviceControlLibrary、媒体播放器的两个 Interop)作为资源嵌进 exe,模块初始化器注册 AssemblyResolve 从 exe 里加载,Program.cs 不用改;Properties.Resources 的图片、声音嵌进 exe,代码里按文件名用到的素材(项目 7 的 ring.mp3)启动时放到 exe 旁边的 Resources;媒体播放器的 OcxState 用教材 resx 的默认状态;书上的 ledHelper.Close() 在教材类库里没有,补一个空的扩展方法。23 个实验都能导出(约 0.9 MB),mono + Xvfb 里实测能启动、控件和图片正常。接口 POST /api/export-exe,代码有错时 422,实验页弹框列出报错、点击跳到代码。教材 dll 有版权、GitHub 仓库公开,不进仓库:本机放 textbook-libs/,服务器放 ~/IOT_SIM/textbook-libs/ 由 compose 只读挂载(deploy/README.md),没放时提示原因。使用说明、设计方案、README 同步
...
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-11-02 22:10:07 +08:00
xuyue and Claude Opus 5.5
46e0f40cce
实训台接线:串口要选对。接线做成数据(BoardState.wiring),默认按教材布局图 COM2 ADAM-4017+、COM3 ADAM-4150、COM4 ZigBee 协调器、COM5 LED 屏,实验可在 meta.json 的 wiring 里改:项目 7 的书上代码在一个串口上打开两个模块,这三个实验把 4150 并到 COM2 的 485 总线上。选错串口时返回值照反编译的真机版 dll(4017 全 null、4150 全 false,4150 的 OnOff 和 LED 推送返回成功但设备不动作,ZigBee 返回 false);串口没打开时照教材仿真版。Open / Close / 没打开就读写报告给服务器,实训台最上方用红字提示("程序在 COM2 上打开 ADAM-4150,它接在 COM3""ADAM-4150 的串口没有打开,程序却在读写它"),评分不通过时也附上。只读接线展示:鼠标移到实训台设备上,标题栏写出线路,对应通道、模块、串口高亮;串口服务器按接线列出设备,程序打开的口亮绿点;程序里串口下拉框的灰字按当前接线。打开实验时浏览器发 experiment 消息换接线,老师看学生提交时按作业的实验接线(提交接口返回 sampleId)。"4017"统一写成 ADAM-4017+
...
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
上课前逐个检查 23 个实验后的修改:补上三处评分漏洞(项目 3 任务 1、项目 4 任务 3 的关闭和项目 7 任务 2 的熄灯,程序什么都不做也能通过);评分说明的空格;任务说明按实测补充(项目 2 任务 1–3、项目 3 任务 2、项目 4 任务 2、项目 7 任务 1–3、项目 8 任务 5)。使用说明、设计方案同步,设计方案记下以后可能扩展"物联网设备安装与调试"课
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-28 17:40:57 +08:00
xuyue and Claude Opus 5.5
163e553de4
日期选择框兼容机房 Chrome 94:以前点下拉按钮靠 showPicker() 弹出日期框,它 Chrome 99 才正式有,Chrome 94 的原型上有这个方法、调用却没反应,项目 6 任务 3、项目 8 任务 5 选不了日期。改成把浏览器的日期框透明地盖在下拉按钮上、日历图标撑满按钮,点按钮由浏览器自己弹出(Chromium 94 和新版 Chrome 实测都能选)。运行时长日期和中文 Windows 一致,不带星期(Linux 的 zh-CN 长日期是"2026年10月28日星期三",日期框窄,星期被截掉)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-28 17:40:57 +08:00
xuyue and Claude Opus 5.5
9ed446f95a
实验页:程序运行时改了代码或设计器,停手 1.5 秒后自动重新运行,不用再按 F5。重启前先用边写边检查的接口检查整个工程,有错误就不重启,原来的程序接着运行,工具栏提示"代码有错误,改好后自动重新运行";检查期间又改了、程序已停或换了工程时作废;停止后改动不会自动启动程序。使用说明、设计方案同步
...
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 15:15:46 +08:00
xuyue and Claude Opus 5.5
6a18bdf2e4
兼容机房的 Chrome 94:打包目标改成 Chrome / Edge 94;polyfills.ts 补 crypto.randomUUID(http 打开时没有)、structuredClone(只复制普通数据)、findLast / findLastIndex;vite.config.ts 加小插件,把代码块之间的 import("./X.js") 改成 /assets/ 开头的绝对路径(Chrome 94 有时相对网页地址解析,拿到首页 HTML 一片空白),改过的代码块换新文件名;容器查询改成 ResizeObserver 量宽度加 class(实训台三档布局、设计器窄时隐藏提示);:has() 改成 class(只读、禁用文本框灰底,没标题的分组框)。旧浏览器提示改成 94 以上,设计方案记录实测
...
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:58:25 +08:00
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude Opus 5.5
a2f03ee57f
实验页:编辑区和运行区之间的竖条上的小箭头换成竖排文字"收起运行区""展开运行区",竖条加宽到 22px
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-27 16:41:46 +08:00
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude Opus 5.5
f304fc1ffc
窄屏工具栏不换行;数据库页面提示更新
...
- 屏幕宽度不到 1600 时不显示编译、往返时间(给开发看的),平台名、保存状态、链接不换行,
1366 宽的机房电脑上工具栏是一行
- 数据库页面的提示:运行要用数据库的实验时自动建库,"恢复实验初始数据"用来恢复成初始数据
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-25 18:44:04 +08:00
xuyue and Claude 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
xuyue and Claude Opus 5.5
f256b313f7
实验页"评价项"和自测:提交前自己检查,不计分
...
- 工具栏"评价项"打开侧栏,列出自动检查的功能项(作业显示布置时的规则和各项分值)
- "自己检查"在服务器上按评分规则运行学生现在的程序,逐项显示通过与否和原因;不计分、不留记录,
自由练习和作业都能用;每人同时一次,结果保留到下一次,之后改过代码提示结果可能过时;
和提交评分共用全站并发上限
- 实验的评价项接口学生也能用(老师布置作业的对话框改用它)
- 修正:运行区的窗体和"放大"按钮会盖住网页的抽屉和对话框
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-25 18:35:25 +08:00
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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
xuyue and Claude 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