考勤系统微信小程序的设计与实现---附源码29756

news2024/11/24 1:37:28

目  录

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 技术可行性分析

考勤系统微信小程序存储所使用的mysql数据库以及开发中所使用的IDEA、Tomcat这些开发工具的使用,能够给我们的编写工作带来许多的便利。系统使用SSM框架进行开发,使系统的可扩展性和维护性更佳,减少JAVA 配置代码,简化编程代码,目前SSM框架也是很多企业选择的框架之一。

2.1.2 经济可行性分析

从经济可行性上看项目在开发阶段需要一台开发PC,在生产阶段需要web服务器和数据库服务器。一台个人PC从经济上来看也不是太多问题,在后期的系统部署生产上来说,服务器的投入也不会过高,在经济层面上是一个比较可行的。

2.1.3 法律可行性分析

系统从法律层面上来没有对第三方有其他放有法律层面的问题,系统数据库采用的Mysql 开源社区数据库、框架采用的是开源的SSM。系统资讯和相关内容也是法律层面的。在源码的管理上采用git开源进行管理,所以在法律可行性上是成立的。

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 相关的编程知识有所欠缺,环境配置和算法上出现诸多问题,时常导致项目运行出错,或者目标的实现有问题。或者实现想法时算法未优化,使得代码冗长,程序运行不顺畅。

参考文献

[1]Surantha N ,Sugijakko B . Lightweight face recognition-based portable attendance system with liveness detection [J]. Internet of Things, 2024, 25 101089-.

