考勤管理系统在毕设选题里算是"常青树",但正因为它常见,想做出区分度反而更难。如果你正在纠结 SpringBoot 考勤管理系统怎么做、或者已经开工但卡在业务设计上,这篇文章基本能覆盖你从选题到答辩的完整链路。我会从一个把这套系统完整做完并顺利通过答辩的人的角度,把技术选型、数据库设计、核心代码实现、前后端联调、部署演示这些环节里真正坑过我的地方都摊开讲。
1. 选题之前,先搞清楚小型企业的考勤到底难在哪里
很多人选考勤管理系统当毕设,是觉得"打卡嘛,存一下时间就行"。但我把需求文档写了三版之后才意识到,考勤系统真正的复杂点根本不在打卡本身,而在"规则"。小型企业的考勤需求往往比大型公司更碎、更灵活,比如:不同部门上班时间不一样、有人要上夜班、有人经常外勤、请假要审批、加班要关联调休。这些需求如果不在设计阶段理清楚,后面写代码就是不停打补丁。
我当初自己在选题的时候,导师一句话点醒了我,他说:"考勤系统人人都做过,但大部分人做的只是一个记录表,不是管理系统。你要让老师看到你理解'管理'这两个字。"这句话直接影响了我后面所有的功能设计。
所以这个项目在动手之前,我先把需求拆成了几个维度:
- 基础数据维度:员工信息、部门信息、岗位信息,这些是系统运转的地基。
- 规则维度:上下班时间、午休时长、迟到/早退/旷工判定阈值、是否弹性打卡,这些是考勤能不能算准的关键。
- 流程维度:请假、加班、外勤、补卡审批,这些是让系统真正能落地使用的保障。
- 统计维度:日报、月报、异常记录、导出 Excel,这是使用者(尤其老板或人事)最关心的部分。
提示:如果你的毕设题名叫"xx管理系统",但需求里只有增删改查,大概率会被答辩老师问住。管理系统的核心是"流程+规则+统计",而不是界面多花哨。
把需求理到这个颗粒度,再去设计数据库和代码结构,基本就不会出现推翻重来的情况了。这一步看着不产代码,但节省的时间远超你的想象。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术选型与工程初始化:SpringBoot 版本、JDK 和前后端分离的取舍
技术选型决定你接下来两三个月的开发体验。我的选择是:后端 Spring Boot 2.7.18 + MyBatis-Plus 3.5.x + MySQL 8.0,前端 Vue 2 + Element UI,用前后端分离的方式开发。这套组合是当前毕设项目里最稳的搭配,没有之一。
2.1 为什么是 Spring Boot 而不是 Spring MVC 或 SSM
Spring Boot 最大的价值是"约定优于配置",不需要你手动写一堆 XML 配置。但这也带来了一个问题:答辩老师很喜欢追问"Spring Boot 自动装配原理是什么",这部分你必须提前准备。简单说,Spring Boot 之所以能"零配置"启动,核心是 @SpringBootApplication 中组合了 @EnableAutoConfiguration,它会通过 spring.factories 或 AutoConfiguration.imports 文件加载大量 AutoConfiguration 类,再根据 @ConditionalOnClass、@ConditionalOnProperty 等条件注解决定哪些配置类生效。
因为考勤系统消息提醒、缓存这类功能暂时用不上,我建议:
- 数据库访问用 MyBatis-Plus,因为它内置了单表 CRUD 和分页插件,能把重复劳动砍掉一半。
- 权限认证用 Sa-Token 或 Spring Security + JWT。如果不想在权限上花太多时间,Sa-Token 的学习成本更低。
- 项目构建用 Maven,版本管理清晰,换机器也能快速
mvn clean package打 jar 包。
2.2 环境版本的一个关键教训:JDK 1.8 仍然是毕设项目的最优解
热搜词里出现了"springboot jdk1.8打包到docker desktop"和"springboot版本太高",这其实反应了一个很真实的场景:新手在环境问题上浪费了大量时间。
我的建议是用 JDK 1.8,不要用 JDK 17。原因很简单,Spring Boot 2.7.x 对 JDK 1.8 的支持非常成熟,MyBatis-Plus、各种工具类的兼容性也都默认按 1.8 适配。如果你用了 JDK 17,Spring Boot 2.x 还能跑,但 Lombok、MyBatis-Plus 低版本可能报反射相关错误;如果你直接上 Spring Boot 3.x,就会出现 javax 到 jakarta 的包名变更问题。
创建项目的时候按下面这套来:
- Spring Boot 2.7.18
- JDK 1.8
- MyBatis-Plus 3.5.3.1
- MySQL 8.0(或 5.7 也行)
- Lombok、Hutool(工具库,能省很多代码)、EasyExcel(导出报表用)
提示:如果你用的是 IDEA,创建 Spring Boot 项目时默认可能选最新版本,一定要手动改成 2.7.x。另外确保 IDEA 的 Project Structure 里 Project SDK 和 Modules 的 Language Level 都设置为 8。
2.3 前端选型:Vue 2 + Element UI 为什么是毕设最优解
前端这块,很多同学纠结要不要用 Vue 3 + Element Plus。我的判断是:除非你已经很熟悉 Vue 3,否则选 Vue 2 + Element UI 会顺利很多。原因很现实:
- 毕设系统的核心是后台管理界面,Element UI 的表格、表单、日期选择器、对话框组件非常成熟,直接查文档就能用。
- Vue 2 相关的问题解决方案在网上一搜一大把,碰到报错基本都能找到案例。
- Vue 3 + Element Plus 虽然新,但在某些依赖版本配合上会出现兼容坑,不值得在毕设阶段冒险。
一个很实用的初始化思路:用 Vue CLI 先搭出项目框架,然后从路由层面把页面划分好,比如登录页、首页布局、员工管理、考勤管理、请假管理、统计报表等模块。不用急着写业务逻辑,先把页面跳转跑通,成就感上来之后,后面的开发动力会足很多。
3. 数据库建模:考勤系统最少需要几张表,每张表为什么这么设计
考勤系统数据库设计算是一个重点,答辩老师大概率会盯着看表关系。我最终设计了 7 张核心表,不是凭空想的,是从需求一步步推演出来的。
3.1 表结构与字段
员工表 sys_user
| 字段 | 类型 | 说明 |
|---|---|---|
| id | bigint | 主键 |
| username | varchar | 登录账号 |
| password | varchar | 密码(BCrypt 加密) |
| name | varchar | 姓名 |
| dept_id | bigint | 部门 ID |
| position | varchar | 岗位 |
| phone | varchar | 手机号 |
| varchar | 邮箱 | |
| status | tinyint | 0 禁用,1 启用 |
| create_time | datetime |
