# 人脸识别考勤系统 - Qt管理端 基于 Qt 5.15 的全功能考勤管理系统,用于管理STM32人脸识别考勤系统的签到数据。 ## 📋 功能特性 ### 📊 数据查看 ✅ **实时数据显示** - 自动读取服务器端CSV数据库 ✅ **自动刷新** - 每5秒自动刷新,支持文件监视 ✅ **多条件筛选** - 按学号、姓名、日期筛选记录 ✅ **统计信息** - 实时显示总记录数和今日签到数 ### ⚙️ 系统管理 ✅ **时间段设置** - 自定义签到时间段(上午/下午/晚上等) ✅ **记录管理** - 清空签到记录、导出备份 ✅ **文件选择** - 支持切换不同的CSV数据文件 ### 📈 统计分析 ✅ **统计报表** - 按日期范围生成学生签到统计 ✅ **多维度分析** - 总签到次数、今日签到、平均置信度 ✅ **报表导出** - 支持导出统计报表为CSV格式 ### 🎨 界面优化 ✅ **菜单栏** - 文件、管理、帮助菜单 ✅ **友好界面** - 清晰的表格展示,交替行颜色 ✅ **颜色标识** - 成功/失败状态颜色区分 ## 🛠️ 环境要求 - **Qt 5.15** 或更高版本 - **CMake 3.16** 或更高版本 - **C++17** 编译器 - Windows/Linux/macOS ## 📁 项目结构 ``` QT/ ├── CMakeLists.txt # CMake配置文件 ├── AttendanceViewer.pro # qmake项目文件 ├── build.sh / build.bat # 构建脚本 ├── include/ # 头文件目录 │ ├── MainWindow.h # 主窗口类 │ ├── AttendanceRecord.h # 考勤记录数据模型 │ ├── TimeSlotConfig.h # 时间段配置管理 │ ├── SettingsDialog.h # 设置对话框 │ └── StatisticsDialog.h # 统计报表对话框 ├── src/ # 源文件目录 │ ├── main.cpp # 程序入口 │ ├── MainWindow.cpp # 主窗口实现 │ ├── AttendanceRecord.cpp # 数据模型实现 │ ├── TimeSlotConfig.cpp # 时间段配置实现 │ ├── SettingsDialog.cpp # 设置对话框实现 │ └── StatisticsDialog.cpp # 统计报表实现 └── README.md # 本文档 ``` ## 🚀 编译和运行 ### 方法1: 使用 Qt Creator(推荐) 1. **安装Qt 5.15** - 从 [Qt官网](https://www.qt.io/download) 下载Qt 5.15 - 安装时确保选择 MinGW 或 MSVC 编译器 2. **打开项目** ``` - 启动 Qt Creator - 打开 QT/AttendanceViewer.pro - 选择合适的Kit (Qt 5.15 + MinGW/MSVC) ``` 3. **编译运行** - 点击左下角的 "运行" 按钮(绿色三角形) - 或按快捷键 `Ctrl+R` ### 方法2: 使用 qmake (命令行) #### Windows ```bash cd QT # 方法A: 使用构建脚本 build.bat # 方法B: 手动编译 qmake AttendanceViewer.pro mingw32-make cd bin AttendanceViewer.exe ``` #### Linux ```bash cd QT # 安装Qt5 (如果还没安装) sudo apt-get install qt5-default # 方法A: 使用构建脚本 chmod +x build.sh ./build.sh # 方法B: 手动编译 qmake AttendanceViewer.pro make cd bin ./AttendanceViewer ``` ### 方法3: 使用 CMake #### Linux ```bash cd QT mkdir build && cd build cmake .. make ./AttendanceViewer ``` #### Windows ```bash cd QT mkdir build cd build cmake -G "MinGW Makefiles" .. mingw32-make cd Release AttendanceViewer.exe ``` ## 📊 使用说明 ### 主界面功能 #### 1. 菜单栏功能 **文件菜单** - **选择CSV文件**: 切换到不同的考勤数据文件 - **导出数据**: 导出当前筛选的记录为CSV - **退出**: 关闭程序 **管理菜单** - **时间段设置**: 自定义签到时间段 - **统计报表**: 生成考勤统计报表 - **清空签到记录**: 清空所有签到数据(危险操作,需二次确认) **帮助菜单** - **关于**: 显示软件版本和功能信息 #### 2. 统计信息栏 - **总记录数**: 显示数据库中的总签到记录数 - **今日签到**: 显示今天的签到人次 - **状态**: 显示当前程序状态(就绪/加载中/显示记录数) #### 3. 筛选条件 - **学号**: 下拉选择特定学号,显示该学生的所有签到记录 - **姓名**: 输入姓名关键字进行模糊搜索 - **日期**: - 全部:显示所有记录 - 今天:只显示今天的记录 - 最近7天:显示过去一周的记录 - 最近30天:显示过去一个月的记录 - **清除筛选**: 一键清除所有筛选条件 #### 4. 数据表格 显示筛选后的考勤记录,包含以下列: - **签到时间**: 格式 `2026-02-01 11:06:41` - **学号**: 学生学号 - **姓名**: 学生姓名 - **置信度**: 人脸识别置信度(百分比) - **状态**: 签到状态(成功/失败),成功显示为绿色 #### 5. 底部操作按钮 - **刷新数据**: 手动刷新数据 - **导出数据**: 导出当前筛选的数据为CSV - **时间段设置**: 快速打开时间段设置对话框 - **统计报表**: 快速打开统计报表对话框 - **清空记录**: 清空所有签到记录(危险操作) ### 自动刷新机制 程序采用双重刷新机制确保数据实时性: 1. **定时刷新**: 每5秒自动检查并更新数据 2. **文件监视**: 当CSV文件被修改时立即触发刷新 ## 🔧 配置说明 ### CSV文件路径 程序默认读取路径:`../server/attendance_database.csv` 如需修改路径,请编辑 `src/MainWindow.cpp` 中的 `getDefaultCsvPath()` 函数: ```cpp QString MainWindow::getDefaultCsvPath() { // 修改为你的CSV文件路径 return "C:/path/to/your/attendance_database.csv"; } ``` ### CSV文件格式 程序读取的CSV格式如下: ```csv Timestamp,Student_ID,Name,Confidence,Status 2026-02-01 11:06:41,2,ID2,0.90,success 2026-02-01 11:06:58,1,ID1,0.87,success ``` 字段说明: - `Timestamp`: 签到时间(YYYY-MM-DD HH:MM:SS) - `Student_ID`: 学号 - `Name`: 姓名 - `Confidence`: 置信度(0.0-1.0) - `Status`: 状态(success/fail) ## 🎯 核心功能实现 ### 数据模型 (AttendanceRecord) 负责解析和存储单条考勤记录: - 从CSV行解析数据 - 时间戳格式转换 - 数据验证 ### 主窗口 (MainWindow) 核心功能实现: - UI界面构建(统计栏、筛选栏、表格、按钮) - CSV文件读取和解析 - 数据筛选逻辑(学号、姓名、日期) - 表格动态更新 - 统计信息计算 - 文件监视和自动刷新 - 数据导出 ## 📝 开发说明 ### 添加新功能 **示例:添加成绩统计图表** 1. 在 `CMakeLists.txt` 中添加 Qt Charts 模块(已包含) 2. 在 `MainWindow.h` 中添加图表成员变量 3. 在 `MainWindow.cpp` 中实现图表绘制逻辑 ### 自定义样式 可以在 `MainWindow::setupUI()` 中修改界面样式: ```cpp // 修改表格样式 m_tableWidget->setStyleSheet("QTableWidget { background-color: #f0f0f0; }"); // 修改按钮样式 m_refreshButton->setStyleSheet("QPushButton { background-color: #4CAF50; color: white; }"); ``` ## 🐛 故障排除 ### 问题1: 找不到CSV文件 **现象**: 提示"找不到考勤数据文件" **解决方案**: 1. 确认CSV文件路径是否正确 2. 检查 `../server/attendance_database.csv` 是否存在 3. 手动修改 `getDefaultCsvPath()` 函数中的路径 ### 问题2: Qt Charts模块找不到 **现象**: 编译错误 `Could not find a package configuration file provided by "Qt5Charts"` **解决方案**: ```bash # Ubuntu/Debian sudo apt-get install libqt5charts5-dev # 或从CMakeLists.txt中移除Charts(如果不需要图表功能) find_package(Qt5 REQUIRED COMPONENTS Core Widgets) # 删除Charts ``` ### 问题3: 自动刷新不工作 **现象**: 数据不会自动更新 **解决方案**: 1. 检查文件权限,确保程序有读取权限 2. 某些网络驱动器可能不支持文件监视 3. 手动点击"刷新数据"按钮 ## 📈 性能优化 - 使用 `QVector` 存储数据,高效访问 - 表格按需更新,避免全量刷新 - 文件监视避免频繁读取磁盘 - 筛选操作在内存中进行,速度快 ## 🎓 扩展功能建议 - [ ] **图表统计** - 添加签到趋势图、人员统计图 - [ ] **数据库支持** - 支持SQLite/MySQL数据库 - [ ] **Excel导出** - 使用QXlsx库导出真正的Excel格式 - [ ] **打印功能** - 支持打印考勤报表 - [ ] **多语言支持** - 中英文切换 - [ ] **主题切换** - 明暗主题切换 ## 📄 许可证 本项目与主项目使用相同的许可证,仅供学习和研究使用。 ## 🙏 致谢 感谢使用本考勤系统Qt查看器! --- **开始使用**: 1. 确保服务器端已生成 `attendance_database.csv` 文件 2. 编译并运行Qt程序 3. 享受实时查看考勤数据的便利!🚀