毕业设计实战:基于Java+SSM+MySQL的考勤管理系统设计与实现全流程指南

41 阅读19分钟

毕业设计实战:基于Java+SSM+MySQL的考勤管理系统设计与实现全流程指南

在开发“基于Java+SSM+MySQL的考勤管理系统”毕业设计时,曾因“员工签到表与员工表未通过员工ID关联”踩过关键坑——初期仅在两张表单独设计编号字段,未设置外键约束,导致管理员查询某员工月度签到记录时,需手动匹配签到编号与员工编号,耗费1.4天重构表结构、补全关联SQL才解决问题📝。基于此次实战经验,本文将系统拆解从需求分析、技术选型、功能实现到测试验收的全流程要点,附避坑技巧与实操细节,为同类毕设提供可落地的实施指南。

一、需求分析:锚定考勤管理核心诉求,避免功能冗余返工

部分同学在毕设初期易陷入“功能堆砌”误区,比如笔者曾耗时2.3天开发“考勤数据可视化大屏模块”,最终因偏离“员工管理、签到统计、请假出差审批、薪资核算”核心需求被导师要求删减。明确“用户角色-核心功能”对应关系,是降低返工率的关键前提。

1. 核心用户与功能拆解(优化后角色权限体系)

系统核心用户分为管理员与普通员工两类,前期曾因混淆“员工”与“管理员”的“薪资修改权限”,导致员工可自行调整基本工资,明确角色边界后系统数据规范性显著提升,具体功能分工如下:

管理员端(核心必做功能)
  • 全维度信息管理
    • 员工管理:维护员工账号(新增、密码重置、逻辑删除),支持按姓名/工号/部门筛选,查看员工完整资料(头像、手机号、身份证号、邮箱、职位),禁用违规账号(禁用后不可登录);
    • 档案管理:录入员工档案(上传员工照片、附件,填写出生年月、入职时间、学历/实习/工作情况),维护档案信息(修改内容、补充备注),支持按员工姓名、入职时间区间筛选;
    • 字典管理:配置系统固定选项(如部门类型、职位类型、请假类型、出差类型、交通工具),确保数据录入规范性(如请假类型仅可选“事假”“病假”“年假”“婚假”);
  • 核心业务管控
    • 员工签到管理:查看所有员工签到记录(关联员工、上班/下班时间、签到状态、所属日期),筛选异常签到(如迟到、早退、未签退),导出月度签到统计报表;
    • 请假出差审批:审核员工请假申请(校验请假类型合规性、天数合理性)、出差申请(校验出差缘由、预支费用合理性),填写处理意见,通过/驳回后同步更新申请状态;
    • 薪资管理:核算员工月度薪资(关联基本工资、奖金、绩效、补贴,自动计算实发金额),生成薪资编号(格式:XZ+年月+序号,如XZ202406001),支持按员工姓名、月份筛选查询;
  • 信息发布与菜单管理
    • 公告管理:发布考勤相关公告(上传公告图片、填写名称、选择类型、编写详情、设置发布时间),维护公告内容(修改、删除过期公告),按发布时间倒序展示;
    • 菜单管理:配置系统菜单(设置一级/二级菜单名称、图标、使用方向、角色权限),控制不同角色可见菜单(如员工仅可见“个人签到”“请假申请”,不可见“薪资核算”)。
员工端(核心需求功能)
  • 考勤与事务申请
    • 签到签退:上班时点击“签到”记录时间(自动标记“正常/迟到”,迟到判定:超过上班时间30分钟),下班时点击“签退”记录时间(自动标记“正常/早退”,早退判定:提前下班30分钟),查看个人签到历史;
    • 请假申请:选择请假类型(下拉加载字典表选项)、填写请假缘由(≥10字)、设置请假时间与天数,提交后查看审核进度(待审核/已通过/已驳回),已驳回可查看处理意见;
    • 出差申请:填写出差标题、缘由、地点,选择出差类型、交通工具,设置起止时间、预支费用,提交后跟踪审核状态,通过后可查看审核时间与意见;
  • 个人信息与查询:修改个人资料(更新头像、手机号、邮箱),查看个人档案(不可修改入职时间、学历等关键信息),查询月度薪资明细(基本工资、奖金、绩效、补贴、实发金额),浏览系统公告,无管理其他员工、审批事务的权限。

