基于JavaEE的网新恒天人事管理系统的设计与实现

Posted epoch211

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于JavaEE的网新恒天人事管理系统的设计与实现相关的知识,希望对你有一定的参考价值。

获取项目源文件,技术交流与指导联系Q1225467431

 

摘要随着网络技术的不断发展及其在企业管理工作中的应用,在企业建立企业人事管理系统就显得十分必要。所以设计一个企业人事管理系统可以更方便的帮助管理者管理一家企业。本系统的开发正是适应了这一需求,经过实际的需求分析,本系统采用了JavaEE平台中最为流行的Spring+Spring MVC+MyBatis框架,以Tomcat作为应用并选择mysql数据库管理系统作为工具进行开发。系统包含管理员、HR、领导、普通员工四种不同的用户。操作简便、界面美观、灵活实用,设计开发出员工管理、工时管理、绩效管理、数据分析等功能,基本满足了企业管理的实际需要。本文主要介绍了本课题的开发背景、完成的功能和开发过程,并着重说明了开发设计的思想、技术难点和解决方案。

关键词JavaEE;企业人事管理系统;Tomcat;MySQL

 

   

1系统概述1

1.1 系统的研究现状 1

1.2 发展趋势 1

1.3 系统的开发方法 2

2 系统需求分析3

2.1 系统功能分析 3

2.2 系统功能结构 4

2.3功能描述和用例分析 4

2.3.1系统用例图4

2.3.2 员工管理5

2.3.3 工时管理6

2.3.4 绩效管理6

2.3.5 数据分析7

2.3.6 流程管理7

2.4 系统性能需求 8

2.4.1 时间需求8

2.4.2 空间需求8

2.5 安全性和可靠性 8

3 系统分析8

3.1 系统开发 8

3.2 系统开发需求 9

3.3 系统开发与运行环境设计 10

3.3.1 软件环境10

3.3.2 硬件环境10

4 系统设计10

4.1 数据库设计 10

4.1.1 实体类抽象11

4.1.2 系统ER11

4.1.3 数据库连接配置配置文件11

4.2 数据库的选择 11

4.3 数据库表的设计 12

4.4 系统详细设计 14

4.4.1 模块设计 14

4.4.2 HR新增用户、员工离职、升职模块设计 15

4.4.3 员工工时填写模块设计 16

4.4.4 员工请假、加班模块设计 17

5 系统实现18

5.1 登录界面及主界面块的实现 18

5.2 员工管理模块实现 21

5.3 员工工时填写模块实现 25

5.4 员工请假加班模块的 26

6系统测试31

6.1登录模 31

6.2员工管理模块的测试 32

6.3工时管理模块的测试 33

6.4测试总结 34

总结35

参考文献36

 


1系统概述

1.1 系统的研究现状

随着人类迈入21世纪,计算机技术、通信技术、网络技术为代表的现代信息技术的飞跃发展,人类正在从工业时代向信息时代迈进,人们越来越重视信息资源的开发与利用,“信息化”已成为一个国家经济和社会发展的关键环节,信息化水平的高低已成为衡量一个国家现代化水平和综合国力的重要标志。信息化的实质是使信息这一社会的主导资源充分发挥作用,可以说推广信息技术是手段,真正利用信息是目的,信息化则是利用信息的过程。

我国自1983年大力推广微型计算机应用以来,在管理信息领域,无论在理论方面还是在实践方面,都有了很大的发展。当今社会计算机技术发展飞速,无论在工厂,商场,公司或者企业当中,计算机的应用越来越普及,利用计算机实现企业人事管理势在必行。对于中型规模以上的企业来说,利用计算机提高企业人事管理的效率,是适应现代企业制度要求、推动企业人事管理走向科学化、规范化的必要条件。而基本信息管理是一项琐碎、复杂而又十分细致的工作,公司人员数量多,而且流动频繁,到外面招聘来的人员增多,公司内部职工的部门,职务经常调整,职工档案的更新等。如果没有适当的工具来管理这些日常工作,就会耗费工作人员大量的时间和精力。利用B/S结构制作的人事管理系统对职工各种信息进行记录、统计,准确率快速提高,另外,可具有检索迅速、查找方便、可靠性高、存储量大、保密性好等优点。这些优点能极大地提高企业管理的效率,因此,开发这样一套管理系统成为很有必要的事情,它能够具体化、合理化的管理单位的人事信息,用结构化的思维方式,运用计算机解决实际工作和生活中遇到的问题。

1.2 发展趋势

信息作为生产力中最活跃的因素,很早就在人类生活中发挥着不可替代的作用,现在许多发展中国家对人力资源的战略性意义都有了深刻的认识,并开始付诸行动。世界公认,21世纪将是人力资源的世纪,人力资源问题将主导整个21世纪甚至更为遥远。引起这个状况的变化,主要有以下几个方面。

