目 录
1 绪论
1.1研究背景
1.2研究意义
1.3微信小程序的介绍
2考勤系统微信小程序系统分析
2.1 可行性分析
2.1.1 技术可行性分析
2.1.2 经济可行性分析
2.1.3 法律可行性分析
2.2 系统功能分析
2.2.1 功能性分析
2.2.2 非功能性分析
2.3 系统用例分析
2.4本章小结
3考勤系统微信小程序总体设计
3.1 系统功能模块设计
3.1.1整体功能模块设计
3.1.2用户模块设计
3.1.3 评论管理模块设计
3.1.4交流论坛模块设计
3.2 数据库设计
3.2.1 数据库概念结构设计
3.3.2 数据库逻辑结构设计
3.4本章小结
4考勤系统微信小程序详细设计与实现
4.1用户功能模块
4.1.1 前台首页界面
4.1.2 用户注册界面
4.1.3用户登录界面
4.1.4通知公告界面
4.1.5交流论坛界面
4.1.6考勤打卡界面
4.1.7新闻资讯详情界面
4.2管理员功能模块
4.2.1系统用户管理界面
4.2.2 考勤打卡管理界面
4.2.3 通知公告管理界面
4.2.4 资源管理界面
4.2.5交流管理界面
5系统测试
5.1 系统测试用例
5.2 系统测试结果
结论
参考文献
致 谢
摘 要
本研究设计与实现了一个基于SSM(Spring+SpringMVC+MyBatis)框架的考勤系统微信小程序,旨在解决员工的考勤管理需求。通过采用微信小程序作为开发平台,员工可以方便地进行考勤打卡、查看考勤记录和统计信息。
在系统设计方面,该考勤系统微信小程序分为员工用户和管理员两个角色。员工用户可以使用小程序进行每日的考勤打卡操作,通过手机定位或扫码等方式记录出勤情况,并可以查看自己的考勤记录和统计信息。管理员负责审核异常情况和生成考勤报表,可以对考勤数据进行管理和监督。
通过设计与实现这个考勤系统微信小程序,员工能够方便地进行考勤打卡、查看考勤记录和参与交流,提高了考勤管理的效率和准确性。同时,系统也为员工提供了获取学习资源和接收通知公告的便捷途径。管理员可以更好地管理和监督员工的考勤情况,并促进员工之间的交流和合作。该小程序的设计与实现为企业提供了一个全面而高效的考勤管理工具,有助于提升员工的工作效率和积极性。
关键词:SSM;考勤系统;小程序
Abstract
This study designed and implemented a WeChat mini program for an attendance system based on the SSM (Spring+SpringMVC+MyBatis) framework, aiming to address the attendance management needs of employees. By using WeChat mini programs as the development platform, employees can easily clock in and view attendance records and statistical information.
In terms of system design, the attendance system WeChat mini program is divided into two roles: employee user and administrator. Employee users can use the mini program to perform daily attendance and clock in operations, record attendance status through mobile phone positioning or scanning codes, and view their own attendance records and statistical information. Administrators are responsible for reviewing abnormal situations and generating attendance reports, and can manage and supervise attendance data.
By designing and implementing this attendance system WeChat mini program, employees can easily clock in, view attendance records, and participate in communication, improving the efficiency and accuracy of attendance management. At the same time, the system also provides employees with a convenient way to access learning resources and receive notification announcements. Administrators can better manage and monitor employee attendance, and promote communication and cooperation among employees. The design and implementation of this mini program provides a comprehensive and efficient attendance management tool for enterprises, which helps to improve employee work efficiency and motivation.
Keywords:SSM; Attendance system; Mini Program
1 绪论
1.1研究背景
近年来,随着移动互联网和微信的普及与发展,微信小程序成为了企业和组织开展业务的重要平台之一。在人力资源管理领域,考勤是企业日常管理的重要环节,对于确保员工出勤情况的准确性和提高工作效率具有关键作用。因此,设计与实现一个考勤系统微信小程序成为了解决企业考勤管理需求的迫切需求。传统的考勤管理方式存在许多不足,如考勤卡打卡容易造成作弊、信息整理繁琐等问题。而采用微信小程序作为考勤系统的载体,能够借助微信用户基础广泛和使用便捷的优势,为企业提供一种更加智能、高效的考勤管理方式。
此外,结合微信小程序的特点,考勤系统可以实现实时考勤打卡、数据自动记录等功能。员工通过微信小程序进行考勤打卡,可以准确记录出勤时间和位置,避免人为操作带来的错误。管理员可以方便地查看和管理考勤数据,生成报表并进行数据分析,从而更好地掌握员工的考勤情况和工作表现。
因此,设计与实现一个考勤系统微信小程序具有重要的背景意义。它能够为企业提供一种便捷、高效的考勤管理工具,提升员工考勤管理的准确性和效率。同时,结合微信用户基础广泛的优势,该系统可以更好地满足企业的日常管理需求,并推动企业的数字化转型和智能化发展。
1.2研究意义
随着移动互联网的快速发展和微信的普及,微信小程序作为一种新兴的应用形式,被广泛应用于各个领域。在考勤管理方面,传统的纸质或电子考勤系统存在诸多问题,如操作繁琐、数据管理不便等。因此,设计与实现一个基于微信小程序的考勤系统具有重要的研究意义和实际应用价值。
首先,考勤系统微信小程序的设计与实现可以提供企业或组织一种更加便捷、高效的考勤管理方式。员工可以通过微信小程序进行考勤打卡,无需额外的硬件设备或复杂的流程,节省了时间和成本。管理员可以轻松地查看和管理考勤数据,实时了解员工的出勤情况,从而提高考勤管理的准确性和效率。
其次,该研究还具有推动企业数字化转型和智能化发展的意义。通过将考勤管理引入微信小程序,可以实现移动办公和远程管理,适应现代企业灵活工作模式的需求。同时,系统可以借助微信小程序的社交属性,促进员工之间的交流和合作,提升企业内部的沟通效率和团队协作能力。
此外,通过数据自动记录和数据分析功能,考勤系统微信小程序可以为企业提供准确、全面的考勤数据和统计报表。管理员可以通过可视化的图表展示员工的考勤情况和工作表现,为管理者提供决策依据和绩效评估参考,有助于优化人力资源管理和提升组织运营效益。
综上所述,考勤系统微信小程序的设计与实现在实际应用中具有重要的意义。它不仅提供了一种便捷、高效的考勤管理方式,满足了企业或组织的实际需求,同时也推动了企业数字化转型和智能化发展。这项研究为企业提供了一种先进的管理工具,提高了管理效率和员工工作积极性,促进了企业的可持续发展。
1.3微信小程序的介绍
微信小程序作为2017年上新的产品一经推出就获得了人们的关注,小程序就是轻应用,无需下载安装,即开即用,用完即关。目前,小程序已完全渗透到人们的日常生活和工作之中,除了用于商业应用,还广泛应用于社会公共服务,社区医疗、企业等方面,可快速、免费地向目标用户发送不同类型的信息内容。
无论是开发移动APP还是开发移动网站所投入成本较高,小程序因其基于微信内,无需考虑平台兼容性,成本与开发时间较低,除此之外,基于微信使用率高,用户之间的相互推荐与使用可以为小程序带来流量更加提升其使用率。
2考勤系统微信小程序系统分析
2.1 可行性分析
系统可行行分析是对系统对系统可行性进行一个探讨。在探讨系统的可行性上我们主要从技术上的可行性和经济上的可行性以及法律层面的可行性上进行分析,如果三个层面度通过,我们则认为系统是比较可行的。
2.1.1 技术可行性分析
2.1.2 经济可行性分析
从经济可行性上看项目在开发阶段需要一台开发PC,在生产阶段需要web服务器和数据库服务器。一台个人PC从经济上来看也不是太多问题,在后期的系统部署生产上来说,服务器的投入也不会过高,在经济层面上是一个比较可行的。
2.1.3 法律可行性分析
2.2 系统功能分析
2.2.1 功能性分析
考勤系统微信小程序我划分为了员工用户管理模块和管理员模块这两大部分。
员工用户管理模块:
(1)查看考勤系统微信小程序的首页信息:考勤系统微信小程序的首页信息包含了首页、新闻资讯、交流论坛、考勤打卡等。
(2)新闻资讯:用户点击“新闻资讯”菜单显示所有的新闻资讯信息,可以按照条件进行新闻资讯的筛选或者输入关键词进行局部搜索,点击可以进入新闻资讯详细展示界面,在此界面用户可以收藏、点赞和评论。
(3)通知公告:用户点击“通知公告”菜单显示管理员在后台发布的所有的通知公告,可以查看通知公告详情。
(4)考勤打卡:点击“考勤打卡”后跳转到考勤打卡提交界面,选择打卡类型,输入员工用户、员工姓名、员工电话、员工工号、打卡日期、打卡类型、打卡备注,然后点击提交考勤打卡就完成了。
(5)交流论坛:用户点击“交流论坛”菜单显示所有的交流论坛信息,可以按照分类查看帖子信息,或者输入关键词进行局部搜索,点击可以进入帖子的详细展示界面,在此界面用户可以点赞、收藏、评论,也可以点击“发布内容”输入帖子信息进行发帖。
(6)我的收藏:用户点击“我的收藏”,会显示出自己收藏的所有信息,点击某一条收藏可以查看信息详细介绍,同时删除收藏;
管理员管理模块:
(1)系统用户:管理员可以对考勤系统微信小程序中的管理员以及前台注册的用户进行审核管理。
(2)考勤打卡:管理员点击“考勤打卡”菜单可以对考勤打卡进行管控。
(3)轮播图:管理员点击“轮播图”菜单可以对首页展示的轮播图进行增删改查。
(4)通知公告:管理员点击“通知公告”菜单可以查看到系统中的所有通知公告,对已经存在的通知公告,管理员可以修改,也可以添加新的通知公告或者删除通知公告。
(5)资源管理:管理员点击“资源管理”菜单能够对其下子菜单新闻资讯和新闻的分类进行增删改查。
(6)交流管理:管理员点击“交流管理”菜单可以对其下交流论坛和论坛的分类进行增删改查。
2.2.2 非功能性分析
考勤系统微信小程序的非功能性需求比如考勤系统微信小程序的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等。具体可以表示在如下3-1表格中:
表3-1考勤系统微信小程序非功能需求表
安全性 | 主要指考勤系统微信小程序数据库的安装,数据库的使用和密码的设定必须合乎规范。 |
可靠性 | 可靠性是指考勤系统微信小程序能够按照用户提交的指示进行操作,经过测试,可靠性90%以上。 |
性能 | 性能是影响考勤系统微信小程序占据市场的必要条件,所以性能最好要佳才好。 |
可扩展性 | 比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。 |
易用性 | 用户只要跟着考勤系统微信小程序的页面展示内容进行操作,就可以了。 |
可维护性 | 考勤系统微信小程序开发的可维护性是非常重要的,经过测试,可维护性没有问题 |
2.3 系统用例分析
考勤系统微信小程序的完整UML用例图分别是图2-1和图2-2。
图2-1就是管理员角色的用例展示。
图2-1考勤系统微信小程序管理员角色用例图
图2-2就是员工用户角色的用例展示。
图2-2考勤系统微信小程序员工用户角色用例图
2.4本章小结
本章主要通过对考勤系统微信小程序的可行性分析、功能需求分析、系统用例分析、系统流程分析,确定整个考勤系统微信小程序要实现的功能。同时也为考勤系统微信小程序的代码实现和测试提供了标准。
3考勤系统微信小程序总体设计
本章主要讨论的内容包括考勤系统微信小程序的功能模块设计、数据库系统设计。
3.1 系统功能模块设计
3.1.1整体功能模块设计
在上一章节中主要对系统的功能性需求和非功能性需求进行分析,并且根据需求分析了本考勤系统微信小程序中的用例。那么接下来就要开始对本考勤系统微信小程序的架构、主要功能和数据库开始进行设计。考勤系统微信小程序根据前面章节的需求分析得出,其总体设计模块图如图3-1所示。
图3-1考勤系统微信小程序功能模块图
3.1.2用户模块设计
本系统的用户包括管理员和用户两种用户模块的功能基本是相同的,用户比管理员多了一个注册功能,所以以用户模块的结构图为例进行分析,用户模块结构图为例进行分析,如下图:
图3-2用户模块结构图
3.1.3 评论管理模块设计
考勤系统微信小程序是一个交流性质的公开平台,用户在平台上提交评论,增加用户之间的互动性。但是同时也为了更好的规范评论的内容,给予管理员删除不合适的评论的功能,所以需要专门设计一个评论管理模块,具体的结构图如下:
图3-3评论管理模块结构图
3.1.4交流论坛模块设计
考勤系统微信小程序是一个可以进行互动交流的平台,用户可以发布帖子,查看帖子,评论帖子,删除帖子,具体的结构图如下:
图3-4交流论坛模块结构图
3.2 数据库设计
数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。
3.2.1 数据库概念结构设计
下面是整个考勤系统微信小程序中主要的数据库表总E-R实体关系图。
图3-6考勤系统微信小程序总E-R关系图
3.3.2 数据库逻辑结构设计
通过上一小节中考勤系统微信小程序中总E-R关系图上得出一共需要创建很多个数据表。在此我主要罗列几个主要的数据库表结构设计。
表attendance_clock_in (考勤打卡)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | attendance_clock_in_id | int | 10 | 0 | N | Y | 考勤打卡ID | |
2 | employee_users | int | 10 | 0 | Y | N | 0 | 员工用户 |
3 | employee_name | varchar | 64 | 0 | Y | N | 员工姓名 | |
4 | employee_gender | varchar | 64 | 0 | Y | N | 员工性别 | |
5 | employee_phone_number | varchar | 64 | 0 | Y | N | 员工电话 | |
6 | employee_id | varchar | 64 | 0 | Y | N | 员工工号 | |
7 | check_in_date | date | 10 | 0 | Y | N | 打卡日期 | |
8 | clock_in_type | varchar | 64 | 0 | Y | N | 打卡类型 | |
9 | check_in_remarks | text | 65535 | 0 | Y | N | 打卡备注 | |
10 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
11 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表auth (用户权限管理)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | auth_id | int | 10 | 0 | N | Y | 授权ID: | |
2 | user_group | varchar | 64 | 0 | Y | N | 用户组: | |
3 | mod_name | varchar | 64 | 0 | Y | N | 模块名: | |
4 | table_name | varchar | 64 | 0 | Y | N | 表名: | |
5 | page_title | varchar | 255 | 0 | Y | N | 页面标题: | |
6 | path | varchar | 255 | 0 | Y | N | 路由路径: | |
7 | position | varchar | 32 | 0 | Y | N | 位置: | |
8 | mode | varchar | 32 | 0 | N | N | _blank | 跳转方式: |
9 | add | tinyint | 3 | 0 | N | N | 1 | 是否可增加: |
10 | del | tinyint | 3 | 0 | N | N | 1 | 是否可删除: |
11 | set | tinyint | 3 | 0 | N | N | 1 | 是否可修改: |
12 | get | tinyint | 3 | 0 | N | N | 1 | 是否可查看: |
13 | field_add | text | 65535 | 0 | Y | N | 添加字段: | |
14 | field_set | text | 65535 | 0 | Y | N | 修改字段: | |
15 | field_get | text | 65535 | 0 | Y | N | 查询字段: | |
16 | table_nav_name | varchar | 500 | 0 | Y | N | 跨表导航名称: | |
17 | table_nav | varchar | 500 | 0 | Y | N | 跨表导航: | |
18 | option | text | 65535 | 0 | Y | N | 配置: | |
19 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表collect (收藏)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | collect_id | int | 10 | 0 | N | Y | 收藏ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 收藏人ID: |
3 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
4 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
5 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
6 | title | varchar | 255 | 0 | Y | N | 标题: | |
7 | img | varchar | 255 | 0 | Y | N | 封面: | |
8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表comment (评论)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | comment_id | int | 10 | 0 | N | Y | 评论ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 评论人ID: |
3 | reply_to_id | int | 10 | 0 | N | N | 0 | 回复评论ID:空为0 |
4 | content | longtext | 2147483647 | 0 | Y | N | 内容: | |
5 | nickname | varchar | 255 | 0 | Y | N | 昵称: | |
6 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
9 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
10 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
11 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
表employee_users (员工用户)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | employee_users_id | int | 10 | 0 | N | Y | 员工用户ID | |
2 | employee_name | varchar | 64 | 0 | Y | N | 员工姓名 | |
3 | employee_gender | varchar | 64 | 0 | Y | N | 员工性别 | |
4 | employee_phone_number | varchar | 16 | 0 | Y | N | 员工电话 | |
5 | employee_id | varchar | 64 | 0 | N | N | 员工工号 | |
6 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
7 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
8 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表forum (论坛)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | forum_id | mediumint | 8 | 0 | N | Y | 论坛id | |
2 | display | smallint | 5 | 0 | N | N | 100 | 排序 |
3 | user_id | mediumint | 8 | 0 | N | N | 0 | 用户ID |
4 | nickname | varchar | 16 | 0 | Y | N | 昵称:[0,16] | |
5 | praise_len | int | 10 | 0 | Y | N | 0 | 点赞数 |
6 | hits | int | 10 | 0 | N | N | 0 | 访问数 |
7 | title | varchar | 125 | 0 | N | N | 标题 | |
8 | keywords | varchar | 125 | 0 | Y | N | 关键词 | |
9 | description | varchar | 255 | 0 | Y | N | 描述 | |
10 | url | varchar | 255 | 0 | Y | N | 来源地址 | |
11 | tag | varchar | 255 | 0 | Y | N | 标签 | |
12 | img | text | 65535 | 0 | Y | N | 封面图 | |
13 | content | longtext | 2147483647 | 0 | Y | N | 正文 | |
14 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
15 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
16 | avatar | varchar | 255 | 0 | Y | N | 发帖人头像: | |
17 | type | varchar | 64 | 0 | N | N | 0 | 论坛分类:[0,1000]用来搜索指定类型的论坛帖 |
表forum_type (论坛分类)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | type_id | smallint | 5 | 0 | N | Y | 分类ID:[0,10000] | |
2 | name | varchar | 16 | 0 | N | N | 分类名称:[2,16] | |
3 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该分类的作用 | |
4 | url | varchar | 255 | 0 | Y | N | 外链地址:[0,255]如果该分类是跳转到其他网站的情况下,就在该URL上设置 | |
5 | father_id | smallint | 5 | 0 | N | N | 0 | 上级分类ID:[0,32767] |
6 | icon | varchar | 255 | 0 | Y | N | 分类图标: | |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表hits (用户点击)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | hits_id | int | 10 | 0 | N | Y | 点赞ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
表notice (公告)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | notice_id | mediumint | 8 | 0 | N | Y | 公告id: | |
2 | title | varchar | 125 | 0 | N | N | 标题: | |
3 | content | longtext | 2147483647 | 0 | Y | N | 正文: | |
4 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
5 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表praise (点赞)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | praise_id | int | 10 | 0 | N | Y | 点赞ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
8 | status | bit | 1 | 0 | N | N | 1 | 点赞状态:1为点赞,0已取消 |
表slides (轮播图)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | slides_id | int | 10 | 0 | N | Y | 轮播图ID: | |
2 | title | varchar | 64 | 0 | Y | N | 标题: | |
3 | content | varchar | 255 | 0 | Y | N | 内容: | |
4 | url | varchar | 255 | 0 | Y | N | 链接: | |
5 | img | varchar | 255 | 0 | Y | N | 轮播图: | |
6 | hits | int | 10 | 0 | N | N | 0 | 点击量: |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表upload (文件上传)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | upload_id | int | 10 | 0 | N | Y | 上传ID | |
2 | name | varchar | 64 | 0 | Y | N | 文件名 | |
3 | path | varchar | 255 | 0 | Y | N | 访问路径 | |
4 | file | varchar | 255 | 0 | Y | N | 文件路径 | |
5 | display | varchar | 255 | 0 | Y | N | 显示顺序 | |
6 | father_id | int | 10 | 0 | Y | N | 0 | 父级ID |
7 | dir | varchar | 255 | 0 | Y | N | 文件夹 | |
8 | type | varchar | 32 | 0 | Y | N | 文件类型 |
3.4本章小结
整个考勤系统微信小程序的需求分析主要对系统总体架构以及功能模块的设计,通过建立E-R模型和数据库逻辑系统设计完成了数据库系统设计。
4考勤系统微信小程序详细设计与实现
考勤系统微信小程序的详细设计与实现主要是根据前面的考勤系统微信小程序的需求分析和考勤系统微信小程序的总体设计来设计页面并实现业务逻辑。主要从考勤系统微信小程序界面实现、业务逻辑实现这两部分进行介绍。
4.1用户功能模块
4.1.1 前台首页界面
当进入考勤系统微信小程序的时候,系统以上中下的布局进行展示,首先映入眼帘的是系统的导航栏,下面是轮播图,再往下是通知公告,其主界面展示如下图4-1所示。
图4-1 前台首页界面图
4.1.2 用户注册界面
考勤系统微信小程序的用户可以进行注册登录,当用户左上角“注册”按钮的时候,当填写上自己的账号+密码+确认密码+昵称+邮箱+手机号,选择身份,然后填写身份信息后再点击“注册”按钮后将会先验证输入的有没有空数据,再次验证密码和确认密码是否是一样的,最后验证输入的账户名和数据库表中已经注册的账户名是否重复,只有都验证没问题后即可注册成功。其用注册界面展示如下图4-2所示。
图4-2注册界面图
注册关键代码如下:
/**
* 注册
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(HttpServletRequest request) throws IOException {
// 查询用户
Map<String, String> query = new HashMap<>();
Map<String,Object> map = service.readBody(request.getReader());
query.put("username",String.valueOf(map.get("username")));
List list = service.selectBaseList(service.select(query, new HashMap<>()));
if (list.size()>0){
return error(30000, "用户已存在");
}
map.put("password",service.encryption(String.valueOf(map.get("password"))));
service.insert(map);
return success(1);
}
public Map<String,Object> readBody(BufferedReader reader){
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try{
br = reader;
String str;
while ((str = br.readLine()) != null){
sb.append(str);
}
br.close();
String json = sb.toString();
return JSONObject.parseObject(json, Map.class);
}catch (IOException e){
e.printStackTrace();
}finally{
if (null != br){
try{
br.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
return null;
}
public void insert(Map<String,Object> body){
E entity = JSON.parseObject(JSON.toJSONString(body),eClass);
baseMapper.insert(entity);
log.info("[{}] - 插入操作:{}",entity);
}
4.1.3用户登录界面
考勤系统微信小程序中的前台上注册后的用户是可以通过自己的账户名和密码进行登录的,当用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到考勤系统微信小程序的首页中;否则将会提示相应错误信息,用户登录界面如下图4-3所示。
图4-3用户登录界面图
登录关键代码如下:
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
QueryWrapper wrapper = new QueryWrapper<User>();
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
public String select(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("select ");
sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
}
if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
}
if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
}
log.info("[{}] - 查询操作,sql: {}",table,sql);
return sql.toString();
}
public List selectBaseList(String select) {
List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
List<E> list = new ArrayList<>();
for (Map<String,Object> map:mapList) {
list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
}
return list;
}
4.1.4通知公告界面
用户点击“通知公告”菜单显示管理员在后台发布的所有的通知公告,可以查看通知公告详情,通知公告界面如下图4-4所示。
图4-4通知公告界面图
4.1.5交流论坛界面
用户点击“交流论坛”菜单显示所有的交流论坛信息,可以按照分类查看帖子信息,或者输入关键词进行局部搜索,点击可以进入帖子的详细展示界面,在此界面用户可以点赞、收藏、评论,也可以点击“发布内容”输入帖子信息进行发帖,交流论坛展示页面如图4-5所示。
图4-5交流论坛界面图
4.1.6考勤打卡界面
点击导航栏上的“考勤打卡”,可以选择员工用户、员工姓名、员工电话、员工工号、打卡日期、打卡类型、打卡备注,然后点击“提交”按钮进行提交考勤打卡。考勤打卡界面如下图4-6所示。
图4-6考勤打卡界面图
4.1.7新闻资讯详情界面
用户点击“校园新闻”菜单显示所有的校园新闻信息,可以按照条件进行校园新闻的筛选或者输入关键词进行局部搜索,点击可以进入校园新闻详细展示界面,在此界面用户可以收藏、点赞和评论,新闻资讯详情界面如下图4-7所示。
图4-7 新闻资讯详情界面图
4.2管理员功能模块
4.2.1系统用户管理界面
管理员点击“系统用户”这一菜单会显示管理员和员工用户这两个子菜单,管理员可以对这两个角色的信息进行增删改查操作。界面如下图4-8所示。
图4-8系统用户管理界面图
用户管理关键代码如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
4.2.2 考勤打卡管理界面
管理员点击“考勤打卡”会显示出所有的考勤打卡信息,支持通过员工电话或者员工工号对考勤打卡信息进行查询,如果想要添加新的考勤打卡信息,点击“添加”按钮,输入相关信息,点击“提交”按钮就可以添加了,同时可以选择某一条考勤打卡信息,点击“删除”进行删除,界面如下图4-9所示。
图4-9考勤打卡管理界面图
考勤打卡管理关键代码如下:
@RequestMapping(value = "/del")
@Transactional
public Map<String, Object> del(HttpServletRequest request) {
service.delete(service.readQuery(request), service.readConfig(request));
return success(1);
}
4.2.3 通知公告管理界面
管理员点击“通知公告管理”菜单可以查看到系统中的所有通知公告信息,对已经存在的通知公告,管理员可以修改,也可以添加新的通知公告或者删除通知公告。界面如下图4-10所示。
图4-10通知公告管理界面图
通知公告管理关键代码如下:
@RequestMapping("/get_obj")
public Map<String, Object> obj(HttpServletRequest request) {
List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
4.2.4 资源管理界面
管理员点击“资源管理”菜单能够对其下子菜单新闻资讯和新闻的分类进行增删改查。界面如下图4-11所示。
图4-11资源管理界面图
资源管理关键代码如下:
@RequestMapping("/get_list")
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
}
4.2.5交流管理界面
管理员点击“交流管理”菜单可以对其下交流论坛和论坛的分类进行增删改查,界面如下图4-12所示。
图4-12交流管理界面图
5系统测试
5.1 系统测试用例
系统测试包括:用户登录功能测试、用户注册功能测试、新闻资讯展示功能测试,如表5-1、5-2、5-3所示:
用户登录功能测试:
表5-1 用户登录功能测试表
测试名称 | 测试功能 | 操作 | 操作过程 | 预期结果 | 测试结果 |
用户登录模块测试 | 正确输入用户信息,用户成功登录 | 输入用户的信息 | 1.在密码框输入用户密码。2.点击登录 | 跳转到首页 | 正确 |
用户注册功能测试:
表5-2 用户登录功能测试表
测试名称 | 测试功能 | 操作 | 操作过程 | 预期结果 | 测试结果 |
用户注册模块测试 | 正确输入用户星系,完成用户注册 | 输入用户的基本信息 | 在注册页面填写用户相应的信息,然后点击“注册”按钮。 | 提示成功并跳转到登录界面 | 正确 |
用户注册模块测试 | 用户注册失败 | 用户两次输入密码不一致 | 用户在注册页面填写信息时输入两个不一致的密码然后点击“注册”按钮。 | 注册失败提示两次密码输入不一致 | 正确 |
新闻资讯信息界面测试:
表5-3 新闻资讯信息界面测试表
测试名称 | 测试功能 | 操作 | 操作过程 | 预期结果 | 测试结果 |
新闻资讯信息功能模块测试 | 新闻资讯信息正常的显示 | 浏览新闻资讯信息 | 在前台首页选择一个新闻资讯分类进入分类列表,然后选择一个新闻资讯 | 进入该新闻资讯的详细信息界面 | 正确 |
5.2 系统测试结果
通过对考勤系统微信小程序的调试,能够检测考勤系统微信小程序的稳定性,为考勤系统微信小程序正式运行、稳定运行提供了可预测性的维护备案。能够帮助使用者熟悉整个考勤系统微信小程序,并对考勤系统微信小程序可能出现的错误有所了解。本章节提供了部分调试用例及调试日志,可以帮助使用者解决简单的错误问题,也加深了开发者对于此框架下的考勤系统微信小程序编写的了解度,为后期开发者顺利完成考勤系统微信小程序、发布考勤系统微信小程序提供了非常大的帮助。
结论
本次考勤系统微信小程序的开发中我学会了例如良好的编程思想和完善的规划思想。在着手编程之前需要罗列出程序框架的大概,脑海中构建出程序的主题框架。做好这一步我们才能胸有成竹的经行开发项目。当设计框架了熟于心之后,需要思考本次编程所需的主要知识点和技术点,并充分学习。如此一来项目的开发才能循序渐进、如丝般顺滑,长久以往就能养成良好的开发习惯。一个程序好不好还要看出的bug多不多,如果在项目完成前做好bug的查验与预防可能发生的事故才能保证程序的稳定长久性运行。如果项目在完工后出现各种问题自己,那么在进入社会后,不仅会给公司团队带来麻烦和增加不必要的工作,还会导致客户流失,公司对自己的评价下降。
在本次项目中我也暴露了诸多问题。对于JAVA 相关的编程知识有所欠缺,环境配置和算法上出现诸多问题,时常导致项目运行出错,或者目标的实现有问题。或者实现想法时算法未优化,使得代码冗长,程序运行不顺畅。
参考文献
[2]谭钊,齐杨,陈浩然等. 智慧考勤系统设计与应用 [J]. 信息技术与标准化, 2024, (Z1): 93-97.
[3]马庆. 计算机软件开发中JAVA编程语言的应用 [J]. 山西电子技术, 2023, (06): 84-86+98.
[4]苏婉怡,揣小龙,刘美瑜等. 基于Java技术的实验室管理系统设计与实现 [J]. 无线互联科技, 2023, 20 (23): 58-60.
[5]Yong Z ,Yan L ,Wenwu L , et al. Efficient scheduling and attendance system for the ultrasound department under demand uncertainty during COVID-19. [J]. Health informatics journal, 2023, 29 (4): 14604582231213424-14604582231213424.
[6]刘琼,史诺,刘康. 基于微信小程序的学生考勤系统的设计与实现 [J]. 微型电脑应用, 2023, 39 (01): 173-176.
[7]Xinbin H ,Yongbin B ,Lisen Y , et al. Design and Implementation of Information System Based on Java Technology Platform [J]. Journal of Physics: Conference Series, 2021, 2033 (1):
[8]田思. 基于微信小程序的扫码考勤系统设计与实现 [J]. 现代信息科技, 2021, 5 (15): 5-8.
[9]马若鹏. 基于微信小程序的实验室考勤管理系统的设计与实现[D]. 华中科技大学, 2021.
[10]刘绍婕. 基于微信小程序的考勤签到系统的设计与实现 [J]. 信息与电脑(理论版), 2021, 33 (07): 158-162.
[11]谭毓鸿,王勋,黄伟淇等. 基于ESP32的指纹考勤系统设计与实现 [J]. 现代计算机, 2021, (05): 106-110.
[12]郭莹奎,史可欣. 一种基于微信小程序及微信云平台的课堂考勤系统及方法[P]. 上海市: CN111915270A, 2020-11-10.
[13]王朋. 基于微信小程序的课堂考勤系统的设计与实现 [J]. 无线互联科技, 2020, 17 (14): 39-40.
致 谢
眨眼之间,大学生活就要结束了。在本文的最后,我要感谢我和蔼可亲的导师、团结有爱的同学的帮助和鼓励。此刻,我找不到感谢之词可以用来表达我最深切的感激之情。尤其感谢我的指导老师,在选题的过程中与我进行了深入的交流,在毕业设计期间给我提供了一些指导。四年的学习生活让我受益良多,老师们的丰富的学术知识、认真负责的学习态度让我受益匪浅。在此,我深深地感谢那些曾经给予我帮助和指导的老师!
我们的论文得益于许多学者的贡献,他们的研究成果为我们提供了宝贵的指导,使我们能够更好地完成这篇文章。感谢我的同学和朋友在我的写作以及排版过程中给予热情的帮助,才使得我比较顺利的完成了这篇论文。
感谢大学里遇见的朋友,你们在我这四年里留下无数的温暖和快乐,让我对这个校园多了一份留念。最后,感谢我的父母、辅导员、班长,以及室友们对我大学生活上的关心和理解,让我能保持乐观和追求我所热爱的。尽管我的能力有限,但我仍然尽力去完善这篇论文,并且诚挚地希望各位老师和学友能够给予宝贵的指导与意见!