轻量级蛋鸡养殖管理系统:HTML+SQLite离线信息管理方案
简介《蛋鸡养殖管理系统》是一款面向中小型鸡场管理者的智能化信息管理系统融合人工智能与农业场景解决传统养殖中数据记录粗放、疫病预警滞后、产蛋量预测缺失等核心痛点适用于农业信息化初学者、系统分析与设计课程实践者及中小型养殖场技术人员。资源包为ZIP格式共12个文件含5张界面与流程示意图jpg、1个系统配置文件ini、1个帮助文档chm、1个数据库接口文件dbi、1个HTML主界面文件、1个可执行程序exe、1个启动提示文本txt及图标与背景图等整体11.28MB结构紧凑便于本地部署与功能验证。已有94人学习下载资源提供完整可运行系统环境包含可视化操作界面、基础数据库支撑、疫苗提醒与产蛋趋势预测逻辑雏形以及配套的使用说明与界面截图是理解农业AI落地、信息系统前后端协同设计的典型教学案例。1. 蛋鸡养殖管理系统不是“AI养鸡”噱头而是中小鸡场真能跑起来的轻量级信息管理系统你见过凌晨三点还在Excel里手动统计产蛋率、死淘数、饲料消耗的鸡场老板吗我见过——去年在山东一个存栏3000羽的蛋鸡场老板用三台旧电脑U盘同步数据每次免疫记录漏填两栏月底对不上账就得翻三天手写本。这不是段子是真实存在的管理断层。《蛋鸡养殖管理系统》.zip这个包恰恰卡在这个痛点上它不吹“人工智能识别鸡只健康状态”也不堆“区块链溯源鸡蛋流向”而是一套用HTMLJavaScript本地SQLite落地的、开箱即用的信息管理系统。核心功能就四块鸡群档案含批次、日龄、品种、日常巡检温湿度/光照/通风记录、产蛋日报按舍/笼位录入、耗料与用药台账带成本自动核算。技术栈极简——没后端服务、不依赖云服务器、双击index.html就能启动连Windows XP都能跑。适合年出栏5万羽以下、IT基础薄弱但急需告别手写台账的中小型鸡场。它解决的不是“未来农场”而是今天早上喂料前你能不能在手机浏览器里查到3号鸡舍昨天的破蛋率。2. 系统结构拆解HTML静态页如何撑起完整业务流这套系统表面是纯前端实则通过巧妙设计规避了传统B/S架构的部署门槛。它把数据持久化压在浏览器本地存储localStorage和SQLite数据库上用Web SQL API已废弃但兼容性极佳或更稳妥的sql.js库实现离线数据操作。整个压缩包解压后共12个文件关键结构如下2.1 文件清单与职责分工文件名类型核心职责是否可删index.htmlHTML主入口页加载所有JS/CSS❌ 绝对不可删db/init.sqlSQL脚本创建6张表chicken_batch鸡群批次、daily_inspection巡检、egg_production产蛋、feed_consumption耗料、medication用药、user用户❌ 初始化必需js/sql.jsJavaScript封装sql.js库调用提供db.run()、db.get()等方法❌ 数据库操作核心js/main.jsJavaScript页面逻辑表单提交、图表渲染Chart.js、日期校验✅ 可按需修改UI逻辑css/style.cssCSS响应式布局适配平板横屏查看✅ 可替换主题data/backup_2024.dbSQLite数据库文件预置示例数据含3个批次、7天产蛋记录✅ 首次运行后会被覆盖提示init.sql中建表语句明确约束了字段类型和NOT NULL规则。例如egg_production表中date字段为TEXT类型格式YYYY-MM-DDeggs_count为INTEGER且CHECK(eggs_count 0)——这是防止录入负数破蛋的底层防线别手贱删掉CHECK约束。2.2 数据流闭环从录入到报表的全链路验证以“录入今日产蛋量”为例流程完全在浏览器内闭环用户在index.html点击【产蛋日报】→ 加载pages/egg_form.html表单提交触发js/egg.js中的submitEggReport()函数该函数先校验if (!date || !shed_id || eggs_count 0)→ 弹窗提示并阻止提交校验通过后调用db.run(INSERT INTO egg_production ...)写入SQLite同时触发renderDailyChart()用Chart.js绘制近7天产蛋趋势图。关键代码片段js/egg.js第42行function submitEggReport() { const date document.getElementById(egg-date).value; const shed_id document.getElementById(shed-select).value; const eggs_count parseInt(document.getElementById(eggs-count).value); // 【血泪经验】此处必须parseInt否则SQL插入时会当字符串处理导致sum()计算异常 if (!date || !shed_id || isNaN(eggs_count) || eggs_count 0) { alert(请填写完整且有效的数据); return; } db.run( INSERT INTO egg_production (date, shed_id, eggs_count, notes) VALUES (?, ?, ?, ?), [date, shed_id, eggs_count, document.getElementById(egg-notes).value] ).then(() { alert(录入成功); location.reload(); // 强制刷新页面避免缓存导致重复提交 }); }这段代码背后藏着两个硬性设计原则防呆优先于功能炫酷所有输入框都加了required属性日期控件强制使用typedate杜绝2024-02-30这类非法日期本地事务原子性db.run()返回Promise失败时不会静默吞掉错误——若SQLite写入失败如磁盘满.catch()会弹出具体错误码如SQLITE_FULL比PHPMySQL堆栈报错更直白。2.3 图表渲染机制不用ECharts也能做专业农情看板系统用Chart.js v2.9.4轻量版仅127KB实现三类图表产蛋率折线图X轴为日期Y轴为eggs_count / total_chickens * 100需关联chicken_batch表查存栏数死淘率柱状图按周聚合daily_inspection表中的dead_count字段饲料成本饼图feed_consumption表中按饲料品类分组求和。渲染逻辑藏在js/chart.js中核心是动态SQL查询// js/chart.js 第87行产蛋率查询 function loadEggRateData(days 7) { const sql SELECT ep.date, ROUND(CAST(ep.eggs_count AS REAL) / cb.total_chickens * 100, 2) AS rate FROM egg_production ep JOIN chicken_batch cb ON ep.batch_id cb.id WHERE ep.date date(now, - || ? || days) ORDER BY ep.date ; return db.all(sql, [days]); // 返回[{date: 2024-05-01, rate: 92.5}, ...] }注意CAST(... AS REAL)是SQLite强制转浮点的关键否则整数除法结果为0。这个细节在官方文档里藏得深但鸡场老板不需要懂SQL他们只需要看到“5月1日产蛋率92.5%”这个数字准不准。3. 部署与初始化三步完成从解压到可用这套系统最大的优势是“零配置部署”但恰恰因为太简单新手常在第二步翻车。以下是经过17家鸡场实测验证的标准流程3.1 环境准备浏览器选择比操作系统更重要必须使用Chrome 80 或 Edge 90因依赖window.sqlitePlugin实际是sql.js的WebAssembly模块Firefox对WASM支持不稳定Safari禁用部分IndexedDB API禁用浏览器广告拦截插件某些插件会误杀sql.js的Worker线程导致“Database initialization failed”错误关闭企业级网络代理本地文件协议file:///下代理服务器可能拦截sql.js的二进制加载请求。玄学排查法若双击index.html白屏右键→“检查”→Console标签页输入typeof window.SQL——返回function说明sql.js加载成功若返回undefined则是网络问题或插件拦截。3.2 初始化数据库绕过“首次运行空白页”的陷阱解压后直接双击index.html页面会显示“数据库初始化中...”但多数人卡在这里超过3分钟就放弃。真相是js/db.js中initDB()函数默认等待db/init.sql执行完毕才渲染页面而init.sql包含6张表创建20条示例数据插入老旧电脑需4-8秒。正确做法30秒搞定用记事本打开js/db.js找到第15行// 注释掉这行await initDatabase(); // 替换为 initDatabase().then(() console.log(DB ready)).catch(e console.error(e));保存文件再双击index.html——页面立即加载底部状态栏显示“数据库加载中...”打开开发者工具F12→ Application → Storage → IndexedDB能看到egg_farm_db已创建且chicken_batch表有3条数据。3.3 首次数据录入用预置示例验证系统活性别急着录入自家鸡群数据先用预置数据跑通全流程登录账号admin/123456硬编码在js/auth.js第22行进入【鸡群档案】→ 点击【新增批次】→ 填写批次号2024-SH-001品种海兰褐入栏日期2024-01-15存栏数2850提交后进入【产蛋日报】→ 选择该批次→ 录入今日产蛋2780枚切换到【报表中心】→ 查看“产蛋率趋势图”确认曲线正常生成。关键验证点如果图表显示“无数据”检查egg_production表是否真有记录——在开发者工具Console中执行db.all(SELECT * FROM egg_production).then(console.table)若返回空数组说明submitEggReport()未触发大概率是表单ID写错如eggs-count写成egg-count。4. 避坑指南中小鸡场最常踩的5个“看似简单实则致命”的坑这套系统设计精巧但落地时总被现实打脸。以下是我在山东、河南、河北12家鸡场现场陪跑总结的血泪教训每一条都对应真实故障场景4.1 现象录入的产蛋数在报表里显示为0原因egg_production表中eggs_count字段定义为INTEGER但用户用中文输入法输入了全角数字“”Unicode UFF12等SQLite无法转换导致插入NULL后续sum()计算结果为0。解决在submitEggReport()函数开头增加清洗const eggs_count parseInt(document.getElementById(eggs-count).value.replace(/[^\d]/g, ));4.2 现象更换电脑后历史数据全部丢失原因系统数据存在浏览器IndexedDB换设备等于换数据库。用户误以为“U盘拷走整个zip包就能迁移”却不知data/backup_2024.db只是初始模板实际数据从未导出。解决教会用户定期导出——在【系统设置】页点击【备份数据库】生成egg_farm_backup_20240501.db文件本质是IndexedDB序列化后的二进制U盘拷走即可。恢复时用同一按钮导入。4.3 现象巡检记录里的温度值超出合理范围如-50℃原因daily_inspection表对temperature字段无CHECK约束用户手误输入-50而非25。解决修改db/init.sql在temperature REAL CHECK(temperature BETWEEN -30 AND 50)后追加约束重新初始化数据库。4.4 现象手机浏览器打开页面后日期控件无法选择原因Android Chrome 110禁用input typedate的原生弹窗回退到文本输入用户输错格式如01/05/2024导致SQL报错。解决在js/date.js中引入轻量级日期选择器如flatpickr替换所有input typedate并强制格式化为YYYY-MM-DD。4.5 现象多用户同时操作时A录入的数据B立刻可见但C刷新后消失原因系统未实现WebSocket同步所有用户读取的是各自浏览器的IndexedDB副本。C未主动刷新看到的是旧快照。解决在js/main.js中加入定时轮询每30秒db.all(SELECT MAX(id) FROM egg_production)若ID变化则提示“检测到新数据是否刷新”——不追求实时但消灭“我以为他录了其实没录”的信任危机。5. 进阶技巧把系统变成鸡场自己的“数字养殖手册”很多用户用了一周就弃用不是系统不好而是没把它嵌入日常作业流。我帮鸡场做的最关键的改造是把系统从“数据录入工具”升级为“养殖动作触发器”。以下是三个可立即落地的技巧5.1 用巡检记录自动触发预警提醒系统原本的巡检只是填表我们给它加了“条件动作”在js/inspection.js的submitInspection()末尾插入// 检查温湿度越界 if (temperature 32 || temperature 15 || humidity 80 || humidity 40) { const msg ⚠️ ${date} ${shed_name} 温湿度异常${temperature}℃/${humidity}%; // 调用浏览器通知API需HTTPS故改用本地弹窗 showNotification(msg); // 同时写入预警日志表 db.run(INSERT INTO alert_log (type, message, timestamp) VALUES (?, ?, ?), [environment, msg, new Date().toISOString()]); }效果饲养员巡检时发现3号舍温度33℃提交后立刻弹窗提醒“开启湿帘”并自动生成预警记录。老板手机端查alert_log表就知道哪天哪个舍出了问题。5.2 产蛋率下滑自动关联分析养殖户最怕产蛋率连续3天下跌但人工翻台账效率低。我们在报表页加了智能分析模块// js/report.js 第120行产蛋率趋势分析 function analyzeEggTrend() { const data getEggRateLast7Days(); // 获取近7天产蛋率数组 const isDeclining data.slice(-3).every((v, i, arr) i 0 || v arr[i-1] - 0.5 // 连续3天降超0.5% ); if (isDeclining) { // 关联查询同期巡检异常项 const sql SELECT di.date, di.temperature, di.humidity, di.notes FROM daily_inspection di WHERE di.date IN (${data.slice(-3).map(d ${d.date}).join(,)}) AND (di.temperature 32 OR di.humidity 80) ORDER BY di.date DESC ; db.all(sql).then(alerts { if (alerts.length) { showAnalysisPopup(产蛋下滑可能原因${alerts[0].notes || 温湿度超标}); } }); } }这个函数在打开报表页时自动执行把“数据波动”翻译成“操作建议”这才是养殖者真正需要的“智能”。5.3 用SQLite虚拟表对接Excel报表鸡场老板习惯用Excel做月度汇总我们用SQLite的csv扩展实现无缝对接下载sqlite3.dllWindows或libsqlite3.dylibmacOS在命令行执行# 导出产蛋日报为CSV sqlite3 egg_farm.db .mode csv .output egg_report_202405.csv SELECT * FROM egg_production; # 导入Excel数据到用药表假设Excel已保存为CSV sqlite3 egg_farm.db .mode csv .import medication_import.csv medication实操价值兽医发来的用药方案Excel饲养员直接保存为CSV双击运行import_medication.bat内含上述命令3秒完成批量导入——比网页表单录入50条快10倍。从那以后我每次给新鸡场部署都强制走一遍这三步先加预警弹窗建立信任再跑产蛋分析证明价值最后教Excel导入解决历史数据迁移。系统不再是“老板要求装的软件”而成了“小李巡检时必看的那块屏”。希望帮到你。本文还有配套的精品资源点击获取