[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.

致  谢

眨眼之间,大学生活就要结束了。在本文的最后,我要感谢我和蔼可亲的导师、团结有爱的同学的帮助和鼓励。此刻,我找不到感谢之词可以用来表达我最深切的感激之情。尤其感谢我的指导老师,在选题的过程中与我进行了深入的交流,在毕业设计期间给我提供了一些指导。四年的学习生活让我受益良多,老师们的丰富的学术知识、认真负责的学习态度让我受益匪浅。在此,我深深地感谢那些曾经给予我帮助和指导的老师!

我们的论文得益于许多学者的贡献,他们的研究成果为我们提供了宝贵的指导,使我们能够更好地完成这篇文章。感谢我的同学和朋友在我的写作以及排版过程中给予热情的帮助,才使得我比较顺利的完成了这篇论文。

感谢大学里遇见的朋友,你们在我这四年里留下无数的温暖和快乐,让我对这个校园多了一份留念。最后,感谢我的父母、辅导员、班长,以及室友们对我大学生活上的关心和理解,让我能保持乐观和追求我所热爱的。尽管我的能力有限,但我仍然尽力去完善这篇论文,并且诚挚地希望各位老师和学友能够给予宝贵的指导与意见!

点赞+收藏+关注  →私信领取本源代码、数据库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2044573.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机的错误计算(六十)

摘要 用另一种方法计算计算机的错误计算&#xff08;五十五&#xff09;中案例&#xff1a;先使自变量与 取余&#xff0c;再计算取余后的余弦值&#xff0c;这时&#xff0c;得到了不同的输出。因此&#xff0c;即使不清楚正确结果&#xff0c;Python 与 Visual Studio 也各自…

TypeError when using openai-api

题意&#xff1a;使用 openai-api 时出现 TypeError&#xff08;类型错误&#xff09; 问题背景&#xff1a; Using the code below and openai version 0.28.0 i get an error which i cant resolve: 使用以下代码和 openai 版本 0.28.0 时&#xff0c;我遇到了一个无法解决…

软中断、Tasklet 与工作队列的机制分析

文章目录 1 软中断&#xff08;Softirq&#xff09;1.1 概念与背景1.2 特点与执行1.3 触发与执行方式1.4 实现与使用1.5 软中断的替代机制 2 Tasklet2.1 概念与特点 3 Bottom Halves&#xff08;BH&#xff09;3.1 概念与历史 4 工作队列&#xff08;Workqueue&#xff09;4.1 …

ElasticSearch集群搭建与安全认证

文章目录 核心概念集群节点分片CAT API查看集群信息 搭建三节点ES集群安装ES安装Cerebro客户端安装kibana ES集群安全认证ES敏感信息泄露的原因免费的方案集群内部安全通信开启并配置X-Pack的认证 核心概念 集群 一个集群可以有一个或者多个节点不同的集群通过不同的集群名来…

百度百科创建收费吗

百度百科作为一个开放的网络百科全书&#xff0c;旨在为用户提供丰富的知识信息。根据百度百科的官方声明&#xff0c;创建百度百科词条是完全免费的。任何人都可以自由编辑、修改和添加条目。百度百科的创建和编辑过程是由用户自发进行的&#xff0c;不存在官方收费的情况。 百…

【流程引擎】springboot完美集成activiti工作流方案

前言 activiti工作流引擎项目&#xff0c;企业erp、oa、hr、crm等企事业办公系统轻松落地&#xff0c;一套完整并且实际运用在多套项目中的案例&#xff0c;满足日常业务流程审批需求。 项目源码配套文档获取&#xff1a;本文末个人名片直接获取。 一、项目形式 springboot…

聊一下软件测试中沟通的原则

目录 一、沟通要清晰&#xff0c;简洁&#xff0c;准确&#xff0c;透明 二、沟通要尽早&#xff0c;及时&#xff0c;适应 三、既要对事&#xff0c;也要对人 四、保持开放心态 五、亲自验证 从事多年测试工作&#xff0c;一项基本功必须练会&#xff0c;那就是“沟通”。…

Springboot项目中使用druid实现多数据源和动态数据源,因数据库不可用导致的项目挂起的处理方案

Springboot项目中使用druid因数据库不可用导致的项目挂起的处理方案 在Spring Boot项目中使用Druid实现多数据源和动态数据源管理是一个常见的场景。通过合理的配置和错误处理机制&#xff0c;您可以有效地管理数据源&#xff0c;避免因数据库不可用而导致整个项目挂起。 1.…

npm包更新发布:从准备到发布的全面指南

引言 在Node.js的生态系统中&#xff0c;npm&#xff08;Node Package Manager&#xff09;是不可或缺的一部分&#xff0c;它不仅是获取和管理Node.js项目依赖的核心工具&#xff0c;也是分享和发布自己开发的模块或库的关键平台。 由于一些长期不更新的依赖没有原作者没有及…

精通C++ STL(五):list的介绍及使用

目录 ​编辑 list的介绍 list的使用 list的定义方式 list的插入和删除 push_front和pop_front push_back和pop_back insert erase list的迭代器使用 begin和end rbegin和rend list的元素获取 front和back list的大小控制 size resize empty clear list的操作函数 sort splic…

内部排序(插入、交换、选择)

一、排序的部分基本概念 1. 算法的稳定性 若待排序表中有两个元素 Ri 和 Rj &#xff0c;其对应的关键字相同即 keyi keyj&#xff0c;且在排序前 Ri 在 Rj 的前面&#xff0c;若使用某一排序算法排序后&#xff0c;Ri 仍然在 Rj 的前面&#xff0c;则称这个排序算法是稳定的…

EMC学习笔记4——传导骚扰发射

传导骚扰发射是最基本的实验项目&#xff0c;主要是检测设备在工作时是否通过电源线产生过强的骚扰发射。 一、传导骚扰发射判断 可以通过两个方面来判断设备是否产生了传导发射&#xff1a; 1.电流的时域波形判断&#xff1a;电流波形与电压的波形不一样。如下图所示&#xf…

界面控件DevExpress .NET MAUI v24.1 - 发布TreeView等新组件

DevExpress拥有.NET开发需要的所有平台控件&#xff0c;包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress 今年第一个重要版本v23.1正式发布&#xff0c;该版本拥有众多…

探索谜题,畅享推理——海龟汤智能体来袭

本文由 ChatMoney团队出品 介绍说明 在神秘与智慧交织的世界里&#xff0c;有一种游戏能让您的思维飞速旋转&#xff0c;激发无限的想象力和推理能力&#xff0c;那就是海龟汤。现在&#xff0c;我们为您带来全新的海龟汤智能体&#xff0c;为您的娱乐时光增添无尽乐趣&#x…

YOLOv5改进 | 融合改进 | C3融合动态卷积模块ODConv【完整代码】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a; 《YOLOv5入门 改…

学生高性价比运动耳机有哪些?五大性价比高的运动耳机学生党分享

2024年春季&#xff0c;开放式蓝牙耳机就凭借“佩戴舒适、开放安全”等优势火热出圈&#xff0c;这让各大音频厂商更新迭代速度不断加快&#xff0c;新品层出不穷。而用户面对市场上琳琅满目的开放式蓝牙耳机&#xff0c;一时间也不知道如何选择。对于学生来说&#xff0c;比较…

RepQ-ViT 阅读笔记

RepQ-ViT: Scale Reparameterization for Post-Training Quantization of Vision Transformers ICCV 2023 中国科学院自动化研究所 Abstract RepQ-ViT&#xff0c;一种新的基于量化缩放因子&#xff08;quantization scale&#xff09;重参数化的PTQ框架 解耦量化和推理过程…

ios使用plist实现相册功能

第一步&#xff1a;照片复制到Assets文件夹再创建plist 第二步&#xff1a;页面设计 第三步&#xff1a;代码实现 // // PhotoViewController.m // study2024 // // Created by zhifei zhu on 2024/8/11. //#import "PhotoViewController.h"interface PhotoView…

JAVA打车小程序APP打车顺风车滴滴车跑腿源码微信小程序打车系统源码

&#x1f697;&#x1f4a8;打车、顺风车、滴滴车&跑腿系统&#xff0c;一键解决出行生活难题&#xff01; 一、出行新选择&#xff0c;打车从此不再难 忙碌的生活节奏&#xff0c;让我们常常需要快速、便捷的出行方式。打车、顺风车、滴滴车系统&#xff0c;正是为了满足…

通天星CMSV6代码审计

fofa指纹 body"./open/webApi.html"||body"/808gps/" /gpsweb/WEB-INF/classes/config/version.conf中可以查看版本。 框架分析 默认安装目录为C:\Program Files\CMSServerV6\ 默认账户&#xff1a;admin/admin 框架结构 跟进web.xml&#xff0c;可以看…