竞争压力:目前,世界经济趋向全球化。世界经济的全球化过程和国家的开放过程,要求组织的管理部门降低管理成本以减少竞争压力和增强竞争能力。而对于不同的组织,人力资源成本在总成本中的比例是不一样的。

技术革新:无论是现在还是将来,工业的发展越来越多地取决于科学和技术、知识与技能。高新科技产业更是如此。这不仅要求员工尤其是技术人员掌握新的科学知识和技术能力,而且更重要的在于要求员工深入而快捷地掌握和应用这些知识和技能。这就导致了两个问题。第一,随着这种技术革新的发展和知识更新速度的加快,人们有更多的职业选择机会。第二,伴随着这种发展以及职业选择机会的增多,人力资源管理活动和频繁程度加剧;而且这种活动对科学技术的要求与它的反应程度也更高了,进而提高了人力资源成本。

工作目标和价值观的改变:随着社会政治和经济的发展,人们的工作目标和价值观也都发生了重要的变化。这就对人事管理部门和管理人员提出了新的要求和新的问题,不得不考虑诸如工作类型设计、岗位分析、充分尊重员工以及为他们提供良好的个人发展和自我价值实现的环境与条件等问题。这样,人力资源管理就派上了用场。

1.3 系统的开发方法

系统采用B/S体系结构,利用Java EE VelocityMySQL 5.5进行开发的,具有简单、易用性、用户界面友好等特点。系统开发的目标主要是:

(1) 界面设计简洁、友好、美观大方;

(2) 操作简单、快捷方便;

(3) 数据存储安全、可靠;

(4) 信息分类清晰、准确;

(5) 强大的查询功能,保证数据查询的灵活性;

(6) 对于用户输入的数据系统进行严格的数据校验,尽可能排除人为出错。

2 系统需求分析

2.1 系统功能分析

本课题所研究的“JavaEE网新恒天人事管理系统”主要由客户端和管理端组成。客户端主要由新增员工模块、员工离职模块、员工升职模块、请假模块、加班模块、数据分析模块等组成,管理端主要由员工管理模块、工时管理模块、绩效管理模块、数据分析模块等组成。运行本系统先由登录界面窗口进入用户权限认证窗口,通过用户名和口令验证的用户方可进入系统主窗口进行浏览与操作。

客户端:

(1)新增员工模块:只有HR与领导可以查看所有的员工信息,并且HR可以在此模块中,新增新入职的员工信息。

(2)员工离职模块:所有员工都可以看到此菜单,但是只能查看到与自己有关的离职流程。其他流程不能查看与修改。员工提出离职的申请,并提交给其领导进行审核。

(3) 员工升职模块:所有员工都可以看到此菜单,但是只能查看到与自己有关的升职流程。其他流程不能查看与修改。员工提出升职的申请,并提交给其领导进行审核。

(4) 请假模块:所有员工都可以看到此菜单,但是只能查看到与自己有关的请假流程。其他流程不能查看与修改。员工提出请假的日期与申请,并提交给其领导进行审核。

(5) 加班模块:所有员工都可以看到此菜单,但是只能查看到与自己有关的加班流程。其他流程不能查看与修改。员工在前一天或这个月内,有加班的情况,可以提出加班申请,交由其领导进行核实,如果加班申请通过,则本月的工时,有相应的增加。

(6) 数据分析模块:领导可以查看此菜单,领导可以通过图表的形式,查看到公司最近动态与相应的数据动态。

管理端:

(1)员工管理模块:HR与领导对员工的添加、修改、查看和删除。

(2)工时管理模块:工时的填写、修改、查看和删除。

(3)绩效管理模块:绩效的查看、新增和删除。

(4)数据分析管理模块:领导查看。

2.2 系统功能结构

根据2.1节的系统功能分析可知“网新恒天人事管理系统”包括新增员工模块、员工离职模块、员工升职模块、请假模块、加班模块、数据分析模块等模块,其功能结构图如图2.1所示。

 

2.1 系统功能结构图

2.3功能描述和用例分析

用例用于表示系统所提供的服务,它定义了系统是如何被参与者所使用的,它描述的是参与者为了使用系统所提供的某一完整功能而与系统之间发生的一段对话。根据分析,下面将列出本系统的系统用例图。

2.3.1系统用例图

系统用例图主要是用来描述系统的总体结构,为了确保系统的安全,只能是注册用户才能访问前台,其中该模块主要功能是HR可以将员工录入到系统中;员工可以申请离职、升职、加班与请假;领导可以审核各种流程与查看公司报表数据。如下图所示:只能是领导才能访问后台,进行员工申请的流程进行查询、删除与审核并查看相关数据。

该系统用例图如图2.2所示。

 

2.2系统用例图

2.3.2 员工管理

(1)功能介绍

