1、人事档案管理系统设计与实现 工资管理模块设计与实现 摘 要:人事管理系统是一个企业单位不可缺少的部分,它的内容对于企业的决策者和管理者来说都至关重要。随着计算机科学技术的飞速发展,计算机已被广泛运用在各个行业和领域。在竞争日益激烈的社会经济时代,人力资源管理的技术需要不断提升,才能保证企业立于不败之地。因此,利用计算机实现企业的人事管理业势在必行。本系统结合企业管理的现状针对企业管理中各项复杂程序,经过分析和设计,设计出一款适合中小型企业的人事管理系统,基本上能满足现代企业对人事管理的需求。关键词:数据库;人事管理系统;MyEclipse8.6Abstract:The personnel ma
2、nagement system is an enterprise unit essential part, its content are crucial for corporate decision makers and managers, so the personnel management system should can provide users with sufficient information and quick inquiry method.With the rapid development of computer science and technology, th
3、e product of the era of knowledge economy, the computer has been widely used in various industries and fields. the increasingly competitive society economy, as an important content in enterprise management, human resource management of technology needs to improve, to ensure that enterprises in an im
4、pregnable position.Therefore, using computer to realize enterprise personnel management is imperative.This system combined with the present situation of the enterprise management aiming at the complex procedures in enterprise management, through the analysis and design, designed a suitable for small
5、 and medium-sized enterprise personnel management system, can basically meet the needs of modern enterprise of personnel management.Key words:Database;The personnel management system;MyEclipse8.611 引言1.1 人事管理系统介绍 在计划经济时代,传统用人制度忽视人事管理的开发和管理问题,缺乏人事管理的理念和认识,忽视了人才的资源性,整体性等特征。好的人事管理系统能够促进人事管理的正规化,帮助企业提高管
6、理实效,帮助企业降低管理成本。本项目小组就人事管理系统中的基本功能加以开发,集成功企业先进的人力资源管理理念、人力资源管理实践、人力资源信息化系统建设的经验,以信息技术实现对企业人力资源信息的高度集成化管理,为中国企业使用的人力资源管理解决方案。核心价值在于将人力资源工作者从繁重的日常琐碎事务中解放出来,将更多地精力用于企业的人力资源职能管理和管理决策,保持企业的持续高效运营。 集中记录、监测和分析所有劳动力的技能和资格,提供决策分析。提高企业整体的科技含量与管理效率,加快企业的信息化建设。1.2 开发背景 软件名称:人事管理系统 软件开发者:邱清萍项目开发小组 软件使用者:企业 开发工具:M
7、yEclipse8.6 数据库:MYSQL 本文主要论述人事管理系统中的员工工资信息管理部分的设计,其余部分由本小组其它成员负责。1.3 定义 外键:关系键是关系数据库的重要组成部分。关系键是一个表中的一个或几个属性,用来标识该表的每一行或与另一个表产生联系。 主键:数据库表中的关键域,值互不相同。事物流:数据进入模块后可能会有多种路径进行处理。流程图:使用图形表示算法的思路是一种极好的方法,流程图可以给我们清楚的展现出一些复杂的数据,让我们分析或观看起来更加清楚明了。2 可行性分析2.1 技术可行性分析 本系统是基于数据库的管理和查询的系统,现在硬件、软件的性能指标和开发环境等各项条件都符合
8、我们开发系统的要求,因此开发出此系统的重要因数是我们掌握技术的熟练程度,以及我们对目标系统的了解程度。本系统开发设计中用到的技术因素有:a. JAVA来发技术,本小组中若干成员会使用JAVA编程呢。b. 数据库技术,本小组多名成员熟练掌握ORACLE数据库的使用。c. 三大框架技术。d. JAVA WEB 页面设计技术,本小组有一名成员在页面设计方面很有天赋及能力。2.2 社会可行性分析随着计算机的发展与普及,互联网的扩展和网络技术的不断提高,用信息系统管理人事在实际运用中越来越受到企业的欢迎,并且在实际企业活动中表现除了巨大的经济价值。目前已有许多的企业成功地开发人事管理系统的先例。社会也需
9、要人事管理的现代化和信息化,因此开发出一项人事管理系统非常具有社会可行性。2.3 资源可行性分析2.3.1 软件资源软件资源的可行性分析主要考虑一下几点是否满足用户的需求:操作系统的选择应用软件包的选择高级编程语言的选择2.3.2 硬件资源硬件资源主要包括一下两个方面:系统开发人员在管理系统开发过程中所需要的计算机设备及与其有关的外部设备。管理信息系统开发成功投入使用后,使用单位所应具备的计算机设备及其外围设备。对硬件资源进行可行性分析时主要考虑计算机的主机内存、类型、功能、联网能力、安全保护措施以及输入/输出设备。3 需求分析3.1 功能需求 3.1.1 实现功能需求普通员工:查询自身所有的
10、工资信息。管理员以及经理:查看所有员工的工资信息、为新入职员工设置基本工资、每月取得员工实际应得工资、更改员工工资信息3.1.2 详细功能需求 对于每一类功能或者有时对于每一个功能,需要具体描述其输入、加工和输出的需求。由四个部分组成:a 引言描述的是功能要达到的目标、所彩的方法和技术,还应清楚说明功能意图的由来和背景。b 输入1) 详细描述该功能的所有输入数据,如:输入源、数量、度量单位、时间设定、有效输入范围(包括精度和公差);2) 操作员控制细节的需求。其中有名字、操作员活动的描述、控制台或操作员的位置。例如:当打印检查时,要求操作员进行格式调整;3) 指明引用接口说明或接口控制文件的参
11、考资料。c 加工定义输入数据、中间参数,以获得预期输出结果的全部操作。它包括如下的说明:1) 输入数据的有效性检查;2) 操作的顺序,包括事件的时间设定;3) 响应,例如,溢出、通信故障、错误处理等;4) 受操作影响的参数;5) 降级运行的要求;6) 用于把系统输入变换成相应输出的任何方法(方程式、数学算法、逻辑操作等);7) 输出数据的有效性检查。d 输出1) 详细描述该功能所有输出数据,例如:输出目的地、数量、度量单位、时间关系、有效输出的范围(包括精度和公差)、非法值的处理、出错信息;2) 有关接口说明或接口控制文件的参考资料。此外,对着重于输入输出行为的系统来说,需求说明应指定所有有意
12、义的输入、输出对及其序列。当一个系统要求记忆它的状态时,需要这个序列,使得它可以根据本次输入和以前的状态作出响应。也就是说,这种情况犹如有限状态机。 3.2 性能需求及时性和准确性:本功能是为全体员工查询自己的工资信息而设计的,因此必须具有及时以及准确的性能。安全性:普通员工对自己的工资信息只能查询不能进行编辑,保证了数据的安全性。保密性:特定的人对员工工资信息才有管理的功能,普通的职工只能是查询自己的工资信息,而不能进行编辑操作,这保证了数据的安全性。并且管理员的每一只能对某一个员工的工资进行操作管理,这样避免了操作失误给数据库信息带来重大影响。可维护性:工资信息管理具有很大量的进化空间,可
13、以在相当长的时间内满足企业对程序功能的改善和增加的需求。4 数据库设计4.1 数据库建表 表4.1 薪资信息表(salaryness)列名注释主键外键类型id编码是否intzgname姓名否否varcharaccountname工号否否varcharbasicwage基本工资否否Float表4.2 工资单信息表(wagebill)列名注释主键外键类型id编码是否intzgname姓名否否varcharaccountname工号否否varcharnianyue年度否否varcharbasicwage基本工资否否Floatkqwage全勤否否Floatscorewage绩效否否Floatsheba
14、o社保否否Floattotalwage总工资否否Floatcreatetime出单时间否否DateTimedes说明否否Textcreator出单人否否varchar4.2 数据库建表实现4.2.1 基本工资表创建CREATE TABLE salaryness ( id int(11) NOT NULL auto_increment, accountname varchar(255) default NULL, basicwage double default NULL, zgname varchar(255) default NULL, PRIMARY KEY (id) ENGINE=Inn
15、oDB AUTO_INCREMENT=4 DEFAULT CHARSET=gb2312;4.2.2 工资单信息表创建CREATE TABLE wagebill ( id int(11) NOT NULL auto_increment, accountname varchar(255) default NULL, basicwage double default NULL, createtime datetime default NULL, creator varchar(255) default NULL, des varchar(255) default NULL, kqwage doubl
16、e default NULL, nianyue varchar(255) default NULL, scorewage double default NULL, shebao double default NULL, totalwage double default NULL, zgname varchar(255) default NULL, PRIMARY KEY (id) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=gb2312;5 功能实现5.1 实现思想某一普通员工登录后,系统可从登录界面得到当前员工的员职工号,员工在进行查询自己工
17、资信息时,系统将从登陆时得到的职工号作为查询条件从而传给内部参数,从数据库的工资信息表中取出相应工资信息,输出到屏幕,员工能够看到自己的工资信息情况。管理员登录系统后,具有查询所有员工工资信息的权限。可以通过输入查询条件查出符合条件的员工的工资情况。如查询条件输入正确,则从数据库中查出所有符合条件的数据并输出到屏幕上;若输入查询条件不正确,则提示错误信息,并进行相关处理。管理员登录系统后可以通过员工的职工号更改职工的工资信息,也可每月生成职工的工资账单,以及为新员工录入其基本工资信息。5.2 实现过程5.2.1 输入项管理员查询其它员工工资信息所必须的条件:普通员工只需用登录系统,无需输入查询
18、条件便可直接查询出自己的工资情况,管理员登录系统后需只输入所要查询的员工的员工号。5.2.2 输出项 普通员工查询自己工资信息,将输出本来的工资信息,包括:表5.1 工资单信息表(wagebill)姓名工号年度月份基本工资全勤绩效社保总工资出单时间说明出单人管理员查询员工工资,输入查询条件,输出符合查询条件的员工的工资信息,包括:表5.2 工资单信息表(wagebill)姓名工号年度月份基本工资全勤绩效社保总工资出单时间说明出单人职工工资录入:为每一个新入职的员工录入其基本工资。 职工工资更改:职工升职或者降职后对员工基本工资进行相应的更改调整。包括以下项:表5.3 工资单信息表(wagebi
19、ll)姓名工号年度月份基本工资全勤绩效社保总工资出单时间说明出单人5.3 流程逻辑5.3.1 管理员查询员工工资信息图5-1 查询员工工资流程图5.3.2 管理员管理员工工资信息图5-2 管理员工工资流程图5.3.3 系统结构设计图5-3 系统结构图图5-4 数据库操作图 5.4 算法普通员工:系统根据员工登录时系统得到的员工的职工号从数据库中查询出职工工资信息。管理员:系统根据管理员输入的查询条件在数据库中查找与之匹配的员工,输出对应员工的工资信息。员工工资=基本工资+附加工资(加班等)-扣掉工资(考勤+扣税)每月工资信息和当月的考勤信息息息相关,应处理好两者之间的关联,通过考勤信息表合理计
20、算出员工当月工资金额。5.5 实现代码5.5.1 基本工资录入及查询package com.daowen.action;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.hibernate.Session;import org.hibernate.Transaction;import org.hibernate.SQLQuery;import org.hibernat
21、e.Query;import com.daowen.dal.*;import com.daowen.bll.*;import com.daowen.entity.*;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;import java.text.MessageFormat;impor
22、t com.daowen.util.PagerMetal;/* * * author daowen date:2014-12-05 薪资控制 * */public class SalarynessAction extends PageActionBase Overridepublic void onLoad() String actiontype = request.getParameter(actiontype);System.out.println(actiontype= + actiontype);if (actiontype = null)return;public void dele
23、te() String id = request.getParameter(id);DALBase.delete(salaryness, where id= + id);binding();String forwardurl = request.getParameter(forwardurl);/ 验证错误urlString errorurl = request.getParameter(errorurl);String zgname = request.getParameter(zgname);String accountname = request.getParameter(account
24、name);String basicwage = request.getParameter(basicwage);SimpleDateFormat sdfsalaryness = new SimpleDateFormat(yyyy-MM-dd);Salaryness salaryness = new Salaryness();salaryness.setZgname(zgname = null ? : zgname);salaryness.setAccountname(accountname = null ? : accountname);salaryness.setBasicwage(bas
25、icwage = null ? (double) 0 : new Double(basicwage);DALBase.save(salaryness);if (forwardurl = null) forwardurl = /admin/salarynessmanager.do?actiontype=get;try response.sendRedirect(SystemParam.getSiteRoot() + forwardurl); catch (Exception e) e.printStackTrace();String forwardurl = request.getParamet
26、er(forwardurl);String id = request.getParameter(id);if (id = null)return;Salaryness salaryness = (Salaryness) DALBase.load(Salaryness.class,new Integer(id);if (salaryness = null)return;String zgname = request.getParameter(zgname);String accountname = request.getParameter(accountname);String basicwag
27、e = request.getParameter(basicwage);SimpleDateFormat sdfsalaryness = new SimpleDateFormat(yyyy-MM-dd);salaryness.setZgname(zgname);salaryness.setAccountname(accountname);salaryness.setBasicwage(basicwage = null ? (double) 0 : new Double(basicwage);DALBase.update(salaryness);if (forwardurl = null) fo
28、rwardurl = /admin/salarynessmanager.do?actiontype=get;try response.sendRedirect(SystemParam.getSiteRoot() + forwardurl); catch (Exception e) e.printStackTrace();public void load() /String id = request.getParameter(id);String actiontype = save;String zyid=request.getParameter(zyid);if(zyid!=null)Zhiy
29、uan zhiyuan = (Zhiyuan) DALBase.load(zhiyuan, where id=+ zyid);if (zhiyuan != null) request.setAttribute(zhiyuan, zhiyuan); dispatchParams(request, response); Salaryness salaryness = (Salaryness) DALBase.load(salaryness,where accountname= +zhiyuan.getAccountname()+ ); if (salaryness != null) request
30、.setAttribute(salaryness, salaryness);actiontype = update;request.setAttribute(id, salaryness.getId() request.setAttribute(actiontype, actiontype); String forwardurl = request.getParameter(forwardurl);System.out.println(forwardurl= + forwardurl);if (forwardurl = null) forwardurl = /admin/salarynessa
31、dd.jsp;try request.getRequestDispatcher(forwardurl).forward(request, response); catch (ServletException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();public void binding() String filter = where 1=1 ;String zgname =
32、 request.getParameter(zgname);if (zgname != null)filter += and zgname like % + zgname + % ;/int pageindex = 1;int pagesize = 10;/ 获取当前分页String currentpageindex = request.getParameter(currentpageindex);/ 当前页面尺寸String currentpagesize = request.getParameter(pagesize);/ 设置当前页if (currentpageindex != null
33、)pageindex = new Integer(currentpageindex);/ 设置当前页尺寸if (currentpagesize != null)pagesize = new Integer(currentpagesize);List listsalaryness = DALBase.getPageEnity(salaryness,filter, pageindex, pagesize);int recordscount = DALBase.getRecordCount(salaryness,filter = null ? : filter);request.setAttribu
34、te(listsalaryness, listsalaryness);PagerMetal pm = new PagerMetal(recordscount);/ 设置尺寸pm.setPagesize(pagesize);/ 设置当前显示页pm.setCurpageindex(pageindex);/ 设置分页信息request.setAttribute(pagermetal, pm);/ 分发请求参数dispatchParams(request, response);String forwardurl = request.getParameter(forwardurl);System.out
35、.println(forwardurl= + forwardurl);if (forwardurl = null) forwardurl = /admin/salarynessmanager.jsp;try request.getRequestDispatcher(forwardurl).forward(request, response); catch (ServletException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IOException e) / TODO Auto-generated ca
36、tch blocke.printStackTrace();6 实现效果6.1 查看工资信息功能普通员工登陆后可查看自身的所有工资账单。管理员与财务部门人员登录系统后可查询所有员工基本工资信息以及所有工资账单信息。图6-1 查看员工基本工资图图6-2 查看员工工资单图6.2 管理工资信息 管理员以及财务部门员工登录后可设置员工基本工资以及生成员工每月工资账单。图6-3 录入新员工基本工资图图6-4 每月生成员工工资单图 7 限制条件系统根据职工号来区别当前登录的用户的角色,根据角色赋予其相应的权限。1. 普通员工对自身工资信息不具备编辑的权限,只能进行查看。2. 管理员以及财务部门人员具有查看所
37、有员工工资信息的权限。3. 管理员以及财务部门人员才具有管理员工工资信息的权限,包括更录入、改员工基本工资信息以及生成员工工资账单。8 存储分配 每日特定时间,主机把只读存储器上次日汇总的数据及本日增加的数据读入内存进行排序,将整理后的数据再写入只读存储器。程序运行开始,将所需数据从主机存储器读到分机内存,然后完成相应统计计算,计算结果不存入主机。9 系统测试 9.1 测试类型 9.1.1 功能测试对系统中的各个功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。9.1.2 单元测试 判断某个特定条件(或者场景下)某个特定函数的行为是否正常。9.2 测试方案9.2.1 工
38、资管理模块权限登录不同角色的用户,验证其工资信息管理权限,保证员工工资管理权限的设置正确,确保系统数据的安全性。9.2.2 工资管理模块工资信息操作为新入职员工录入基本工资信息时,信息录入完毕后应检查数据库中是否此记录,保证工资信息的完整录入。 更改员工的基本工资信息,在更改操作完成后检查数据中的相应记录是否被更改,确保数据的正确性和完整性。生成员工工资信息账单后判断计算员工实际工资计算是否准确、员工的工资账单新是否存入数据库以及员工工资信息是否显示正确。9.2.3 工资管理模块工资信息查询查询出员工工资信息后,在数据库中查询相关数据信息,确保员工工资信息显示正确、完整。9.2.4 测试用例及
39、结果。表9.1 测试用例表1用例编号操作描述数据期望结果实际结果测试状态1检查新建工资单页面信息。检查以下信息:姓名(不可编辑)工号(不可编辑)性别(不可编辑)年度 下拉框月份 下拉框基本工资(不可编辑)全勤奖 文本框绩效 文本框社保 文本框说明 文本框所有信息显示正确 所有信息显示正确PASS2设置年月份早于本月。输入有效的全勤奖、绩效、社保、说明,点击【提交】按钮。年度:1990月份:12全勤奖:10绩效:10社保:10说明:你好新建工资单失败。提示:此月工资单已生成,不能再次生成。新建工资单失败。提示:此月工资单已生成,不能再次生成。PASS3设置有效年月份。不输入全勤奖、输入有效的绩效
40、、社保、说明,点击【提交】按钮。年度:2015月份:2全勤奖:无绩效:10社保:10说明:你好新建工资单失败,提示请输入全勤奖。新建工资单失败,提示请输入全勤奖。PASS4设置有效年月份。输入全大于500的勤奖、输入有效的绩效、社保、说明,点击【提交】按钮。年度:2015月份:2全勤奖:1000绩效:10社保:10说明:你好新建工资单失败,提示全勤奖不能大于500。新建工资单失败,提示全勤奖不能大于500。PASS5设置有效年月份。输入有效的全勤奖、社保、说明,不输入绩效、点击【提交】按钮。年度:2015月份:2全勤奖:10绩效:社保:10说明:你好新建工资单失败,提示请输入绩效。新建工资单失
41、败,提示请输入绩效。PASS6设置有效年月份。输入大于500的绩效、输入有效的勤奖、绩效、社保、说明,点击【提交】按钮。年度:2015月份:2全勤奖:10绩效:1000社保:10说明:你好新建工资单失败,提示绩效不能大于500。绩效请全勤奖不能大于500。PASS7设置有效年月份。输入有效的全勤奖、绩效、说明,不输入社保点击【提交】按钮。年度:2015月份:2全勤奖:10绩效:100社保:说明:你好新建工资单失败,提示请输入社保。新建工资单失败,提示请输入社保。PASS8设置有效年月份。输入有效的绩效、全勤奖、说明输入大于500的社保、点击【提交】按钮。年度:2015月份:2全勤奖:10绩效:
42、100社保:1000说明:你好新建工资单失败,提示社保不能大于500。新建工资单失败,社保不能大于500。PASS9设置有效年月份。输入有效的绩效、全勤奖、社保,不输入说明,点击【提交】按钮。年度:2015月份:2全勤奖:10绩效:10社保:10说明:无新建工资单成功,调到查看账单信息页面。新建工资单成功,调到查看账单信息页面。PASS10设置有效年月份。输入有效的绩效、全勤奖、社保、说明,点击【提交】按钮。年度:2015月份:2全勤奖:10绩效:10社保:10说明:你好新建工资单成功,调到查看账单信息页面。新建工资单成功,调到查看账单信息页面。PASS表9.2 测试用例表2用例编号操作描述数据期望结果实际结果测试状态1不作任何输入,点击登录账号:空密码:空验证码:空提示请输入用户名和密码提示请输入用户名和密码PASS2输入账号,不输入密码,输入验证码,点击登录账号:admin密码:空验证码:1234提示输入密码不能为空提示输入密码不能为空PASS3不输入账号,输入密码,输入验证码,点击登录账号:空密码:admin验证码:1234提示输入用户名不能为空提示输入用户名不能为空PASS4输入已经存在的登录名和与之匹配的密码以及正确的验证码账号:admin密码:admin验证码:1234登录成