🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。
- 代码可以私聊博主获取。🌹
- 赠送计算机毕业设计600个选题excel文件,帮助大学选题。
- 赠送开题报告模板,帮助书写开题报告。
作者完整代码目录供你选择:
- 《Springboot网站项目》400套
- 《ssm网站项目》800套
- 《小程序项目》300套
- 《App项目》500套
- 《python网站项目》600套
⚡感兴趣大家可以点点关注收藏,后续更新更多项目资料。⚡
项目演示(需要演示视频可以私信我)
摘 要
进入信息时代以来,很多数据都需要配套软件协助处理,这样可以解决传统方式带来的管理困扰。比如耗时长,成本高,维护数据困难,数据易丢失等缺点。本次使用数据库工具MySQL和编程技术SSM开发的企业人事管理系统,可以实现目标用户群需要的功能,包括考勤管理,奖惩管理,薪资管理,培训管理,系统公告管理等功能。
总之,企业人事管理系统是基于计算机进行数据的处理,则可以短时间内批量完成数据的管理,就连基本的数据录入,更改错误的数据,统计数据等操作要求都可以轻松完成,这样的系统的运用可以减少很多繁琐的工作量,让数据的管理人员提升效率,节省数据处理投入的资金和时间。同时,企业人事管理系统本身就有配套的数据库,用于保存系统的后台数据,对于数据保存的容量则是传统模式不能相比的,在数据安全性上,也有相应的加密技术提供保护,所以数据泄露和被人窃取都不是易事。
关键词:企业人事管理系统;考勤;奖惩;薪资
第一章 绪论
1.1 研究背景
时代总是在进步的,自从进入了信息时代,面对大量的不同种类的数据,仅仅依靠有限的人力去处理,显然是不行的,毕竟人工处理大量的数据会耗费较长时间,而且数据的错误率也会提升,另外,在对数据进行检索时,也是一件既耗费体力,又耗费时间的事情。因此,引进当前的信息技术开发的系统去解决传统管理模式带来的各种困扰成为一种趋势。本次打算开发企业人事管理系统,让企业人事信息的管理完全依赖于计算机,包括录入信息,维护信息等都在计算机上操作,简单方便,在优化信息管理流程的基础上,进一步实现信息管理的规范化和系统化。也让企业人事信息的管理人员从之前的繁琐工作中解脱出来,让他们提升自身素质,提高自身管理能力,把企业人事管理系统的作用发挥到最大,从而产生更大的效益。
1.2 研究意义
企业人事管理系统的出现,可以解决传统模式带来的问题,比如传统模式不能批量处理数据,处理效率低,耗时长,浪费大量人力和物力,数据易出错等问题。企业人事管理系统是基于计算机进行数据的处理,则可以短时间内批量完成数据的管理,就连基本的数据录入,更改错误的数据,统计数据等操作要求都可以轻松完成,这样的系统的运用可以减少很多繁琐的工作量,让数据的管理人员提升效率,节省数据处理投入的资金和时间。同时,企业人事管理系统本身就有配套的数据库,用于保存系统的后台数据,对于数据保存的容量则是传统模式不能相比的,在数据安全性上,也有相应的加密技术提供保护,所以数据泄露和被人窃取都不是易事。另外,企业人事管理系统对操作人员录入的数据进行实时检验,可以及时反馈错误信息,使录入数据的准确率得到提高,也充分保证了系统数据的可靠性。总之,企业人事管理系统值得信赖,可以完成数据的高效率处理工作。
1.3 研究内容
本文对企业人事管理系统的描述,将按照如下章节进行。
第一章:根据前期的调研,和对参考资料的分析总结,明确系统研究背景意义;
第二章:通过对当前开发技术的分析,选定开发本系统的开发语言和工具;
第三章:在用户需求的基础上,结合相似系统的功能,分析并确定本系统的功能,分析本系统开发可行性问题;
第四章:在第三章的基础上,进一步细分系统功能,要设计出系统各个模块的功能,同时,对配套数据库进行设计;
第五章:在第四章基础上,要运用编程技术,全面实现企业人事管理系统的功能;
第六章:检测制作的企业人事管理系统功能是否运行正常,性能是否达标;
第二章 开发环境与技术
企业人事管理系统作为一款应用软件,其开发是需要搭建的一定的编程环境,对使用的工具和技术都有相应要求,接下来就介绍本系统中运用到的工具和技术。
2.1 JSP技术
JSP技术是有一定的规则的,首先JSP里可以用Java语言写在标记内,可以混合HTML语言以及XHTML语言代码进行混合编辑,并且进行书写Java语句或者用其他标签,用标签的话都需要用特殊的符号进行描述,编写Java语言的代码需要用特殊符号标记起来,用<%作为开始,中间书写Java语句,以%>作为结束标签,必须是有开头和结尾的,不然会编译出错的,必须是成对出现也必须有闭合的。JSP可以处理表单数据,因为JSP也算是一种Servlet,也可以把数据提交给Servlet处理也是可以的。其实对用户来讲,实现动态数据的网页就可以了,但是后台也是需要对数据进行一些加工的,JSP技术正好也是可以做到数据加工的。JSP可以直接通过JDBC来操作数据库,对数据进行页面展示,也可以记录用户的访问的信息和选择信息等,并且可以使用JavaBean组件,还可以通过Session在不同的网页上传递信息和共享相关的信息。动态网页有很多规范和标准,比如CGI规范或者ISAPI规范这些。标准是固定的,但是JSP技术是比CGI规范更加强壮。比如JSP性能对比上超过CGI,更优秀,原因是因为可以在一个JSP文件里嵌入很多元素,如果元素一样多的话,用CGI就变成了需要很多文件,而受制于硬盘读写效率的影响,用时少就是优秀,能耗少就是强劲。JSP是完整的应用平台Java EE 中不可缺少的一部分。
2.2 MySQL数据库
自从学习了关系型数据库的语法之后,也逐渐的了解了一些属于关系型数据库范畴的几个常见的数据库。比如Oracle数据库和MySQL数据库,以及Microsoft SQL Server数据库和DB2数据库这几种。在这几个关系型数据库之中,对MySQL数据库印象最好。首先MySQL数据库有各种平台的服务器版本,这样就能实现跨平台运行以及移植。其次,MySQL数据库可以进行网络连接,这样可以对本地账户和应用程序账户进行有效的区分,这样在数据库的安全性上面也有很好的保证。再次,MySQL数据库在中小数据量的运行效率上面比其他数据库占用服务器资源最少,所以很多企业都选择了MySQL数据库作为首选。在开发上面,各种图形界面管理工具也是层出不穷,并且还比较好用,从各个方面综合考虑对比的情况下,选择了MySQL数据库作为应用程序所选的数据库软件。
2.3 Java语言
Java语言发展有25年多了,在互联网行业经过这么多年的发展,还依然在市场的占有率上有半壁江山,依然受到很多程序员的喜爱,好多从业人员进行学习,随着互联网从业人员的增加,并没有降低Java语言的江湖地位,算是一个常青藤。Java语言学习很简单,当然这是针对于前辈C++来讲的,C++语言相当的强悍。Java取消了很多C++特征,比如go to这些语句,还有取消了主文件,让所有的文件都是类,类里都是数组和各种对象,还让Java自己处理各种对象的引用和回收,让开发人员只需要创建对象,使用对象,编辑代码逻辑,不需要关注性能方面,让数据的各种存储交给Java自己处理,可以花更多的时间研究应用程序之间的关系,让开发变得更专注,就像赛车的驾驶员一样,只需要了解各种车辆的性能,并且进行操作,不需要研究轱辘如何制造,这样让程序开发更加的细化。
2.4 SSM框架
SSM框架是三个框架的合称,分别是Spring框架和SpringMVC框架以及MyBatis框架。三个框架随着时间的发展,越来越变成了当今Java语言的开发主流,帮助程序开发人员专注于业务逻辑以及配置相关操作,能自动生成的都支持自动生成,避免了很多耦合性出错,通过控制反转和依赖注入,让程序开发变成配置文件开发,简单明了,让创建的Java对象都能通过自身来进行创建。面向切面的操作让程序开发也变成了部门协同,公共事务都交给了SpringAOP来操作,让程序开发变得更加专注。MyBatis越来越智能,可以用配置文件和SQL语句混合开发,可以像操作Java语言一样操作数据库。
第三章 系统分析
通常,对于系统的开发并不是一朝一夕就可以完成的,它需要经历很多的步骤,其中系统分析就是其中的一个,接下来还会有系统的设计和实现,最后一个步骤是系统测试。
3.1可行性分析
一个系统能不能完成开发,以及该系统是否可以带来收益等,都是需要提前分析的。而可行性研究就是分析这些问题,并得出结论,这个环节对项目是否开展起着重要作用。
3.1.1运行可行性分析
首先本系统的运行环境都是当前使用率比较高的软件,通过网络可以下载安装,其次本系统对于运行设备的要求比较低,满足4个G的内存的电脑都可以使用。而当下硬件设备的升级,几乎大部分电脑都是内存8个G,所以运行设备也符合要求。最后,本系统不用于处理繁多的类似商业软件的信息内容,占用的空间比较小。一般的电脑都可以运行。
3.1.2经济可行性分析
任何一个项目在开发前,其在经济上的可行性问题是值得研究的,本项目企业人事管理系统,其在数据的处理上要求比较简单,并且其管理的数据量比较小,因此,该项目的开发周期并不会耽误很长时间,项目的开发需要支出的费用也不高。加上该项目需要管理的数据量较少,对于性能条件一般的计算机都可以满足项目的运行要求,从后期管理成本上来看,需要投入该项目的管理费用也不高。但是该项目一旦投入使用,会给使用者带来一定的收益,也能节省信息管理成本,如此,这样一个低成本投入,但能够带来大量收益的项目企业人事管理系统在经济上是可行的。
3.1.3技术可行性分析
互联网的发展非常迅速,跟互联网挂钩的程序也逐渐被广泛关注,尤其是当下被大众熟知的B/S结构的程序,加上SSM技术的发展与成熟,如今可以很快速的使用模块化的代码开发一个基于B/S结构的项目程序。
通过系统运行,经济和技术上的可行性分析,对企业人事管理系统的开发确实具有必要性,让管理的信息都计算机化,可以缩短在数据处理上消耗的时间,提高工作效率。
3.2系统流程分析
本系统在完成数据的处理时,其内部都设置了相应的处理流程,比如注册时,数据的最终去向以及对每项数据的判断等,这些都是提前进行了分析的,然后在编码时,把这种判断逻辑写入了系统中。让系统在面对同样的事务处理需求时,执行对应的逻辑处理规则。
在本系统的数据库中,所有用户的资料都会单独保存在一张数据表里面,也就意味着这张用户数据表里面的用户名和密码都是可以进行本系统的登录功能的,其登录流程如下。用户提交的登录信息都是必填项,不能漏掉,数据格式和内容都要准确才可以进入功能操作区。
图3.2 用户登录流程图
本系统中保存的数据都是具有参考价值的,所以在录入数据时,要确保数据的准确性,其录入数据的流程见下图。这些数据都是经过检验合格之后才会被数据库保存。
图3.3 信息添加流程图
本系统中设置了修改密码功能,修改密码的流程见下图。密码修改成功之后,下次登录系统就需要使用新密码替换原来的密码。
图3.3修改密码流程图
3.3 系统性能分析
在进行系统分析期间,有一个很重要的环节,就是需要对系统的性能进行分析。可以说系统的性能跟系统的质量是成正比关系,也就是说系统性能也好,系统质量越可靠,系统性能不好,就代表着系统的质量不行,也就意味着系统在实际中的使用中,会出现中途崩溃,或者系统的数据容易泄露等风险。所以,提前进行系统性能的分析,就可以在系统设计实现中,避免出现上述风险问题。
描述系统性能的特征有可扩展性,易维护性,安全性等。
3.3.1系统安全性
一个系统是否安全,直接影响用户的使用。系统安全体现在数据上的保密性。通常,很多系统都设置了登录功能,或针对游客设置的注册功能等,无论是登录中需要使用的账号密码,还是用户注册产生的私密数据等都是系统中的宝贵资源,一旦数据泄露,一些非法人员就会从中谋取利益,或通过用户注册留下的电话骚扰用户,给用户带来身心上的伤害。所以一般针对此类关键数据,通常会直接进行加密保存。让数据始终保持安全状态。
3.3.2系统可扩展性
面对当前用户的使用需求设计的系统并不一定适用于未来。所以需要使用前瞻性的眼光来看待系统,提前预留好空间,方便在今后对系统进行升级,或者扩充系统功能。因此,系统需要具备可扩展性的特性。
3.3.3系统易维护性
系统在保持长时间使用中,难免会出现一些问题。所以在处理这些问题时,可能会对系统进行部分改动。而系统改动的难易程度就体现出系统是否具备易维护性,通常一个易于维护的系统,在面对系统改动时,将会很容易,而且也会节省时间和资金。
3.4系统功能分析
本系统的功能不会像市场上的商业程序一样具备复杂的功能,其提供的功能只能满足目标用户的一般的系统内容浏览和简单的信息处理功能。
本系统确定设置管理员权限,总经理权限,部门主管权限和员工权限。
设置的管理员功能可以见下图用例图。管理员管理所有权限的用户资料,管理考勤,培训,薪资,奖惩等资料。
图3.4 管理员用例图
设置的总经理功能可以见下图用例图。总经理管理部门主管和员工的考勤信息,奖惩与薪资信息等。
图3.5 总经理用例图
设置的部门主管功能可以见下图用例图。部门主管参与上下班打卡,管理员工的考勤和薪资以及奖惩信息。
图3.6 部门主管用例图
设置的员工功能可以见下图用例图。员工参与上下班打卡,查看自己的奖惩,薪资以及培训信息。
图37 员工用例
第四章 系统设计
设计时,通常把用户需求作为对系统功能和数据库的设计重点,殊不知,系统设计时,注重用户体验也是比较关键的设计内容。比如一个系统已经实现了用户需要的功能,但是其界面布局比较混乱,同时界面中各个元素的搭配也不合理,这样一旦访问者访问系统,在短时间内无法找到需要的信息,就容易产生视觉疲劳,直接影响用户对系统的使用。所以,系统设计时,也需要关注用户的使用体验。由于用户之间的差别,比如教育程度,职业,地区等因素的不同,用户产生的行为也会存在差异,所以设计人员既要考虑用户之间的行为差异,也要考虑他们之间的共性。在尊重用户习惯的基础上,进行页面设计布局。达到用户可以多次访问系统的目的。
4.1布局设计原则
进行页面的布局,就要划分系统的各个模块,然后根据这些模块的重要程度进行布局,也需要关注用户比较在意的关键信息,利用合理的布局方式,传达出系统想要表达的信息内容,也让用户快速高效地获取需要的信息。布局虽然是页面设计的核心,但是也要讲究页面内容的协调性,统一性和均衡性。
布局设计也要考虑基本原则,接下来的内容就对此进行阐述。
第一点:参考系统需求,把系统的内容进行划分,按照重要程度的不同进行布局,并把相似或相近的信息内容集中展示在同一个区域,让访问者可以更流畅的阅读信息;
第二点:页面中比较重要的区域是靠上靠左的位置,所以这部分区域应该放置系统中比较重要的模块,毕竟这部分区域可以吸引用户眼球,让用户进入页面中,就可以发现需要的信息。对于一些次要的模块,则可以放置在页面中靠下和靠右的位置。如此设计安排,才可以发挥出页面设计实用性的特点;
第三点:根据用户习惯设计页面,虽然大部分用户具有操作上的共性特征,但他们之间还是存在区别,常见的影响用户操作习惯的因素有:年龄,学历,职业,性别等。所以设计时在考虑用户的共性特征时,也需要尽量尊重用户的不同习惯。
4.2功能模块设计
下图为管理员的功能设计,管理员管理所有权限的用户资料,管理考勤,培训,薪资,奖惩等资料。
图4.1 管理员功能结构图
下图为总经理的功能设计,总经理管理部门主管和员工的考勤信息,奖惩与薪资信息等。
图4.2 总经理功能结构图
下图为部门主管的功能设计,部门主管参与上下班打卡,管理员工的考勤和薪资以及奖惩信息。
图4.3 部门主管功能结构图
下图为员工的功能设计,员工参与上下班打卡,查看自己的奖惩,薪资以及培训信息。
图4.4 员工功能结构图
4.3数据库设计
企业人事管理系统选用关系数据库作为程序的后台支持,之所以选择关系数据库主要还是因为它易于使用,而且也方便进行数据维护,尤其是提供强大的SQL查询语言。还有就是关系数据库采用的二维表模型,跟现实生活中的逻辑非常贴近,与网状模型,层次模型相比较,可以发现还是关系模型更容易被接受。
4.3.1数据库E-R图
这部分内容需要根据用户需求当中的数据信息,进行拆分,并仔细分析,要从这些数据中标识出E-R模型需要使用的数据,其中有实体,有实体具备的属性,有基于实体间的关系。在获取了这些数据之后,就可以使用认可度比较高的Visio工具来完成E-R模型的建模。建模期间,只要注意Visio工具中,绘制E-R模型的各个符号代表的含义,并能够正确把实体,属性还有关系等数据完整表示就可以了。使用这样的方法可以节省数据库设计的时间,而且还可以直观表达设计的内容,以及它们之间存在的联系。
(1)设计的员工用户实体,其具备的属性如下图。
图4.4 员工用户实体属性图
(2)设计的考勤实体,其具备的属性如下图。
图4.5 考勤实体属性图
(3)设计的奖惩实体,其具备的属性如下图。
图4.6 奖惩实体属性图
- 设计的薪资实体,其具备的属性如下图。
图4.7 薪资实体属性图
(8)设计的实体间关系如下图。
图4.8 实体间关系E-R图
4.3.2 数据库表结构
程序编码基本都是参照设计的方案进行的,包括设计的数据库也是对后面的编码有着一定的影响。通常来说,数据库就是保存数据,不管其设计得好坏,都不会丧失它本身的数据保存功能。设计数据库的好坏,其区别在于,对数据存取的效率。设计比较好的数据库,在数据查询,存储以及更新上,可以快速做出响应。设计不好的数据库,很多时候不仅会延长数据的处理时间,还会容易出错。因此,设计数据库也是程序开发中很关键的环节。
针对本系统设计的数据库,按照数据库设计的原则,即设计数据库的三大范式进行。各个数据表的结构都是根据E-R模型进行的物理转化,对于一些细节问题,包括表的命名,字段的命名,字段类型和长度的设计等都比较规范化,这样做的目的也是方便后期系统编程。
表4.1 考勤信息表
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | int(11) | 否 | 主键 | |
yonghu_id | int(11) | 是 | NULL | 用户 |
today | varchar(200) | 是 | NULL | 打卡日期 |
on_time | timestamp | 是 | NULL | 上班打卡时间 |
down_time | timestamp | 是 | NULL | 下班打卡时间 |
chuqin_types | int(11) | 是 | NULL | 打卡类型 |
overtimeNumber | int(11) | 是 | NULL | 加班时间(小时) |
create_time | timestamp | 是 | NULL | 创建时间 |
表4.2 培训信息表
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | int(11) | 否 | 主键 | |
yonghu_id | int(11) | 是 | NULL | 用户 |
on_time | timestamp | 是 | NULL | 培训开始时间 |
down_time | timestamp | 是 | NULL | 培训结束时间 |
day_number | int(11) | 是 | NULL | 培训天数 |
cultivate_content | varchar(200) | 是 | NULL | 培训内容 |
create_time | timestamp | 是 | NULL | 创建时间 |
表4.3 奖惩信息表
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | int(11) | 否 | 主键 | |
yonghu_id | int(11) | 是 | NULL | 用户id |
jiangcheng_name | varchar(200) | 是 | NULL | 奖惩名称 |
jiangcheng_types | int(11) | 是 | NULL | 奖惩类型 |
jiangcheng_content | varchar(200) | 是 | NULL | 奖惩详情 |
insert_time | timestamp | 是 | NULL | 奖惩时间 |
create_time | timestamp | 是 | NULL | 创建时间 |
表4.4 管理员信息表
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
username | varchar(100) | 否 | 用户名 | |
password | varchar(100) | 否 | 密码 | |
role | varchar(100) | 是 | 管理员 | 角色 |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 新增时间 |
表4.5 薪资信息表
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | int(11) | 否 | 主键 | |
yonghu_id | int(11) | 是 | NULL | 用户 |
month | varchar(200) | 是 | NULL | 月份 |
money | decimal(10,4) | 是 | NULL | 薪资 |
create_time | timestamp | 是 | NULL | 创建时间 |
表4.6 系统公告信息表
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | bigint(20) | 否 | 主键 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
biaoti | varchar(200) | 是 | NULL | 标题 |
leixing | varchar(200) | 是 | NULL | 类型 |
neirong | longtext | 是 | NULL | 内容 |
riqi | datetime | 是 | NULL | 日期 |
表4.7 用户信息表
字段 | 类型 | 空 | 默认 | 注释 |
id (主键) | int(11) | 否 | 主键 | |
username | varchar(200) | 是 | NULL | 账户 |
password | varchar(200) | 是 | NULL | 密码 |
yonghu_name | varchar(200) | 是 | NULL | 姓名 |
yonghu_phone | varchar(200) | 是 | NULL | 手机号 |
yonghu_id_number | varchar(200) | 是 | NULL | 身份证号 |
yonghu_photo | varchar(200) | 是 | NULL | 头像 |
sex_types | int(11) | 是 | NULL | 性别 |
bumen_types | int(11) | 是 | NULL | 部门 |
role_types | int(11) | 是 | NULL | 权限 |
create_time | timestamp | 是 | NULL | 创建时间 |
第五章 系统实现
这部分工作主要由程序编制人员完成。通常在面对一个大型的系统时,这些程序编制人员就会明确分工,每个人都完成不同的功能模块,在用代码实现功能的基础上,提前预留好接口,最后才将他们已完成的功能模块通过接口进行组合。
5.1 管理员功能实现
5.1.1 用户管理
管理用户是管理员的功能。其运行效果图如下。这里的用户包括总经理,部门主管,员工,他们的资料都需要管理员来管理。
图5.1 用户管理页面
5.1.2 考勤管理
管理考勤是管理员的功能。其运行效果图如下。管理员查看所有人员的考勤打卡信息,包括上班打卡,下班打卡信息。
图5.2 考勤管理页面
5.1.3 培训管理
管理培训信息是管理员的功能。其运行效果图如下。本模块主要让管理员查看所有人员的培训信息。
图5.3 培训管理页面
5.2 总经理功能实现
5.2.1 奖惩管理
管理奖惩信息是总经理的功能。其运行效果图如下。总经理添加奖惩信息,查看部门主管和员工的奖惩信息。
图5.4 奖惩管理页面
5.2.2 薪资管理
管理薪资是总经理的功能。其运行效果图如下。总经理添加薪资信息,查看部门主管和员工的每月薪资。
图5.5 薪资管理页面
5.3 部门主管功能实现
5.3.1 考勤管理
管理员工的考勤信息是部门主管的功能。其运行效果图如下。部门主管可以参与上下班打卡,可以查看自己的考勤打卡信息。
图5.6 考勤管理页面
5.3.2 奖惩管理
管理员工的奖惩信息是部门主管的功能。其运行效果图如下。部门主管能够新增员工的奖惩信息,可以查看部门员工的奖惩信息。
图5.7 奖惩管理页面
5.3.3 系统公告管理
管理系统公告是部门主管的功能。其运行效果图如下。部门主管可以发布系统公告,对系统公告信息进行修改,查看和删除。
图5.8 系统公告管理页面
5.4 员工功能实现
5.4.1 培训查看
查看培训信息是员工的功能。其运行效果图如下。员工可以在自己的后台查询培训信息,查看属于自己的培训详细信息。
图5.9 培训查看页面
5.4.2 薪资查看
查看薪资是员工的功能。其运行效果图如下。员工在当前页面只能查询薪资,查看自己的薪资明细。
图5.10 薪资查看页面
5.4.3 考勤管理
管理个人的考勤信息是员工的功能。其运行效果图如下。员工参与上下班打卡,可以查询考勤记录信息。
图5.11 考勤管理页面
第六章 系统测试
面对制作完成的系统,接下来需要开展的工作是对其进行测试。这个环节需要利用各种方式,去发现目标系统中存在的问题,并及时分析和解决,让目标系统最终可以被用户验收。
6.1 系统测试的实施
接下来进行的测试内容,包括确认测试和验收测试等。
确认测试:这个环节的主要任务就是对制作的系统的有效性进行确认,所以它也有另外一个名字,就是有效性测试。测试人员通过复审目标系统的功能还有其运行环境的配置,来检验目标系统跟前面分析设计的用户需求说明书是否匹配。
验收测试:在实际中,通常需要开发员,质量保证人员以及系统面向的用户参与到这个环节。让用户在系统的操作界面上通过设计的用例进行数据录入,检测系统的输出结果。
回归测试:主要用于测试变更的软件。在保证改动的系统不会产生其他错误的情况下,对系统修改的部分进行正确性验证。
6.2 系统测试用例
很多时候,需要对系统中的指定功能进行数据检验,检验不同数据的录入,其产生的结果或反馈的信息跟预定的需求是否有差别。
6.2.1 登录功能测试
作为企业人事管理系统的入门门槛,其登录功能扮演着相当重要的作用,可以把非条件用户置之门外保护系统安全,同时还能引导不同用户进入不同的操作区。本系统的登录功能测试表如下。每当有不同形式的数据进行录入时,该系统会对每条数据进行判断。准确录入的数据才会让访问者登录进入功能操作区。
测试内容 | 录入的数据 | 预期结果 | 最终结果 |
输入用户表的账号和密码 | 账号:user 密码:user | 登录成功 | 登录成功 |
随意输入账号和密码 | 账号:uuu 密码:uuu | 提示信息错误 | 提示信息错误 |
输入用户表的账号,密码随意输入 | 账号:user 密码:uuu | 提示账号密码不匹配 | 提示账号密码不匹配 |
随意输入账号,输入用户表的密码 | 账号:uuu 密码:user | 提示账号密码不匹配 | 提示账号密码不匹配 |
6.2.2 添加部门功能测试
部门信息表里面存放了很多部门名称信息,且这些部门名称都不一致,管理员在登记部门信息时,如果登记了部门表里面的部门名称,则不会成功添加部门,相反,管理员就可以成功添加部门。
表6.2 添加部门功能测试表
测试内容 | 录入的数据 | 预期结果 | 最终结果 |
输入部门表的部门名称 | 部门名称:财务部 | 操作失败 | 操作失败 |
输入部门表没有的部门名称 | 部门名称:行政部 | 操作成功 | 操作成功 |
6.3 测试的结果
在对企业人事管理系统进行测试后,发现本系统具有的统一界面和清楚的导航设计让系统具备了易操作性的特点,在与用户需求进行比较后,发现本系统具备的功能比较完善,在运行环境中可以正常使用,这里运行环境与本系统的生产环境相似。总之,企业人事管理系统测试合格。
结 论
为了完成企业人事管理系统的设计实现,我重新回顾了以往的专业知识,并重点学习了编程技术,其中有JAVA语言的学习,也学习了MySQL数据库的运用,还有界面布局等方面的知识。有了这些知识的填充,并依靠导师的帮助,我才能够独立设计制作本系统。
系统在开发前,先要确定使用用户是谁,以及确定程序的适用范围等,如此才可以对系统定位。只有准确定位系统,才可以节省开发时间,并省去一些不必要的麻烦。系统的功能是对使用用户进行调研获取,当然,系统的功能也采取了历来的一些相似系统的功能。而系统设计则是基于功能需求分析,这也是比较重要的环节,需要认真对待。因为此设计方案对后期的编码起着重要的作用,不仅可以降低编码期间的出错率,还可以提高编码速度,毕竟系统的实现部分,基本都是参照系统设计的方案进展的。当系统编码完成,也会进行最后的测试环节,当开发的系统检验合格之后,系统开发才能够结束。本系统的开发也是遵循这样的流程,即分析功能,设计系统模块,设计数据库,实现系统功能,测试系统等。
本系统具有较完善的功能,使用者基本可以使用本系统去处理相关数据,而且系统可以较长时间进行工作。对于系统的操作,使用者也易于上手,毕竟本系统在设计时,就对页面中的导航模块进行重点设计,把页面中的重点区域用来展示系统的导航功能,让使用者进入系统界面,可以第一时间发现系统的导航,并使用系统的导航功能找到需要的内容。对于系统的安全性,本系统在保存用户账号密码数据时,也是用当下流行的MD5加密技术来保障数据安全,也在系统的登录模块设置了安全验证规则,引导符合条件的用户进入系统指定页面。
本系统具备一定的优势的同时,它也会暴露出自身的缺陷,比如,本系统在编码过程中,对使用的变量的命名不方便记忆,并且也不规范,代码编写也不规范,缺少关键代码的注释等,还有系统的目录规划不合理等问题。
综上所述,本系统还需要时间来完善,本人也需要加强技术知识的学习与实践,在今后的工作中,我也需要注重个人能力的培养,及时吸收编程技术知识,然后运用先进成熟的技术去重构本系统,让系统日益完善。
参考文献
[1]吴亮.中小企业人事管理系统设计[J].科学技术创新,2020(31):73-74.
[2]崔靖奇,赵广复.基于JAVA的中小企业人事管理系统的研究[J].电脑与电信,2019(08):28-30.
[3]王惠.基于JSP的企业人事管理系统的设计与实现[J].电脑知识与技术,2018,14(33):75-77.
[4]张明亮.JSP技术在互联网软件中的应用优势研究[J].软件工程,2019,22(10):19-21+6.
[5]赵晓丹.网页开发中的JSP技术分析[J].南方农机,2019,50(20):247-248.
[6]宋丽娜.基于JSP的Web开发中文乱码问题的研究与解决[J].电子技术,2015,42(11):5-7.
[7]汪君宇.基于JSP的Web应用软件开发技术分析[J].科技创新与应用,2018(16):158-160.
[8]赵钢.JSP Servlet+EJB的Web模式应用研究[J].电子设计工程,2016,21(13):47-49.
[9]秦超,潘猛,张鹏.处理MySQL的典型问题[J].网络安全和信息化,2018(04):70-72.
[10]李仕伟,周坤,刘新蕊,李宝林.MySQL数据库优化技术[J].信息与电脑(理论版),2016(12):173-174.
[11]张云健.计算机软件Java编程特点及其技术应用[J].信息与电脑(理论版),2019(13):97-98.
[12]刘星淇.Java编程语言的特点与应用分析[J].通讯世界,2019,26(09):149-150.
[13]岳青玲.Java面向对象编程的三大特性[J].电子技术与软件工程,2019(24):239-240.
[14]谢懿.计算机软件JAVA编程特点及其技术分析[J].农家参谋,2020(01):166.
[15]乔岚.基于MyBatis和Spring的JavaEE数据持久层的研究与应用[J].信息与电脑(理论版),2017(08):73-76.
[16]邹红霆.基于SSM框架的Web系统研究与应用[J].湖南理工学院学报(自然科学版),2017,30(01):39-43.
[17]于万波.网站开发与应用案例教程[M].清华大学出版社,2015.
[18]Xuan Yin, Wei Zheng, Ming Zhang, Jing Zhang, G. Zhuang, T. Ding. A modularized operator interface framework for Tokamak based on MVC design pattern[J]. Fusion Engineering and Design, 2018.
[19]Oscar Rodriguez-Prieto,Francisco Ortin,Donna O’Shea. Efficient runtime aspect weaving for Java applications[J]. Information and Software Technology,2018,100.
致 谢
自从来到了这个校园,我觉得我改变了很多,我的性格也变得开朗,我的知识也得到了增长,还有我对社会的认知也得到了改变。因为,处于这个校园中,有来自五湖四海的同学们,我们都可以在一起学习,课后还可以互相攀谈,感觉这样的生活真的很有趣,还有校园的老师们,他们都具备较高的学历,拥有丰富的专业知识,而且他们一直都很认真的教授我们知识。
到现在为止,我都不后悔来到这个学校,因为大学校园跟高中时所处的环境不一样,大学校园的时间节点是碎片化的,可以根据自身情况综合利用,可以用来学习知识,也可以用来去社会上实践,增长社会见识,为毕业后的工作打下基础等。然而,这一切都即将结束,因为毕业了就要离开校园,真正步入社会进行生活。
在这最后的时间里,我想对身边的人表示感谢。首先是导师,他陪伴着我度过了毕业设计制作的这段时间,还提供给我各种帮助,其中有系统选题方面的建议,功能分析上的意见,编程技术的指导等,还时不时关怀我,让我不要焦躁,设计制作的每个环节都督促我认真完成,遇到问题后,先尝试自行解决,没有思路时,导师就会帮助我,并提供解决问题的办法。所以,我能上交项目程序,导师功不可没。其次是班上的同学,虽然在这几年的朝夕相处中,我们彼此互相关怀,遇到问题,相互帮助,这些同学丰富了我的校园生活。最后是校园的老师们,他们辛苦教学,传授知识给我们,才让我们能够成长,我们也学到了本事,面对学习中或生活中的问题,我们也有能力去解决。
总之,面临毕业,我希望我的老师们可以心想事成,班上的同学都能找到好工作,我的母校前景更辉煌
核心代码展示
/**
* 公告通知
* 后端接口
* @author
* @email
* @date 2021-03-09 11:33:59
*/
@RestController
@RequestMapping("/news")
public class NewsController {
@Autowired
private NewsService newsService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,NewsEntity news, HttpServletRequest request){
EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,NewsEntity news, HttpServletRequest request){
EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( NewsEntity news){
EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
ew.allEq(MPUtil.allEQMapPre( news, "news"));
return R.ok().put("data", newsService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(NewsEntity news){
EntityWrapper< NewsEntity> ew = new EntityWrapper< NewsEntity>();
ew.allEq(MPUtil.allEQMapPre( news, "news"));
NewsView newsView = newsService.selectView(ew);
return R.ok("查询公告通知成功").put("data", newsView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
NewsEntity news = newsService.selectById(id);
return R.ok().put("data", news);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
NewsEntity news = newsService.selectById(id);
return R.ok().put("data", news);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody NewsEntity news, HttpServletRequest request){
news.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(news);
newsService.insert(news);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody NewsEntity news, HttpServletRequest request){
news.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(news);
newsService.insert(news);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody NewsEntity news, HttpServletRequest request){
//ValidatorUtils.validateEntity(news);
newsService.updateById(news);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
newsService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<NewsEntity> wrapper = new EntityWrapper<NewsEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = newsService.selectCount(wrapper);
return R.ok().put("count", count);
}
}