基于Spring Boot的校园考勤管理系统的设计与实现

1 绪论

1.1 本文的研究背景

高校是人才培养的主阵地,教学秩序和学风建设的好坏直接关系到育人质量。考勤管理是保证教学秩序、规范学生行为、提高教学质量的基础性工作,存在于日常课堂教学、晚自习、集体活动等各种场景之中。长期以来,高校考勤管理一直采用人工点名、纸质签到等传统方式,任课教师要在有限的课时内逐一点名,辅导员要在手工统计班级出勤情况,教务处要在汇总各院系报表的基础上进行,不仅耗时耗力,而且容易出现漏记、错记、代签等问题,数据很难实时汇总和长期追溯[1]。随着高校扩招、班级规模的扩大,传统的考勤方式的效率瓶颈越来越明显,不能满足精细化、规范化管理的要求。

教育信息化战略的不断推进给考勤管理的变革创造了条件。用计算机和网络技术来实现考勤数据的电子化采集、存储和统计,已经成为高校管理现代化的必然趋势。张令怡、甄雪玉等学者分别从考勤管理系统和员工考勤管理系统的角度出发,论证了信息化考勤在提高效率、规范流程方面是可行的[1,2]。袁莎利用MVC架构设计出考勤系统,可以对考勤数据进行集中管理以及查询[3]。钱俊亮等认为,建立考勤管理系统可以很好地解决人工考勤中数据分散、统计困难、追溯不便的问题[4]。田丽等人把人脸识别技术运用到考勤场景当中,依靠IPv6网络对身份验证和考勤记录进行自动化关联,从而丰富了考勤方式的多样性[5]。以上研究均表明,依靠信息技术创建考勤管理系统,对高校考勤管理效率的提高、数据的准确可追溯有重要的意义。

目前高校考勤管理牵涉到教务处、辅导员、任课教师、学生等各个角色,各个角色对于考勤数据的查看范围、操作权限以及统计需求也各不相同。课堂签到、晚自习签到、活动签到等场景并存,迟到、旷课、请假等状态的判定要依靠可以配置的规则。传统的考勤管理方式不能满足多角色、多场景、多规则的复杂需求,必须依靠信息化手段来实现考勤管理的数字化、规范化、智能化。在此情况下,设计并实现一套面向校园场景、支持多角色协同、多场景覆盖的考勤管理系统,具有很强的应用价值和研究意义。

1.2 本文的研究目的、意义、范围、设想以及研究方法

本文的研究目的就是设计并实现一个基于Spring Boot的校园考勤管理系统,面向管理员、教务处、辅导员、任课教师、学生等各个角色,提供用户管理、课程管理、多场景考勤、数据统计、异常预警等一体化的服务,实现考勤管理的数字化、规范化、智能化,有效地解决传统人工考勤效率低、数据难统计、异常难预警等问题。

研究意义有理论意义和实践意义两个方面。从理论上讲,把考勤管理需求同Spring Boot等主流技术框架结合起来,探究前后端分离架构在校园管理信息系统中的应用模式,给同类系统的设计和实现给予参照。从实践上讲,可以给高校提供可以部署、可以扩展的考勤管理工具,减轻教师和管理人员的工作负担,提高考勤数据的准确性、可追溯性,为学风建设、教学管理决策提供数据支持。张亚娟等用SSH框架创建了高校学生出勤考核管理系统,证明了Web框架在考勤场景中是适用的[6]。陈东伟、刘琼等分别把微信和微信小程序应用到考勤信息管理中,使考勤更加便捷、移动化[7,8]。在此基础上,本文使用Spring Boot搭建后端服务,用Vue.js做前后端分离,用更轻量、易部署的方式来满足校园考勤管理的需求。

研究范围只限于校园场景的考勤管理,包括课堂签到、晚自习签到、活动签到等典型场景,支持手动签到、二维码签到、GPS定位签到等多种签到方式,具有考勤规则配置、异常预警、数据统计和导出等功能。系统面向PC端Web浏览器,使用SQLite作为数据存储,不进行移动端原生应用的开发。研究设想就是,在需求分析的基础上进行系统的设计和实现,用功能测试和性能测试来验证系统的可行性、有效性,总结出不足和改进的方向。

研究方法有文献研究法、需求分析法、原型开发法、测试验证法。查阅考勤管理、Spring Boot应用等相关的文献,了解研究现状和技术路线;通过需求分析确定系统的功能和非功能需求,建立用例模型和业务流程图;采用迭代式开发的方式完成系统的系统设计和编码实现;通过功能测试和基本性能测试来验证系统是否满足设计目标。

1.3 相关系统或相关技术在国内外的研究现状

考勤管理系统的研究与实践在国内、外均有较多的案例。国内方面,基于SSH、微信等技术路线的考勤系统已经有很多实践,刘琼等基于微信小程序实现了学生考勤系统,支持扫码签到和考勤记录查询,体现了移动端考勤的便捷性[8]。许泽宁等人把实时定位技术应用到建设项目人员考勤上,给考勤场景的拓展提供技术上的借鉴[9]。以上研究在功能实现和部署方式上各有不同。

Spring Boot作为轻量级Java Web开发框架,在国内得到广泛应用。王永和等对Spring Boot的研究与应用做了综述,认为Spring Boot简化配置、快速构建、内嵌容器的优势[10]。张峰分析了Spring Boot对于Web应用开发模式的改变,认为它的"约定优于配置"理念可以大大提高开发效率[11]。闫兰英等利用Spring Boot创建了分布式光伏发电管理系统,证明了该框架可以应用于业务系统的开发[12]。国外方面,Liu基于Spring Boot和Vue技术设计并实现了一个学生考勤管理系统,实现了前后端分离架构下的考勤功能,给本文提供了一定的技术参考[13]。从国内外的研究来看,Spring Boot已经成为创建Web应用的主流选择,将Spring Boot应用于校园考勤管理系统有较好的技术可行性以及实践基础。

1.4 论文结构介绍

全文除绪论外,主要内容共分六章,现将各章要旨简述如下。

第二章系统分析。阐述需求分析、可行性分析、用例建模、业务流程图,确定系统背景需求、管理员、教师、学生三类角色的需求,为后面系统的设计和实现提供依据。

第三章系统设计。根据需求分析的结果,对总体架构设计、功能模块划分、数据库设计、主要接口和流程设计进行设计,并给出设计图和说明。

第四章为系统实现。根据设计结果,阐述开发环境和工具、系统框架以及各个功能模块的实现方式,用关键代码或者界面说明来体现系统满足需求的程度。

第五章为系统测试。阐述测试环境、测试用例、测试结果,对系统的功能、基本性能进行验证。

第六章为结论。总结全文工作,归纳研究的不足和改进方向,对以后可以开展的工作进行展望。

2 系统分析

2.1 需求分析

高校是培养人才的主要场所,教学秩序和学风建设好坏关系到育人质量。考勤管理是保证教学秩序、规范学生行为、提高教学质量的基础性工作,存在于日常课堂教学、晚自习、集体活动等各个方面。但是传统的手工点名、纸质签到等方法存在着很多问题,信息分散,任课教师要在有限的课时内逐一点名,辅导员要手工统计班级出勤情况,教务处要汇总各个院系的报表,既耗时又费力,容易出现漏记、错记、代签等问题,数据难以实时汇总和长期追溯;异常预警机制缺失,学生连续旷课、迟到频发等情况不能及时发现和干预,不利于学风建设与教学管理决策;多场景考勤规则不统一,课堂、晚自习、活动等不同场景的签到方式和判定标准不一样,传统方式不能灵活配置和统一管理。本系统用信息化手段来实现考勤数据的电子化采集、存储和统计,支持多场景签到和异常预警,可以有效地改善行业存在的问题,给考勤管理带来更加准确、高效的方式。

本系统根据实际需要分为管理员、教务处、辅导员、任课教师、学生五个角色,可以满足实际场景的使用。

管理员在使用系统的时候,主要希望可以对用户的个人信息进行增删改查,对用户的权限进行合理的分配,保证系统用户数据的准确性以及权限的合理配置;可以对课程、班级等基础数据进行维护,可以参与考勤规则和预警规则的制定和配置;另外,管理员还要查看全校考勤数据、处理预警记录,保证系统的正常运行和全局数据的可追溯性。

教务处使用系统的主要目的就是查看全校考勤数据、导出统计报表,为教学管理与决策提供数据支持;参与考勤规则的审核与制定,保证考勤判定标准的统一;教务处对考勤数据的监管和统计分析有较高的需求,可以掌握全校出勤态势。

辅导员使用系统时,主要希望可以查看、管理自己所负责的班级或者年级的考勤数据,及时掌握学生出勤情况;可以处理系统自动触发的异常预警,对预警记录进行标记和备注;另外,辅导员还要审批学生提交的考勤申诉,维护考勤记录的公平性和准确性。