2. 需求分析避坑要点(实战经验总结)

  • 拒绝空想调研:邀请4-5名同学模拟“员工签到-提交请假申请-管理员审核-员工查看结果”“管理员核算薪资-员工查询薪资”场景,收集真实诉求。例如,基于员工“快速知晓请假审批结果”需求,增设“请假状态变更提醒”功能,实用性远高于冗余的“数据可视化大屏”;
  • 绘制可视化用例图:用DrawIO绘制核心用例图(如“管理员-薪资核算”“员工-请假申请”“管理员-签到统计”),汇报时直观呈现逻辑,避免纯文字描述偏差;
  • 明确约束条件:提前规定“员工/公告图片仅限JPG/PNG(≤3MB)”“请假天数:事假≤7天/月,年假≤15天/年”“出差预支费用≤5000元/次”“薪资核算每月5日前完成”“签到时间:上班8:30前,下班18:00后”,为编码提供明确依据。

3. 可行性分析:从五维度论证,提升毕设专业性

可行性分析是开题关键,需避免泛泛而谈“可行”,从以下维度具体展开:

  • 时间可行性:预留2个月开发周期,拆分“需求分析(8天)→ 环境搭建(6天)→ 数据库设计(7天)→ 功能开发(27天)→ 测试验收(12天)”,每日投入3.5小时,结合导师指导可按时完成;
  • 经济可行性:开发工具均为免费/开源(IDEA社区版、MySQL 5.7、Tomcat 8.5),硬件用个人笔记本,开发成本为零;系统上线后可替代传统手工考勤模式(如纸质签到表、Excel薪资核算),减少记录误差、提升考勤管理效率;
  • 操作可行性:界面参考企业考勤系统交互逻辑,高频功能(签到、请假申请、薪资查询)置于首页,经测试,员工3分钟内可完成请假申请,管理员4分钟内可掌握薪资核算操作;
  • 技术可行性:Java、SSM框架、MySQL、Vue均为高校核心课程内容,资料丰富(如《SSM框架实战》《MySQL从入门到精通》),技术门槛可控;需注意避免Tomcat 10版本,前期联调时出现Servlet API兼容问题,切换至Tomcat 8.5后解决;
  • 法律可行性:技术与工具均为开源授权,无版权纠纷;员工数据遵循《个人信息保护法》,不收集无关信息(如员工家属隐私),论文与源码无抄袭,符合法律要求。

二、技术选型:优先稳定适配,拒绝盲目追新

前期曾跟风选用Java 11+Vue 3+Redis技术栈,因Redis缓存配置不当导致员工签到数据重启后丢失,调试耗时1.1天。后续调整为“Java 8+SSM(Spring+Spring MVC+MyBatis)+MySQL 5.7+IDEA+Vue 2.x+Tomcat 8.5”组合,兼顾稳定性与开发效率,适合新手上手。

1. 核心技术栈选型说明(含避坑提醒)

技术工具选型理由避坑提醒
Java 8语法简洁,支持面向对象编程,与SSM框架、Tomcat 8.5兼容性最佳,满足多角色权限、考勤流程开发避免Java 11+版本,部分旧依赖(如commons-fileupload)支持不完善,易出现员工照片上传IO异常
SSM框架Spring实现依赖注入,Spring MVC处理请求分发,MyBatis简化数据库操作,三者结合降低代码耦合度,提升开发效率避免手动配置Spring XML文件,优先用注解开发(如@Controller、@Service),前期因XML配置错误导致请求无法映射
MySQL 5.7支持事务与外键,满足多表关联(员工-签到记录、员工-请假申请、员工-薪资),utf8mb4编码解决员工姓名、请假缘由生僻字乱码安装时手动设编码为utf8mb4,默认编码会导致公告详情含特殊符号乱码;开启事务确保请假审批与状态更新原子性
IDEA 社区版支持SSM框架插件、MySQL连接、断点调试,代码提示优于Eclipse,安装Maven插件可自动管理依赖安装“Lombok”插件简化实体类代码(避免重复写get/set方法),前期因缺失MyBatis依赖导致数据库操作失败
Vue 2.x轻量级前端框架,支持组件化开发,快速实现动态页面(签到按钮、请假表单、薪资明细),数据绑定简化前后端交互避免Vue 3.x版本,部分UI组件(ElementUI)兼容不足,易出现表单校验错误;配置axios拦截器处理请求超时问题
Tomcat 8.5适配Java 8与SSM框架,部署简单,支持热部署(修改代码无需重启服务器)避免Tomcat 10版本,与SSM框架存在Servlet API兼容问题,易出现页面无法访问;端口设为8082(默认8080易冲突)