员工管理:为了确保系统的安全,只能是系统管理员才能对用户进行管理,对用户进行修改密码、修改用户名、添加系统用户、用户管理,注销退出。

(2)活动图如图2.3所示。

 

2.3 系统员工管理活动图

2.3.3 工时管理

(1)功能介绍

工时管理:系统管理员登录系统后,可以对工时进行填写和查看和修改。

(2)活动图如图2.4所示。

 

2.4工时管理活动图

2.3.4 绩效管理

(1) 功能介绍

绩效管理:主要是对绩效进行添加,修改和查看。

(2) 活动图如图2.5所示。

 

2.5 绩效管理活动图

2.3.5 数据分析

(1)功能介绍

数据分析:主要是对员工的数据进行系统的分析,通过饼图、树状图,让人一目了然。

(2) 活动图如图2.6所示。

 

2.6数据分析管理活动图

2.3.6 流程管理

(1)功能介绍

流程管理:主要根据员工提出请假、加班、离职、升职的申请,HR和领导可以进行审核。

(2)活动图如图2.7所示。

 

2.7 流程管理活动图

2.4 系统性能需求

本课题主要是解决网新恒天人事管理系统的日常管理中所涉及到的基本信息,目标是使企业人事管理系统在管理上做到数据的信息化、快速化和网络化。本系统主要包括员工管理、工时管理、绩效管理、数据分析、流程管理等模块。下面详细介绍这几部分模块的作用及所实现的功能。

(1)员工管理,员工信息的录入、查询、修改、删除,离职与升职的申请。

(2)工时管理,可以进行工时的填写,请假与加班的申请。

(3)绩效管理,员工可以查询自己的绩效,管理员可以进行绩效的审核、修改。

(4)数据分析,数据查看功能。

(5)流程管理,HR和领导对流程进行审核。

2.4.1 时间需求

(1) 查询的最长等待时间不超过5秒;

(2) 更新信息的时间不超过5秒;

(3) 数据上传的时间不超过5秒;

2.4.2 空间需求

(1) 支持的终端数:<=1000 ;

(2) 支持的并行操作的使用者数:<=300 ;

(3) 处理的记录数: <=10000 ;

2.5 安全性和可靠性

(1)每个角色只能看到相应的菜单,进行相应的操作,无法越权处理。

(2)在设计过程中尽量避免在VM页面上写代码,提高系统的安全性。优化代码,提高系统的性能。

3 系统分析

3.1 系统开发

Velocity是一个基于 Java 的模板引擎技术, 提供的模板语言可以使用在 Java 中定义的对象和变量上。Velocity 是 Apache 基金会的项目,开发的目标是分离 MVC 模式中的持久化层和业务层。但是在实际应用过程中,Velocity 不仅仅被用在了 MVC 的架构中,还可以被用在以下一些场景中。

(1)Web 应用:开发者在不使用 JSP 的情况下,可以用 Velocity 让 html 具有动态内容的特性。

(2)源代码生成:Velocity 可以被用来生成 Java 代码、SQL 或者 PostScript。有很多开源和商业开发的软件是使用 Velocity 来开发的。

(3)自动 Email:很多软件的用户注册、密码提醒或者报表都是使用 Velocity 来自动生成的。使用 Velocity 可以在文本文件里面生成邮件内容,而不是在 Java 代码中拼接字符串。

(4)转换 xml:Velocity 提供一个叫 Anakia 的 ant 任务,可以读取 XML 文件并让它能够被 Velocity 模板读取。一个比较普遍的应用是将 xdoc 文档转换成带样式的 HTML 文件。

JavaBean是用Java语言编写的可重用软件组件,类似于Microsoft的COM组件,可以通过可视化的构建工具来创建。JavaBean可以嵌入到Applet小程序、应用程序、Servlet和复合组件中。编写JavaBean组件的方法同编写其他Java类一样,可以利用已有的组件、Applet程序或者Java类,并把它们转换为JavaBean。由于JavaBean是基于Java语言的,因此JavaBean不依赖平台。它具有独立性、易编写、易使用、易维护,可以在任何安装了Java运行环境的平台下使用,而不需要重新编译等特点。

“JavaEE企业人事管理系统”选择采用的是JavaBean+servle技术。本系统中Process、RoleEmp、Role、User等servle,来通过对业务的访问并进行处理,然后将处理结果返回,并根据返回的字符串,跳转到相应的vm页面;或返回相应的对象,通过相应的技术,将对象转换成相应的JSON字符串,交与前面进行解析,显示出需要显示的数据。

3.2 系统开发需求

(1)性能要求

整个系统应当操作简便,界面友好,维护简便。数据库要求运行稳定,执行速度快,数据安全性高。软件系统本身运行对计算机硬件平台和操作系统平台要求适中。

(2) 安全和保密要求

系统对不同权限的用户提供不同的功能模块,对历史数据的更改和新数据的添加只有管理员才能进行操作,一般的用户只能进行查看。对数据库的关键数据应要保密。