任课教师使用系统的主要目的就是为所授课程发起课堂签到,支持手动、二维码、GPS等多种签到方式;查看本课程的考勤统计和缺勤名单,方便课堂管理、成绩评定;任课教师对考勤记录的维护和导出也有一定的需求。

学生使用系统时主要希望实现课堂、晚自习、活动等各个场景的签到,操作简单、反馈及时;可以查看本人的考勤记录、迟到旷课次数和趋势,了解自己的出勤情况;另外学生对异常考勤记录有申诉的需求,希望可以通过系统提交申诉并得到审批结果。

2.2 可行性分析

2.2.1 技术可行性分析

本系统采用的Spring Boot、Vue.js、Spring Data JPA、SQLite等开源技术,已广泛应用于各类Web应用与校园管理信息系统,具备完善的技术生态和开发文档[12]。因此不需要重新研发底层技术,只需要在已有的技术基础上进行集成和优化,从而降低了技术开发成本。闫兰英等利用Spring Boot创建了分布式光伏发电管理系统,证明了该框架可以用于业务系统的开发[12]。刘基于Spring Boot和Vue技术设计并实现了一个学生考勤管理系统,实现了前后端分离架构下的考勤功能,为本文提供直接的技术参考[13]。从国内外的研究来看,Spring Boot已经成为构建Web应用的主要方式,将Spring Boot应用于校园考勤管理系统有较好的技术可行性以及实践基础[14]。

本系统采用前后端分离架构,前端使用Vue.js框架,后端使用Spring Boot框架,具有高并发请求处理能力,并且使用Spring Data JPA进行数据库操作,保证数据访问的高效性。从硬件成本上来说,本系统可以部署到云服务器或者校内服务器上,使用SQLite轻量级数据库,不需要另外配置数据库服务,从而降低初始投入成本。系统可以对考勤数据进行多条件查询和导出,可以处理万级学生、十万级考勤记录的数据量,技术实现路径清晰可行。

2.2.2 经济可行性分析

本系统在设计阶段就考虑到了成本控制和资源利用率。系统使用Spring Boot、Vue等主流开源框架进行开发,不需要支付授权费用,大大降低了开发成本[14]。使用前后端分离的轻量级架构,使用SQLite嵌入式数据库,可以在普通的服务器上稳定运行,避免高额的硬件和数据库许可费用[15]。

系统集成的异常预警机制可以自动检测学生的考勤异常并产生预警记录,大大减轻了人工排查和统计的工作量,提高了管理效率,降低了人力成本。考勤数据电子化采集、统计功能代替了传统的纸质签到、手工汇总,节约了耗材、重复劳动。系统部署之后运维简便,日常维护以及功能升级所消耗的资源较少,有利于不断降低运营成本[16]。综合来看,本系统经济投入可控、效益明显,具有较好的经济可行性。

2.2.3 社会可行性分析

高校考勤管理涉及教学秩序、学风建设、学生权益保障,社会可行性要从行业现状、法律合规、道德伦理等角度进行分析。目前高校考勤管理大多采用人工方式进行,存在效率低、数据难统计、异常难预警等问题,部分院校已经开始使用信息化考勤系统,但是大多只应用于单一场景或者单一角色,不能满足多角色协同、多场景覆盖的复杂需求。本系统从多角色协同、多场景考勤、异常预警、申诉机制等角度出发,给高校考勤管理提供了一种新的信息化解决办法,可以提高管理效率、保证数据的准确性、可追溯性,对学风建设、教学管理有积极的社会意义。

从法律角度来讲,本系统所采集的考勤数据属于教学管理所必需的学生行为数据,符合《中华人民共和国教育法》《普通高等学校学生管理规定》等法规对于高校教学管理职责的规定,数据采集和使用目的正当、范围合理。系统采用基于角色的访问控制,只允许具有相应权限的角色访问相应范围内的数据,符合个人信息保护和数据安全的基本要求。从道德角度来讲,考勤管理是规范学生行为、保证教学质量的一种方式,系统提供的申诉渠道为学生提供了表达异议的途径,有利于维护公平公正,不存在侵犯学生合法权益的道德风险。因此,本系统在社会可行性上没有太大的障碍。

2.3 用例建模

2.3.1 用例图

本系统面向管理员、教务处、辅导员、任课教师和学生五类角色,提供用户管理、课程管理、考勤规则设置、多场景考勤、考勤统计、异常预警、考勤申诉等功能。用例图如图2.1所示,清晰展现了各角色与系统功能之间的关联关系。

2.1 校园考勤管理系统用例图

2.3.2 业务流程图

本节给出系统核心业务流程图,包含管理员、任课教师、辅导员和学生等角色发起的典型业务流程,用泳道图的形式来表现各个角色之间的协作关系。

图2.2为管理员发起的系统配置和权限管理流程。管理员进入系统之后可以新增用户信息、分配角色、配置考勤规则和预警规则。配置完毕之后,系统就会把规则应用到相应的场景中,给后面的考勤、预警提供依据。

2.2 管理员-系统配置与权限管理流程图

图2.3展示了任课教师发起的课堂签到流程。任课教师进入系统后,选择课程并发起签到,系统生成签到会话。学生查看签到任务并完成签到,系统根据考勤规则自动判定正常、迟到或旷课,并生成考勤记录。教师可查看本次签到统计,流程结束。

2.3 任课教师-课堂签到流程图

图2.4展示了学生发起的考勤申诉流程及辅导员审批流程。学生对异常考勤记录提交申诉及说明,辅导员收到申诉后进行审批,判断是否符合申诉条件。若通过则更新考勤记录并通知学生,若驳回则反馈驳回原因。学生可查看申诉结果,流程结束。

2.4 学生-考勤申诉与辅导员审批流程图

图2.5展示了教务处发起的考勤数据统计与导出流程。教务处进入系统后,选择统计范围(按班级、课程或时间),系统汇总考勤数据并生成统计报表。教务处可查看统计结果,并按需导出Excel报表,为教学管理决策提供数据支撑。

2.5 教务处-考勤数据统计与导出流程图

图2.6展示了辅导员发起的异常预警处理流程。系统自动检测考勤异常并触发预警规则,生成预警记录。辅导员收到预警通知后,查看预警详情、联系学生核实,并对预警进行标记处理或添加备注。学生可收到预警消息并查看内容,流程结束。

2.6 辅导员-异常预警处理流程图

3 系统设计

3.1 系统功能设计

根据需求分析中拆分后的功能需求,本系统采用基于角色的功能划分方式,将软件功能结构按管理员、教务处、辅导员、任课教师、学生五种角色进行组织。各角色模块之间通过统一的考勤数据、课程数据、用户数据实现交互与协作,形成完整的考勤管理闭环。

3.1.1 管理员模块

管理员拥有系统最高权限,负责系统全局配置与用户管理,主要功能包括:

1.用户管理:创建、编辑、禁用用户账号,支持批量导入用户信息;为用户分配角色(管理员、教务处、辅导员、教师、学生);支持密码重置操作。

2.课程管理:维护课程信息(课程名称、课程代码、学分等)的增删改查;管理班级信息及班级与辅导员的关联关系。

3.考勤规则设置:配置迟到判定时间阈值、旷课判定规则;设置签到方式(手动、二维码、GPS);支持全局规则与按课程/活动单独配置。

4.晚自习签到管理:发起晚自习签到,按班级或地点组织签到;查看晚自习考勤数据。

5.活动签到管理:发起活动签到,配置活动时间、地点;管理活动考勤记录。

6.考勤数据统计:查看全校考勤概览、出勤率统计;支持多维度数据筛选与图表展示。

7.异常预警查看:查看系统自动生成的考勤预警记录;监控预警处理情况。

8.考勤记录导出:按时间、班级、课程等条件导出考勤数据为Excel格式。

9.消息通知:发布系统公告;接收并查看各类系统消息。

10.管理员管理:维护管理员账号及权限配置。

3.1.2 教务处模块

教务处负责考勤数据监管与统计报表,主要功能包括:

1.课程查看:查看全校课程信息、班级信息及排课情况。

2.考勤规则参与:参与考勤规则的制定与审核。

3.晚自习签到查看:查看晚自习考勤数据及统计情况。

4.活动签到查看:查看活动签到数据。

5.考勤数据统计:查看全校考勤统计报表;支持柱状图、折线图、饼图等可视化展示。

6.异常预警查看:查看全校考勤预警记录。

7.考勤记录导出:导出全校或指定范围的考勤数据为Excel。

8.消息通知:接收考勤相关通知及系统公告。

3.1.3 辅导员模块

辅导员负责所辖班级的考勤管理与异常处理,主要功能包括:

1.个人中心:维护个人基本信息;修改密码。

2.课程查看:查看所辖班级的课程信息。

3.晚自习签到:发起所辖班级的晚自习签到;查看晚自习考勤记录。