2. 开发环境搭建步骤(实操指南)

  1. 安装JDK 1.8:配置“JAVA_HOME”“Path”环境变量,cmd执行“java -version”显示“1.8.x”即为成功;
  2. 安装IDEA与插件:安装IDEA社区版,在“Settings→Plugins”装“Spring Tools 4”“MyBatis Plugin”“Vue.js”“Maven Helper”,配置JDK为1.8,编码设为UTF-8;
  3. 安装MySQL 5.7:用Navicat创建数据库“attendance_management_system”,编码utf8mb4,执行脚本创建表(员工表、签到表、请假表、薪资表等);
  4. 配置Tomcat 8.5:解压后在IDEA中配置服务器,测试访问http://localhost:8082,出现默认页面即成功;
  5. 创建SSM项目:通过IDEA创建Maven项目,pom.xml引入Spring、Spring MVC、MyBatis、MySQL Driver等依赖,配置mybatis-config.xml(数据库连接)、spring-mvc.xml(请求映射);
  6. 前端开发与联调:用Vue+ElementUI开发登录、签到、请假申请页面,打包后放入WebRoot目录,编写“员工签到”接口,前端调用成功即环境搭建完成。

三、数据库设计:精简核心关联,避免数据混乱

数据库是考勤管理系统的核心,前期因未关联“员工签到表”与“员工表”导致无法追溯签到对应的员工信息,后续用“实体-属性-关系”分析法梳理,效率显著提升。

1. 核心表结构设计(精简版,共10张核心表)

  • 管理员表(admin):id(主键)、username(账号,唯一)、password(MD5加密)、role(角色)、addtime(新增时间);
  • 员工表(yuangong):id(主键)、yuangong_uuid_number(工号,唯一)、yuangong_name(姓名)、yuangong_phone(手机号,唯一)、yuangong_id_number(身份证号,唯一)、yuangong_photo(头像路径)、yuangong_email(邮箱)、bumen_types(部门)、zhiwei_types(职位)、jinyong_types(账户状态,0=正常,1=禁用)、create_time(创建时间);
  • 员工签到表(yuangong_qiandao):id(主键)、yuangong_id(员工ID,外键)、qiandao_shangban_time(上班签到时间)、qiandao_shangban_types(上班状态,1=正常,2=迟到)、qiandao_xiaban_time(下班签退时间)、qiandao_xiaban_types(下班状态,1=正常,2=早退)、insert_time(所属日期)、create_time(创建时间);
  • 员工请假表(yuangong_qingjia):id(主键)、yuangong_id(员工ID,外键)、yuangongqingjia_text(请假缘由)、yuangongqingjia_types(请假类型)、insert_time(申请时间)、yuangongqingjia_time(请假时间)、yuangongqingjia_number(请假天数)、yuangongqingjia_yesno_types(申请状态,0=待审核,1=通过,2=驳回)、yuangongqingjia_yesno_text(处理意见)、yuangongqingjia_shenhe_time(审核时间)、create_time(创建时间);
  • 员工出差表(yuangong_chuchai):id(主键)、yuangong_id(员工ID,外键)、yuangongchuchai_name(出差标题)、yuangongchuchai_text(出差缘由)、yuangongchuchai_address(地点)、yuangongchuchai_types(出差类型)、yuangongchuchai_kaishi_time(开始时间)、yuangongchuchai_jieshu_time(结束时间)、yuzhi_feiyong(预支费用)、insert_time(申请时间)、yuangongchuchai_yesno_types(申请状态)、yuangongchuchai_yesno_text(处理意见)、create_time(创建时间);
  • 薪资表(xinzi):id(主键)、yuangong_id(员工ID,外键)、xinzi_uuid_number(薪资编号,唯一)、xinzi_month(月份)、jiben_jine(基本工资)、jiangjin_jine(奖金)、jixiao_jine(绩效)、butie_jine(补贴)、shifa_jine(实发金额)、xinzi_content(备注)、insert_time(添加时间)、create_time(创建时间);
  • 档案表(dangan):id(主键)、dangan_uuid_number(档案编号)、dangan_name(员工姓名)、dangan_phone(手机号)、dangan_id_number(身份证号)、dangan_photo(照片路径)、dangan_chusheng(出生年月)、ruzhi_time(入职时间)、dangan_xueli_content(学历情况)、create_time(创建时间);
  • 公告表(gonggao):id(主键)、gonggao_name(公告名称)、gonggao_photo(图片路径)、gonggao_types(公告类型)、insert_time(发布时间)、gonggao_content(详情)、create_time(创建时间);
  • 菜单表(menu):id(主键)、role_zh_name(角色汉字)、yiji_menu_name(一级菜单名称)、yiji_menu_icon(一级菜单图标)、erji_menu(二级菜单)、direction(使用方向)、insert_time(添加时间)、create_time(创建时间);
  • 字典表(dic):id(主键)、dic_code(字段)、dic_name(字段名)、code_index(编码)、index_name(编码名字)、super_id(父字段id)、beizhu(备注)、create_time(创建时间)。

