本项目为 C11 多文件工程,实现海水养殖水质数据的读取、清洗、查询、统计、预警、预测、报告输出、登录权限控制和备份恢复。
make gcc
./WaterQualitySystem清理编译产物:
make clean| 角色 | 用户名 | 密码 | 权限 |
|---|---|---|---|
| 管理员 | admin |
123456 |
全部功能 |
| 访客 | guest |
guest |
仅查看数据概览和统计分析报告 |
系统支持管理员创建扩展用户。扩展用户保存到 data/auth/users.dat,默认账户不写入该文件。管理员可导出用户列表到 output/users_export.csv。
WaterQualitySystem/
├── include/ # 头文件、结构体、枚举、函数声明
├── src/ # 各功能模块实现
├── data/ # 默认CSV数据与用户数据目录
├── output/
│ ├── clean/ # 清洗后的CSV与二进制数据
│ └── reports/ # 数据概览、统计、预警、预测报告
├── backups/ # 数据备份文件
├── Makefile
└── README.md
| 类型 | 路径 |
|---|---|
| 原始数据 | data/data_modify.csv |
| 清洗CSV | output/clean/clean_data.csv |
| 清洗二进制 | output/clean/clean_data.bin |
| 数据概览报告 | output/reports/overview.txt |
| 统计分析报告 | output/reports/statistics.txt |
| 预警报告 | output/reports/warning.txt |
| 预测报告 | output/reports/prediction.txt |
| 备份目录 | backups/ |
- 动态数组存储水质时间序列数据。
- CSV读取自动跳过表头,支持缺失值识别、格式错误处理和内存失败处理。
- 支持清洗数据保存为CSV和二进制文件。
- 支持二进制顺序读取、随机读取和CSV/二进制存储性能对比。
- 支持分页浏览,每页15条,并可下一页、上一页、跳转页。
- 支持按任意参数范围筛选。
- 支持按任意参数升序或降序排序。
- 支持单条修改,修改前校验合理范围,修改前自动备份,修改后可选择保存。
- 支持单条删除和按范围批量删除,删除前显示影响数量、确认并自动备份。
- 异常值检测范围:水温、盐度、pH、DO、降水量、气温均按任务书规定上下限判断。
- 单条记录异常字段数大于等于3个时删除整条记录。
- 单条记录异常字段数小于3个时将异常值转为缺失值,再用均值逼近法填充。
- 缺失值支持空字段、
NaN/nan、-999、-9999。 - 均值逼近法默认取前10个和后10个有效值;边界不足时使用单侧有效均值,两侧均无有效值时使用全集均值。
- 对 Temp、DO、pH、Salinity 执行移动平均滤波。
- 报告中输出窗口3、5、7、9、11的滤波前后标准差变化,并给出最佳窗口建议。
- 默认清洗输出使用窗口5。
- 计算6个参数的均值、最大值、最小值、标准差。
- 计算完整6×6 Pearson相关系数矩阵。
- 输出最强正相关、最强负相关,以及 Temp-DO、pH-DO、Temp-Air_temp、Temp-Salinity 的重点相关性。
- 按时间序列规则从
2025-01-01 12:00起,每5分钟推算记录时间。 - 凌晨缺氧预警:每天03:00至05:00统计DO均值,低于4.0触发亚缺氧预警,低于3.0触发严重缺氧预警。
- 盐度突变预警:检测1小时下降超过2 PSU、24小时累计下降超过5 PSU。
- 预警报告包含预警时间、类型、说明和处理建议。
- 使用单因素线性回归建立
y = a*x + b模型。 - 默认重点模型为
Air_temp -> DO。 - 使用决定系数 R² 评估拟合效果。
- 使用留出法:前80%为训练集,后20%为测试集,计算RMSE。
- 支持比较
Air_temp -> DO、Temp -> DO、pH -> DO、Salinity -> DO的R²和RMSE。 - 预测报告包含模型参数、R²、RMSE、最佳单因子和线性回归局限性分析。
- 程序启动后先登录,最多允许3次失败尝试。
- 管理员可访问全部功能。
- 访客仅能查看数据概览和统计分析报告。
- 主菜单和业务执行层均进行权限校验。
- 菜单支持循环执行,子菜单可返回主菜单,退出时需要确认。
- 未加载数据时访问依赖数据的功能会提示错误。
- 支持手动备份和修改、删除、恢复前自动备份。
- 备份文件名包含日期、时间和序号,避免覆盖旧备份。
- 恢复时会列出可用备份,恢复前需要确认。
- 恢复前自动备份当前内存数据。
- 恢复文件会校验CSV表头和列数,恢复失败时当前数据保持不变。
- CSV文本格式:便于人工查看、调试和跨软件交换,但体积较大,读写需要文本解析。
- 二进制格式:适合程序内部快速加载、随机读取和批量处理,但不可直接人工阅读。
- 数据概览报告会输出CSV与二进制文件大小、写入时间、读取时间和是否人类可读。
- 使用
.h与.c分离的多文件组织。 - 头文件均使用条件编译防止重复包含。
- 数据集使用动态数组,容量不足时自动扩容。
- 所有主要文件操作、内存分配和菜单输入均包含错误处理。