4.活动签到:发起所辖班级的活动签到;查看活动考勤记录。

5.考勤数据统计:查看所辖班级的出勤情况、排名及缺勤名单。

6.异常预警查看与处理:查看所辖学生的考勤预警;标记预警已处理、添加处理备注。

7.考勤记录导出:导出所辖班级的考勤数据。

8.考勤申诉审批:审批学生提交的考勤申诉;支持通过或驳回,填写审批意见。

9.消息通知:接收预警通知、申诉结果等消息。

3.1.4 任课教师模块

任课教师负责所授课程的考勤管理,主要功能包括:

1.个人中心:维护个人基本信息;修改密码。

2.课程查看:查看本人所授课程及关联班级信息。

3.课堂签到发起:发起课堂签到,选择签到方式(手动/二维码/GPS);设置签到时间范围。

4.考勤记录维护:查看、补录本课程的考勤记录。

5.考勤数据统计:查看所授课程的出勤率、缺勤名单及统计图表。

6.异常预警查看:查看所授课程的考勤预警。

7.考勤记录导出:导出所授课程的考勤数据。

8.消息通知:接收签到提醒、考勤相关通知。

3.1.5 学生模块

学生参与考勤并查看个人记录,主要功能包括:

1.个人中心:维护个人基本信息;修改密码。

2.课堂签到:参与任课教师发起的课堂签到;支持手动、二维码、GPS等方式。

3.晚自习签到:参与辅导员或管理员发起的晚自习签到。

4.活动签到:参与活动签到。

5.个人考勤记录查看:查看本人迟到、旷课、请假次数及考勤趋势。

6.异常预警查看:查看本人收到的考勤预警通知。

7.考勤记录导出:导出本人考勤记录。

8.考勤申诉提交:对异常考勤记录提交申诉及说明。

9.消息通知:接收签到提醒、预警通知、申诉结果等消息。

3.2 系统逻辑结构设计

系统采用B/S架构,分为展现层、应用服务层、数据层和数据库层四个层次。系统逻辑结构图如图3.1所示。

3.1系统逻辑结构图

展现层是用户通过PC浏览器访问系统,使用Vue.js构建单页应用,使用Element Plus等UI组件库进行界面展示。本层主要是用户交互、数据展示以及请求的发送。

应用服务层使用Spring Boot构建,按照角色分为管理员端、教务处端、辅导员端、任课教师端和学生端五个功能模块。各模块通过RESTful API与前端交互,采用Spring Security与JWT实现认证与授权,按RBAC模型控制接口访问。业务逻辑由Service层来处理,Controller层负责请求的分发和响应的封装。

数据层使用Spring Data JPA进行数据访问抽象,封装用户数据、课程数据、班级数据、考勤记录数据、考勤会话数据、活动数据、考勤规则数据、预警规则数据、预警记录数据、消息数据等实体及其关系,给应用服务层提供统一的数据访问接口。

数据库层用SQLite做数据持久化存储,轻量级部署。数据通过JDBC/JPA同数据层进行交互,从而达到考勤记录、用户信息等结构化数据的保存目的。

各层之间数据流向是用户请求经过展现层传给应用服务层,应用服务层调用数据层接口去获取或者写入数据,数据层通过ORM和数据库层交互,最后把结果一层层返回到用户界面。

3.3 数据库设计

3.3.1 概念结构设计

根据校园考勤管理系统的业务需求,对主要实体及其关系进行概念结构设计。E-R图如图3.2所示。

3.2 数据库E-R图

主要实体及属性:

用户:id、用户名、密码、姓名、工号/学号、角色ID、班级ID、院系ID、手机号、状态、创建时间、更新时间

角色:id、角色名称、角色编码、描述

院系:id、院系名称、父级ID

班级:id、班级名称、年级、辅导员ID、院系ID、创建时间

课程:id、课程代码、课程名称、学分、教师ID、班级ID、学期、创建时间

课程-班级关联:id、课程ID、班级ID

考勤规则:id、规则名称、迟到分钟数、旷课分钟数、签到方式、适用范围、适用对象ID、创建时间

考勤会话:id、课程ID、活动ID、班级ID、教师ID、场景类型、开始时间、结束时间、发起人ID、规则ID、创建时间

活动:id、活动名称、活动类型、班级ID、地点、开始时间、结束时间、创建人ID、创建时间

考勤记录:id、学生ID、会话ID、课程ID、活动ID、场景类型、签到时间、状态、签到方式、位置、创建时间

预警规则:id、规则名称、预警类型、阈值、通知角色、创建时间

预警记录:id、学生ID、规则ID、预警内容、状态、处理人ID、处理备注、创建时间

消息:id、接收人ID、标题、内容、消息类型、是否已读、创建时间

考勤申诉:id、考勤记录ID、学生ID、申诉理由、状态、审批人ID、审批意见、创建时间

3.3.2 逻辑结构设计

由实体关系图转换得到的关系模式如下:

1.用户(id,用户名,密码,姓名,工号,角色ID,班级ID,院系ID,手机号,状态,创建时间,更新时间)

2.角色(id,角色名称,角色编码,描述,创建时间)

3.院系(id,院系名称,父级ID)

4.班级(id,班级名称,年级,辅导员ID,院系ID,创建时间)

5.课程(id,课程代码,课程名称,学分,教师ID,班级ID,学期,创建时间)

6.课程-班级(id,课程ID,班级ID)

7.考勤规则(id,规则名称,迟到分钟数,旷课分钟数,签到方式,适用范围,适用对象ID,创建时间)

8.考勤会话(id,课程ID,活动ID,班级ID,教师ID,场景类型,开始时间,结束时间,发起人ID,规则ID,创建时间)

9.活动(id,活动名称,活动类型,班级ID,地点,开始时间,结束时间,创建人ID,创建时间)

10.考勤记录(id,学生ID,会话ID,课程ID,活动ID,场景类型,签到时间,状态,签到方式,位置,创建时间)

11.预警规则(id,规则名称,预警类型,阈值,通知角色,创建时间)

12.预警记录(id,学生ID,规则ID,预警内容,状态,处理人ID,处理备注,创建时间)

13.消息(id,接收人ID,标题,内容,消息类型,是否已读,创建时间)

14.考勤申诉(id,考勤记录ID,学生ID,申诉理由,状态,审批人ID,审批意见,创建时间)

3.3.3 物理结构设计

根据校园考勤管理系统的需求分析和功能设计,梳理出的各个数据表的物理结构设计如下。

用户表(sys_user):存储系统用户基本信息,包括登录账号、密码、姓名、工号/学号等。外键:role_id 关联角色表,class_id 关联班级表(学生),dept_id 关联院系表。用户表,如表3.1所示。

3.1 用户表sys_user

|-------------|----------|-----|------|------|--------|
| 字段名 | 数据类型 | 长度 | 是否为空 | 是否主键 | 描述 |
| id | INTEGER | --- | 否 | 是 | 用户编号 |
| username | VARCHAR | 50 | 否 | 否 | 登录账号 |
| password | VARCHAR | 255 | 否 | 否 | 密码 |
| real_name | VARCHAR | 50 | 是 | 否 | 姓名 |
| user_no | VARCHAR | 30 | 是 | 否 | 工号/学号 |
| role_id | INTEGER | --- | 否 | 否 | 角色ID |
| class_id | INTEGER | --- | 是 | 否 | 所属班级ID |
| dept_id | INTEGER | --- | 是 | 否 | 所属院系ID |
| phone | VARCHAR | 20 | 是 | 否 | 手机号 |
| status | INTEGER | --- | 否 | 否 | 状态 |
| create_time | DATETIME | --- | 是 | 否 | 创建时间 |
| update_time | DATETIME | --- | 是 | 否 | 更新时间 |

角色表(sys_role):存储系统角色信息,用于RBAC权限控制。角色表,如表3.2所示。

3.2 角色表 sys_role

|-------------|----------|-----|------|------|------|
| 字段名 | 数据类型 | 长度 | 是否为空 | 是否主键 | 描述 |
| id | INTEGER | --- | 否 | 是 | 角色编号 |
| role_name | VARCHAR | 50 | 否 | 否 | 角色名称 |
| role_code | VARCHAR | 30 | 是 | 否 | 角色编码 |
| description | VARCHAR | 200 | 是 | 否 | 描述 |
| create_time | DATETIME | --- | 是 | 否 | 创建时间 |

院系表(department):存储院系组织信息,支持层级结构。外键:parent_id 自关联父级院系。院系表,如表3.3所示。

3.3 院系表department

|-----------|---------|-----|------|------|--------|
| 字段名 | 数据类型 | 长度 | 是否为空 | 是否主键 | 描述 |
| id | INTEGER | --- | 否 | 是 | 院系编号 |
| dept_name | VARCHAR | 100 | 否 | 否 | 院系名称 |
| parent_id | INTEGER | --- | 是 | 否 | 父级院系ID |