3.3 系统开发与运行环境设计

3.3.1 软件环境

(1) 操作系统:Windows2000/XP/2003或更高版本

(2) 数据库: MySQL 5.7

(3) WEB容器:Tomcat7.0 JDK1.7或更高版本

3.3.2 硬件环境

(1) 运行内存256MB或更高

(2) 磁盘容量:512MB或更高

(3) 其它:鼠标、键盘。

4 系统设计

4.1 数据库设计

MySQL是一种开放源代码的关系型数据库管理系统,MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言进行数据库管理。

它在WEB应用方面 MySQL是最好的RDBM应用软件之一。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL作为网站数据库

4.1.1 实体类抽象

本系统设计的实体包括:员工信息、角色、流程、工时管理、工资管理,将它们以及它们之间的关系抽象出来,并绘制成ER图,如图4.1所示。

4.1.2 系统ER图

系统的实体包括:员工信息、角色、流程、工时管理、工资管理,系统ER图如图4.1所示。

 

4.1 系统ER图

4.1.3 数据库连接配置配置文件

(1) 数据库的配置参数(#表示注释,DBConn.java)

#加载驱动

Class.forName(“com.mysql.jdbc.Driver”);

#连接数据库

jdbc.url=jdbc:mysql://127.0.0.1:3306/fanghu

#用户名

jdbc.username=fanghu

#登录密码

jdbc.password=123456

4.2 数据库的选择

本系统使用MySQL关系型数据库,MySQL5.7能提供中小型系统所需要的数据库服务。MySQL拥有一个非常快速而且稳定的基于线程的内存分配系统,可以持续使用面不必担心其稳定性。它可以运行在不同的操作系统下,提高了系统的可移植性。MySQL的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地为用户提供服务,而不过多的系统资源。

4.3 数据库表的设计 

数据库表有员工表、员工等级表、员工基本薪资、员工的工作时表和请假表。数据表如表4.1-4.5所示。

(1) 员工表(emp)如表4.1所示。

4.1员工(emp)

名称

类型

是否为空

默认值

属性

备注

emp_id

int(11)

Not null

AUTO_INCREMENT

员工ID

emp_name

Varchar(50)

null

员工姓名

emp_sex

char (1)

null

员工性别

emp_status

char (1)

null

员工状态

emp_idcode

Varchar(18)

null

员工身份证号码(18位)

emp_telephone

varchar(13)

null

员工手机号

emp_address_p

varchar(50)

null

员工地址(省份)

emp_address_c

varchar(50)

null

员工地址(市)

emp_type

char(1)

null

员工类型

emp_password

varchar(50)

null

员工z登录密码

emp_leader_id

varchar(50)

null

领导人ID

 

(2) 员工等级表(emp_grade)如表4.2所示。

4.2员工等级表(emp_grade)

名称

类型

是否为空

默认值

属性

备注

emp_grade_id

int(11)

Not null

AUTO_INCREMENT

员工等级ID

emp_id

int(11)

Not null

员工ID

emp_grade_a

char(1)

null

员工等级A(A:高级;B:中级;C:低级)

emp_grade_b

char(1)

null

员工等级B

emp_grade_ut

Varchar(50)

null

员工等级更新时间(yyyy-MM-dd)

 (3) 员工基本薪资(emp_salary)如表4.3所示。

4.3员工基本薪资(emp_salary)

名称

类型

是否为空

默认值

属性

备注

emp_salary_id

int(11)

Not null

员工薪资表ID

emp_id

int(11)

null

员工ID

emp_salary

double(11,2)

null

员工基本薪资

 (4) 员工的工作时表(emp_work_time)如表4.4所示。

4.4员工的工作时表(emp_work_time)

名称

类型

是否为空

默认值

属性

备注

emp_work_time

int(11)

Not null

工作时间ID

emp_id

int(11)

null

员工ID

wrok_date_y

varchar(4)

null

工作时间

work_date_m

varchar(2)

null

工作时间

work_time

double(6,1)

null

员工工作时间

 (5) 请假表(leave_time)如表4.5所示。

 

4.5请假表(leave_time)

名称

类型

是否为空

默认值

属性

备注

leave_time_id

int(11)

Not null

unique

请假表ID

emp_id

int(11)

null

员工ID

leave_time_date_y

varchar(4)

null

请假时间(年)

leave_time_date_m

varchar(2)

null

请假时间(月)

leave_times

double(10,2)

null

请假小时

leave_des

varchar(1024)

null

请假理由

status

varchar(1)

null

未发货

是否有效

end_time

varchar(50)

null

结束时间

start_time

varchar(50)

null

起始时间

process_id

varchar(50)

null

流程ID

4.4 系统详细设计

4.4.1 登录模块设计

用户登录,用户可以对自己的信息进行查看、修改,查看自己的流程。整个过程如图4.2所示。

 

图4.2用户程序流程图

4.4.2 HR新增用户、员工离职、升职模块设计

新增用户模板主要是HR完成用户的新增过程。

用户首先登录网站,验证是否注册,若未注册需要HR新增该用户,若已注册便可以登录,如果该用户的角色是HR,那么该用户就可以看到用户管理的页面,并可以进行新增用户的操作。

在用户新增界面中,HR可以填写需要新增用户的基本信息与该用户的领导。

整个过程如图4.3所示。

 

图4.3 HR新增用户流程图

员工个人可以进入系统,进入流程管理的界面,并提交离职流程,提交给员工对应的领导,整个过程如图4.4所示。

 

图4.4员工离职流程图

员工个人可以进入系统,进入流程管理的界面,并提交升职流程,提交给员工对应的领导,整个流程如图4.5所示。

 

图4.5员工升职流程图

4.4.3 员工工时填写模块设计

员工个人可以进入系统,并进入工时填写页面,可能填写本月的工时信息,并提交给领导进行审核。具体过程如图4.6所示。

 

4.6员工工时填写流程图

4.4.4 员工请假、加班模块设计

员工个人可以进入系统,进入流程管理的界面,并提交请假流程,提交给员工对应的领导,整个流程如图4.7所示。

 

图4.7员工请假流程图

员工个人可以进入系统,进入流程管理的界面,并提交加班流程,提交给员工对应的领导,整个流程如图4.8所示。

 

图4.8员工加班流程图

5 系统实现

5.1 登录界面及主界面模块的实现

(1)图形界面

系统登录界面如图5.1所示。

 

5.1系统登录界面

 

系统主界面如图5.2所示。

 

5.2主界面

(2)设计说明

运行本系统将展示出图5.1所示的界面,即登录界面。使用者输入合法的用户名和密码进行登录,会员与管理员登陆需要输入用户名及密码,然后将这二个参数传到后台进行处理,同时去数据库中进行查询匹配看是否有匹配的信息然后将信息返回回去,如果有则进入系统,如果没有则提示管理员您输入的用户名或密码失败,请输入正确的信息进行登陆,将展示出图5.2所示的界面。

主要方法代码如下:

@RequestMapping(value = "/doLogin")

@ResponseBody

public ResultDto doLogin(Model model, @RequestBody EmpDto empDto, ServletResponse response, ServletRequest request) throws IOException {

// 获得在下面代码中要用的request,response,session对象

HttpServletRequest servletRequest = (HttpServletRequest) request;

HttpSession session = servletRequest.getSession();

boolean checkOutLogin = iEmpService.checkOutLogin(empDto);

Map<String, String> errorMap = new HashMap<String, String>();

String error = "";

try {

SecurityContext.login(empDto.getEmpName(),empDto.getEmpPassWord(), false);

} catch (AccountException e) {

error = e.getMessage();

errorMap.put("userName", error);

return ResultDtoFactory.toNack(error, errorMap);

} catch (CredentialsException e) {

error = "密码错误,还剩" + 5 + "次机会";

errorMap.put("password", error);

return ResultDtoFactory.toNack(error, errorMap);

} catch (AuthenticationException e) {

SysParaDto sysParaDto = new SysParaDto();

sysParaDto.setParaName("lockTime");

List<SysParaDto> listLock = sysParaService.findParaSelect(sysParaDto);

String para;

int paraInt = 10;

if (StringUtil.isListNotNull(listLock)) {

para = listLock.get(0).getPara();

paraInt = Integer.parseInt(para);

}

sysParaDto.setParaName("LoginFailureCount");

List<SysParaDto> listLogin = sysParaService.findParaSelect(sysParaDto);

String failString;

int failInt = 5;

if (StringUtil.isListNotNull(listLogin)) {

failString = listLogin.get(0).getPara();

failInt = Integer.parseInt(failString);

}

error = "密码已输错" + failInt + ",该账户已被冻结,请在" + paraInt + "分钟后尝试登录";

errorMap.put("userName", error);

return ResultDtoFactory.toNack(error, errorMap);

}

Subject subject = SecurityUtils.getSubject();

if (!checkOutLogin) {

ResultDto resultDto = ResultDtoFactory.toNack("登录失败", "");

return resultDto;

} else {

empDto = iEmpService.findEmpDtoByEmpName(empDto.getEmpName());

session.setAttribute("empDto", empDto);

model.addAttribute("empName", empDto.getEmpName());

ResultDto resultDto = ResultDtoFactory.toAck("登录成功", "/user/openFirstPage");

return resultDto;

}

}

5.2 员工管理模块的实现

(1) 图形界面

员工入职、离职、升职。当员工进入本系统后,进行如下操作将展示出图5.3员工入职、图5.4员工离职、5.5员工升职。

 

5.3员工入职

 

5.4员工离职

 

5.5员工升职

(2) 设计说明

员工管理主要包括员工入职、离职、升职。员工可根据图5.3所展示的界面进行员工入职的查询、添加和删除操作。根据图5.4所展示的界面进行员工升职的查询、添加和删除操作。根据图5.5所展示的界面进行员工升职的查询、添加和删除操作。主要方法实现代码如下:

@RequestMapping(value = "/openEmpPage")

public String openEmpPage(Model model) {

try {

List<EmpDto> empDtos = iEmpService.findAllEmp(new EmpDto());

model.addAttribute("empDtoList", empDtos);

model.addAttribute("menuArray", new String[]{"员工管理","员工入职"});

logger.info("dnal");

} catch (Exception e) {

logger.error("错误");

}

return "page/user/empList";

}

@RequestMapping(value = "/openAddEmpPage")

public String openAddEmpPage(Model model) {

List<EmpDto> empDtoList = empDao.findAllLeader();

model.addAttribute("empDtoList", empDtoList);

return "page/user/addEmp";

}

@RequestMapping(value = "/findAllEmp", method = RequestMethod.POST)

@ResponseBody

public ResultDto findAllEmp(@RequestBody EmpDto empDto) {

try {

List<EmpDto> empDtos = iEmpService.findAllEmp(empDto);

for(EmpDto empDto2:empDtos){

if(StringUtil.isNotNull(empDto2.getEmpSex())){

empDto2.setEmpSex(EnumHelper.translate(EmpSexEnum.class, empDto2.getEmpSex()).getText());

}

}

logger.info("成功");

return ResultDtoFactory.toAck("成功", empDtos);

} catch (Exception e) {

logger.error("错误");

e.printStackTrace();

return ResultDtoFactory.toNack("NACK");

}

}

public List<EmpDto> findAllEmp(EmpDto empDto) {

List<EmpDto> empList = empDtoMapper.findAllEmp(empDto);

return empList;

}

<select id="findAllEmp" parameterType="com.fanghu.dto.user.EmpDto" resultMap="BaseResultMap">

   SELECT <include refid="Base_Column_List" />

   FROM emp where 1=1

   <if test="empName != ‘‘ and empName != null">

   and emp_name like ‘%${empName}%‘

   </if>

   <if test="empSex != ‘‘ and empSex != null"> and emp_sex = #{empSex}

   </if>

   <if test="empIdcode != ‘‘ and empIdcode != null">

   and emp_idcode like ‘%${empIdcode}%‘

   </if>

   <if test="empTelephone != ‘‘ and empTelephone != null">

   and emp_telephone like ‘%${empTelephone}%‘

   </if>

   <if test="empAddressP != ‘‘ and empAddressP != null">

   and emp_address_p = #{empAddressP}

   </if>

   <if test="empAddressC != ‘‘ and empAddressC != null">

   and emp_address_c = #{empAddressC}

   </if>

   order by emp_id

</select>

5.3 工时填写模块的实现

(1) 图形界面

工时填写进行填写工时,查询与删除。当员工进入本系统后,进行如下操作,将展示出图5.6工时填写。

 

5.6工时填写

(2) 设计说明

工时填写进行填写工时,查询与删除。当员工进入本系统后,对工时信息进行管理,将展示出图5.6工时填写。

主要方法的实现代码如下:

@RequestMapping(value="gbin1schedule")

public String gbin1schedule(Model model){

// return "devappwithfullcanlendar/gbin1schedule";

//领导

EmpDto empDto = iEmpService.findEmpDtoByEmpId(WebUtil.getSessionUser().getEmpLeaderId());

model.addAttribute("leader", empDto);

return "devappwithfullcanlendar/time";

}

@RequestMapping(value="findWorkTime")

@ResponseBody

public ResultDto findWorkTime(){

Map<String,String> map = new HashMap<String,String>();

map.put("empId", WebUtil.getSessionUserId()+"");

String month = DateUtil.getMonth(new Date())+"";

if(month.length()==1){

month = "0"+month;

}

map.put("month", month);

List<WorkTimeDto> workTimeDtoList = iWorkTimeService.findWorkTime_M(map);

if(StringUtil.isNull(workTimeDtoList) || workTimeDtoList.size()<=0){

return ResultDtoFactory.toNack("没有数据", workTimeDtoList);

}

return ResultDtoFactory.toAck("存在数据", workTimeDtoList);

}

@RequestMapping(value="saveWorkTime")

@ResponseBody

public ResultDto saveWorkTime(@RequestBody WorkTimeDto workTimeDto){

try {

iWorkTimeService.saveWorkTime(workTimeDto);

return ResultDtoFactory.toAck("保存成功");

} catch (Exception e) {

return ResultDtoFactory.toNack("保存失败");

}

}

5.4 工时管理模块的实现

(1) 图形界面

工时管理进行增加,修改,删除。当员工进入本系统后,进行如下操作,将展示出图5.7员工加班管理、图5.8加班申请、图5.9领导审核加班信息。

 

5.7员工加班管理

 

5.8加班申请

 

5.9领导审核加班信息

(2) 设计说明

加班管理进行增加,审核,删除。当员工进入本系统后,对加班信息进行管理,将展示出图5.7员工加班管理、图5.8加班申请、图5.9领导审核加班信息。

主要方法的实现代码如下:

@RequestMapping(value="doEmpOutInfo")

@ResponseBody

public ResultDto doEmpOutInfo(@RequestBody ProcessDto processDto){

try {

iProcessService.addEmpOutInfo(processDto);

return ResultDtoFactory.toAck("新增流程成功");

} catch (Exception e) {

e.printStackTrace();

return ResultDtoFactory.toNack("新增流程失败");

}

}

@RequestMapping(value="checkProcess/{id}")

public String checkProcess(@PathVariable String id , Model model){

ProcessDto processDto = iProcessService.getProcessById(id);

EmpDto empDto = iEmpService.findEmpDtoByEmpId(processDto.getProcessTo()+"");

processDto.setProcessToName(empDto.getEmpName());

empDto = iEmpService.findEmpDtoByEmpId(processDto.getEmpId()+"");

processDto.setEmpName(empDto.getEmpName());

processDto.setProcessStatusStr(EnumHelper.translate(ProcessStatusEumn.class, processDto.getProcessStatus()).getText());

model.addAttribute("processDetail", processDto);

if("A".equals(processDto.getProcessType())

|| "B".equals(processDto.getProcessType())){

switch (processDto.getProcessType()) {

case "A":

LeaveTimeDto leaveTimeDto = leaveTimeDtoMapper.selectByProcessId(processDto.getProcessId());

model.addAttribute("leaveTimeDto", leaveTimeDto);

break;

case "B":

OverTimeDto overTimeDto = overTimeDtoMapper.selectByProcessId(processDto.getProcessId());

model.addAttribute("overTimeDto", overTimeDto);

break;

}

}

return "page/process/checkProcess";

}

@RequestMapping(value="passProcess")

@ResponseBody

public ResultDto passProcess(@RequestParam String processId , Model model){

iProcessService.updateProcessStatus(processId);

return ResultDtoFactory.toAck("通过流程");

}

@RequestMapping(value="saveProcess")

@ResponseBody

public ResultDto saveProcess(@RequestBody ProcessDto process,Model model){

try {

iProcessService.saveReturnProcess(process);

return ResultDtoFactory.toAck("保存成功");

} catch (Exception e) {

e.getStackTrace();

return ResultDtoFactory.toNack("保存失败");

}

}

@RequestMapping(value="selectProcess")

@ResponseBody

public ResultDto selectProcess(@RequestBody ProcessDto processDto, Model model){

List<ProcessDto> resultDto = iProcessService.findProcessByEmp(processDto);

if(StringUtil.isNull(resultDto) || resultDto.size()<=0){

return ResultDtoFactory.toNack("没有数据", resultDto);

}

for(ProcessDto d:resultDto){

d.setProcessStatus(EnumHelper.translate(ProcessStatusEumn.class, d.getProcessStatus()).getText());

EmpDto empDto = empDao.selectByPrimaryKey(d.getEmpId());

d.setEmpName(empDto.getEmpName());

empDto = empDao.selectByPrimaryKey(d.getProcessTo());

d.setProcessToName(empDto.getEmpName());

}

return ResultDtoFactory.toAck("存在数据", resultDto);

}

6系统测试

6.1登录模块的测试

1测试问题单

项目编号:

测试类别:集成测试

序号:

产品标识

GradProject

产品中文标识

基于JavaEE的网新恒天人事管理系统的设计与实现

第几次测试

1

测试工程师

胡芳

测试模块/功能/性能

系统登录

测试记录单

 

测试时间

2016 / 5 / 1

问题记录

序号

故障现象

级别

处理人

处理时间

处理说明

1

没有输入密码的情况也能进入系统,如图图6.1、图6.2所示

胡芳

2016 / 5 / 1

已处理

 

6.1 不输入密码

 

 

6.2 登录此系统

2问题严重度描述如 6.1所示:

6.1问题严重度描述表

级别

描述

如使系统崩溃,功能无法实现或实现错误等

如界面中的错误,性能不优化,校验不严格等

如提示信息不明确,操作不方便,焦点跳转错误等

6.2员工管理模块的测试

1测试问题单

项目编号:

测试类别:集成测试

序号:

产品标识

GradProject

产品中文标识

基于JavaEE的网新恒天人事管理系统的设计与实现

第几次测试

1

测试工程师

Xxx

测试模块/功能/性能

员工管理

测试记录单

 

测试时间

2016/5/1

问题记录

序号

故障现象

级别

处理人

处理时间

处理说明

1

更新表数据后无法启动项目,如图6.3 所示

胡芳

2016/5/1

已处理

 

6.3 新增员工后启动项目

2问题严重度描述如 6.2所示:

6.2问题严重度描述表

级别

描述

如使系统崩溃,功能无法实现或实现错误等

如界面中的错误,性能不优化,校验不严格等

如提示信息不明确,操作不方便,焦点跳转错误等

6.3工时管理模块的测试

1测试问题单

项目编号:

测试类别:集成测试

序号:

产品标识

GradProject

产品中文标识

基于JavaEE的网新恒天人事管理系统的设计与实现

第几次测试

1

测试工程师

Xxx

测试模块/功能/性能

工时管理

测试记录单

 

测试时间

2016/5/1

问题记录

序号

故障现象

级别

处理人

处理时间

处理说明

1

无法正确填写工时,如图6.4 所示

胡芳

2016/5/1

已处理

 

6.4 一天可以填写多个工时

2问题严重度描述如 6.3所示:

6.3问题严重度描述表

级别

描述

如使系统崩溃,功能无法实现或实现错误等

如界面中的错误,性能不优化,校验不严格等

如提示信息不明确,操作不方便,焦点跳转错误等

6.4测试总结

本次测试主要是对本系统易出错及易忽略的问题来进行测试,测试的项目主要包括了登录模块、员工管理模块、工时管理模块等方面。在此次测试中,我发现有些错误完全是可以避免的,都是由于自己粗心大意,比如多写个字母什么的,导致系统运行不了,以后这方面自己要更加注意才是。


总结

 

经过近三个月的毕业课题的设计,我从其中学到许多在真正实际的软件开发过程中才能够涉及到的各种各样简单的也有复杂的问题。

 

在这次毕业课题的设计过程中,我不仅仅只是单纯的拓宽了我的专业知识面,更重要的是它提高了我各方面的能力。当我在进行程序设计时,忽然涉及到了我从来都不了解的问题,甚至是根本就没有听说过的新概念或者是新技术,这时我必须去图书馆或是一些相关的电子书店查找与这个问题相关的图书资料,也会通过国际互联网查找我所需要的内容。在这一过程中,慢慢的锻炼了我在多如大海的各种类型的资料中查询我所需要的材料的能力。在以前学习课程的时间里,我很少会这样体验如何去查找自己需要的资料,如今才知道在浩瀚的书海里要想找到我真正需要的东西也并非是一件易事。 

 

本系统的设计是我真正独自负责了一个实际项目从需求分析、设计到系统完成测试、编写论文的整个软件开发过程;但是由于毕业设计时间较短,该系统还有许多不尽如人意的地方,比如操作不够人性化,出错处理不够等多方面问题。这些都有待进一步改善。 

 

在毕业课题的设计过程中,我得到了系里许多老师的关心和支持,还有同学们的大力帮助,在此,我要特别感谢在我的整个课题设计中给予我悉心指导的指导老师——xxx老师。最后,对所有关心过我的老师及同学们表示衷心的感谢!

 

 

 

 

 

 

 

 

 

 

 

 

 

参考文献

 

[1] 杜波依斯.MySQL技术内幕(4版) [M].北京:人民邮电出版社,2011.5:15-20.

 

[2] 沈泽刚.java web编程技术(第2版)[M].北京:清华大学出版社2015.3:33-35.

 

[3] 明日科技Java从入门到精通(第3版)[M].北京:人民邮电出版社2012.3:30-38.

 

[4] 弗兰纳根javascript权威指南(第6版)[M].北京:机械工业出版社2012.10:20-22.

 

[5] 王飞飞MySQL数据库应用从入门到精通[M].北京:中国铁道出版社2014.12:45-48.

 

[6] 梁勇Java语言程序设计[M].北京:机械工业出版社2011.1:15-21.

 

[7] BYVoid.Node.js开发指南[M].北京:人民邮电出版社2012.8:25-28.

 

[8] Clinton Begin.ibatis实战[M].北京:人民邮电出版社2008.7:30-33. [9] 约翰逊. Spring框架高级编程[M]. 北京:机械工业出版社, 2006.4:50-52.

 

以上是关于基于JavaEE的网新恒天人事管理系统的设计与实现的主要内容,如果未能解决你的问题,请参考以下文章

基于JavaEE的jsp企业人事管理系统_JSP网站设计_SqlServer数据库设计

Scrum可以和CMMI“在一起”

基于Spring Boot+ Vue的前后端分离的人事管理系统的设计与实现

基于Spring Boot+ Vue的前后端分离的人事管理系统的设计与实现

网盘系统|基于SpringBoot的网盘系统的设计与实现

网盘系统|基于SpringBoot的网盘系统的设计与实现