2. 核心表关联测试(提前验证,避免返工)

建表后立即测试关联逻辑,步骤如下:

  1. 插入测试数据:员工表(id=1,yuangong_name=“张三”,yuangong_uuid_number=“YG2024001”,bumen_types=“研发部”)、员工签到表(id=1,yuangong_id=1,qiandao_shangban_time=“2024-06-01 08:20:00”,qiandao_shangban_types=1,qiandao_xiaban_time=“2024-06-01 18:10:00”);
  2. 编写JOIN查询SQL,验证“某签到记录的员工关联”:
SELECT q.qiandao_shangban_time, q.qiandao_shangban_types, q.qiandao_xiaban_time, q.qiandao_xiaban_types, q.insert_time,
       y.yuangong_name, y.yuangong_uuid_number, y.bumen_types, y.zhiwei_types, y.yuangong_phone
FROM yuangong_qiandao q
JOIN yuangong y ON q.yuangong_id = y.id
WHERE q.id = 1;

若能查询出“上班/下班时间、签到状态、所属日期、员工信息(姓名、工号、部门、职位、手机号)”,说明关联正确;若出现外键错误,检查字段类型是否匹配(如yuangong_id与员工表id是否同为Integer)。

关键避坑提醒:切勿将员工头像、公告图片等二进制数据存入数据库!前期尝试导致数据库体积骤增(100张员工头像使数据库增大300MB),后续改为存储文件路径(如/static/yuangong/photo1.jpg),大幅提升查询速度。

四、功能实现:聚焦核心模块,提升答辩竞争力

无需开发所有功能,优先完成3个核心模块即可满足答辩要求,突出开发重点:

1. 员工端:签到与请假申请模块(必做核心模块)

  • 核心逻辑
    1. 签到签退:员工登录后,首页显示“签到”/“签退”按钮(上班时段8:00-9:00显示“签到”,下班时段17:30-18:30显示“签退”),点击后记录时间,系统自动判定状态(如8:40签到标记“迟到”);
    2. 请假提交:进入请假申请页,选择请假类型(下拉加载“事假”“病假”等),选择请假时间(开始-结束日期),系统自动计算天数(≤7天),填写缘由(≥10字),提交后状态设为“待审核”;
    3. 进度查询:在“我的请假”页面按状态筛选,待审核显示“等待管理员审核”,已通过显示审核时间,已驳回标红显示处理意见(如“请假天数超过月度上限,最多可申请3天”)。
  • 页面设计(Vue+ElementUI)
    • 签到区:大尺寸“签到”/“签退”按钮(未到时段置灰),下方显示上次签到时间与状态;
    • 请假表单区:请假类型下拉框、时间选择器(开始-结束)、天数自动计算显示、缘由文本域(实时字数提示),提交前校验必填项;
    • 请假列表区:表格展示申请编号、类型、天数、申请时间、状态、处理意见,操作列含“详情”。

2. 管理员端:请假出差审批模块(答辩亮点模块)

  • 核心逻辑
    1. 审批接收:管理员登录后,默认展示“待审核”列表(分“请假”“出差”标签页),含申请人姓名、申请类型、缘由、时间、状态,支持按员工姓名、申请时间筛选;
    2. 审批操作:点击“审核”查看详情(员工信息、申请全量数据),请假审核需校验“天数是否超上限”(如事假≤7天),出差审核需校验“预支费用是否合理”(如≤5000元),选择“通过”/“驳回”,填写处理意见(驳回必填);
    3. 记录管理:切换“已通过”“已驳回”标签页,查看历史审批记录,支持按审核时间筛选,点击“查看员工”可跳转至员工详情页。
  • 页面设计
    • 筛选区:员工姓名输入框、申请时间区间选择器、“查询”按钮,标签页切换“请假”“出差”;
    • 审批列表区:表格展示申请编号、员工姓名、类型、申请时间、状态,操作列含“审核”“详情”;
    • 审核弹窗区:左侧展示员工头像、部门,右侧设审批结果单选组(通过/驳回)、处理意见文本域(驳回标红必填),提交前校验,通过时自动填充审核时间为当前时间。