班级表(class_info):存储班级信息,关联辅导员与院系。外键:counselor_id 关联用户表,dept_id 关联院系表。班级表,如表3.4所示。

3.4 班级表class_info

|--------------|----------|-----|------|------|--------|
| 字段名 | 数据类型 | 长度 | 是否为空 | 是否主键 | 描述 |
| id | INTEGER | --- | 否 | 是 | 班级编号 |
| class_name | VARCHAR | 100 | 否 | 否 | 班级名称 |
| grade | VARCHAR | 20 | 是 | 否 | 年级 |
| counselor_id | INTEGER | --- | 是 | 否 | 辅导员ID |
| dept_id | INTEGER | --- | 是 | 否 | 所属院系ID |
| create_time | DATETIME | --- | 是 | 否 | 创建时间 |

课程表(course):存储课程基本信息,关联任课教师。外键:teacher_id 关联用户表,class_id 关联班级表。课程表,如表3.5所示。

3.5 课程表course

|-------------|----------|-----|------|------|--------|
| 字段名 | 数据类型 | 长度 | 是否为空 | 是否主键 | 描述 |
| id | INTEGER | --- | 否 | 是 | 课程编号 |
| course_code | VARCHAR | 30 | 是 | 否 | 课程代码 |
| course_name | VARCHAR | 100 | 否 | 否 | 课程名称 |
| credit | DECIMAL | 3,1 | 是 | 否 | 学分 |
| teacher_id | INTEGER | --- | 是 | 否 | 任课教师ID |
| class_id | INTEGER | --- | 是 | 否 | 班级ID |
| semester | VARCHAR | 20 | 是 | 否 | 学期 |
| create_time | DATETIME | --- | 是 | 否 | 创建时间 |

课程-班级关联表(course_class):存储课程与班级的多对多关联关系。外键:course_id 关联课程表,class_id 关联班级表。课程-班级关联表,如表3.6所示。

考勤规则表(attendance_rule):存储考勤判定规则,包括迟到、旷课阈值及签到方式配置。考勤规则表,如表3.7所示。

3.6 课程-班级关联表course_class

|-----------|---------|-----|------|------|------|
| 字段名 | 数据类型 | 长度 | 是否为空 | 是否主键 | 描述 |
| id | INTEGER | --- | 否 | 是 | 主键编号 |
| course_id | INTEGER | --- | 否 | 否 | 课程ID |
| class_id | INTEGER | --- | 否 | 否 | 班级ID |

3.7 考勤规则表attendance_rule

|----------------|----------|-----|------|------|---------|
| 字段名 | 数据类型 | 长度 | 是否为空 | 是否主键 | 描述 |
| id | INTEGER | --- | 否 | 是 | 规则编号 |
| rule_name | VARCHAR | 50 | 是 | 否 | 规则名称 |
| late_minutes | INTEGER | --- | 是 | 否 | 迟到判定分钟数 |
| absent_minutes | INTEGER | --- | 是 | 否 | 旷课判定分钟数 |
| sign_type | VARCHAR | 20 | 是 | 否 | 签到方式 |
| scope | VARCHAR | 20 | 是 | 否 | 适用范围 |
| scope_id | INTEGER | --- | 是 | 否 | 适用对象ID |
| create_time | DATETIME | --- | 是 | 否 | 创建时间 |

考勤会话表(attendance_session):存储教师或辅导员发起的某次签到会话。外键:course_id 关联课程表,activity_id 关联活动表,class_id 关联班级表,creator_id、teacher_id 关联用户表,rule_id 关联考勤规则表。考勤会话表,如表3.8所示。

3.8 考勤会话表attendance_session

|-------------|----------|-----|------|------|-------|
| 字段名 | 数据类型 | 长度 | 是否为空 | 是否主键 | 描述 |
| id | INTEGER | --- | 否 | 是 | 会话编号 |
| course_id | INTEGER | --- | 是 | 否 | 课程ID |
| activity_id | INTEGER | --- | 是 | 否 | 活动ID |
| class_id | INTEGER | --- | 是 | 否 | 班级ID |
| teacher_id | INTEGER | --- | 是 | 否 | 教师ID |
| scene_type | VARCHAR | 20 | 否 | 否 | 场景类型 |
| start_time | DATETIME | --- | 是 | 否 | 开始时间 |
| end_time | DATETIME | --- | 是 | 否 | 结束时间 |
| creator_id | INTEGER | --- | 是 | 否 | 发起人ID |
| rule_id | INTEGER | --- | 是 | 否 | 规则ID |
| create_time | DATETIME | --- | 是 | 否 | 创建时间 |

活动表(activity):存储晚自习、活动等签到场景信息。外键:class_id 关联班级表,creator_id 关联用户表。活动表,如表3.9所示。

3.9 活动表activity

|---------------|----------|-----|------|------|--------|
| 字段名 | 数据类型 | 长度 | 是否为空 | 是否主键 | 描述 |
| id | INTEGER | --- | 否 | 是 | 活动编号 |
| activity_name | VARCHAR | 100 | 否 | 否 | 活动名称 |
| activity_type | VARCHAR | 20 | 是 | 否 | 类型 |
| class_id | INTEGER | --- | 是 | 否 | 关联班级ID |
| location | VARCHAR | 100 | 是 | 否 | 地点 |
| start_time | DATETIME | --- | 是 | 否 | 开始时间 |
| end_time | DATETIME | --- | 是 | 否 | 结束时间 |
| creator_id | INTEGER | --- | 是 | 否 | 创建人ID |
| create_time | DATETIME | --- | 是 | 否 | 创建时间 |

考勤记录表(attendance_record):存储学生签到产生的考勤记录。外键:student_id 关联用户表,session_id 关联考勤会话表,course_id 关联课程表,activity_id 关联活动表。考勤记录表,如表3.10所示。

3.10 考勤记录表attendance_record

|-------------|----------|-----|------|------|-----------|
| 字段名 | 数据类型 | 长度 | 是否为空 | 是否主键 | 描述 |
| id | INTEGER | --- | 否 | 是 | 记录编号 |
| student_id | INTEGER | --- | 否 | 否 | 学生ID |
| session_id | INTEGER | --- | 是 | 否 | 考勤会话ID |
| course_id | INTEGER | --- | 是 | 否 | 课程ID |
| activity_id | INTEGER | --- | 是 | 否 | 活动ID |
| scene_type | VARCHAR | 20 | 是 | 否 | 场景类型 |
| sign_time | DATETIME | --- | 是 | 否 | 签到时间 |
| status | VARCHAR | 20 | 是 | 否 | 状态 |
| sign_method | VARCHAR | 20 | 是 | 否 | 签到方式 |
| location | VARCHAR | 200 | 是 | 否 | 签到位置(GPS) |
| create_time | DATETIME | --- | 是 | 否 | 创建时间 |

预警规则表(warning_rule):存储考勤异常预警的触发规则配置。预警规则表,如表3.11所示。

3.11 预警规则表 warning_rule

|-----------------|----------|-----|------|------|------|
| 字段名 | 数据类型 | 长度 | 是否为空 | 是否主键 | 描述 |
| id | INTEGER | --- | 否 | 是 | 规则编号 |
| rule_name | VARCHAR | 50 | 是 | 否 | 规则名称 |
| warning_type | VARCHAR | 20 | 是 | 否 | 类型 |
| threshold_value | INTEGER | --- | 是 | 否 | 阈值 |
| notify_roles | VARCHAR | 100 | 是 | 否 | 通知角色 |
| create_time | DATETIME | --- | 是 | 否 | 创建时间 |

预警记录表(warning_record):存储系统自动生成的考勤预警记录。外键:student_id 关联用户表,rule_id 关联预警规则表,handler_id 关联用户表。预警记录表,如表3.12所示。

3.12 预警记录表 warning_record

|-----------------|----------|-----|------|------|-------|
| 字段名 | 数据类型 | 长度 | 是否为空 | 是否主键 | 描述 |
| id | INTEGER | --- | 否 | 是 | 记录编号 |
| student_id | INTEGER | --- | 否 | 否 | 学生ID |
| rule_id | INTEGER | --- | 是 | 否 | 规则ID |
| warning_content | VARCHAR | 500 | 是 | 否 | 预警内容 |
| status | VARCHAR | 20 | 是 | 否 | 状态 |
| handler_id | INTEGER | --- | 是 | 否 | 处理人ID |
| handle_remark | VARCHAR | 500 | 是 | 否 | 处理备注 |
| create_time | DATETIME | --- | 是 | 否 | 创建时间 |

消息表(message):存储站内消息通知。外键:user_id 关联用户表。消息表,如表3.13所示。

3.13 消息表message

