网吧计费管理系统实战:C语言跨天计费与权限设计全解析
简介作为武汉理工大学计算机基础与编程实验课程资源这份“网吧计费管理系统”项目包面向相关课程学生及初学管理信息系统开发的读者解决网吧场景中上网时长控制、自动计费、批量管理及运营维护等实验课题并额外加入超级管理员功能使权限设计更贴近实际应用。资源共325个文件压缩包33.1MB主体为Visual Studio工程结构包含C/C源文件c、h及其编译产物obj、pdb、ipch、tlog、ilk同时保留exe、vcxproj等文件便于直接打开工程查看源码、跟踪编译过程或运行验证。目前已有3178人学习下载对需要理解网吧收费流程、链表与文件操作等核心编程知识或希望基于现成代码做界面与权限功能扩展的读者具有明显参考价值。1. 网吧计费管理系统课程实验里最容易被低估的计费与权限设计我最初拿到“网吧计费管理系统”这个课程实验题目时以为它简单得就像一份签到表记录上机时间、下机收钱、再存个文件。真正动手才发现卡住人的从来不是“输入账号密码”那一步而是跨天通宵怎么计费、程序重启后上机记录怎么恢复、普通管理员和超级管理员的权限边界划在哪。这篇笔记就按最稳妥的方案讲C 语言控制台程序加文本文件存储把费率策略、上机状态机、登录鉴权、超管扩展和常见踩坑一次理清楚。适合正在做这个实验、或者想用同一个骨架改造成其他管理系统的人新手能照着敲熟手直接看第 5 章的坑就行。2. 计费设计先立住费率时段、数据结构与上机状态机2.1 费率策略计费单位、高峰时段与进位方式怎么定计费是网吧计费管理系统的灵魂也是课程设计评分时最容易拉差距的地方。很多实现把费率写成一个固定数字比如“每分钟一块钱”演示时只能跑一种场景。实际做的时候我建议把费率定义成多个“时段段”每个时段段包含四个要素时段名称、起止时间、每分钟价格、金额进位方式。时段名称起止时间费率规则适用说明普通时段08:00 - 18:000.8 元/分钟白天基本价格高峰时段18:00 - 22:001.2 元/分钟晚间加价体现高峰策略通宵时段22:00 - 次日 08:000.5 元/分钟跨天时段是实现的难点这里有两个选择要把理由说清楚。第一为什么用“分钟单价”而不是“每小时单价”因为上机时长天然落到分钟粒度用分钟单价配合进位策略账单展示最直观测试边界也方便。第二金额进位我一般用“向上取整到分”。四舍五入虽然数学上公平但订单里可能出现 0.3000000004 这种浮点误差金额演示时特别难看。向上取整符合网吧行业惯例也能把浮点计算的不确定性挡在门外。再说时段切换。真实系统里高峰时段和通宵时段经常相邻跨天计费必须支持“一段上机时间跨多个费率段”的情况。比如 17:50 上机、18:10 结账前 10 分钟按普通时段后 10 分钟按高峰时段。如果费率计算函数不支持这种分段累加后面接需求时每改一处就要重写一遍核心逻辑。所以从最开始就把“计费 多个时间片段的金额相加”这个模型立住后续所有功能都会顺。2.2 数据结构管理员、会员与上机记录三张表数据结构设计直接决定代码能写多长、后面扩展好不好加。我常用的做法是拆成三张表管理员表、会员表、上机订单表。管理员管理后台登录会员管理上机余额订单管理每一次上机和结账。三者用卡号或用户名关联不把字段堆在一个大结构体里。typedef struct { char username[20]; // 登录名 char passwd[64]; // 混淆后的口令不存明文 int role; // 1普通管理员 2超级管理员 int enabled; // 0禁用 1启用 } Admin; typedef struct { char card_id[16]; // 会员卡号 char name[32]; float balance; // 账户余额 int status; // 0离线 1上机中 2暂停中 } Member; typedef struct { char order_id[24]; // 订单号 char card_id[16]; char admin[20]; // 操作员账号 time_t start_time; // 上机时间统一用 time_t time_t end_time; // 下机时间未结账时为 0 float rate; // 费率快照元/分钟 int minutes; // 计费分钟数 float amount; // 应收金额 int state; // 0进行中 1已结账 } Order;几个字段要特别说明。start_time和end_time用time_t而不是字符串是因为跨天计算必须做时间戳差值HH:MM字符串比较在跨天时会直接算错。rate字段是费率快照不是从全局费率表临时查的订单生成那一刻把当时的单价存下来之后改费率不会影响历史账单这是后面扩展超管“调价功能”的前提。state字段则是系统重启恢复的基础第 5 章会专门讲它。会员表和订单表通过card_id关联管理员表和订单表通过admin账号关联。这样统计“某个管理员一天开了多少钱的单子”时扫一遍订单表按admin分组即可不需要回查管理员表。2.3 上机状态机上机、暂停、结账的事件与边界状态机是这类型系统里最容易写成一团乱麻的部分。很多代码用if (status 1) { ... } else if (status 2) { ... }到处散落判断加一个“暂停”功能就要改七八处。正确做法是先定义状态和事件的映射表再按表写代码。当前状态触发事件下一状态需要执行的动作空闲管理员点击上机上机中生成订单state0记录开始时间上机中会员临时离开暂停中记录暂停开始时间暂停期间不计费暂停中会员回来上机中恢复计费累加暂停时长用于展示上机中管理员结账已结账计算费用写订单文件扣余额暂停中管理员强制结账已结账按暂停策略结算比如超过 30 分钟自动结账注意最后一行的“暂停超过 30 分钟自动结账”这是网吧真实场景里必须有的兜底逻辑。如果只做“暂停不计费”而不做超时处理会员离开后机器会被一直占用演示时导师问一句“人走了机器空着怎么办”就会卡住。实现上可以在订单结构体里加一个pause_start字段每次循环检测或结账时判断暂停时长。把状态机表画清楚之后再写代码每个函数只处理“一个事件导致的一次状态迁移”避免在菜单函数里堆逻辑。后面加功能时比如“会员自助换机”就只是在这个表里加一行新事件不会牵动核心计费。3. 核心流程落地用 C 语言实现登录、上机与结账并落进文件3.1 存储选型为什么用文本文件而不是二进制课程实验的数据量很小——哪怕模拟 100 个会员、每天 500 条订单文本文件也就几百 KB完全没有性能压力。所以存储方案我选文本文件字段之间用|分隔每行一条记录。这个选择有三个实际理由一是出错时可以打开文件直接看内容定位问题二是助教检查代码时可以快速理解数据结构评分友好三是文本格式不依赖编译器对结构体的内存对齐换到机房电脑也能读。二进制整体读写最大的坑是结构体 padding。sizeof(Order)在 32 位和 64 位编译环境下结果不一样直接fwrite(order, sizeof(order), 1, fp)写出来的文件在自己机器上能读拷到另一台电脑上就乱码。这种问题在答辩现场非常尴尬而且不好排查。文本文件逐字段读写虽然代码多一点但换来的是稳定和透明。// 写入一条订单字段之间用 | 分隔 void order_save(const Order *o) { FILE *fp fopen(orders.txt, a); if (fp NULL) return; fprintf(fp, %s|%s|%s|%lld|%lld|%.2f|%d|%.2f|%d\n, o-order_id, o-card_id, o-admin, (long long)o-start_time, (long long)o-end_time, o-rate, o-minutes, o-amount, o-state); fclose(fp); }fopen用追加模式a每次写订单都直接追加到文件末尾不覆盖旧数据。time_t在输出时强转成long long是为了避免在 32 位环境下time_t被截断成 int 导致时间错乱。读取过程则是一行行fgets后用strtok按|切分再逐字段赋值给结构体。3.2 登录与权限校验口令混淆、次数限制与统一错误提示登录模块是管理后台的入口代码本身不难但有两个细节值得认真做口令不能明文存、登录失败要有统一提示。明文密码的问题是演示时文件一打开所有账号密码全暴露了。课程实验不要求上正规哈希算法但至少做一层简单的异或混淆防止被直接看到。void confuse(char *s) { unsigned char key 0x5A; while (*s) { *s *s ^ key; s; } } int login(Admin *cur) { char u[32], p[64]; printf(请输入管理员账号: ); scanf(%31s, u); printf(请输入密码: ); scanf(%63s, p); confuse(p); // 对输入做相同混淆再与文件内容比对 for (int i 0; i admin_cnt; i) { if (strcmp(admins[i].username, u) 0 strcmp(admins[i].passwd, p) 0) { if (admins[i].enabled 0) { printf(该账号已被禁用\n); return 0; } *cur admins[i]; return 1; } } printf(账号或密码错误\n); return 0; }这里有个安全上的细节账号不存在和密码错误使用同一条提示信息“账号或密码错误”。如果区分成“账号不存在”和“密码错误”别人就能通过提示逐条试探出哪些账号是有效的。课程设计里导师可能会问这个点统一提示是加分项。登录次数限制也建议加上连续输错 3 次直接退出程序。实现方法是在main的登录循环里记一个计数器login返回 0 时加一超过阈值就让程序结束。这个机制不复杂但能体现“系统要考虑暴力破解”的意识。密码混淆只是防瞟一眼真正的安全需要完整哈希和加盐课堂作业不做但可以写进报告里的“扩展展望”部分。3.3 计费计算函数跨天分段与进位取整的正确写法计费函数是整个系统最核心的代码我见过太多实现直接把end_time - start_time除以 60 乘单价结果一到通宵时段就翻车。跨天的本质是一段上机时间可能落入多个费率段每个段要分别计价再相加。处理这个需求不需要写“跨天特判”而是把费率匹配和“跳到下一段边界”做成两个小函数循环累加即可。// 判断某个时刻落在哪个费率段 RateZone *find_zone(int h, int m, RateZone *z, int n) { int now h * 60 m; for (int i 0; i n; i) { int s z[i].start_h * 60 z[i].start_m; int e z[i].end_h * 60 z[i].end_m; if (s e) { // 不跨天的时段 if (now s now e) return z[i]; } else { // 跨天时段如 22:00-08:00 if (now s || now e) return z[i]; } } return NULL; } // 计算当前时间的下一段边界 time_t zone_end(time_t t, RateZone *z) { struct tm tm *localtime(t); tm.tm_hour z-end_h; tm.tm_min z-end_m; tm.tm_sec 0; return mktime(tm); } float calc_fee(time_t start, time_t end, RateZone *zones, int zone_cnt) { float total 0; time_t cur start; while (cur end) { struct tm *tm localtime(cur); RateZone *z find_zone(tm-tm_hour, tm-tm_min, zones, zone_cnt); if (z NULL) { cur 60; continue; } time_t stop zone_end(cur, z); if (stop end) stop end; int minutes (int)(stop - cur) / 60; total minutes * z-price; cur stop; } return ceilf(total * 100) / 100; // 分以上取整避免浮点尾差 }这段逻辑的关键在find_zone的跨天判断当结束小时小于开始小时时说明这个费率段跨了午夜now s || now e这个条件能同时覆盖“22 点到 24 点”和“0 点到 8 点”两段。而zone_end直接设置结束时刻的tm_hour为end_h再交给mktime自动进位。比如费率段是 22:00 到 08:00zone_end算出的时间戳就是次日 08:00不需要手工判断日期加一。calc_fee的循环每轮跳到一个费率段的边界一个订单最多循环几次不会出现性能问题。注意浮点误差total是 float累加几十次后可能出现 0.600000001 这种值最后用ceilf向上取整到分金额展示永远干净。取整策略要和 2.1 节说的一致这里实现了“进一取整”如果想改成四舍五入把ceilf换成roundf即可。4. 扩展超级管理员从普通收银到系统管理员的权限跨越4.1 权限边界设计普通管理员与超级管理员各管什么很多同学做“扩展超级管理员功能”只是多加一个用户名登录后界面一模一样这等于没有扩展。真实的权限设计要把功能清单拆成两层普通管理员负责日常营业操作超级管理员负责系统配置和数据安全。功能模块普通管理员超级管理员会员开卡、充值和上机结账可以可以查询自己的操作记录可以可以新增或删除管理员账号不可以可以修改费率配置不可以可以查看全店营收统计不可以可以手工修正异常订单不可以可以权限控制要在代码里集中做不能每个菜单函数各写各的。我一般抽一个公共函数int require(int need_role, const Admin *cur) { if (cur-role need_role) { printf(权限不足该操作需要%s权限\n, need_role ROLE_SUPER ? 超级管理员 : 管理员); return 0; } return 1; }每个需要权限的函数第一行都调用它。比如修改费率函数里写if (!require(ROLE_SUPER, cur)) return;这样以后新增功能时只要照着这个模式加一行就不会出现漏校验的越权漏洞。演示时导师切到普通管理员账号操作超管菜单看到“权限不足”提示这一步印象分就拿到了。4.2 营收统计按日期、按管理员维度汇总订单营收统计是超管最有说服力的功能。订单文件里每行是一条已结账记录要做的是按不同维度累加amount。课程实验规模小不需要建索引全量扫描一遍文件即可代码更直接。void stat_daily_report(const char *date) { FILE *fp fopen(orders.txt, r); char line[256]; float total 0; int order_cnt 0; while (fgets(line, sizeof(line), fp)) { Order o; if (parse_order(line, o) 0) continue; char day[16]; strftime(day, sizeof(day), %Y-%m-%d, localtime(o.start_time)); if (strncmp(day, date, 10) ! 0) continue; total o.amount; order_cnt; } fclose(fp); printf(%s 共完成 %d 笔订单营收 %.2f 元\n, date, order_cnt, total); }这里的parse_order是 3.1 节读取函数的封装把一行文本解析成Order结构体。统计时有两个细节一是只用已结账即state 1的记录进行中的订单金额还不确定不能计入二是按start_time转出来的日期分组而不是按订单号前缀分组因为订单号跨天时前缀可能和实际日期不一致。如果想按操作员维度统计把分组键从日期改成o.admin循环里用strcmp匹配即可思路完全一样。4.3 后台维护管理员增删、费率调整与数据备份后台维护功能里最容易出问题的是“删除管理员”的边界处理。至少要考虑两条规则不能删除当前登录账号自己系统里至少要保留一个超级管理员。否则一个误操作把所有超管账号删光整个系统就锁死了。int delete_admin(const char *target, const Admin *cur) { if (strcmp(target, cur-username) 0) { printf(不能删除当前登录账号\n); return 0; } int super_cnt 0; for (int i 0; i admin_cnt; i) { if (admins[i].role ROLE_SUPER admins[i].enabled) super_cnt; } if (super_cnt 1 is_super(target)) { printf(系统至少保留一个超级管理员\n); return 0; } // 找到目标账号标记 enabled 0 或者从文件移除 printf(管理员 %s 已删除\n, target); return 1; }费率调整是超管扩展里最能体现“设计意识”的功能。实现上建议把费率表放一个外部配置文件比如rate.conf程序启动时读取超管在程序里修改后写回文件。这样做的好处是演示时可以直接打开配置文件改价格再重启程序看到新费率生效比在程序里层层菜单操作直观得多。数据备份实现也简单就是把数据文件复制一份带时间戳的副本void backup_data() { char name[64]; time_t now time(NULL); strftime(name, sizeof(name), backup_%Y%m%d_%H%M%S.bak, localtime(now)); FILE *src fopen(orders.txt, r); FILE *dst fopen(name, w); char ch; while ((ch fgetc(src)) ! EOF) fputc(ch, dst); fclose(src); fclose(dst); printf(备份完成: %s\n, name); }注意备份和恢复操作前要提示先关闭系统其他功能避免文件占用导致复制不完整。恢复操作更要把当前数据文件先改名留底防止覆盖错。5. 避坑与排查计费系统最容易翻车的 5 个细节5.1 跨天时间差算成负数现象通宵上机从 23:50 开始次日 01:20 结账控制台打出“结算时长 -1350 分钟金额 -675.00 元”。原因代码里把start_time和end_time存成了“HH:MM”格式的字符串跨天时 “01:20” 比 “23:50” 小字符串比较直接判定为负数。或者有人用int存time_t在 32 位环境时间戳溢出后计算混乱。解决从结构体层面根除这个问题——时间字段一律用time_t存时间戳展示时才用localtime转字符串。费率计算用 3.3 节的calc_fee由find_zone处理跨天段匹配不要在业务代码里手写小时数比较。谨记一条血泪经验时间计算只在时间戳层面做字符串只用于给人看。5.2 scanf 读菜单导致死循环现象菜单输入数字时误敲了字母程序不是报错退出而是像失控一样疯狂刷菜单刷到必须强制关窗口。原因scanf(%d, choice)遇到字母时匹配失败请求的字符没有被消费残留在输入缓冲区里。下一次循环scanf又读到同一个字母再次失败形成“读失败、残留、再读同一个字符”的死循环。解决用fgets读一行再解析而不是直接用scanf读整数。char line[32]; fgets(line, sizeof(line), stdin); if (sscanf(line, %d, choice) ! 1) { printf(输入无效请重新输入\n); continue; }fgets会可靠消费掉一整行输入残留问题从根上消失。这个坑几乎每个做控制台课程设计的人都会踩一次提前处理能省下大量调试时间。5.3 删除超管时把自己的账号删了现象超管想清理一个离职同事的账号测试时顺手把自己账号删了退出登录后整个系统没有超管可进后台彻底锁死。原因删除函数只对比了用户名没有检查“被删对象是不是当前登录者”和“系统是否还有别的超管”。这个问题平时不触发一触发就是事故现场。解决删除前做两层校验——先比对strcmp(target, cur-username)不允许删自己再统计剩余启用超管数量小于等于 1 时禁止删除。这个逻辑在 4.3 节已经给出完整实现核心是把这个边界当成功能需求来对待而不是碰运气的检查。5.4 程序重启后所有机位全部变成空闲现象有会员正在上机程序因断电退出重启后机位表显示全部空闲但晚上对账发现少收钱。原因上机状态只存在内存里的结构体数组中没有及时落盘。正常结账时会写订单文件但“上机中”这个状态没有独立持久化异常退出时内存数据全丢。解决上机动作发生时立即把订单写入文件state字段置 0 表示进行中程序启动时扫描订单文件把所有state 0的记录重新加载到机位表上恢复营业现场。这个恢复函数放在 6.2 节具体讲它是整个系统健壮性的关键一环。5.5 二进制结构体直写文件换机器就乱码现象在自己电脑上运行正常拷贝到实验室电脑后打开数据文件订单金额变成天文数字会员余额也乱套。原因直接在代码里fwrite(order, sizeof(order), 1, fp)把结构体内存块原样写入文件。不同编译器、不同对齐选项下sizeof不一样结构体内部的 padding 字节在不同环境可能写入垃圾值换机器读回时字段错位。解决放弃二进制整体读写统一用文本格式逐字段读写字段间用|分隔。课程实验的数据量完全不需要二进制文件的性能和体积优势而文本文件的可读性和跨平台稳定性是实打实的收益。代码实现就是 3.1 节的order_save和配套的parse_order读取函数。6. 进阶把实验从“能跑”做到“敢答辩”的验证与加分项6.1 测试用例清单先想清楚怎么才算验证通过写代码之前先列测试用例是答辩时敢说“系统经过验证”的底气。下表是我做这个实验时用的最小测试集覆盖正常流程和边界场景。用例编号测试场景操作步骤预期结果T01正常上机结账普通时段上机 30 分钟后结账金额 30 × 0.8 24 元T02跨时段计费17:50 上机18:10 结账前 10 分钟普通档后 10 分钟高峰档T03跨天通宵23:50 上机次日 01:20 结账全部按通宵档 0.5 元/分钟计费T04余额不足结账把会员余额改成 1 元模拟上机 2 小时系统提示余额不足拒绝下机或允许赊欠标记T05权限越权普通管理员操作超管菜单提示“权限不足”功能不可用T06暂停超时暂停 31 分钟后点恢复系统提示已自动结账每个用例都要在代码里跑一遍并把实际输出和预期结果写进实验报告。T03 是最容易翻车的用例如果calc_fee写对了跨天用例和普通用例共用同一套代码路径不需要单独写分支。6.2 两个藏加分点启动恢复与外部费率文件启动恢复函数state_recover是我强烈建议加的功能。它的职责很单纯程序启动时打开订单文件把所有state 0的记录读入内存按机器号恢复机位状态。void state_recover() { FILE *fp fopen(orders.txt, r); char line[256]; while (fgets(line, sizeof(line), fp)) { Order o; if (!parse_order(line, o)) continue; if (o.state 0) { // 进行中的订单 seat_set_busy(o.card_id, o.start_time); } } fclose(fp); }这个函数的妙处在于它让“断电恢复”从一句空话变成可演示的功能。答辩时可以现场故意模拟异常退出——先让一个会员上机再强制结束进程重新启动后看到机位自动恢复占用状态。这个动作比任何口头解释“系统会保存状态”都有说服力。配合的外部费率配置文件则让调价演示变得干净打开rate.conf把高峰时段价格改成 1.5重启程序新订单按新价计费历史账单金额不受影响因为费率快照已经存在每条订单里。我最近一次帮朋友改这类实验最大的体会是这个题目拿高分的核心不在代码量而在边界处理。把跨天计费、状态恢复、权限边界这三个点做扎实整个系统的完成度一下就和普通版本拉开差距。如果你打算自行练手建议按这个顺序推进——先定结构体和状态机再写计费函数最后补超管扩展别一上来就写菜单循环。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

华为 MatePad / 折叠屏远控电脑,指针总差几厘米?这样校准

华为 MatePad / 折叠屏远控电脑,指针总差几厘米?这样校准

很多华为 MatePad、折叠屏用户在远程控制电脑时都有过这种抓狂时刻:明明点的是图标,鼠标却落在差几厘米的地方,反复点都点不中。这不是你的手抖,也不是屏幕坏了,而是屏幕坐标系的适配问题。这篇文章讲清楚原因&#xf…

2026/10/15 21:33:50 阅读更多 →
AI Agent哪个好用?28款国产AI Agent工具盘点与解析,一次讲透TaoToken统一接入

AI Agent哪个好用?28款国产AI Agent工具盘点与解析,一次讲透TaoToken统一接入

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 21:32:49 阅读更多 →
HoRain云--Python元类编程与描述符实战

HoRain云--Python元类编程与描述符实战

元类和描述符是Python最"魔法"的特性,也是框架的底层基石。ORM的字段、属性的getter/setter、单例模式都依赖它们。本文从描述符讲起,深入元类,并实战一个迷你ORM。一、属性访问的本质访问obj.attr时,Python调用type(ob…

2026/10/15 21:32:49 阅读更多 →

最新新闻

Flink生产级流处理Demo:Kafka+RocksDB+EventTime最小闭环

Flink生产级流处理Demo:Kafka+RocksDB+EventTime最小闭环

1. 这个Flink流处理Demo不是“Hello World”,而是能跑通生产逻辑的最小闭环你点开过多少个标着“Flink流处理Demo”的GitHub仓库?点进去,pom.xml里依赖齐全,Main.java里几行StreamExecutionEnvironment初始化,再加个so…

2026/10/15 23:12:34 阅读更多 →
Maven POM解析错误排查:从[ERROR] Some problems...定位根因

Maven POM解析错误排查:从[ERROR] Some problems...定位根因

1. 这不是报错,是Maven在向你递“诊断书”刚看到[ERROR] Some problems were encountered while processing the POMs:这行日志时,我下意识点开控制台想翻页——结果发现后面跟着密密麻麻十几行红字,像一叠没拆封的体检报告堆在终端里。它不告…

2026/10/15 23:12:33 阅读更多 →
电力市场博弈论讲义PPT:从机组报价到纳什均衡的实战框架

电力市场博弈论讲义PPT:从机组报价到纳什均衡的实战框架

简介:这份电力市场讲义PPT面向电力经济、能源管理及相关专业的学生与研究人员,聚焦博弈论在发电厂商报价决策中的应用,帮助读者建立从基本概念到寡头市场均衡模型的完整分析框架。压缩包内仅含1个PPT文件,约847KB,以图…

2026/10/15 23:12:33 阅读更多 →
TensorFlow 2.x深度学习实战:从环境搭建到模型部署全流程

TensorFlow 2.x深度学习实战:从环境搭建到模型部署全流程

如果让我给刚接触深度学习的朋友推荐第一个框架,我的答案始终都是TensorFlow。这不是因为它比其他框架更“高级”,恰恰相反,是因为它的“下限”足够低,“上限”足够高。TensorFlow 2.x把Keras深度整合进来之后,入门门槛…

2026/10/15 23:12:33 阅读更多 →
多校联合训练标程与数据要怎么刷?对拍复盘提升算法竞赛实战力

多校联合训练标程与数据要怎么刷?对拍复盘提升算法竞赛实战力

简介:2017年HDU多校联合训练第一场标程及数据,是一份面向ACM国际大学生程序设计竞赛的高质量训练资源,特别适合备战ICPC的学生、算法爱好者以及冲击区域赛的队伍参考学习。该轮训练由杭州电子科技大学联合多所高校命题组织,赛题难…

2026/10/15 23:12:33 阅读更多 →
正则表达式实践:从零构建轻量级文本抽取工具rea

正则表达式实践:从零构建轻量级文本抽取工具rea

最近有个小项目让我挺享受的,它叫rea。名字是我自己起的,全称是Regular Expression Analysis,说白了,就是一个基于正则规则的轻量级文本抽取工具。之前折腾日志分析、网页信息抽取、配置巡检这类活儿,每次都要写一堆一…

2026/10/15 23:11:32 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →