一、项目概述
本系统是一个基于Python开发的教师-学生签到考勤系统,采用人脸识别技术实现自动化签到考勤管理。系统针对学生、教师和管理员三种角色设计了不同的功能界面,支持人脸签到、考勤记录管理、课程管理、数据统计分析等功能。系统采用现代化的界面设计,提供直观的用户体验,并实现了基于角色的权限访问控制。
二、系统角色与功能
系统支持三种用户角色,每种角色具有不同的功能权限:
1. 学生端功能
- 人脸签到:学生通过摄像头进行人脸识别完成课程签到
- 签到记录查看:查看个人历史签到记录及统计信息,支持导出Excel
2. 教师端功能
- 课程管理:创建、编辑和删除课程信息
- 签到课程创建:为特定课程创建签到会话
- 学生管理:管理课程中的学生信息
- 考勤统计分析:查看和分析学生考勤数据,生成统计报表,支持导出Excel
3. 管理员端功能
- 系统设置管理:管理系统基本配置和参数
- 用户管理:管理所有教师和学生账号
- 全局数据分析:查看和分析全校考勤数据
三、系统架构
系统由以下主要模块组成:
1. 主窗口模块 (main_window.py)
主窗口是系统的核心界面,负责整合各个功能模块并提供导航功能。根据不同用户角色(学生、教师、管理员)动态加载不同的功能界面。
主要功能:
- 用户登录验证
- 角色的侧边栏菜单导航
- 页面切换管理
- 权限控制逻辑
2. 登录模块 (login_page.py)
负责用户身份验证和登录处理。
主要功能:
- 用户名和密码验证
- 角色识别
- 登录状态管理
3. 学生模块
3.1 学生签到页面 (student/student_sign_page.py)
学生通过人脸识别进行签到的核心功能页面。
主要功能:
- 实时摄像头预览
- 人脸识别和匹配
- 签到状态显示和记录
3.2 学生记录页面 (student/student_record_page.py)
学生查看个人签到记录的页面。
主要功能:
- 个人签到记录查询
- 数据统计和显示
- 签到记录导出Excel
4. 教师模块
4.1 课程管理页面 (teacher/teacher_course_page.py)
教师管理课程信息的页面。
主要功能:
- 课程信息管理(增删改查)
- 课程列表显示
4.2 签到会话管理页面 (teacher/teacher_session_page.py)
教师创建和管理签到会话的页面。
主要功能:
- 创建签到会话
- 管理签到状态
- 手动签到操作
- 签到会话详情支持导出Excel(已签到/未签到名单)
4.3 学生管理页面 (teacher/student_manage_page.py)
教师管理学生信息的页面。
主要功能:
- 学生信息管理
- 学生名单导入导出
4.4 数据统计页面 (teacher/teacher_stats_page.py)
教师查看考勤统计数据的页面。
主要功能:
- 课程出勤率统计
- 学生考勤分析
- 数据可视化展示
- 考勤数据导出Excel
5. 管理员模块
5.1 系统设置页面 (admin/admin_settings_page.py)
管理员管理系统设置的页面。
主要功能:
- 系统参数配置
- 用户管理
- 数据备份恢复
四、数据模型设计
系统使用MySQL数据库存储数据,主要包括以下实体:
用户表 (Users)
- 存储学生、教师和管理员的基本信息和登录凭证
- 包含用户ID、用户名、密码哈希、姓名、角色、创建时间等字段
学生表 (Students)
- 存储学生特有信息
- 包含学生ID、学号、班级、专业、联系方式等字段
教师表 (Teachers)
- 存储教师特有信息
- 包含教师ID、工号、部门、职称等字段
课程表 (Courses)
- 存储课程信息
- 包含课程ID、名称、学分、学时、教师ID等字段
签到会话表 (SignSessions)
- 存储教师创建的签到会话信息
- 包含会话ID、课程ID、开始时间、结束时间、地点、状态等字段
签到记录表 (SignRecords)
- 存储学生签到记录
- 包含记录ID、学生ID、会话ID、签到时间、签到状态等字段
人脸特征表 (FaceFeatures)
- 存储学生人脸特征数据
- 包含特征ID、学生ID、特征向量数据、更新时间等字段
五、技术架构
系统采用模块化设计,主要使用以下技术和框架:
前端界面
- GUI框架: PyQt5
- 界面美化: QSS样式表
- 动画效果: QPropertyAnimation
后端逻辑
- 编程语言: Python 3.6+
- 数据库访问: mysql-connector-python
- 环境配置: python-dotenv
人脸识别
- 图像处理: OpenCV
- 人脸识别: face_recognition库和dlib
- 数据处理: NumPy
数据可视化
- 图表库: Matplotlib和PyQtChart
- 数据分析: Pandas
六、系统结构
系统文件组织结构如下:
项目根目录/
│
├── main_window.py # 主窗口
├── login_page.py # 登录页面
│
├── student/ # 学生模块
│ ├── student_sign_page.py # 学生签到页面
│ └── student_record_page.py # 学生记录页面
│
├── teacher/ # 教师模块
│ ├── teacher_course_page.py # 教师课程管理页面
│ ├── teacher_session_page.py # 教师签到会话页面
│ ├── teacher_stats_page.py # 教师统计分析页面
│ └── student_manage_page.py # 学生管理页面
│
├── admin/ # 管理员模块
│ └── admin_settings_page.py # 管理员设置页面
│
├── entity/ # 实体类
│ └── user.py # 用户实体类
│
├── dao/ # 数据访问层
│ ├── user_dao.py # 用户数据访问
│ ├── course_dao.py # 课程数据访问
│ └── sign_dao.py # 签到数据访问
│
├── service/ # 服务层
│ ├── auth_service.py # 认证服务
│ ├── face_service.py # 人脸识别服务
│ └── report_service.py # 报表服务
│
├── util/ # 工具类
│ ├── db_util.py # 数据库工具
│ ├── export_util.py # 考勤数据导出Excel工具
│ └── face_util.py # 人脸识别工具
│
├── resources/ # 资源文件
│ ├── styles/ # 样式表
│ └── icons/ # 图标
│
├── database/ # 数据库脚本
│ └── tea-stu-sign.sql # 数据库结构及初始数据
│
├── data/ # 数据存储目录
│ └── faces/ # 人脸特征存储
│
└── cascades/ # OpenCV级联分类器
七、环境要求
- 操作系统: Windows/Linux/macOS
- Python: 3.6+
- 数据库: MySQL 8.0+
- 摄像头: 支持USB摄像头
依赖项
PyQt5==5.15.9
opencv-python==4.8.0
numpy==1.24.3
mysql-connector-python==8.0.33
python-dotenv==1.0.0
face_recognition==1.3.0
dlib==19.24.0
matplotlib==3.7.1
pandas==2.0.1
openpyxl
Pillow==9.5.0
PyQtChart==5.15.6
八、安装与运行
- 克隆仓库到本地
git clone https://github.com/yourusername/tea-stu-sign.git
cd tea-stu-sign
- 安装依赖项
pip install -r requirements.txt
- 安装MySQL数据库并执行初始化脚本
mysql -u your_username -p < database/tea-stu-sign.sql
脚本将自动创建数据库 tea-stu-sign、表结构及初始数据。
- 配置数据库连接
创建 .env 文件并设置以下环境变量(数据库名需为 tea-stu-sign):
DB_HOST=localhost
DB_USER=your_username
DB_PASSWORD=your_password
DB_NAME=tea-stu-sign
- 运行系统
python main_window.py
九、默认账号与初始数据
执行 database/tea-stu-sign.sql 后,系统将预置以下测试账号及初始数据:
管理员账号
- 用户名: admin
- 密码: admin
教师账号(密码均为 123456)
- teacher1 / 张老师
- teacher2 / 李老师
学生账号(密码均为 123456)
- student1 / 王小明
- student2 / 李小红
- student3 / 陈小华
- student4 / 刘小强
- student5 / 赵小芳
初始数据:包含 3 门课程(高等数学、线性代数、大学英语)、选课关系及部分历史签到会话与记录,便于快速体验系统功能。
十、注意事项
- 首次运行时会自动创建必要的数据目录
- 使用人脸识别功能时请确保摄像头工作正常
- 确保MySQL服务已启动并正确配置
- 建议在光线良好的环境下使用人脸识别功能,以提高识别准确率
本项目为个人原创,结构清晰,功能完整,适合课程设计、毕业设计和个人学习使用。如需购买项目成品或定制化需求可以联系作者。