|-------------|----------|-----|------|------|-------|
| 字段名 | 数据类型 | 长度 | 是否为空 | 是否主键 | 描述 |
| id | INTEGER | --- | 否 | 是 | 消息编号 |
| user_id | INTEGER | --- | 否 | 否 | 接收人ID |
| title | VARCHAR | 100 | 是 | 否 | 标题 |
| content | TEXT | --- | 是 | 否 | 内容 |
| msg_type | VARCHAR | 20 | 是 | 否 | 类型 |
| is_read | INTEGER | --- | 是 | 否 | 是否已读 |
| create_time | DATETIME | --- | 是 | 否 | 创建时间 |

考勤申诉表(attendance_appeal):存储学生对考勤记录的申诉及审批结果。外键:record_id 关联考勤记录表,student_id、handler_id 关联用户表。考勤申诉表,如表3.14所示。

3.14 考勤申诉表 attendance_appeal

|---------------|----------|-----|------|------|--------|
| 字段名 | 数据类型 | 长度 | 是否为空 | 是否主键 | 描述 |
| id | INTEGER | --- | 否 | 是 | 申诉编号 |
| record_id | INTEGER | --- | 否 | 否 | 考勤记录ID |
| student_id | INTEGER | --- | 否 | 否 | 学生ID |
| reason | TEXT | --- | 是 | 否 | 申诉理由 |
| status | VARCHAR | 20 | 是 | 否 | 状态 |
| handler_id | INTEGER | --- | 是 | 否 | 审批人ID |
| handle_remark | VARCHAR | 500 | 是 | 否 | 审批意见 |
| create_time | DATETIME | --- | 是 | 否 | 创建时间 |

本章小结:本章从系统功能设计、逻辑结构设计和数据库设计三个方面对校园考勤管理系统进行了详细设计。功能设计按角色划分模块,明确了各角色的职责与交互;逻辑结构设计采用分层架构,描述了各层组件及数据流向;数据库设计从概念、逻辑到物理结构逐层细化,共设计14张数据表,满足业务需求并保证数据完整性。

4 系统实现

4.1 开发环境介绍

项目说明:

操作系统 Windows 10/11

后端开发工具 IntelliJ IDEA 2020.1

前端开发工具 Visual Studio Code

后端开发语言 Java,JDK 1.8

前端开发语言 Vue.js 3

后端开发框架 Spring Boot 2.7.18

前端构建工具 Vite 5

持久层框架 Spring Data JPA

数据库 SQLite

安全框架 Spring Security + JWT

前端 UI 组件库 Element Plus

浏览器调试工具 Google Chrome 浏览器

4.2 系统框架

4.2.1 技术架构

本系统采用的是目前主流的前后端分离技术架构,前端使用 Vue.js 3 框架,后端使用 Spring Boot 框架进行开发。数据库使用SQLite,具有轻量级、不需要独立部署数据存储和管理的能力,使用Spring Data JPA进行数据持久化,保证了数据库操作的高效性以及事务管理的可靠性。前端部分采用Vue 3进行组件化开发、响应式渲染,使用Vue Router实现单页应用的路由控制,使用Axios和后端进行RESTful异步数据交互。另外前端使用了Element Plus组件库来创建页面,使页面更加美观、用户友好,使用Pinia进行状态管理,界面展示和用户操作体验都得到了很好的提升。后端使用轻量级、高性能的Spring Boot框架来简化配置,提高开发效率。安全方面集成了 Spring Security 与 JWT(JSON Web Token)实现无状态认证,保障了接口访问的安全性。数据导出功能使用 Apache POI 实现了 Excel 格式考勤记录的导出,可以满足报表需求。为了提高系统的稳定性以及扩展性,可以采用组件化、微服务的开放式架构设计,保证系统高可用性以及容错性。

4.3 功能模块实现

4.3.1 用户模块的实现

  1. 登录认证模块的实现

用户登录系统采用账号密码的方式。用户输入用户名和密码,点击登录按钮。用户登录界面如图 4.1 所示。

4.1 用户登录界面

功能实现,在后端的 AuthController 的 login 方法中接受用户名和密码,然后调用 AuthService.login() 进行校验。AuthService 从 SysUserRepository 获取用户,用 PasswordEncoder 校验密码,校验通过之后调用 JwtUtil 生成 JWT Token 并返回给用户信息(userId、username、realName、roleCode)以及 Token。前端使用 api/auth.js 的 login 方法调用 POST /auth/login 接口进行登录,登录成功之后将 Token 和用户信息存入 localStorage,并跳转到工作台 /dashboard。路由守卫在访问需要认证的页面的时候会检查 Token,没有登录就重定向到 /login。

  1. 用户管理模块的实现

用户管理功能只管理员可以使用。管理员可以查看用户列表、新增用户、编辑用户信息、删除用户、重置密码。用户管理界面如图 4.2 所示。

图 4.2 用户管理界面

功能实现上后端的 SysUserController 使用了 @PreAuthorize("hasRole('ADMIN')") 来限定只有管理员才能访问。list()方法调用SysUserService.findAll()返回全部用户;create()方法校验用户名是否存在之后调用userService.save(),密码经过BCrypt加密存储;update()支持修改姓名、工号、角色、班级等,如果密码为空就保留原来的密码;updatePassword()支持用户本人或者管理员修改密码。前端Users.vue利用api/user.js调用相应的接口,使用Element Plus的el-table、el-dialog实现列表展示和表单编辑。

4.3.2 业务管理模块的实现

  1. 课程管理模块的实现

课程管理支持课程的增删改查,管理员可创建课程并指定任课教师,教师可查看和编辑本人所授课程。功能实现:CourseController 的 list() 根据 teacherId、semester 筛选,教师角色自动过滤为本人课程;create()、delete() 仅管理员可操作;update() 管理员和教师均可操作。前端 Courses.vue 通过 api/course.js 获取课程列表,支持按学期、教师筛选,使用 el-form 进行新增和编辑。见图4.3课程管理

4.3课程管理

  1. 班级管理模块的实现

班级管理支持班级的增删改查,可关联辅导员。功能实现:ClassInfoController 提供 CRUD 接口,管理员和辅导员可管理班级。前端 Classes.vue 展示班级列表,支持选择辅导员、院系等,通过 api/class.js 与后端交互。见图4.4班级管理。

4.4班级管理

  1. 考勤规则模块的实现

考勤规则用于配置迟到、旷课判定阈值及签到方式。功能实现:AttendanceRuleController 提供规则的增删改查,支持 scope 为 global(全局)、course(课程)、activity(活动)。规则包含 lateMinutes(迟到分钟数)、absentMinutes(旷课分钟数)、signType(manual/qrcode/gps)。前端 AttendanceRules.vue 通过 api/attendance.js 获取规则列表,支持新增、编辑、删除规则。见图4.5考勤规则管理。

图4.5考勤规则管理

  1. 考勤签到模块的实现

考勤签到支持课堂签到、晚自习签到、活动签到三种场景。教师或辅导员发起签到后,学生在有效时间内参与签到。见图4.6考勤签到管理。

4.6考勤签到管理

功能实现:后端 AttendanceController 的 createSession() 方法接收 sceneType、courseId 或 activityId、ruleId、durationMinutes,调用 AttendanceService.createSession() 创建考勤会话,记录开始时间、结束时间。getActiveSessions() 返回当前进行中的会话列表。sign() 方法接收 sessionId、signMethod,AttendanceService 校验会话是否有效、是否重复签到,根据考勤规则计算 status(normal/late/absent)并保存考勤记录。前端 Attendance.vue 使用 el-tabs 分为"发起签到"和"参与签到"两个标签页,发起签到需选择场景类型、课程或活动、考勤规则、签到时长;参与签到时展示进行中的会话卡片,学生选择会话后点击"立即签到"完成签到。

  1. 活动管理模块的实现

活动管理用于创建晚自习、活动等签到场景。功能实现:ActivityController 提供活动的增删改查,活动包含 activityName、activityType(evening_study/activity)、classId、location、startTime、endTime。前端 Activities.vue 通过 api/activity.js 管理活动列表,支持按类型、班级筛选。见图4.7活动管理。

4.7活动管理

  1. 考勤记录模块的实现

考勤记录可以按照学生、课程、时间范围等条件进行查询。功能实现方面,AttendanceController的getRecords()根据studentId、courseId、sessionId、startTime、endTime筛选,学生角色默认为本人记录。返回 RecordWithNameVO 包含学生姓名。前端 Records.vue 通过 api/attendance.js 获取记录,支持导出 Excel。见图4.8考勤记录管理。

图4.8考勤记录管理

  1. 数据统计模块的实现

数据统计模块可以对个人、课程、班级出勤情况进行统计。功能实现为StatisticsController的getStatistics()根据studentId、courseId、classId筛选记录,统计normal、late、absent的数量以及attendanceRate(出勤率)。学生角色默认为本人。前端Statistics.vue通过api/statistics.js获取数据,用图表展示统计结果。见图4.9数据统计管理。

图4.9数据统计管理

  1. 异常预警模块的实现