3. 管理员端:薪资核算模块(核心需求模块)

  • 核心逻辑
    1. 薪资录入:进入薪资管理页,选择月份(如“2024-06”),选择员工(下拉加载),填写基本工资、奖金、绩效、补贴,系统自动计算实发金额(实发=基本工资+奖金+绩效+补贴),生成薪资编号;
    2. 薪资维护:点击“修改”可更新奖金、绩效、补贴(基本工资仅可在入职时设置,不可随意修改),点击“删除”执行逻辑删除(员工不可见),支持按月份、员工姓名筛选;
    3. 薪资导出:选择月份,点击“导出报表”生成Excel文件(含员工姓名、工号、部门、各项薪资明细、实发金额),用于财务发放薪资参考。
  • 页面设计
    • 筛选区:月份选择器、员工姓名输入框、“查询”“导出报表”按钮;
    • 薪资列表区:表格展示薪资编号、员工姓名、工号、部门、月份、基本工资、奖金、绩效、补贴、实发金额,操作列含“修改”“删除”;
    • 新增/修改弹窗区:员工下拉框、月份选择器、各项薪资输入框(校验正数)、实发金额只读显示(自动计算),提交前校验必填项。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

五、测试验收:全面排查问题,保障答辩顺利

笔者前期未测试“员工重复提交同一时间段请假申请”场景,导致出现“同一员工同时间段生成2条待审核请假记录”的bug,被导师指出“未做重复校验”并扣分😥。需针对性完成以下测试:

1. 核心功能测试用例

测试场景操作步骤预期结果
员工重复提交同时间段请假员工选择“2024-06-10至2024-06-12”提交事假申请→未刷新页面再次点击“提交”系统提示“该时间段已提交请假申请,请勿重复提交”,提交失败
管理员审核超天数请假员工提交8天事假申请→管理员进入审核页→查看天数后选择“驳回”→填写理由“事假月度上限7天”请假状态改为“已驳回”,员工端显示红色驳回理由,无审核时间异常
员工下班早退签退员工17:20点击“签退”(下班时间18:00)→系统记录签退时间签退状态标记“早退”,签到列表中该记录标红显示“早退(提前40分钟)”

2. 兼容性与性能测试

  • 兼容性:测试Chrome、Firefox、Edge浏览器,修复IE11下表单样式错乱、头像预览失败问题;测试手机端浏览器,确保签到、请假申请页面自适应(按钮大小适配手指点击);
  • 性能:用Jmeter模拟30个员工同时签到,系统响应时间≤1.8秒,无数据丢失;查询50名员工月度薪资,耗时≤1秒,关联员工数据加载正常。

3. 测试报告撰写

包含“测试目的、范围、用例、结果”,明确已修复问题(重复请假校验、浏览器兼容、早退判定逻辑),结论说明“核心功能无严重bug,可满足考勤管理需求”,附测试截图(如重复请假提示、早退签到记录显示效果)。

六、答辩准备:掌握3个技巧,提升通过率

  1. 演示流程梳理:按“员工签到-提交请假申请-管理员审核-员工查看结果-管理员核算薪资”演示,每个步骤停顿2秒,重点展示“员工签到表与员工表关联逻辑”“请假审批状态同步效果”,让评委清晰看到功能流转;
  2. 突出问题解决能力:重点讲“员工签到表与员工表关联修复”“重复请假校验实现”“数据库图片路径存储优化”,结合开发踩坑与解决方案(如“初期用二进制存员工头像导致数据库卡顿,改为路径存储后查询速度提升30%”),比单纯讲技术栈更有说服力;
  3. 提前预判问题:针对“如何保障考勤数据准确”,回答“签到时间自动判定、请假天数上限校验、薪资金额自动计算、操作日志追溯”;针对“如何提升审批效率”,回答“申请信息完整性校验、按员工/时间快速筛选、审核结果实时同步”。

结语

本文基于Java+SSM+MySQL的考勤管理系统实战经验,核心是“聚焦考勤管理核心业务(签到、请假、薪资)、优先稳定技术、提前排查表关联与数据校验问题”。毕设无需追求复杂功能(如AI考勤异常预测、大数据薪资分析),把签到统计、请假审批、薪资核算等核心功能做扎实,即可顺利通过答辩。

若需要核心源码(带注释)、数据库脚本(含测试数据)、ER图模板,可在评论区留言“Java+SSM考勤管理系统”获取;若在模块开发中遇问题(如请假审批逻辑、薪资自动计算),也可留言咨询,笔者将及时回复。

收藏本文,便于开发查阅~ 祝各位同学毕设顺利,轻松毕业!🎉