1、摘要随着企业规模的发展与扩大,员工数量与员工职位的增多将对员工假期管理带来一定的压力,假期的申请手续,假期类型的繁多以及假期的统计,这些都对管理员带来不便,传统的管理手段对大量的数据进行统计非常容易出错,这对企业的发展是不利的,因此必须采用信息化手段对员工假期进行管理,将假期管理规范化。员工假期管理系统能很好的帮助企业进入信息化,使员工的管理更加清晰,明了。关键词:管理信息系统,数据统计,数据库Abstract As the scale of business development and expansion of the number of staff positions and an i
2、ncrease in staff will leave the management of certain employees of the pressure, leave the application procedures for many types of holidays and holiday statistics, which are causing inconvenience to the administrator, traditional management by means of a large number of statistical data are very pr
3、one to error, which is detrimental to the development of enterprises, and therefore must be used by means of information technology to manage staff holidays, leave the management of standardization. Staff holidays can be a good management system to help enterprises to enter the information, so that
4、the management of employees is more clearly understood.Key words: management information systems, statistics, databases.目录1 绪论31.1 问题定义和内容简介31.2 研究背景和意义以及文档结构安排41.3 相关软件简介42 系统需求分析和模块设计42.1 系统功能需求分析52.1.1 假期类型维护52.1.2 员工固定假期维护52.1.3 员工假期申请52.1.4 员工假期查询审批52.1.5 假期报表52.2 系统功能模块设计62.3 数据库设计73 系统的设计与实现1
5、03.1 框架介绍103.1.1 Struts2103.1.2 Spring113.1.3 Ibatis113.2 框架搭建123.2.1 配置数据源123.2.2 建立dao层与service层133.2.3 注入dao层与service层143.2.4 配置ibatis映射文件143.3 用户登录143.4 员工假期申请153.5 管理员审批假期163.6 管理员查看假期信息174 系统功能简介和评价20结论20参考文献201 绪论1.1 问题定义和内容简介 在过去一段时间,很多假期管理都是用人工方法进行的,并且是用纸媒记录数据,这样很容易照成数据的丢失,而且查阅起来也很不方便。为了能让系
6、统跟上经济飞速发展的当前社会,运用软件管理将能使这一问题得到合理的解决。用软件管理假期不需要使用大量的纸媒,数据不易丢失,软件的使用方便,简单,操作性更好,对数据的查询十分快捷。运用软件对员工假期进行管理是当前社会的趋势。1.2 研究背景和意义以及文档结构安排 在现代企业中,信息管理工作将发挥越来越重要的作用。可以说,在企业的信息化管理工作中,计算机管理则成为标志着一种高科技、高效率和高水准的使用工具,它已经渗透到各行业各企业日常工作的许多方面,无论是自身还是其发挥的作用,都为企业的创新、发展以及经济效益的创造方面,做出了显著的贡献。 开发出一款理想的员工假期管理系统需要一个详细的计划安排,流
7、程的安排是这样:需求分析,概要设计,详细设计,编码,测试。 开发的过程中离不开文档,文档是进行开发的依据,在开发的每个阶段都要制定出合理可靠的文档,开发过程中严格按照文档进行作业。1.3 相关软件简介 本系使用oracle XE数据库软件,eclipse开发工具,svn版本控制工具,erwin建模工具,jdk6.0,tomcat5.5。2 系统需求分析和模块设计 所谓需求分析,是指对要解决的问题进行详细的分析,弄清楚问题的要求,包括需要输入什么数据,要得到什么结果,最后应输出什么。可以说,“需求分析”就是确定要计算机“做什么”。在软件工程中,需求分析指的是在建立一个新的或改变一个现存的电脑系统
8、时描写新系统的目的、范围、定义和功能时所要做的所有的工作。需求分析是软件工程中的一个关键过程。在这个过程中,系统分析员和软件工程师确定顾客的需要。只有在确定了这些需要后他们才能够分析和寻求新系统的解决方法。在软件工程的历史中,很长时间里人们一直认为需求分析是整个软件工程中最简单的一个步骤,但在过去十年中越来越多的人认识到它是整个过程中最关键的一个过程。假如在需求分析时分析者们未能正确地认识到顾客的需要的话,那么最后的软件实际上不可能达到顾客的需要,或者软件无法在规定的时间里完工。2.1 系统功能需求分析 该系统能完成员工假期的申请,审批及员工的假期维护和统计。 2.1.1 假期类型维护 完成假
9、期类型的定义,假期类型必须能标识是否受限(申请时检查)。假期类型包括:年假,事假,婚假,补休假,病假。 2.1.2 员工固定假期维护 查询员工的固定假期,新增假期类型数据,修改已存在假期数据,该功能由管理员使用。 2.1.3 员工假期申请 员工申请休假,如果是有限制的假期如年假,则需要检查申请的假期天数是否超过允许的天数,超过则申请不成功;申请成功则可用假期数减少相应天数。 2.1.4 员工假期查询审批 管理员查询假期申请单,批准或不批准,如果不批准,则员工可用假期数需要回补。 2.1.5 假期报表 按月统计有假员工各类假期的请假时长,每个员工一条记录,可存为EXCEL。2.2 系统功能模块设
10、计 所谓的模块化设计,简单地说就是程序的编写不是开始就逐条录入计算机语句和指令,而是首先用主程序、子程序、子过程等框架把软件的主要结构和流程描述出来,并定义和调试好各个框架之间的输入、输出链接关系。逐步求精的结果是得到一系列以功能块为单位的算法描述。以功能块为单位进行程序设计,实现其求解算法的方法称为模块化。模块化的目的是为了降低程序复杂度,使程序设计、调试和维护等操作简单化。 系统的大模块主要分为员工模块与管理员模块,但是功能模块又分有几大模块。开发小组对上述的需求进行集中讨论,按照结构化程序设计的要求得出模块图 2-1。图2-1 总的模块划分由于登录模块由其它小组负责,固本文不重点阐述。登
11、录模块可分为管理员模块与员工模块,根据以上模块与登录模块得到大致的流程图 2-2.如下员工假期申请模块主要是针对员工的,模块的主要功能有填写假期申请单,提交申请单。假期类型维护模块功能是显示出现有的假期类型数据,当中有的假期类型是受限的。假期报表模块功能有显示全部有假员工的月假期数据,将数据打印成execl文件。员工固定假期维护模块,主要是对假期类型的数据进行修改。员工假期查询审批模块,它的功能是查询出未审批的假期申请单,对假期申请单进行审批。图2-2 流程图 当不同的身份的用户登录系统将会有不同的功能。2.3 数据库设计 至今,数据库设计的很多工作仍需要人工来做,除了关系型数据库已有一套较完
12、整的数据范式理论可用来部分地指导数据库设计之外,尚缺乏一套完善的数据库设计理论、方法和工具,以实现数据库设计的自动化或交互式的半自动化设计。所以数据库设计今后的研究发展方向是研究数据库设计理论,寻求能够更有效地表达语义关系的数据模型,为各阶段的设计提供自动或半自动的设计工具和集成化的开发环境,使数据库的设计更加工程化、更加规范化和更加方便易行,使得在数据库的设计中充分体现软件工程的先进思想和方法。一般,数据库的设计过程大致可分数据库设计为5个步骤:需求分析,概念设计,逻辑设计,物理设计,验证设计。 由于实习的公司是外包企业,数据库表与字段名都要求用英文。 根据需求分析与模块设计,最终将为系统建
13、立六各表,表名分别为EMPLOYEE,EMPLOYEE_HOLIDAY,HOLIDAY_TYPE,HOLIDAY_APPLICATION,STATE,COMMON_HOLIDAY。建模工具采用的是Erwin,建模图例如图所示图2-3 数据库模型EMPLOYEE表: 处理用户登录的表,主要字段有EMPLOYEE_ID(员工ID)主键,POPEDOM(身份),EMPLOYEE_NAME(用户名),PASSWORD(密码)。HOLIDAY_TYPE表: 用来存放假期类型,主要字段有HOLIDAY_TYPE_ID(假期类型ID),HOLIDAY_TYPR_NAME(假期名字),LIMIRORNOT(是
14、否受限),LIMIT_DAYS(上限天数)。EMPLOYEE_HOLIDAY表: 员工受限假期表,每个员工的受限假期情况都有不同,例如年假中老员工与新员工的假期天数是不同的。主要字段有HOLIDAY_TYPE_ID(受限假期ID),AVAILABLE_DAYS(受限天数),EMPLOYEE_HOLIDAY_ID(用户ID)。HOLIDAY_APPLICATION表: 此表主要用来处理员工假期的申请,查询,管理员审批,查询。主要字段有MAKER_ID(流水ID)主键,FROM_DATE(开始时间),TO_DATE(结束时间),REGISTER_TIME(登记时间),STAT_MONTH(请假月份
15、),HOLIDAY_TYPE_ID(假期类型ID)外键,EMPLOYEE_ID(员工ID)外键,STATE_ID(状态ID)外键,HOLIDAY_DAYS(请假天数)。STATE表: 用来标记每一条假期记录的状态,如未审批,审批通过,等待审批。字段有STATE_ID(状态ID),STATE_NAME(状态名).COMMON_HOLIDAY表:用来存放一些公共假期,如五一,国庆,中秋。字段有COMMON_HOLIDAY_ID(公共假期ID),HOLIDAY_START_TIME(假期开始时间),HOLIDAY_INTRODUCE(假期简介),HOLIDAY_NAME(假期名字),HOLIDAY_
16、END_TIME(假期结束时间).3 系统的设计与实现 本系统是基于J2EE所开发的。J2EE是一种利用Java 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。J2EE技术的基础就是核心Java平台或Java 2平台的标准版,J2EE不仅巩固了标准版中的许多优点,例如编写一次、随处运行的特性、方便存取数据库的JDBC API、CORBA技术以及能够在Internet应用中保护数据的安全模式等等,同时还提供了对 EJB(Enterprise JavaBeans)、Java Servlets API、JSP(Java Server Pages)以及XML技术的全面支持。其最终
17、目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。 J2EE体系结构提供中间层集成框架用来满足无需太多费用而又需要高可用性、高可靠性以及可扩展性的应用的需求。通过提供统一的开发平台,J2EE降低了开发多层应用的费用和复杂性,同时提供对现有应用程序集成强有力支持,完全支持Enterprise JavaBeans,有良好的向导支持打包和部署应用,添加目录支持,增强了安全机制,提高了性能。 数据库的表建立时,同时要伴随着系统的设计,各表之间的关系就是系统设计的重点。 本系统使用的框架技术是Struts2+spring+ibatis。3.1 框架介绍 3.1.1 Struts2 Apac
18、he Struts2是一个优雅的,可扩展的JAVA EE web框架。框架设计的目标贯穿整个开发周期,从开发到发布,包括维护的整个过程。 Struts2框架是一个基于MVC架构的框架,由于它的核心设计思想来源于WebWork,Struts2框架中MVC模型各部分构成有控制器,模型,视图。在本系统中应用Struts2将表单提交过来的内容进行验证,对输入进行校验。对于Struts2框架来说,他不仅仅是一个MVC框架,还是一个轻量级的容器。使用此容器能够使我们在基本Web容器的基础上,根据需要增加其他新的特性。除此之外,Struts2框架还允许我们在应用中使用其他轻量级容器,比如目前较为流行的轻量级
19、容器Spring。而且在Struts2应用中使用其他容器的时候,我们需要做的只是加入少量的配置信息。从这一点上来说,更加体现出了Struts2框架的灵活性。 3.1.2 Spring 在Java EE开发设计中,Spring框架主要被应用于业务层,它的作用就是将中间件服务传递给耦合松散的POJO。通过Spring来管理业务流程,使得开发者能够国家专注与业务逻辑并且是测试过程变得更加简单。Spring的核心技术之一就是依赖注入,在开发设计过程中,整个应用中无论是Action层对象,还是服务层的Service对象,抑或是持久层的DAO对象,如果想要调用其它层的对象,只需调用一个该对象提供的接口即可
20、,而不用去关心这个对象的具体实现过程。如此一来我们的编码就拥有了更大的灵活性,也更利于后期的维护工作。在Spring框架中,各个对象的具体实现对于其他对象来说都是透明的,完全由Spring容器管理所有对象。 传统J2EE应用的开发效率低,应用服务器厂商对各种技术的支持并没有真正统一,导致J2EE的应用没有真正实现Write Once及Run Anywhere的承诺。Spring作为开源的中间件,独立于各种应用服务器,甚至无须应用服务器的支持,也能提供应用服务器的功能,如声明式事务等。Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的
21、“一站式”选择,并贯穿表现层、业务层及持久层。然而,Spring并不想取代那些已有的框架,而与它们无缝地整合。 3.1.3 Ibatis iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。最初侧重于密码软件的开发,现在是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO),同时还提供一个利用这个框架开发的JPetStore实例。相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,ibatis 是一种“半自动化”
22、的ORM实现。 Ibatis是一种数据映射器,同时它也是一种可以应用于Java的持久层框架。Ibatis通过配置文件加载数据源,映射字段与Java对象的属性,完成数据的持久化。Ibatis与其他持久层框架一样,都可以简化开发过程中数据持久化的操作。Ibatis持久化是通过配置xml文件实现的。通常需要两个配置文件,一个用来配置ibatis自身的一些属性信息,缓存机制,事务处理方式以及数据源;另一个是映射文件,将数据表映射到领域模型层对象。映射文件需要编写sql语句,ibatis支持“#”作为它的持久化语句的参数占位符,运行时这些占位符将被赋予参数值,然后对目标数据库进行持久化操作。3.2 框架
23、搭建 首先在web.xml中加载spring配置文件,添加如下语句: contextConfigLocation /WEB-INF/classes/applicationContext.xml 3.2.1 配置数据源 applicationContext.xml是spring的配置文件,在里面进行添加数据源, applicationContext.xml里还要导入ibatis配置文件,方法如下:classpath:sqlMapConfig.xml3.2.2 建立dao层与service层 用eclipse新建项目,名称为hrms,新建包com.hrms.dao,在里面分别建立接口AdminDa
24、o与EmployeeDao。在包com.hrms.dao.Impl里建立接口的实现AdminDaoImpl和EmployeeDaoImpl。新建包com.hrms.service,在里面分别建立接口AdminService与EmployeeService。在包com.hrms.service.Impl里建立接口的实现AdminServiceImpl和EmployeeServiceImpl。 AdminService与EmployeeService里面分别对应着管理员和员工的一些功能和操作,例如在AdminService里定义 public interface AdminService /* *
25、 管理员审核申请表 * param makerId * throws Exception */void agreeApplication(Integer makerId)throws Exception; 而在接口的实现中需要调用到dao层的接口,并且是对接口定义的方法进行具体的操作,如: public class AdminServiceImpl implements AdminService private AdminDao adminDao; /调用dao层接口public void setAdminDao(AdminDao adminDao) this.adminDao = admin
26、Dao;/* * 管理员审核申请表-同意操作 * param makerId * throws Exception */public void agreeApplication(Integer makerId) throws Exception adminDao.agreeApplicationByMakerId(makerId); 3.2.3 注入dao层与service层 新建好dao层与service后,在spring的配置文件applicationContext.xml中要进行注入,如: 3.2.4 配置ibatis映射文件 新建包com.hrms.vo,在里面建立需要映射表的java
27、bean,里面的属性要与数据库表的字段属性对应,然后建立xml映射文件进行映射,如:javabean中有employeeID这个属性,在xml里进行映射为 在映射文件里,所有对数据库的新增,更新,查询,删除操作的sql语句都要在这里面写。3.3 用户登录 用户登录界面如图所示图3-1登录界面 由于登录界面由其它小组完成,固本小组只需简单制作登录模块。当用户输入用户名和密码时,还需在输入框下面的权限按钮进行选择,这关系到成功登录后进入的界面。表单的内容提交到后台action里通过调用ibatis对用户名,密码,身份进行判断,再由判断的结果决定跳转到的页面。当用户成功登录以后,用户的ID信息将会保
28、存在session中,以便在将来的功能中使用。3.4 员工假期申请 该模块中,员工可以填写假期申请信息并提交。首先,员工需要选择请假的假期类型,如年假,病假,事假等。然后选择假期开始的时间与结束的时间,最后按提交按钮。 提交后,首先在前台的jsp页面中运用jsvascript技术对表单进行检验,如假期类型有没选择,请假时间是否已经填写等。 当前台jsp页面验证无误后则转到后台相应的action中进行进一步的处理。首先在action中要对提交过来的假期类型进行判断。判断其是否是受限假期类型,以便决定用何种方法进行处理。若假期类型不是受限假期类型,则请假天数就是填写申请表时的假期结束时间减去假期开
29、始时间;若假期类型是受限假期类型,则还要在数据库中查询相应受限假期类型的数据,看看其受限的天数有多少。如员工张三请年假10天,而张三的年假可用天数只有5天,则在action中就会做出判断并跳转到提示页面进行提示超出可用请假天数。员工假期申请页面如图图3-2 假期申请页面 进行员工假期申请时,对数据库的主要操作有:将表单传过来的假期类型与数据库中HOLIDAY_TYPE表中的数据进行比对,看看假期类型是否受限,若受限,则查询EMPLOYEE_HOLIDAY中当前用户的受限假期类型的受限天数,然后在action中进行判断操作,最后将假期申请插入HOLIDAY_APPLICATION表中。在HOLI
30、DAY_APPLICATION中,新加入的假期申请的STATE_ID字段要与STATE表中的字段对应,而且STATE_NAME都要是waiting,表示正在等待管理员审批。当员工提交了申请单后,在action中会运用javamail技术向管理员的邮箱发送提示邮件,提醒管理员对假期申请进行审批。3.5 管理员审批假期 当有用户申请了假期,管理员可以登录系统进行审批,管理员的审批页面会显示员工的假期申请单,在假期申请单的后面可执行两种审批操作,分别是同意和拒绝。在申请单中也会列出请假员工的姓名,请假时间等信息,管理员可以根据这些信息决定进行何种审批操作。审批页面如下:图3-3 管理员审批页面 审批
31、页面对申请单的显示是采用分页显示,运用了ibatis的分页功能。显示这些数据是十分重要的。在HOLIDAY_APPLICATION中存放的数据就是申请单,每一个一组就是一条假期申请单,这些申请单数据中有些已被审批,有些还未审批,所以要有选择的将这些数据进行提取。而申请单的状态是保存在另一个表STATE里,所以要使用连接查询,查询出状态是在等待的申请单,然后将其显示在审批页面。其中主要sql查询语句为:select * from holiday_application ha , holiday_type ht,employee e where ha.holiday_type_id = ht.ho
32、liday_type_id and STATE_ID=#stateId# and ha.EMPLOYEE_ID = e.EMPLOYEE_ID order by MAKER_ID3.6 管理员查看假期信息 这个功能中管理员查看有假员工的信息,显示页面中每个员工一条记录,其中要有员工各类假期的信息,还要能将页面保存为execl文件。该功能前台的显示页面看似简单,但是后台的程序处理十分复杂,尤其是数据库对数据的查询这一块,对数据的统计都需要比较巧妙的技术。首先,管理员查看所以有假员工报表是按月查询。选择好月份之后,按提交按钮则在当前页面显示出所有有假员工的记录,但是是采取分页显示。而将报表导成ex
33、ecl功能只需按下导出按钮,导出后是所有有假员工的记录都会记录在execl文件里,并且自动打开execl文件,里面员工的记录不采用分页显示。页面如下图所示图3-4 报表页面 以上所说明的是操作步骤,现在所要讲的是功能的实现。对数据库的操作主要是对HOLIDAY_APPLICATION表进行查询操作,HOLIDAY_APPLICATION里保存的都是假期申请单,这些申请单有的已经经过审批了,有的还没有,而报表是要把经过审批的申请单显示出来,这可以在SQL查询语句中用where得到,但是在页面的显示不是单纯的将数据库里的内容原原本本的显示在页面,在显示页面中有的属性是数据库表里的字段没有的。所以要
34、找另外的方法显示出来。例如上图,HOLIDAY_APPLICATION表中没有定义过字段病假,事假,年假等,但是却要显示出来。这些假期类型虽然不是表的字段,但是表里有一个字段HOLIDAY_TYPE_ID,这个字段里的数据就有这些假期类型。举个例子来说明吧,例如,现有表test,其表内数据为Studentsubject grade- - -张三 语文 80张三 数学 86张三 英语 75李四 语文 78李四 数学 85李四 英语 78 如何将上表的内容显示为 姓名 语文 数学 英语李四 78 85 83张三 80 86 75这就需要用到数据库里的行列转换这项技术。它的SQL语句为select
35、student,sum(decode(subject,语文, grade,null) 语文,sum(decode(subject,数学, grade,null) 数学,sum(decode(subject,英语, grade,null) 英语from testgroup by student以上这种行列转换是数据库的静态行列转换,所谓静态就是test表Subject这个字段里的数据个数是固定的,不能增加,例如上面所显示的成绩科目只能有语文,数学,英语三科,若想显示出生物等其他科目是不行的,也就是所显示的科目已经由SQL语句固定了,不能改变。 而本系统的情况与上面的类似,上表的subject这个
36、字段就相当于HOLIDAY_TYPE_ID(假期类型)这个字段,所以对员工的报表显示,本系统就是采用和上面类似的方法。员工报表查询的核心sql语句为: select EMPLOYEE_ID as 员工号,SUM(case when HOLIDAY_TYPE_ID=001 then HOLIDAY_DAYS else 0 end) 病假, SUM(case when HOLIDAY_TYPE_ID=006 then HOLIDAY_DAYS else 0 end) 丧假, SUM(case when HOLIDAY_TYPE_ID=003 then HOLIDAY_DAYS else 0 end
37、) 补休假, SUM(case when HOLIDAY_TYPE_ID=002 then HOLIDAY_DAYS else 0 end) 事假, SUM(case when HOLIDAY_TYPE_ID=004 then HOLIDAY_DAYS else 0 end) 婚假, SUM(case when HOLIDAY_TYPE_ID=005 then HOLIDAY_DAYS else 0 end) 年假, SUM(case when HOLIDAY_TYPE_ID=007 then HOLIDAY_DAYS else 0 end) 产假 from HOLIDAY_APPLICATI
38、ON where STAT_MONTH=#month# group by EMPLOYEE_ID order by EMPLOYEE_ID ASC 现在来解释一下上述SQL语句。SUM(case when HOLIDAY_TYPE_ID=006 then HOLIDAY_DAYS else 0 end) 丧假表示的是查询HOLIDAY_TYPE_ID为006的元组,并对其求和,以下类推。group by EMPLOYEE_ID 表示按员工ID来分组,这样查询的结果就是一个员工一条记录。order by EMPLOYEE_ID ASC 表示结果按员工ID降序排列。 将查询出的结果用分页显示技术显
39、示出来就有如上图的效果了。最后是将报表导出为execl文件,这是上网下载第三方插件做成的。4 系统功能简介和评价 该系统是一个实习项目,所以在可用性方面还存在一些不足之处。但是随着社会的发展,在信息管理方面不能再手工化了,运用软件管理信息是必然的趋势。员工假期的管理能方便员工与管理员,系统的功能都是为使相关的一些手续变得简洁,员工能很快的申请假期,还能随时查看自己的假期数据,而管理员能能快捷的审批假期申请,提高管理效率,而且对数据的统计要求做到一目了然。 最后,在系统实现的技术上,框架是采用比较先进的,但是有些地方还是因为能力的限制而又所不足,例如在员工的报表统计中所采用的静态行列转换,若能采用动态行列转换效果会更好。总的来说,该系统虽有不足,但还是实现了假期管理系统的重要功能。结论 通过开发本系统,使我深刻体会到了软件工程的一些思想与方法。同时了解到了软件产品的开发是一个科学的、有计划、有步骤的过程,不是一个一次即成的过程,它需要不断的检验与修正。还有在开发的过程中,团队的合作十分重要,一个所做的毕竟还不完善,只有集合众人之力开发出的系
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922