异常预警模块展示考勤异常预警记录,辅导员可以处理预警。功能实现:WarningController 提供预警列表查询,支持按学生、状态筛选。前端 Warnings.vue 通过 api/warning.js 获取预警列表,支持标记已处理、添加备注。见图4.10异常预警管理。

图4.10异常预警管理

  1. 消息通知模块的实现

消息通知模块提供站内消息的查看与已读管理。功能实现:MessageController 提供消息列表、未读数量、标记已读等接口。前端 Messages.vue 通过 api/message.js 获取消息,MainLayout 顶部展示未读消息数量徽章。见图4.11消息通知管理。

图4.11消息通知管理

  1. 数据导出模块的实现

数据导出模块可以将考勤记录导出成 Excel 文件。功能实现是ExportController的exportExcel()根据studentId、courseId、startTime、endTime筛选记录,使用Apache POI的XSSFWorkbook生成Excel,设置Content-Disposition响应头实现文件下载。前端Records.vue中存在一个导出按钮,点击该按钮之后会调用到 /attendance/export接口触发下载。

4.3.3 管理员模块的实现

管理员有系统最高权限,可以访问用户管理、班级管理、课程管理、考勤规则、活动管理、考勤记录、数据统计、异常预警、消息通知等全部功能。功能实现:后端各 Controller 使用 @PreAuthorize 进行角色校验,管理员角色(ADMIN)在多数接口中拥有完整权限。前端 MainLayout.vue 通过 permission.js 中的 hasMenuPermission() 根据角色动态显示菜单,管理员可看到全部菜单项。用户管理、考勤规则、课程删除等只有管理员才能执行的操作,都是通过接口级权限控制来保证安全的。管理员模块管理如图4.12所示。

图4.12管理员模块管理

4.3.4 教务处模块的实现

教务处可查看全校考勤数据、参与考勤规则制定、导出报表。功能实现:教务处角色(ACADEMIC)在 permission.js 中配置了 classes、courses、attendanceRules、attendance、activities、records、statistics、warnings、messages 的查看权限,但无用户管理权限。后端 CourseController、ClassInfoController 等对 ACADEMIC 开放查询接口,统计与导出接口按权限返回全校数据。见图4.13教务处模块管理。

图4.13教务处块管理

4.3.5 辅导员模块的实现

辅导员可管理所辖班级的考勤、活动及异常预警处理。功能实现:辅导员角色(COUNSELOR)可发起晚自习签到、活动签到,可管理班级和活动。后端 AttendanceController 的 createSession() 对 COUNSELOR 开放;ClassInfoController、ActivityController 对辅导员开放管理权限。前端根据 CAN_MANAGE_CLASS、CAN_MANAGE_ACTIVITY、CAN_CREATE_ATTENDANCE 控制辅导员可见的"发起签到""班级管理""活动管理"等功能。见图4.14辅导员模块管理。

图4.14辅导员模块管理

4.3.6 任课教师模块的实现

任课教师可以管理本人所教授课程的考勤、发起课堂签到、查看课程统计。功能实现:CourseController 的 list() 对教师角色自动过滤为 teacherId 等于当前用户;AttendanceController 的 createSession() 对 TEACHER 开放,课堂签到需关联课程。前端教师登录后只能看到本人的课程,可以发起课堂签到,查看本课程的考勤记录和统计。见图4.15任课教师模块管理。

图4.15任课教师模块管理

4.3.7 学生模块的实现

学生可以签到、查看本人的考勤记录、统计和预警。功能实现上,学生角色(STUDENT)在考勤签到页面可以查看正在进行的会话并完成签到,考勤记录、统计、导出接口通过principal.getUserId()自动限定为本人数据。前端学生登录之后可以看见"考勤签到""考勤记录""数据统计""异常预警""消息通知"这些菜单,参加签到的时候只显示"参与签到"标签页,没有发起签到的权限。见图4.16学生模块管理。

图4.16学生模块管理

5系统测试

系统测试属于检验系统功能是否正确、稳定、易用的重要步骤。本章根据需求文档和系统实现,分别对管理员、教务处、辅导员、任课教师、学生这五个角色进行功能测试用例的设计和执行,用真实的、具体的测试数据进行验证,保证各个角色的核心功能符合预期。

5.1 学生功能测试

学生角色主要功能包括:登录、参与课堂/晚自习/活动签到、查看个人考勤记录、查看数据统计、查看异常预警、查看消息通知等。学生功能测试用例表如下所示。

登录功能测试用例表,如表5.1所示。

5.1 学生登录功能测试用例表

|------|--------|--------------|-------------------------|---------------------|------|
| 测试编号 | 测试项 | 预置条件 | 测试步骤或数据 | 期望结果 | 实际结果 |
| 1 | 正确登录 | 系统已启动,学生账号存在 | 输入用户名和密码:student/123456 | 成功登录,跳转至工作台,显示"李同学" | 成功登录 |
| 2 | 错误密码登录 | 系统已启动 | 输入用户名和密码:student/111111 | 提示"用户名或密码错误",停留在登录页 | 提示错误 |
| 3 | 空用户名登录 | 系统已启动 | 输入用户名和密码:空/123456 | 提示"请输入用户名",无法提交 | 提示错误 |
| 4 | 空密码登录 | 系统已启动 | 输入用户名和密码:student/空 | 提示"请输入密码",无法提交 | 提示错误 |

参与签到功能测试用例表,如表5.2所示。

5.2 学生参与签到功能测试用例表

|------|------|------------------------------|-------------------------------------|---------------------------|------|
| 测试编号 | 测试项 | 预置条件 | 测试步骤或数据 | 期望结果 | 实际结果 |
| 1 | 课堂签到 | 学生已登录,存在进行中的"Java程序设计"课堂签到会话 | 进入考勤签到页,选择"Java程序设计"课堂签到会话,点击"签到"按钮 | 签到成功,提示"签到成功",考勤记录中显示正常状态 | 签到成功 |

续表5.2 学生参与签到功能测试用例表

|------|-------|---------------------------------|----------------------------|-----------------------|------|
| 测试编号 | 测试项 | 预置条件 | 测试步骤或数据 | 期望结果 | 实际结果 |
| 2 | 晚自习签到 | 学生已登录,存在进行中的"计算机2024级1班晚自习"签到会话 | 进入考勤签到页,选择晚自习签到会话,点击"签到"按钮 | 签到成功,考勤记录中显示对应晚自习签到记录 | 签到成功 |
| 3 | 活动签到 | 学生已登录,存在进行中的活动签到会话 | 进入考勤签到页,选择活动签到会话,点击"签到"按钮 | 签到成功,考勤记录中显示对应活动签到记录 | 签到成功 |
| 4 | 重复签到 | 学生已登录,已对某签到会话完成签到 | 再次选择同一签到会话,点击"签到"按钮 | 提示"您已签到,请勿重复签到"或类似提示 | 提示重复 |

考勤记录查询功能测试用例表,如表5.3所示。

5.3 学生考勤记录查询功能测试用例表

|------|--------|----------------|-----------------------------------|----------------------------|------|
| 测试编号 | 测试项 | 预置条件 | 测试步骤或数据 | 期望结果 | 实际结果 |
| 1 | 查看考勤记录 | 学生已登录,存在本人考勤记录 | 进入考勤记录页,查看列表 | 仅显示本人考勤记录,包含课程名、签到时间、状态等信息 | 正确显示 |
| 2 | 按时间筛选 | 学生已登录 | 选择时间范围:2024-12-01至2024-12-31,点击查询 | 显示该时间范围内的本人考勤记录 | 正确显示 |
| 3 | 按状态筛选 | 学生已登录 | 选择考勤状态:迟到,点击查询 | 仅显示迟到状态的考勤记录 | 正确显示 |

数据统计功能测试用例表,如表5.4所示。

5.4 学生数据统计功能测试用例表

|------|--------|--------------|----------------|---------------------------|------|
| 测试编号 | 测试项 | 预置条件 | 测试步骤或数据 | 期望结果 | 实际结果 |
| 1 | 查看个人统计 | 学生已登录 | 进入数据统计页 | 显示本人出勤率、迟到次数、旷课次数等统计信息及图表 | 正确显示 |
| 2 | 图表展示 | 学生已登录,存在考勤数据 | 查看统计页面的柱状图、饼图等 | 图表正确渲染,数据与列表一致 | 正确显示 |

消息通知功能测试用例表,如表5.5所示。

5.5 学生消息通知功能测试用例表

|------|--------|--------------|-------------|---------------------|------|
| 测试编号 | 测试项 | 预置条件 | 测试步骤或数据 | 期望结果 | 实际结果 |
| 1 | 查看消息列表 | 学生已登录,存在未读消息 | 进入消息通知页 | 显示本人收到的消息列表,未读消息有标识 | 正确显示 |
| 2 | 标记已读 | 学生已登录,存在未读消息 | 点击某条消息查看详情 | 消息状态变为已读,未读数量减少 | 正确更新 |
| 3 | 退出登录 | 学生已登录 | 点击右上角"退出"按钮 | 退出登录,跳转至登录页 | 正确退出 |

