驾校与驾驶人考试场地每天为大量学员办理考试费、场地费登记,长期靠纸质台账和各机各表的 Excel:两台录入机(科目二、科目三)各记一份,数据对不上;学员到场后靠人工翻表核对身份,错收、重收、漏记难以追溯;一旦网络中断或误操作覆盖,整天的收费记录可能丢失。本项目面向「驾考场地收费窗口」这一高频且强合规的场景,把身份证读卡核验、收费台账管理、Excel 批量导入导出、双机离线同步整合进一套 Windows 桌面软件,让收费员放证即录、两台机器数据自动对齐,断网也能继续录入。
点击空白处退出提示
驾校与驾驶人考试场地每天为大量学员办理考试费、场地费登记,长期靠纸质台账和各机各表的 Excel:两台录入机(科目二、科目三)各记一份,数据对不上;学员到场后靠人工翻表核对身份,错收、重收、漏记难以追溯;一旦网络中断或误操作覆盖,整天的收费记录可能丢失。本项目面向「驾考场地收费窗口」这一高频且强合规的场景,把身份证读卡核验、收费台账管理、Excel 批量导入导出、双机离线同步整合进一套 Windows 桌面软件,让收费员放证即录、两台机器数据自动对齐,断网也能继续录入。
系统以 Windows 桌面软件交付,围绕「读证—登记—对账」一条主线,覆盖收费窗口全流程。
【收费台账】收费记录新增、编辑、删除与批量删除,10 项条件组合查询(姓名、身份证号、驾校、科目、日期区间、年总号、月总号、分号、车号、备注),身份证号与科目写法自动归一;Excel 模板下载、十万行级流式分批导入、按当前筛选结果导出(附「对公账户场地收费清单」年度大表头)。
【身份核验】HX-FDX3S 身份证读卡器读卡,USB/COM 端口自动探测、掉线 3 秒自动重连;读卡或手动输入 18 位身份证号后按校验码规则验证,自动定位并高亮命中记录,未命中给出登记引导;模拟器模式用 4 类证件样本脱机演示。
【双机协同】科二主机与科三副机各管各的「地盘」,按内部行号做行级增量同步与整区替换,删除通过墓碑机制传播,Excel 导入后一键全量对齐;断网时本地继续录入、恢复后自动补推。
【运维兜底】一键自检(进程位数、SDK、驱动、解析链路)、读卡器状态实时显示、启动快速自检、错误日志、启动自动备份与一键恢复。
我独立完成从需求到交付的全部开发:把甲方 3 项原始需求(收费信息维护、身份信息比对、建立本地数据库)拆成 14 项功能点,实现 28 个 C# 源文件约 9800 行、8 个 WinForms 窗体,历经 v1.0 单机、v2.0 双机、v3.1「地盘制」同步三次迭代,并配套安装包与部署指南。
技术栈:C# / .NET Framework 4.7.2 / WinForms,因读卡 SDK 只提供 32 位库,全项目锁定 x86;数据层 SQLite(WAL + 连接池,单文件零运维);读卡经 P/Invoke 调 sdtapi.dll,再交 FriDecompose.dll 解码;Excel 基于 NPOI,免装 Office。
实现亮点:① 自定义二进制同步协议——[1 字节类型][4 字节长度][载荷] 共 4 种消息,BinaryWriter 手写序列化,不引任何消息框架。② 地盘制行级合并——以内部行号 sync_uid 认行,整区替换对方分区并配墓碑表,删除随推送传播且防复活,解决「字段没填全导致丢数据」。③ Win32 原子替换——P/Invoke MoveFileEx 先做 WAL checkpoint,再带 30 次重试覆盖被占用的 SQLite 文件并自动备份。④ schema 自动迁移与脏数据兼容——每列独立探测、幂等 ALTER,从 v1.0 升到 v3.1,遇重复身份证号降级警告不炸库;Excel 表头自动识别、科目写法归一。
难点:上线后出现「副机推送旧库覆盖主机、当天记录丢失」事故,根因是全量文件覆盖,遂重构为行级增量合并——合并前把本地 (id, 身份证号, 修改时间) 预读进内存 HashMap,两万行合并从 30 秒降到 0.3 秒;同步也改为「写后推、读前拉、手动全量」按需触发,并加失败自动备份与弹窗提示,不打断收费业务。







评论