注:仅展示部分文档内容和系统截图,需要完整的视频、代码、文章和安装调试环境请私信up主。
摘 要
本文对企业员工培训管理系统的构建流程进行了介绍,其主要包括需求分析详细设计、系统实现等重要部分组成,在此基础上构建的系统可应用到实际的企业员工培训管理系统业务中。本系统的主要特点在于将springboot应用到企业员工培训管理系统中,springboot的引入可提高系统开发效率,最终实现的系统具备运行稳定易用以及实用的特点。
本文的主要工作分为如下几个部分:
1.总体方案的选择;本文确定系统基于B/S模式进行开发,并采用了JAVA语言,在MySQL数据库实现后台。本系统的开发环境选用在IDEA中[1],本系统在开发过程中引入了springboot。
2.企业员工培训管理系统的分析与设计:通过对系统的业务需求分析以及功能需求分析确定了系统的功能架构组成,并对系统进行了安全性设计。
3.企业员工培训管理系统的实现的方法:主要是让企业员工培训管理系统功能满足实现过程中用户的各种需求,让这种系统能够真正的应用到实际业务中,实际上这种系统功能的实现是在对系统进行需求分析的基础上进行的。
关键字:企业员工培训管理系统;系统;springboot;mysql
目 录
3.2业务需求分析
3.2.1登录
在登录成功后,用户才能使用系统中的各种功能。这意味着用户必须通过严格的登录检查才能获取授权,才能使用系统内部提供的各种功能。从而保证了系统的数据的正确性和安全。
在使用系统的过程中,无论是何种操作,都需要先登录。这是因为系统需要明确用户的身份,才能为其提供相应的服务和功能。如果没有进行登录,用户将无法获得任何系统的授权,也无法使用任何功能。系统的系统功能程如图3-1所示。
3.3功能需求分析
功能要求
(1)用户模块(用户主页)
用户登录:注册,上传个人信息,登录。
技能培训:查看技能详情,查看培训视频,可以评论点赞功能,其他人可回复,查看培训费用,报名培训,进行答题巩固,答题获得积分。
公告资讯:查看公告资讯详情。
个人中心:用户可对个人信息进行更新,收藏技能培训,查看个人积分,查看报名培训记录及审核状态。
论坛区:用户可以互相发帖,回复,删除自己的帖子
积分管理:查看积分情况。登录,回帖,发帖,学习时长,做练习等行为加积分
学情分析:员工学习情况可视化分析,体现学习时长,积分排名
(2)管理员模块(后端主页)
管理员可以通过输入用户名、密码、选择角色进行登录。这样可以提高登录的安全性,并且方便管理员进行管理。
用户管理功能:管理员可以查看、新增、修改、删除用户账号、姓名、性别、头像、电话号码等信息。这样可以让管理员更好地管理用户信息,保证信息的准确性。
技能类型管理:管理员可以查看、新增、修改、删除技能类型信息。这样可以让管理员更好地管理技能类型信息,为用户提供更全面的技能培训选择。
技能培训管理:管理员可以查看、新增、修改、删除技能培训信息。这样可以让管理员更好地管理技能培训信息,为用户提供更好的培训体验,查看评论,上传视频。
培训报名管理:查看报名培训记录,可以审核。
系统管理:新增修改删除公告。
积分管理:给用户增加减少清空积分,查看积分。
论坛管理:可以查找,删除贴子。
3.3.1用户功能需求分析
企业员工培训管理系统有利于查看企业员工培训信息,可以查看技能培训,还可以进行培训问答,发布公告资讯,还能通过交流论坛互相交流信息。员工用例图如图3-4所示。
4.2.1报名模块
本模块主要是对员工报名信息的查询以及员工报名的操作,由如下类组成BaomingxinxiController、BaomingxinxiService、BaomingxinxiEntity、BaomingxinxiDao|、其中BaomingxinxiController定义和前端交互的接口,负责接收前端页面请求。service类处理逻辑业务,用于对入库操作进行业务处理,mapper用于系统与数据库交互,实现库存模块数据交互。报名模块类图如图4-2所示。
4.4.3 数据库逻辑结构设计
在数据库设计的过程中,信息的规范化是非常重要的。其中,要对信息进行3NF精简,以去除重复和多余信息。这是因为重复和多余的信息会导致数据的冗余,增加了数据存储的空间和时间开销。因此,需要对信息进行规范化处理,以减少数据的冗余,在规范化处理中,1NF要求字段不再分解,2NF要求实体属性完全依赖于主关键字,3NF要求减除相关依赖。这些要求是为了保证数据的一致性和完整性。通过规范化处理,可以将数据分解成更小的、更规范的部分,以便于管理和维护。
经过3NF的优化处理,可以得出系统的逻辑结构表。如下:
用户(主键ID,名称,密码,年龄,身份证号码,性别,电话)
培训(主键,添加时间,名称,简介,培训时间,培训人员)
配置(主键,名称,参数值)
在物理设计时,需要依据逻辑结构设计,将实体属性设计成数据库表结构并设置制约条件。这是为了确保数据的完整性和安全性。在表结构的设计中,需要考虑到数据的关系和依赖性,以便于查询和统计数据。同时,还需要设置适当的制约条件,以防止数据的误操作和破坏。
表结构设计的合理性关系着系统性能和后期维护更新的影响。因此,在设计表结构时,需要考虑到系统的性能和可维护性。合理的表结构设计可以提高系统的性能,并减少维护的难度和成本。反之,不合理的表结构设计会影响系统的性能和后期维护更新的难度和成本。因此,在表结构设计中,需要综合考虑各种因素,以达到最佳的设计效果。
1.用户(用户编号、用户名称、用户密码、性别、年龄、添加时间、电话号码)
2.配置表(名称、参数值)
3.培训信息表(名称、简介、培训时间、培训人员、
4.token表(用户id、用户名、表名、角色、用户密码、添加时间、过期时间)
5.user表(用户名、角色、用户密码、添加时间)
具体表结构设计如下:
1.用户表:主要用来记录用户的基本信息。用户表中包含的主要字段如下:用户名、用户密码、性别、年龄、电话号码、添加时间。详情结构如下表4-1所示:
表4-1 用户表
字段 | 字段说明 | 类型 | 是否主键 | 默认值 |
user_id | 用户编号 | varchar | Y | NOT NULL |
username | 用户名称 | varchar | N | NULL |
password | 用户密码 | varchar | N | NULL |
age | 年龄 | int | N | NULL |
sex | 性别 | varchar | N | NULL |
addtime | 创建时间 | datetime |
2.配置表:配置表包含主要字段如下:名称、参数值。详情结构如下表4-2所示:
表4-2 配置表
字段 | 字段说明 | 类型 | 是否主键 | 默认值 |
id | 主键 | int | Y | NOT NULL |
name | 名称 | varchar | N | NULL |
value | 参数值 | varchar | N | NOT NULL |
3.培训信息表:主要记录培训信息,包括主键、添加时间、名称、简介、培训时间、培训人员。详情结构如下表4-3所示:
表4-3 培训信息表
字段 | 字段说明 | 类型 | 是否主键 | 默认值 |
id | 主键 | int | Y | NOT NULL |
name | 名称 | varchar | N | NULL |
Addtime | 添加时间 | varchar | N | NULL |
introduction | 简介 | varchar | N | NULL |
Training time | 培训时间 | varchar | N | NULL |
Trainers | 培训人员 | char |
4.token表:用于验证用户身份。这个表包含主键、用户id、用户名、表名、角色、密码、添加时间、过期时间。详情结构如下表4-4所示:
表4-4 token表
字段 | 字段说明 | 类型 | 是否主键 | 默认值 |
Id | 主键 | bigint | Y | NOT NULL |
userid | 用户id | bigint | N | NULL |
username | 用户名 | varchar | N | NULL |
tablename | 表名 | varchar | N | NULL |
role | 角色 | varchar | N | NULL |
token | 密码 | varchar | N | NULL |
caddtime | 添加时间 | datetime | N | NOT NULL |
expiratedtime | 过期时间 | datetime | N | NOT NULL |
5.系统实现
5.1系统实现环境
1.Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz的主频以及8G内存,
2.采用Java高级程序设计语言;
3.采用eclipse2020作为主要开发平台,配置JDK作为程序运行环境,选择maven管理项目
4.采用MySQL 5.7作为数据库来进行数据存储,并且通过Navicat Premium 来进行数据库设计、管理操作;
5.采用StarUML 5.0.2进行系统的图示的绘制工作,例如类图、时序图等;
6.采用Spring Boot 2和MyBatis plus的框架版本进行程序开发
7.操作系统版本为Window 11;浏览器版本为Firefox 99、Chrome 10、IE8等
5.2系统主要功能的实现
5.2.1首页界面模块
首先,前台会发送一个请求,将表单数据中的用户名和密码提交到后台。这个过程中,前台会将用户填写的数据进行加密处理,确保用户的数据能够得到保护。接下来,后台会接收到这些参数,然后将这些参数传递给controller层。Controller层是整个后台的核心控制器,它会根据用户提供的参数来进行相应的操作。在这里,Controller会调用service层的方法,将用户名和密码传递给service层进行处理。在service层中,首先会进行用户名的判断。如果用户名不存在,那么就会返回“账户错误”的信息。但是,如果用户名存在,那么就会继续进行密码的验证。在这里,service层会将用户输入的密码和数据库中的密码进行比对。如果两者相同,那么就会返回一个user对象到controller层。但是,如果两者不同,那么就会返回“密码错误”的信息。controller接收到user后,将user以键值对的形式放入session,从而发送到前台。关键代码如下:
UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
if(user==null || !user.getPassword().equals(password)) {
return R.error("账号或密码不正确");
5.2.2个人信息模块
addUser方法接收一个UserEntity对象作为参数,该对象包含了新用户的相关信息。接着,该方法会调用userMapper对象的updateUser方法,并将UserEntity对象作为参数传递给updateUser方法,接下来,addUser方法会根据该用户的id更新数据库中对应的用户信息。这意味着如果该用户已经存在于数据库中,那么更新操作将会覆盖原有的用户信息。如果该用户不存在于数据库中,则会新增一条用户信息记录,最后,addUser方法会返回一个布尔值,该值表示更新操作是否成功。如果flag大于0,则表示更新成功;否则,表示更新失败。这个返回值对于调用该方法的程序来说非常重要,因为它可以判断是否需要进行错误处理或者进行其他的操作。
关键代码如下:
public R getCurrUser(HttpServletRequest request){
Long id = (Long)request.getSession().getAttribute("userId");
YuangongEntity u = yuangongService.selectById(id);
5.2.3技能培训模块
此模块的Spring Boot框架是Controller中的一个方法,用于处理前端传递过来的删除请求。其中,@RequestBody注解表示将前端传递过来的JSON格式的请求体转换为Java对象。Long[] ids表示需要删除的对象的id数组。jinengpeixunService是一个Service层的组件,其中deleteBatchIds方法是该组件提供的批量删除方法,Arrays.asList(ids)则将Long类型的数组转换为List<Long>类型。最后,返回一个表示删除成功的R.ok()对象。
关键代码如下:
public R delete(@RequestBody Long[] ids){
jinengpeixunService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}ik
5.2.4交流论坛界面模块
@RequestParam Map<String, Object> params:用于接收前端传递过来的参数,这里使用了一个 Map 类型的 params 变量。ForumEntity forum:用于接收查询条件的实体类对象。HttpServletRequest request:通过这个对象获取当前用户的角色和ID。if(!request.getSession().getAttribute("role").toString().equals("管理员")):判断当前用户是否是管理员,如果不是,则执行以下操作:forum.setUserid((Long)request.getSession().getAttribute("userId")):将查询条件中的用户ID设置为当前登录用户的ID。最终,该方法会返回一个 R 类型的对象,用于封装返回结果。
关键代码如下:
public R page(@RequestParam Map<String, Object> params,ForumEntity forum
HttpServletRequest request){
if(!request.getSession().getAttribute("role").toString().equals("管理员"))
5.2.5培训问答界面模块
@RequestParam Map<String, Object> params:使用Spring注解,将请求参数封装为一个Map对象,其中包含了分页信息、查询条件等。ConfigEntity config:一个JavaBean对象,用于封装查询条件。这里通过EntityWrapper类构造一个查询条件Wrapper,然后使用MPUtil工具类构造出查询条件,并将其加入到Wrapper中。configService.queryPage(params, ...):调用Service层的方法,根据传入的参数进行分页查询。MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, config), params), params):使用MPUtil工具类构造排序、范围、模糊查询、精确查询等查询条件,并将它们加入到Wrapper中。return R.ok().put("data", page):将查询结果封装为一个包含数据列表的响应消息,其中R是一个自定义的响应消息类。
关键代码如下:
PublicRlist(@RequestParamMap<String,Object>params,ConfigEntity config){
PageUtilspage=configService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew,config),params), params));
5.2.6管理员模块界面模块
此模块Java的Controller层中的方法,用于处理分页查询请求。其中,@RequestParam注解表示该方法可以接收HTTP请求的参数,params是一个Map类型的对象,用于存储请求中的参数;BaomingxinxiEntity是一个实体类,用于封装查询条件;HttpServletRequest是一个Java Web开发中常用的对象,用于获取HTTP请求相关的信息。在该方法中,首先获取存储在Session中的tableName属性,判断是否为"yuangong",如果是,则将当前登录用户的工号设置为查询条件中的"Yuangonggonghao"属性。然后调用Service层中的方法进行分页查询,并返回查询结果。
关键代码如下:
publicRpage(@RequestParamMap<String,Object> params,BaomingxinxiEntity baomingxinxi,
if(tableName.equals("yuangong")) {
baomingxinxi.setYuangonggonghao((String)request.getSession().getAttribute("username"));
6.系统测试
在软件开发过程中,系统测试是必不可少的重要组成部分。它的主要目的是为了了解系统的缺陷,并对系统漏洞进行详细检查。通过系统测试,可以发现系统中存在的问题,并及时进行维护和更新,从而避免用户体验差的问题,系统测试的重要性在于及时维护和更新系统。在软件应用程序中,系统测试阶段将对管理应用程序进行测试,以确保该应用程序为用户提供高度的体验。这是为了保证用户可以顺利地使用应用程序,并且在使用过程中不会出现任何问题。因此,系统测试是软件开发过程中必不可少的重要环节。
6.1测试内容
6.1.1登陆测试
员工进入系统首先进入登陆界面,输入相应信息进行登录。
表6-1 登录测试数据表
用例编号:SYSTEM-TEST-001 | 测试名称 | 登录测试 | ||
前提条件:进入登录界面 | ||||
步骤 | 描述操作 | 预期效果 | ||
1 | 用户注册确认密码中与原密码不一致 | 提示密码不一致 | ||
2 | 用户正常登录 | 登录后跳转到主界面 | ||
3 | 用户错误输入昵称或密码 | 弹出提示账号或密码错误 | ||
测试用例结束标准 | 测试结果与预期效果不一致 | |||
测试用例通过标准 | 测试结果与预期效果一致 |