5.2 任课教师功能测试

任课教师角色主要功能包括:登录、发起课堂签到、查看课程考勤记录、查看数据统计、查看异常预警、查看消息通知等。任课教师功能测试用例表如下所示。

登录功能测试用例表,如表5.6所示。

5.6任课教师登录功能测试用例表

|------|--------|-------|-------------------------|------------------------------|------|
| 测试编号 | 测试项 | 预置条件 | 测试步骤或数据 | 期望结果 | 实际结果 |
| 1 | 正确登录 | 系统已启动 | 输入用户名和密码:teacher/123456 | 成功登录,显示"张老师",可访问课程管理、考勤签到等菜单 | 成功登录 |
| 2 | 错误密码登录 | 系统已启动 | 输入用户名和密码:teacher/abc123 | 提示"用户名或密码错误" | 提示错误 |

发起课堂签到功能测试用例表,如表5.7所示。

5.7 任课教师发起课堂签到功能测试用例表

|------|--------|----------------------|---------------------------------------------------------------|------|------|
| 测试编号 | 测试项 | 预置条件 | 测试步骤或数据 | 期望结果 | 实际结果 |
| 1 | 发起课堂签到 | 教师已登录,存在课程"Java程序设计" | 进入考勤签到页,选择"发起签到",场景类型选"课堂签到",课程选"Java程序设计",签到时长填15分钟,点击"发起签到" | 签到成功 | 创建成功 |

续表5.7 任课教师发起课堂签到功能测试用例表

|------|--------|----------------------|------------------------------|------------|------|
| 测试编号 | 测试项 | 预置条件 | 测试步骤或数据 | 期望结果 | 实际结果 |
| 2 | 选择考勤规则 | 教师已登录,存在考勤规则"默认课堂规则" | 发起签到时,考勤规则选择"默认课堂规则" | 则定迟到、旷课 | 正确应用 |
| 3 | 未选课程发起 | 教师已登录 | 场景类型选"课堂签到",课程不选择,直接点击"发起签到" | 提示"请选择课程"或 | 正确校验 |

考勤记录与统计功能测试用例表,如表5.8所示。

5.8 任课教师考勤记录与统计功能测试用例表

|------|----------|--------------------------|------------------------|----------------------------|------|
| 测试编号 | 测试项 | 预置条件 | 测试步骤或数据 | 期望结果 | 实际结果 |
| 1 | 查看所授课程考勤 | 教师已登录,存在"Java程序设计"课程考勤记录 | 进入考勤记录页,筛选课程"Java程序设计" | 仅显示该课程的考勤记录,包含学生姓名、签到时间、状态 | 正确显示 |
| 2 | 查看课程统计 | 教师已登录 | 进入数据统计页 | 显示所授课程出勤率、缺勤名单等统计信息 | 正确显示 |
| 3 | 查看异常预警 | 教师已登录,所授课程存在预警记录 | 进入异常预警页 | 显示所授课程相关的预警记录 | 正确显示 |

5.3 辅导员功能测试

辅导员角色主要功能包括:登录、发起晚自习/活动签到、管理班级、查看所辖班级考勤、处理异常预警、查看消息通知等。辅导员功能测试用例表如下所示。

登录功能测试用例表,如表5.9所示。

5.9 辅导员登录功能测试用例表

|------|--------|-------|----------|---------------------------|------|
| 测试编号 | 测试项 | 预置条件 | 测试步骤或数据 | 期望结果 | 实际结果 |
| 1 | 正确登录 | 系统已启动 | 输入用户名和密码 | 成功登录,可访问班级管理、活动管理、考勤签到等菜单 | 成功登录 |
| 2 | 错误密码登录 | 系统已启动 | 输入用户名和密码 | 提示"用户名或密码错误" | 提示错误 |

班级管理功能测试用例表,如表5.10所示。

5.10 辅导员班级管理功能测试用例表

|------|--------|------------------|------------------|------------------------|------|
| 测试编号 | 测试项 | 预置条件 | 测试步骤或数据 | 期望结果 | 实际结果 |
| 1 | 查看班级列表 | 辅导员已登录 | 进入班级管理页 | 显示所辖班级列表,如"计算机2024级1班" | 正确显示 |
| 2 | 新增班级 | 辅导员已登录 | 选择辅导员"刘辅导员",点击保存 | 班级创建成功,列表中显示新班级 | 创建成功 |
| 3 | 编辑班级 | 存在班级"计算机2024级1班" | 点击编辑,保存 | 班级信息更新成功 | 更新成功 |
| 4 | 删除班级 | 辅导员已登录,存在可删除的班级 | 点击删除,确认操作 | 班级删除成功,列表中不再显示 | 删除成功 |

活动管理与签到功能测试用例表,如表5.11所示。

5.11 辅导员活动管理与签到功能测试用例表

|------|---------|----------------|--------------------|------------------|------|
| 测试编号 | 测试项 | 预置条件 | 测试步骤或数据 | 期望结果 | 实际结果 |
| 1 | 新增晚自习活动 | 辅导员已登录 | 设置开始和结束时间,保存 | 活动创建成功 | 创建成功 |
| 2 | 发起晚自习签到 | 辅导员已登录,存在晚自习活动 | 签到时长填20分钟,点击"发起签到" | 签到会话创建成功,学生可参与签到 | 创建成功 |
| 3 | 发起活动签到 | 辅导员已登录,存在活动 | 点击"发起签到" | 签到会话创建成功 | 创建成功 |
| 4 | 查看活动列表 | 辅导员已登录 | 进入活动管理页 | 显示所辖班级相关活动列表 | 正确显示 |

异常预警处理功能测试用例表,如表5.12所示。

5.12 辅导员异常预警处理功能测试用例表

|------|---------|-------------------|------------------|------------------|------|
| 测试编号 | 测试项 | 预置条件 | 测试步骤或数据 | 期望结果 | 实际结果 |
| 1 | 查看预警列表 | 辅导员已登录,存在所辖班级预警记录 | 进 入异常预警页 | 显示所辖班级学生的预警记录 | 正确显示 |
| 2 | 标记预警已处理 | 辅导员已登录,存在待处理预警 | 处理备注填"已与学生谈话",保存 | 预警状态变为已处理,显示处理备注 | 正确更新 |

5.4 教务处功能测试

教务处角色主要功能包括:登录、查看课程与班级、参与考勤规则设置、查看全校考勤数据、导出统计报表、查看异常预警、查看消息通知等。教务处功能测试用例表如下所示。

登录功能测试用例表,如表5.13所示。

5.13 教务处登录功能测试用例表

|------|---------|--------|--------------------------|-----------------------------------------|------|
| 测试编号 | 测试项 | 预置条件 | 测试步骤或数据 | 期望结果 | 实际结果 |
| 1 | 正确登录 | 系统已启动 | 输入用户名和密码:academic/123456 | 成功登录,显示"王主任",可访问课程、班级、考勤规则、考勤记录、数据统计等菜单 | 成功登录 |
| 2 | 无用户管理权限 | 教务处已登录 | 尝试访问用户管理菜单或路径/users | 无法访问,跳转至工作台或提示无权限 | 正确限制 |

考勤规则与数据查看功能测试用例表,如表5.14所示。

5.14教务处考勤规则与数据查看功能测试用例表

|------|----------|--------|-------------------|----------------------|------|
| 测试编号 | 测试项 | 预置条件 | 测试步骤或数据 | 期望结果 | 实际结果 |
| 1 | 查看考勤规则 | 教务处已登录 | 进入考勤规则页 | 显示全校考勤规则列表,如"默认课堂规则" | 正确显示 |
| 2 | 查看课程列表 | 教务处已登录 | 进入课程管理页 | 显示全校课程列表 | 正确显示 |
| 3 | 查看班级列表 | 教务处已登录 | 进入班级管理页 | 显示全校班级列表 | 正确显示 |
| 4 | 查看全校考勤记录 | 教务处已登录 | 进入考勤记录页,不设筛选或选择全部 | 显示全校考勤记录 | 正确显示 |
| 5 | 查看全校统计 | 教务处已登录 | 进入数据统计页 | 显示全校考勤概览、出勤率等统计信息 | 正确显示 |
| 6 | 查看全校预警 | 教务处已登录 | 进入异常预警页 | 显示全校异常预警记录 | 正确显示 |

考勤记录导出功能测试用例表,如表5.15所示。

5.15 教务处考勤记录导出功能测试用表

