517 lines
14 KiB
Markdown
517 lines
14 KiB
Markdown
# 校园考勤打卡系统
|
||
|
||
一个基于Flask的校园考勤打卡管理系统,支持学生考勤数据的录入、管理、统计和可视化展示。
|
||
|
||
## 📋 项目简介
|
||
|
||
本系统是为校园环境设计的考勤打卡管理平台,能够处理学生的日常打卡数据,提供完整的考勤统计分析功能。系统支持管理员和学生两种角色,实现了考勤数据的全生命周期管理。
|
||
|
||
## ✨ 主要功能
|
||
|
||
### 👨💼 管理员功能
|
||
- **学生管理**:添加、编辑、删除学生信息
|
||
- **考勤数据导入**:支持CSV/XLSX格式的批量数据导入
|
||
- **考勤数据管理**:查看、编辑、删除考勤记录
|
||
- **统计分析**:生成各类考勤统计报表
|
||
- **权限管理**:用户角色和权限控制
|
||
- **数据修正**:修正错误的考勤时间和状态
|
||
|
||
### 👨🎓 学生功能
|
||
- **个人考勤查询**:查看个人从入学以来的所有考勤记录
|
||
- **考勤统计**:按周统计个人出勤时长、迟到、缺勤次数
|
||
- **请假管理**:提交请假申请,查看请假记录
|
||
- **个人信息**:查看和修改个人基本信息
|
||
- **密码管理**:修改登录密码
|
||
|
||
### 📊 数据展示
|
||
- **可视化界面**:直观的数据展示界面
|
||
- **多维度查询**:按年级、学号、姓名进行查询
|
||
- **实时统计**:实时显示各类考勤统计数据
|
||
- **历史记录**:完整的考勤历史记录追踪
|
||
|
||
## 🛠 技术栈
|
||
|
||
- **后端框架**:Flask
|
||
- **数据库**:MySQL
|
||
- **前端技术**:HTML5, CSS3, JavaScript
|
||
- **数据处理**:Pandas(CSV/XLSX处理)
|
||
- **认证授权**:Flask-Login
|
||
- **模板引擎**:Jinja2
|
||
|
||
## 📁 项目结构
|
||
|
||
```
|
||
.
|
||
├── app/ # 应用主目录
|
||
│ ├── models/ # 数据模型
|
||
│ │ ├── user.py # 用户模型
|
||
│ │ ├── student.py # 学生模型
|
||
│ │ └── attendance.py # 考勤模型
|
||
│ ├── routes/ # 路由控制器
|
||
│ │ ├── auth.py # 认证路由
|
||
│ │ ├── admin.py # 管理员路由
|
||
│ │ └── student.py # 学生路由
|
||
│ ├── templates/ # 前端模板
|
||
│ │ ├── auth/ # 认证相关页面
|
||
│ │ ├── admin/ # 管理员页面
|
||
│ │ ├── student/ # 学生页面
|
||
│ │ └── layout/ # 布局模板
|
||
│ ├── static/ # 静态资源
|
||
│ │ ├── css/ # 样式文件
|
||
│ │ ├── js/ # JavaScript文件
|
||
│ │ └── images/ # 图片资源
|
||
│ └── utils/ # 工具函数
|
||
│ ├── database.py # 数据库操作
|
||
│ ├── auth_helpers.py # 认证辅助函数
|
||
│ └── attendance_importer.py # 考勤数据导入
|
||
├── config/ # 配置文件
|
||
├── tests/ # 测试文件
|
||
├── logs/ # 日志文件
|
||
├── requirements.txt # 依赖包列表
|
||
├── run.py # 应用启动文件
|
||
└── init_db.py # 数据库初始化脚本
|
||
```
|
||
|
||
## ⚙️ 考勤规则
|
||
|
||
### 工作日打卡时段
|
||
- **早上时段**:6:00-12:00 可打卡,要求9:45-11:30
|
||
- **下午时段**:13:30-18:30 可打卡,要求14:45-17:30
|
||
- **晚上时段**:19:00-23:30 可打卡(非强制)
|
||
|
||
### 考勤计算规则
|
||
- **迟到计算**:超过规定上班时间即为迟到
|
||
- **缺卡处理**:未在规定时间内打卡视为缺卡
|
||
- **时长统计**:
|
||
- 工作日有效打卡计入**实际出勤时长**和**班内工作时长**
|
||
- 休息日打卡计入**实际出勤时长**和**加班总时长**
|
||
|
||
## 🚀 安装部署
|
||
|
||
### 环境要求
|
||
- Python 3.8+
|
||
- MySQL 5.7+
|
||
- pip
|
||
|
||
### 安装步骤
|
||
|
||
1. **克隆项目**
|
||
```bash
|
||
git clone <repository-url>
|
||
cd attendance-system
|
||
```
|
||
|
||
2. **创建虚拟环境**
|
||
```bash
|
||
python -m venv venv
|
||
source venv/bin/activate # Linux/Mac
|
||
# venv\Scripts\activate # Windows
|
||
```
|
||
|
||
3. **安装依赖**
|
||
```bash
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
4. **配置数据库**
|
||
```bash
|
||
# 创建数据库
|
||
mysql -u root -p
|
||
CREATE DATABASE attendance_system;
|
||
```
|
||
|
||
5. **配置环境变量**
|
||
```bash
|
||
# 创建 .env 文件
|
||
cp .env.example .env
|
||
# 编辑数据库连接信息
|
||
```
|
||
|
||
6. **初始化数据库**
|
||
```bash
|
||
python init_db.py
|
||
```
|
||
|
||
7. **启动应用**
|
||
```bash
|
||
python run.py
|
||
```
|
||
|
||
### 环境变量配置
|
||
|
||
在 `.env` 文件中配置以下变量:
|
||
|
||
```env
|
||
# 数据库配置
|
||
DB_HOST=localhost
|
||
DB_USER=your_username
|
||
DB_PASSWORD=your_password
|
||
DB_NAME=attendance_system
|
||
|
||
# Flask配置
|
||
SECRET_KEY=your_secret_key
|
||
DEBUG=True
|
||
```
|
||
|
||
## 📖 使用说明
|
||
|
||
### 首次使用
|
||
|
||
1. **创建管理员账户**
|
||
```bash
|
||
python init_db.py --create-admin
|
||
```
|
||
|
||
2. **导入学生数据**
|
||
- 登录管理员账户
|
||
- 进入"学生管理"页面
|
||
- 使用"批量导入"功能导入学生信息
|
||
|
||
3. **上传考勤数据**
|
||
- 进入"考勤管理"页面
|
||
- 使用"数据导入"功能上传CSV/XLSX文件
|
||
|
||
### 数据导入格式
|
||
|
||
**学生信息CSV格式**:
|
||
```csv
|
||
学号,姓名,性别,年级,专业,导师,学院,学位类型
|
||
2021001,张三,男,2021,计算机科学,李教授,计算机学院,学硕
|
||
```
|
||
|
||
**考勤数据CSV格式**:
|
||
```csv
|
||
学号,姓名,日期,签到时间,签退时间,状态
|
||
2021001,张三,2024-01-15,09:30,11:45,正常
|
||
```
|
||
|
||
## 👥 用户角色
|
||
|
||
### 管理员权限
|
||
- 查看所有学生信息和考勤数据
|
||
- 管理学生账户(增删改查)
|
||
- 导入和管理考勤数据
|
||
- 生成统计报表
|
||
- 系统配置管理
|
||
|
||
### 学生权限
|
||
- 查看个人考勤记录
|
||
- 查看个人统计数据
|
||
- 申请请假
|
||
- 修改个人信息
|
||
- 修改登录密码
|
||
|
||
## 📊 数据统计
|
||
|
||
系统提供多维度的数据统计功能:
|
||
|
||
- **个人统计**:个人出勤时长、迟到次数、缺勤次数
|
||
- **年级统计**:按年级汇总的考勤数据
|
||
- **时间统计**:按周、月、学期的考勤趋势
|
||
- **排行榜**:出勤时长排名、迟到次数排名等
|
||
|
||
## 🔧 开发说明
|
||
|
||
### 添加新功能
|
||
1. 在对应的模型文件中添加数据模型
|
||
2. 在路由文件中添加业务逻辑
|
||
3. 创建相应的HTML模板
|
||
4. 更新CSS和JavaScript文件
|
||
|
||
### 数据库迁移
|
||
```bash
|
||
# 备份数据库
|
||
mysqldump -u username -p attendance_system > backup.sql
|
||
|
||
# 修改数据库结构后重新初始化
|
||
python init_db.py --reset
|
||
```
|
||
|
||
## 📄 许可证
|
||
|
||
[MIT License](LICENSE)
|
||
|
||
## 🤝 贡献指南
|
||
|
||
1. Fork 本项目
|
||
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
|
||
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
|
||
4. 推送到分支 (`git push origin feature/AmazingFeature`)
|
||
5. 创建 Pull Request
|
||
|
||
## 📞 联系我们
|
||
|
||
如有问题或建议,请通过以下方式联系:
|
||
|
||
- 📧 Email: [your-email@example.com]
|
||
- 🐛 Issues: [GitHub Issues](https://github.com/your-username/attendance-system/issues)
|
||
|
||
## 🎯 Todo List
|
||
|
||
- [ ] 移动端适配
|
||
- [ ] 数据导出功能
|
||
- [ ] 邮件通知功能
|
||
- [ ] 更多统计图表
|
||
- [ ] API接口文档
|
||
- [ ] 单元测试覆盖
|
||
|
||
---
|
||
|
||
⭐ 如果这# 校园考勤打卡系统
|
||
|
||
一个基于Flask的校园考勤打卡管理系统,支持学生考勤数据的录入、管理、统计和可视化展示。
|
||
|
||
## 📋 项目简介
|
||
|
||
本系统是为校园环境设计的考勤打卡管理平台,能够处理学生的日常打卡数据,提供完整的考勤统计分析功能。系统支持管理员和学生两种角色,实现了考勤数据的全生命周期管理。
|
||
|
||
## ✨ 主要功能
|
||
|
||
### 👨💼 管理员功能
|
||
- **学生管理**:添加、编辑、删除学生信息
|
||
- **考勤数据导入**:支持CSV/XLSX格式的批量数据导入
|
||
- **考勤数据管理**:查看、编辑、删除考勤记录
|
||
- **统计分析**:生成各类考勤统计报表
|
||
- **权限管理**:用户角色和权限控制
|
||
- **数据修正**:修正错误的考勤时间和状态
|
||
|
||
### 👨🎓 学生功能
|
||
- **个人考勤查询**:查看个人从入学以来的所有考勤记录
|
||
- **考勤统计**:按周统计个人出勤时长、迟到、缺勤次数
|
||
- **个人信息**:查看和修改个人基本信息
|
||
- **密码管理**:修改登录密码
|
||
|
||
### 📊 数据展示
|
||
- **可视化界面**:直观的数据展示界面
|
||
- **多维度查询**:按年级、学号、姓名进行查询
|
||
- **实时统计**:实时显示各类考勤统计数据
|
||
- **历史记录**:完整的考勤历史记录追踪
|
||
|
||
## 🛠 技术栈
|
||
|
||
- **后端框架**:Flask
|
||
- **数据库**:MySQL
|
||
- **前端技术**:HTML5, CSS3, JavaScript
|
||
- **数据处理**:Pandas(CSV/XLSX处理)
|
||
- **认证授权**:Flask-Login
|
||
- **模板引擎**:Jinja2
|
||
|
||
## 📁 项目结构
|
||
|
||
```
|
||
.
|
||
├── app/ # 应用主目录
|
||
│ ├── models/ # 数据模型
|
||
│ │ ├── user.py # 用户模型
|
||
│ │ ├── student.py # 学生模型
|
||
│ │ └── attendance.py # 考勤模型
|
||
│ ├── routes/ # 路由控制器
|
||
│ │ ├── auth.py # 认证路由
|
||
│ │ ├── admin.py # 管理员路由
|
||
│ │ └── student.py # 学生路由
|
||
│ ├── templates/ # 前端模板
|
||
│ │ ├── auth/ # 认证相关页面
|
||
│ │ ├── admin/ # 管理员页面
|
||
│ │ ├── student/ # 学生页面
|
||
│ │ └── layout/ # 布局模板
|
||
│ ├── static/ # 静态资源
|
||
│ │ ├── css/ # 样式文件
|
||
│ │ ├── js/ # JavaScript文件
|
||
│ │ └── images/ # 图片资源
|
||
│ └── utils/ # 工具函数
|
||
│ ├── database.py # 数据库操作
|
||
│ ├── auth_helpers.py # 认证辅助函数
|
||
│ └── attendance_importer.py # 考勤数据导入
|
||
├── config/ # 配置文件
|
||
├── tests/ # 测试文件
|
||
├── logs/ # 日志文件
|
||
├── requirements.txt # 依赖包列表
|
||
├── run.py # 应用启动文件
|
||
└── init_db.py # 数据库初始化脚本
|
||
```
|
||
|
||
## ⚙️ 考勤规则
|
||
|
||
### 工作日打卡时段
|
||
- **早上时段**:6:00-12:00 可打卡,要求9:45-11:30
|
||
- **下午时段**:13:30-18:30 可打卡,要求14:45-17:30
|
||
- **晚上时段**:19:00-23:30 可打卡(非强制)
|
||
|
||
### 考勤计算规则
|
||
- **迟到计算**:超过规定上班时间即为迟到
|
||
- **缺卡处理**:未在规定时间内打卡视为缺卡
|
||
- **时长统计**:
|
||
- 工作日有效打卡计入**实际出勤时长**和**班内工作时长**
|
||
- 休息日打卡计入**实际出勤时长**和**加班总时长**
|
||
|
||
## 🚀 安装部署
|
||
|
||
### 环境要求
|
||
- Python 3.8+
|
||
- MySQL 5.7+
|
||
- pip
|
||
|
||
### 安装步骤
|
||
|
||
1. **克隆项目**
|
||
```bash
|
||
git clone <repository-url>
|
||
cd attendance-system
|
||
```
|
||
|
||
2. **创建虚拟环境**
|
||
```bash
|
||
python -m venv venv
|
||
source venv/bin/activate # Linux/Mac
|
||
# venv\Scripts\activate # Windows
|
||
```
|
||
|
||
3. **安装依赖**
|
||
```bash
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
4. **配置数据库**
|
||
```bash
|
||
# 创建数据库
|
||
mysql -u root -p
|
||
CREATE DATABASE attendance_system;
|
||
```
|
||
|
||
5. **配置环境变量**
|
||
```bash
|
||
# 创建 .env 文件
|
||
cp .env.example .env
|
||
# 编辑数据库连接信息
|
||
```
|
||
|
||
6. **初始化数据库**
|
||
```bash
|
||
python init_db.py
|
||
```
|
||
|
||
7. **启动应用**
|
||
```bash
|
||
python run.py
|
||
```
|
||
|
||
### 环境变量配置
|
||
|
||
在 `.env` 文件中配置以下变量:
|
||
|
||
```env
|
||
# 数据库配置
|
||
DB_HOST=localhost
|
||
DB_USER=your_username
|
||
DB_PASSWORD=your_password
|
||
DB_NAME=attendance_system
|
||
|
||
# Flask配置
|
||
SECRET_KEY=your_secret_key
|
||
DEBUG=True
|
||
```
|
||
|
||
## 📖 使用说明
|
||
|
||
### 首次使用
|
||
|
||
1. **创建管理员账户**
|
||
```bash
|
||
python init_db.py --create-admin
|
||
```
|
||
|
||
2. **导入学生数据**
|
||
- 登录管理员账户
|
||
- 进入"学生管理"页面
|
||
- 使用"批量导入"功能导入学生信息
|
||
|
||
3. **上传考勤数据**
|
||
- 进入"考勤管理"页面
|
||
- 使用"数据导入"功能上传CSV/XLSX文件
|
||
|
||
### 数据导入格式
|
||
|
||
**学生信息CSV格式**:
|
||
```csv
|
||
学号,姓名,性别,年级,专业,导师,学院,学位类型
|
||
2021001,张三,男,2021,计算机科学,李教授,计算机学院,学硕
|
||
```
|
||
|
||
**考勤数据CSV格式**:
|
||
```csv
|
||
学号,姓名,日期,签到时间,签退时间,状态
|
||
2021001,张三,2024-01-15,09:30,11:45,正常
|
||
```
|
||
|
||
## 👥 用户角色
|
||
|
||
### 管理员权限
|
||
- 查看所有学生信息和考勤数据
|
||
- 管理学生账户(增删改查)
|
||
- 导入和管理考勤数据
|
||
- 生成统计报表
|
||
- 系统配置管理
|
||
|
||
### 学生权限
|
||
- 查看个人考勤记录
|
||
- 查看个人统计数据
|
||
- 申请请假
|
||
- 修改个人信息
|
||
- 修改登录密码
|
||
|
||
## 📊 数据统计
|
||
|
||
系统提供多维度的数据统计功能:
|
||
|
||
- **个人统计**:个人出勤时长、迟到次数、缺勤次数
|
||
- **年级统计**:按年级汇总的考勤数据
|
||
- **时间统计**:按周、月、学期的考勤趋势
|
||
- **排行榜**:出勤时长排名、迟到次数排名等
|
||
|
||
## 🔧 开发说明
|
||
|
||
### 添加新功能
|
||
1. 在对应的模型文件中添加数据模型
|
||
2. 在路由文件中添加业务逻辑
|
||
3. 创建相应的HTML模板
|
||
4. 更新CSS和JavaScript文件
|
||
|
||
### 数据库迁移
|
||
```bash
|
||
# 备份数据库
|
||
mysqldump -u username -p attendance_system > backup.sql
|
||
|
||
# 修改数据库结构后重新初始化
|
||
python init_db.py --reset
|
||
```
|
||
|
||
## 📄 许可证
|
||
|
||
[MIT License](LICENSE)
|
||
|
||
## 🤝 贡献指南
|
||
|
||
1. Fork 本项目
|
||
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
|
||
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
|
||
4. 推送到分支 (`git push origin feature/AmazingFeature`)
|
||
5. 创建 Pull Request
|
||
|
||
## 📞 联系我们
|
||
|
||
如有问题或建议,请通过以下方式联系:
|
||
|
||
- 📧 Email: [2568813500@qq.com]
|
||
|
||
## 🎯 Todo List
|
||
|
||
- [ ] 移动端适配
|
||
- [ ] 数据导出功能
|
||
- [ ] 邮件通知功能
|
||
- [ ] 更多统计图表
|
||
- [ ] API接口文档
|
||
- [ ] 单元测试覆盖
|
||
|
||
---
|
||
|
||
⭐ 如果这个项目对你有帮助,请给一个star吧! |