|------|--------|---------------|-------------------------------------------------|--------------------------|------|
| 测试编号 | 测试项 | 预置条件 | 测试步骤或数据 | 期望结果 | 实际结果 |
| 1 | 导出考勤记录 | 教务处已登录,存在考勤数据 | 进入考勤记录页,选择时间范围2024-12-01至2024-12-31,点击"导出Excel" | 下载Excel文件,包含所选时间范围内的考勤记录 | 导出成功 |
| 2 | 按班级导出 | 教务处已登录 | 筛选班级"计算机2024级1班",点击导出 | 导出的Excel仅包含该班级考勤记录 | 导出正确 |

5.5 管理员功能测试

管理员角色拥有系统最高权限,主要功能包括:用户管理、班级管理、课程管理、考勤规则设置、活动管理、考勤签到、考勤记录、数据统计、异常预警、消息通知等。管理员功能测试用例表如下所示。

登录功能测试用例表,如表5.16所示。

5.16 管理员登录功能测试用例表

|------|--------|-------|----------|----------------|------|
| 测试编号 | 测试项 | 预置条件 | 测试步骤或数据 | 期望结果 | 实际结果 |
| 1 | 正确登录 | 系统已启动 | 输入用户名和密码 | 成功登录,显示"系统管理员" | 成功登录 |
| 2 | 错误密码登录 | 系统已启动 | 输入用户名和密码 | 提示"用户名或密码错误" | 提示错误 |

用户管理功能测试用例表,如表5.17所示。

5.17 管理员用户管理功能测试用例表

|------|--------|-----------------|--------------------|-------------------------------|------|
| 测试编号 | 测试项 | 预置条件 | 测试步骤或数据 | 期望结果 | 实际结果 |
| 1 | 查看用户列表 | 管理员已登录 | 进入用户管理页 | 显示全部用户列表,包含用户名、姓名、工号/学号、角色等信息 | 正确显示 |
| 2 | 新增用户 | 管理员已登录 | 点击"新增",填写内容,保存 | 用户创建成功,列表中显示新用户 | 创建成功 |
| 3 | 编辑用户 | 管理员已登录,存在用户"张三" | 点击编辑,将姓名改为"张三丰",保存 | 用户信息更新成功 | 更新成功 |

续表5.17 管理员用户管理功能测试用例表

|------|------|-----------------|--------------------------|----------------------|------|
| 测试编号 | 测试项 | 预置条件 | 测试步骤或数据 | 期望结果 | 实际结果 |
| 4 | 分配角色 | 管理员已登录,存在用户 | 编辑用户,将角色从"学生"改为"教师",保存 | 角色更新成功,用户以新角色登录后权限变更 | 更新成功 |
| 5 | 重置密码 | 管理员已登录,存在用户 | 点击"重置密码",新密码填"654321",确认 | 密码重置成功,用户可使用新密码登录 | 重置成功 |
| 6 | 禁用用户 | 管理员已登录,存在启用状态用户 | 点击"禁用"或修改状态为禁用 | 用户状态变为禁用,该用户无法登录 | 正确禁用 |
| 7 | 删除用户 | 管理员已登录,存在可删除用户 | 点击删除,确认操作 | 用户删除成功 | 删除成功 |

考勤规则设置功能测试用例表,如表5.18所示。

5.18 管理员考勤规则设置功能测试用例表

|------|--------|---------------------|------------------------|--------|------|
| 测试编号 | 测试项 | 预置条件 | 测试步骤或数据 | 期望结果 | 实际结果 |
| 1 | 新增考勤规则 | 管理员已登录 | 进入考勤规则页,点击"新增",填写内容,保存 | 规则创建成功 | 创建成功 |
| 2 | 编辑考勤规则 | 管理员已登录,存在规则"默认课堂规则" | 点击编辑,将迟到分钟数改为20,保存 | 规则更新成功 | 更新成功 |
| 3 | 删除考勤规则 | 管理员已登录,存在可删除规则 | 点击删除,确认 | 规则删除成功 | 删除成功 |

课程管理功能测试用例表,如表5.19所示。

5.19 管理员课程管理功能测试用例表

|------|------|-----------------------|------------------------|----------|------|
| 测试编号 | 测试项 | 预置条件 | 测试步骤或数据 | 期望结果 | 实际结果 |
| 1 | 新增课程 | 管理员已登录,存在班级和教师 | 进入课程管理页,点击"新增",填写内容,保存 | 课程创建成功 | 创建成功 |
| 2 | 编辑课程 | 管理员已登录,存在课程"Java程序设计" | 点击编辑,将学分改为4.0,保存 | 课程信息更新成功 | 更新成功 |
| 3 | 删除课程 | 管理员已登录,存在可删除课程 | 点击删除,确认 | 课程删除成功 | 删除成功 |

考勤签到与全局管理功能测试用例表,如表5.20所示。

5.20 管理员考勤签到与全局管理功能测试用例表

|------|----------|----------------|-----------------------------------|--------------------|------|
| 测试编号 | 测试项 | 预置条件 | 测试步骤或数据 | 期望结果 | 实际结果 |
| 1 | 发起课堂签到 | 管理员已登录,存在课程 | 进入考勤签到页,选择课堂签到,课程选"Java程序设计",发起签到 | 签到会话创建成功 | 创建成功 |
| 2 | 发起晚自习签到 | 管理员已登录,存在晚自习活动 | 选择晚自习签到,活动选对应活动,发起签到 | 签到会话创建成功 | 创建成功 |
| 3 | 查看全部考勤记录 | 管理员已登录 | 进入考勤记录页 | 显示全校全部考勤记录 | 正确显示 |
| 4 | 导出全部考勤 | 管理员已登录 | 选择时间范围,点击导出Excel | 下载包含全校考勤记录的Excel文件 | 导出成功 |
| 5 | 查看全部预警 | 管理员已登录 | 进入异常预警页 | 显示全校异常预警记录 | 正确显示 |

5.6 测试总结

本章根据校园考勤管理系统五类角色(学生、任课教师、辅导员、教务处、管理员)设计了登录、考勤签到、考勤记录、数据统计、异常预警、消息通知、用户管理、班级管理、课程管理、考勤规则、活动管理等主要功能的测试用例。测试数据采用系统初始化以及实际业务场景中真实的用户名、课程、班级等数据,即用户名为student/123456、课程为Java程序设计、班级为计算机2024级1班等,保证测试的可执行性以及结果的可验证性。

经过测试,各个角色的主要功能均可以满足预期的要求,登录认证、权限控制、考勤业务逻辑以及数据展示等都符合需求文档的要求,系统功能测试通过。

结 论

系统安全上使用JWT做用户身份的权限校验和登录会话时效管理,用RBAC模型做角色和权限的细粒度控制,有效地防止了越权访问,给多角色协同的考勤管理提供安全保障。

系统性能上采用前后端分离架构,常规页面加载时间小于3秒,接口响应时间小于1秒,支持100个以上并发用户在线,可以存储和查询单校万级学生、十万级考勤记录的数据。考勤记录可以进行多条件筛选,并且可以导出到Excel中,可以满足教务处、辅导员、任课教师等不同的角色对统计报表的要求。

系统解决了传统人工考勤效率低、数据难统计、异常难预警的问题,实现了课堂、晚自习、活动等多场景的考勤管理,支持手动签到、二维码签到、GPS定位签到等多种方式,考勤规则可以自由设置迟到和旷课的判定标准。异常预警模块可以自动检测连续旷课、单月迟到超限、出勤率过低等异常情况,并将这些情况推送给辅导员和学生。考勤申诉机制给学生留有异议表达的途径,由辅导员审批处理,保证考勤记录的公平性、可追溯性。

在功能完整性方面,系统覆盖从用户登录、课程管理、考勤规则配置、多场景签到、数据统计分析、异常预警到考勤申诉的完整流程,各项功能已通过功能测试、性能测试与安全测试,能够稳定运行,具备良好的可扩展性与实际应用价值。

本课题设计并实现了一套基于Spring Boot和Vue的校园考勤管理系统,系统在功能完整性、安全性、性能与用户体验方面达到了预期目标。后续可进一步优化预警算法的阈值自适应能力,拓展移动端支持,以更好地满足高校考勤管理的实际需求。

相关推荐
ReSearch1 小时前
sfsEdgeStore:边缘计算时代的轻量级数据存储解决方案
数据库·后端·github
SamDeepThinking1 小时前
拼单模块设计实战
java·后端·架构
Mike117.1 小时前
GBase 8a 宽表查询里的压缩和行存列取舍
java·开发语言·数据库
我有医保我先冲2 小时前
【无标题】
java·大数据·人工智能
XiYang-DING2 小时前
【Java EE】UDP(User Datagram Protocol)协议
java·udp·java-ee
CODE202203182 小时前
promptfoo自定义prompt生成器
java·前端·prompt
_waylau2 小时前
“Java+AI全栈工程师”问答02:Spring Boot 自动配置原理
java·开发语言·spring boot·后端·spring
JAVA面经实录9172 小时前
Java架构师最终完整版学习路线图
java·开发语言·学习