版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
重庆师范大学全日制本科生毕业论文第第绪论项目背景借助现代信息技术和管理理论,建立企业管理信息系统是当今社会的重要趋势。党和政府根据知识经济时代的特点,对国民经济建设提出了“用信息化带动工业化”的指导思想。对企业而言,公司员工工资管理是公司管理的一项重要内容。随着公司员工数量增加,企业的工资管理工作也变得越来越复杂。工资管理既涉及到企业的人事管理,同时也是企业财务管理的重要组成部分。资金是企业生存的重要元素,资金的流动影响企业的整体运作,企业员工的工资是企业资金管理的一个重要组成部分。实行B/S架构的软件进行工资管理,可以减轻比较繁琐的手工工资管理。同时克服了C/S架构的软件只能进行本地管理,进行远程管理则必须重新安装远程管理软件、普通职工无法方便的查询自己的相关信息、软件有任何变动都得重新安装所有客服端的缺陷,提高了企业工资管理的效率和正确性,并且降低了维护费用。开发此系统的这些优点是企业的科学化、正规化管理,与世界接轨的重要条件。因此工资管理系统在企业中占重要地位。现在应用在大中型企业的管理信息系统中,几乎都包括了工资管理模块。有些环境中是由作为大型ERP软件中的一个模块引进的,有些是作为企业的财务系统的一部分。这些根据规范的西方的管理制度设计的工资管理软件,在很多时候还不能完全解决中国特色的中小企业的问题,我们组介绍的工资管理系统就是要为这些具有中国特色的中小企业解决他们在工资管理方面的问题。本系统功能齐全,实现了用户管理、人员管理、部门管理、工资管理、个人信息管理、报表管理。并在各个功能下面实现了查询、添加、修改、删除等功能,使系统功能更加完善。更适合企业管理人员对员工工资进行管理,且便于普通员工对自己工资信息的查询。项目开发环境硬件环境本系统的硬件环境如下:客户机:普通PCCPU:P41.8GHz内存:256MB以上分辨率:推荐使用1024*768像素WEB服务器CPU:P41.8GHz内存:256MB以上数据库服务器CPU:P41.8GHz内存:256MB以上软件环境本系统软件环境如下:操作系统:windowsXP/windows7及其以上。开发工具:MyEclipse(web前端服务)Web服务器:ApacheTomcat数据库:mysql-5.5.28-win32+SQLyog-8.7.1破解版;软件包:jstl-1.2.jar连接数据库软件包:mysql-connector-java-5.0.5-bin.jar相关技术2.1系统所涉及到的语言2.1.1Java语言Java的诞生是对传统计算机模式的挑战,对计算机软件开发行业产生了深远的影响:(1)软件4A目标要求软件能达到任何人在任何地方在任何时间对任何电子设备都能应用。这样能满足软件平台上互相操作,具有可伸缩性和重用性并可即插即用等分布式计算模式的需求。(2)基于构建开发方法的崛起,引出了CORBA国际标准软件体系结构和多层应用体系框架。在此基础上形成了Java.2平台和.NET平台两大派系,推动了整个IT业的发展。(3)对软件产业和工业企业都产生了深远的影响,软件从以开发为中心转到了以服务为中心。中间提供商,构件提供商,服务器软件以及咨询服务商出现。企业必须重塑自我,B2B的电子商务将带动整个新经济市场,使企业获得新的价值,新的增长,新的商机,新的管理。(4)对软件开发带来了新的革命,重视使用第三方构件集成,利用平台的基础设施服务,实现开发各个阶段的重要技术,重视开发团队的组织和文化理念,协作,创作,责任,诚信是人才的基本素质。总之,目前以看到了Java对信息时代的重要性,未来还会不断发展,Java在应用方面将会有更广阔的前景。2.2开发工具2.2.1MyEclipseEclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentTools,JDT)。虽然大多数用户很乐于将Eclipse当作JavaIDE来使用,但Eclipse的目标不仅限于此。Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于Java开发工具。尽管Eclipse是使用Java语言开发的,但它的用途并不限于Java语言;例如,支持诸如C/C++、COBOL和Eiffel等编程语言的插件已经可用,或预计会推出。Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。简单而言,MyEclipse是Eclipse的插件,也是一款功能强大的J2EE集成开发环境,支持代码编写、配置、测试以及除错。MyEclipse10发布了,该版本使用最高级的桌面和Web开发技术,包括HTML5和JavaEE6,支持JPA2.0、JSF2.0、Eclipselink2.1以及OpenJPA2.0.而对IBMWebSphere用户来说,MyEclipseBlue支持最新版本的WebSpherePortalServer7.0、WebSphere8以及以前的版本,无缝的支持IBMDB2数据库。MyEclipse10对检索功能以及错误查询功能更加强大,包括对js文件的错误查询。就目前本人的体验来说,最大的变化莫过于软件安装界面,推荐使用link方法进行插件安装,方便快捷。2.2.2MySQLMySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQLAB公司,在2008年1月16号被Sun公司收购。MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。MySQL的海豚标志的名字叫“sakila”,它是由MySQLAB的创始人从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的。获胜的名字是由来自非洲斯威士兰的开源软件开发者AmbroseTwebaze提供。根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。与其他的大型数据库例如Oracle、DB2、SQLServer等相比,MySQL自有它的不足之处,如规模小、功能有限(MySQLCluster的功能和效率都相对比较差)等,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。目前Internet上流行的网站构架方式是LAMP(Linux+Apache+MySQL+PHP/Perl/Python)和LNMP(Linux+Nginx+MySQL+php/perl/Python),即使用Linux作为操作系统,Apache和Nginx作为Web服务器,MySQL作为数据库,PHP/Perl/Python作为服务器端脚本解释器。由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这种方式不用花一分钱(除开人工成本)就可以建立起一个稳定、免费的网站系统。系统分析需求概述工资管理系统系统对企业加强工资管理有着极其重要的作用,就一般的大型企业来说,它的设计内容非常复杂而且繁多,比如拥有工资计算功能,工资统计功能,报表输出功能,而且设计的模块也很多,比如工资管理模块,工资统计模块,报表设计模块,打印输出模块,模糊查询模块等等。因此,工资管理系统为公司和员工带来极大的方便。通过我们组员之间的分析与研究,及和指导老师多次交流后,确定实现方案的要点和工作计划。本系统的实现的主要功能有:(1)对系统进行管理。用户的添加修改以及权限授予都是管理员操作的(2)对单位人员的变动进行处理。一个单位的职工不会是一成不变的,总是在不断的变化:有调出、有调入、也有职工在本单位内部调动。因此,设计系统是应考虑到这些情况。(3)对工资账户的创建,修改,删除。(4)对职工的工资进行计算、修改。能对各职工的工资进行计算,即计算应发金额、应扣金额及实发金额等。(5)查询统计功能。要求即可以单项查询,比如查看某个职工的工资情况等;也可以查询全部。(6)员工个人信息的查询,修改与管理。(7)报表打印功能。每月发放工资时,要求能够打印本月的工资表、随工资发给每个职工的工资条以及工资统计表。管理员对各个部分信息的管理功能需求分析理解需求工资管理系统分为普通用户端和管理端,普通用户端只提供请假申请和个人信息管理的查询功能。而管理端系统在用户登录时分两个部分:超级管理员和工资管理人员。工资管理人员根据各自的权限不同,可以进入用户界面管理相应的信息。超级管理员的权限除了普通用户的权限外,还有对各个部分的信息进行添加、修改、删除等功能。所有的功能管理员都能实现。下面是系统所要达到的几条要求:要求系统准确的记录各种信息。系统要提供丰富的查询功能。系统可以对基础数据进行维护。系统运行在Windows平台下,需要有良好的图形用户界面。系统具有良好的可扩展性,良好的可移植性。3.2.2分析需求分析需求就是描述系统的需求,通过定义系统中的关键域建立模型。分析的根本目的是在开发者和提出需求的人之间建立一种理解和沟通的机制。因此,工资管理系统的需求分析应该是开发人员和用户一起完成的。分析需求的第一步描述工资管理系统的功能,即定义用例,以此确定系统的功能需求。工资管理系统的分析主要涉及规格说明的阅读和分析,需要和工资管理系统潜行讨论。工资管理系统的角色是管理人员和公司员工。公司员工即普通用户可以对系统中的个人信信息部分(请假信息、工资信息、个人信息)进行查询。管理人员登陆时有权限限制的,普通用户是不可登陆。管理人员根据其权限不同可以对相应用户信息进行添加、修改、查询、删除等,还可以对系统中的其他信息进行相应的管理。3.2.3可行性分析技术可行性分析技术上的可行性分析要考虑将来要采用的硬件和软件技术能否满足用户提出的要求(如计算机的容量、速度等)。此外,还要考虑开发人员的水平,作为计算机软件开发与技术专业的学生,经过几年的学习,在数据库和编程方面都有一定的基础。所以对于这个系统的开发还是有能力做好的。我们掌握了MySQL数据库及其应用技术,Java核心技术,以及JavaWeb开发,并且具有一定的实训经历。同时对设计、应用、维护及局域网的组成有了深刻的认识与一定的动手实践能力。从一定程度上具备了开发一个小型系统的能力。经济可行性主要从对项目的经济上进行分析评价,一方面是支出的费用,另一方面是取得的收益。我们这个是一个小型的公司工资管理系统,从投入的人力,财力与物力来讲是非常之小的,只要有电脑就可以了。从节省人力方面,可以让管理人员从繁与复杂的工作中解脱出来,做更多的工作,可以给工资管理提高一个层次。运行可行性不同的企业正在迅猛发展,而且在企业中各个公司的员工流动性越来越大,所以工资管理系统在公司起到了极其重要的作用。随着计算机硬件的快速发展,计算机的价格在不断地降低,工资管理系统对客户端要求极低,只需要有一个浏览器能上网就能进行信息的查询。网络的越来越普及,人们都喜欢上网查询信息既方便又快捷。因此系统在实践上具备了可行性。法律可行性本系统纯为私人设计,在开发过程中没有涉及合同、责任等与法律相抵触的方面。因此,本系统在法律上是可行的。由此可知,工资管理系统在市场上具有可行性。设计思想本系统开发设计思想有以下几点:充分利用现有资源,提高系统开发水平和应用效果的目的。系统应符合管理人员的具体要求,满足日常的管理工作需要,而且要达到使用中的直观、快捷、实用、安全、稳定等要求。系统采用模块化的程序设计方法,既便于系统功能的添加、修改等。系统应具备数据库维护功能,及时根据用户需求进行数据的添加、删除修改等功能。正如研究任何其它软件项目一样,我做的毕业设计也经历了从选题,调研,熟悉开发环境,实验关键技术,查找类似的相关系统的资料;系统概要设计,数据库结构设计,功能模块开发,功能模块测试,系统调试和系统试运行和修改。如下3-1开发计划流程图:选题选题调查研究资料查询开发环境熟悉学习ssh技术概要设计数据库的设计功能模块开发和详细设计功能模块测试系统调试和修改需求分析(1)图3-1开发计划流程图3.4系统功能结构图针对实际生活中工资管理的需要,我们组的公司工资管理系统能够实现的主要功能模块如下:系统管理模块:包括部门管理、角色管理、用户管理。制定用户的管理级别,管理级别分为超级管理员和普通管理用户两类。他们的操作权限不同,超级管理员是系统的管理员,可以对系统进行一切操作,包含添加用户、修改用户信息、修改口令等。普通管理用户只能对具有权限的模块进行管理。人事管理模块:实现对员工的信息添加、修改、删除、查询和修改申请单的审批。工资账户管理模块:实现工资账户的查询、添加、修改、删除、审批。工资管理模块:实现工资组和工资单的创建、修改、删除、审批。请假管理模块:实现请假单的添加、修改、审批。个人信息管理模块:实现对员工基本信息的查询以及对申请修改信息的修改、删除等。报表管理模块:实现员工信息报表和工资报表的查询和打印为Excel输出。工资管理系统的组成及系统功能结构图,如图3-2所示(2)图3-2系统功能结构图数据库设计4.1数据需求分析数据库需求分析是数据库结构设计的第一阶段,是非常重要的一个阶段。这个阶段主要是确定基本数据,数据结构以及数据处理的流程,组成一份详尽的数据字典,为以后进一步设计打下基础。通过对企业工资管理的内容和数据流程分析,针对企业工资管理系统,我们设计的数据项和数据结构如下:添加员工包括的数据项有序号、员工姓名、性别、年龄、所属部门、工资组、职务、电话、住址、个人简介等。员工信息查询包括的数据项员工编号修改申请管理包括的数据项有员工编号查看个人信息包括的数据项有密码查看工资信息包括的数据项无申请修改信息包括的数据项有申请单名称、申请单内容4.2数据库概念结构设计这一设计阶段是在需求分析的基础上,设计出能够满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。实体跟实体之间的E-R图为:工资结构工资结构工资单员工修改申请单工资账户部门具有具有属于属于具有(3)图4-1实体E-R图4.3数据库逻辑结构设计根据数据库的需求分析,建立如下几个数据表:(4)图4-2员工个人信息图表(5)图4-3员工工资信息图表设计说明5.1系统概述在本工资管理系统中,涉及到最多的就是对数据的增删改查,当然在真是的系统中,对于这些操作要控制在严格的权限中,使用struts2+hibernate+spring实现了简单的CRUD操作。在mvc与三层架构之间我们选择了三层架构,当然他们本质相同。这里采用三层架构,也就是数据访问层、业务逻辑层、表示层。这样有利于分工和标准化。增加代码的复用性。但由于业务无法直接访问数据库必须通过中间层完成。反映时间间隔用操作是否成功界面代替。5.2数据源的配置为了防止中文乱码的产生我们将整个项目改为UTF-8,数据库设为UTF-8,由于HTML页面参数—以浏览器的编码方式发送—>JSP页面—以JSP定义的编码方式被编译—>被JSP引擎编译为*.class文件—>在JSP容器中运行—>传递给Mysql数据库—>以数据库的编码方式读取数据并存储—>读取Mysql—以数据库的编码方式读取—>JSP页面接受后在浏览器中显示(以浏览器编码方式解码显示);我们需要解决问题有:1)所有*.jsp的头文件设置为<%@pagelanguage="java"pageEncoding="UTF-8"%>以至于在浏览器中直接访问此页面时无乱码。数据库设置的是全部使用UTF-8编码,乱码问题归根到底是字符集的问题,查看mysql字符集如下:mysql>showvariableslike'character%';+++|Variable_name|Value|+++|character_set_client|latin1||character_set_connection|latin1||character_set_database|utf8||character_set_filesystem|binary||character_set_results|latin1||character_set_server|latin1||character_set_system|utf8||character_sets_dir|C:\ProgramFiles\MySQL\MySQLServer5.5\share\charsets\|+++修改my.ini(MySQLServerInstanceConfiguration文件)#CLIENTSECTION[client]port=3306[MySQL]default-character-set=utf-8#SERVERSECTION[MySQLd]default-character-set=utf-8(2)修改data目录中相应数据库目录下的db.opt配置文件default-character-set=utf-8default-collation=utf8_general_ci修改后查看mysql字符集如下:mysql>showvariableslike'character%';+++|Variable_name|Value|+++|character_set_client|utf8||character_set_connection|utf8||character_set_database|utf8||character_set_filesystem|binary||character_set_results|utf8||character_set_server|utf8||character_set_system|utf8||character_sets_dir|C:\ProgramFiles\MySQL\MySQLServer5.5\share\charsets\|+++8rowsinset(0.00sec)(3)数据库连接串中指定字符集URL=jdbc:MySQL://yourIP/college?user=root&password=123&useUnicode=true&characterEncoding=utf-8(4)在创建数据库时指定字符集createdatabasegzglxtCHARACTERSETutf-8;根据数据库设计建表,使用Mysql界面软件SQLyog-8.7.1。并做POJO持久化的数据库的映射对象,并实现序列化。以便扩展,当然而在Struts2中的Action由于可以不继承任何的接口,所以在这种情况下Action是POJO,但是Struts2中的Action也可以继承ActionSupport类就不再属于POJO了。POJO里面是可以包含业务逻辑处理和持久化逻辑,也可以包含类似与JavaBean属性和对属性访问的set和get方法的。(6)图5-1修改数据库图对hibernate.cfg.xml做如下配置:(7)图5-2hibernate.cfg.xml配置图<?xmlversion='1.0'encoding='UTF-8'?><!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD3.0//EN""/hibernate-configuration-3.0.dtd"><!--GeneratedbyMyEclipseHibernateTools.--><hibernate-configuration><session-factory> <propertyname="connection.username">root</property> <propertyname="connection.password">123</property> <propertyname="connection.url">jdbc:mysql://:3306/gzglxt</property> <propertyname="dialect"> org.hibernate.dialect.MySQLDialect </property> <propertyname="file">mysql</property> <propertyname="connection.driver_class"> com.mysql.jdbc.Driver </property> <propertyname="show_sql">true</property> <propertyname="c3p0.max_size">30</property> <propertyname="c3p0.min_size">5</property> <propertyname="c3p0.timeout">3000</property> <propertyname="c3p0.max_statements">100</property> <mappingclass="cs.xj.pojo.Department"/> <mappingclass="cs.xj.pojo.Role"/> <mappingclass="cs.xj.pojo.Payroll"/> <mappingclass="cs.xj.pojo.UserRole"/> <mappingclass="cs.xj.pojo.Group"/> <mappingclass="cs.xj.pojo.Change"/> <mappingclass="cs.xj.pojo.User"/> <mappingclass="cs.xj.pojo.Person"/> <mappingclass="cs.xj.pojo.GroupDetail"/> <mappingclass="cs.xj.pojo.Leave"/> <mappingclass="cs.xj.pojo.Account"/> <mappingclass="cs.xj.pojo.Module"/> <mappingclass="cs.xj.pojo.ACL"/></session-factory></hibernate-configuration>1)Hibernate与POJO对像的交互流程图如下:数据库数据库Hibernate业务逻辑层业务逻辑层表示层JDBC(7)图5-3Hibernate与POJO对像的交互流程图5.3Spring配置Spring作为业务层,结合hibernateFilter文件处理, <filter> <filter-name>hibernateFilter</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter </filter-class> </filter> <filter-mapping> <filter-name>hibernateFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>5.4Struts2配置为了简化Struts2的配置,是编程更容易模块化进行,可以通过对各个Action对应的xml文件的调度,对各个Action进行调度。<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN""/dtds/struts-2.0.dtd"><struts> <constantname="devMode"value="true"/> <packagename="base"extends="struts-default"namespace="/"><!--退出登录配置--> <actionname="zhuXiao"class="zhuxiao.ZhuXiaoAction"> <resultname="success">/index.jsp</result></action> </package> <includefile="cs/xj/action/login/login.xml"/><!--登录管理--><includefile="cs/xj/action/department/department.xml"/><!--部门管理--> <includefile="cs/xj/action/role/role.xml"/><!--角色管理--> <includefile="cs/xj/action/user/user.xml"/><!--用户管理--> <includefile="cs/xj/action/acl/acl.xml"/><!--权限分配管理--> <includefile="cs/xj/action/personReport/personReport.xml"/><!--生成员工信息报表管理--> <includefile="cs/xj/action/payrollReport/payrollReport.xml"/><!--生成工资信息报表管理--></struts>详细设计6.1人事管理模块6.1.1执行界面(8)图6-1员工管理图配置:在Strusts.xml中添加<includefile="cs/xj/action/person/person.xml"/><!--员工管理界面-->Person.xml的配置如下:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN""/dtds/struts-2.0.dtd"><struts> <packagename="person"extends="struts-default"namespace="/person"> <interceptors> <interceptorname="securityInterceptor"class="erceptor.SecurityInterceptor"></interceptor> </interceptors> <global-results> <resultname="error">/pages/pay_main.jsp</result> <resultname="login"type="redirect">/index.jsp</result> </global-results> <actionname="personAction"class="cs.xj.action.person.PersonAction"> <resultname="find">/pages/person/person.jsp</result><!--员工管理界面--> <resultname="search"type="redirect"> personAction!find?number=${person.number}</result><!--调用personAction!find方法来转到指定的位置,HTTP响应被告知使浏览器直接跳转到指定的位置(产生客户端的一个新请求).这样做的结果会使刚刚执行的action(包括action实例,action中的错误消息等)丢失,不再可用.--> <resultname="searchInput">/pages/person/person.jsp</result><!--通过编号查询后输出界面--> <resultname="findMyInfo">/pages/my/my.jsp</result><!--查看登录者信息界面--> <resultname="saveInput">/pages/person/add_person.jsp</result><!--添加员工界面--> <resultname="save"type="redirect">/pages/common/success.jsp</result><!--添加员工成功界面--> <resultname="show">/pages/person/show_person.jsp</result><!--查看员工界面--> <resultname="edit">/pages/person/edit_person.jsp</result><!--修改员工界面--> <resultname="updateInput">/pages/person/edit_person.jsp</result><!--修改员工界面--> <resultname="update"type="redirect">/pages/common/success.jsp</result><!--添加员工成功界面--> <resultname="delete"type="redirect">/pages/common/del_success.jsp</result><!--删除员工界面--> <interceptor-refname="paramsPrepareParamsStack"></interceptor-ref> <interceptor-refname="securityInterceptor"></interceptor-ref> </action> </package></struts>6.1.2功能(说明该程序应具有的功能,可采用IPO图(即输入-处理-输出图)的形式。)查询输入输入员工编号验证成功失败,重新输入(9)图6-2员工查询IPO图添加员工添加添加验证成功失败,重新输入姓名、年龄性别、电话所属部门工资组、职务住址、个人简介(10)图6-3添加员工IPO图6.1.3性能(说明对该程序的全部性能要求,包括对精度、灵活性和时间特性的要求。)允许1000个员工同时访问,用户不能为中文,密码隐藏输入。6.1.4输入项(给出对每一个输入项的特性,包括名称、标识、数据的类型和格式、数据值的有效范围、输入的方式、数量和频度、输入媒体、输入数据的来源和安全保密条件等等。)对应操作的数据库表:(11)图6-4添加员工图表6.1.5输出项(给出对每一个输出项的特性,包括名称、标识、数据的类型和格式、数据值的有效范围、输出的形式、数量和频度、输出媒体、对输出图形及符号的说明、安全保密条件等等。)根据权限不同用户进入不同界面,拥有不同功能。添加员工图:(12)图6-5添加员工图6.1.6算法详细说明本程序所选用的算法,具体的计算公式和计算步骤。//保存 publicvoidsave(Personp,IntegerdepId,IntegergroupId){ Stringnumber=null; if(depId!=null&&depId!=0){ Departmentdep=(Department)getHibernateTemplate().get(Department.class,depId); p.setDepartment(dep);//设置部门 } if(groupId!=null&&groupId!=0){ Groupg=(Group)getHibernateTemplate().get(Group.class,groupId); p.setGroup(g);//设置工资组 } p.setCreateTime(newDate()); getHibernateTemplate().save(p); number=10000+p.getId()+""; p.setNumber(number); }//修改 publicvoidupdate(Personp,IntegerdepId,IntegergroupId){ if(depId!=null&&depId!=0){ Departmentdep=(Department)getHibernateTemplate().get(Department.class,depId); p.setDepartment(dep); } if(groupId!=null&&groupId!=0){ Groupg=(Group)getHibernateTemplate().get(Group.class,groupId); p.setGroup(g); } getHibernateTemplate().update(p); }6.1.7流程逻辑用图表(例如流程流程图、判定表等)辅以必要的说明来表示本程序的逻辑流程(13)图6-6添加员工流程图6.1.8接口用图的形式说明本程序所隶属的上一层模块及隶属于本程序的下一层模块、子程序,说明参数赋值和调用方式,说明与本程序相直接关联的数据结构(数据库、数据文卷)。个人信息数据库表操作接口publicinterfacePersonService{ //保存 publicvoidsave(Personp,IntegerdepId,IntegergroupId); //修改 publicvoidupdate(Personp,IntegerdepId,IntegergroupId); //保存或修改 publicvoidsaveOrUpdate(Personp); //删除 publicvoiddelete(Personp); //根据个人id查找 publicPersonfindById(Integerid);//根据员工编号查找 publicPersonfindByNumber(Stringnumber); //分页查找 publicPagerModel<Person>find(intfirstResult,intmaxResult); //分页查找 publicPagerModel<Person>find(StringpropertyName,Stringvalue,MatchModematchMode,intfirstResult,intmaxResult); //分页查找 publicPagerModel<Person>find(String[]propertyName,String[]value,MatchMode[]matchMode,intfirstResult,intmaxResult); //分页查找 publicPagerModel<Person>find(String[]propertyName,Object[]value,intfirstResult,intmaxResult); publicInputStreamgetInputStream(String[]propertyName,Object[]value); }6.1.9存储分配根据需要,说明本程序的存储分配。6.1.10注释设计6.1.11限制条件Windows浏览器6.1.12测试计划(说明对本程序进行单体测试的计划,包括对测试的技术要求、输入数据、预期结果、进度安排、人员职责、设备条件驱动程序及桩模块等的规定。)个人信息服务接口方法的测试publicclassPersonServiceTestextendsTestCase{ @Resource(name="personService") privatePersonServicepersonService; @Resource(name="departmentService") privateDepartmentServicedepartmentService; /*setup主要实现测试前的初始化工作,而teardown则主要实现测试完成后的垃圾回收等工作。*/ protectedvoidsetUp()throwsException{ ApplicationContextcxt=newFileSystemXmlApplicationContext("/WebRoot/WEB-INF/applicationContext.xml"); personService=(PersonService)cxt.getBean("personService"); departmentService=(DepartmentService)cxt.getBean("departmentService"); }//删除测试 publicvoidtestDelete(){ System.out.println(personService.findById(21)); personService.delete(personService.findById(21)); } publicvoidtestDeleteAll(){ } //获取部门测试 publicvoidtestGetInputStream(){ personService.getInputStream(newString[]{"department"},newObject[]{null}); } publicvoidtestFind(){ System.out.println(personService.find(newString[]{"department"},newObject[]{departmentService.findById(1)},0,Integer.MAX_VALUE)); } }测试结果:成功!6.1.13尚未解决的问题获取数据库时的乱码问题,统一采用UTF-8的编码格式。6.2个人信息管理模块个人信息模块:个人信息管理个人信息管理查看个人信息申请修改信息查看工资信息(14)图6-7个人信息管理模块图6.2.1配置配置:在Strusts.xml中添加 <includefile="cs/xj/action/personInfo/personInfo.xml"/><!--员工信息管理-->personInfo.xml的配置如下:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN""/dtds/struts-2.0.dtd"><struts> <packagename="personInfo"extends="struts-default"namespace="/personInfo"> <interceptors> <interceptorname="securityInterceptor"class="erceptor.SecurityInterceptor"></interceptor> </interceptors> <global-results> <resultname="error">/pages/pay_main.jsp</result> <resultname="login"type="redirect">/index.jsp</result> </global-results> <actionname="personInfoAction"class="cs.xj.action.personInfo.PersonInfoAction"> <resultname="findMyInfo">/pages/my/my.jsp</result><!--个人信息界面--> <resultname="password"type="redirect">/pages/common/success.jsp</result><!--修改密码成功界面--> <resultname="findMyPayroll">/pages/my/my_payroll.jsp</result><!--查看个人工资单界面--> <resultname="show">/pages/my/show_payroll.jsp</result><!--查看工资单界面--> <resultname="findMyChange">/pages/my/change.jsp</result><!--个人信息修改界面--> <resultname="saveInput">/pages/my/add_change.jsp</result><!--添加修改界面--> <resultname="save"type="redirect">/pages/common/success.jsp</result><!--添加修改成功界面--> <resultname="edit">/pages/my/edit_change.jsp</result><!--添加修改申请单界面--> <resultname="updateInput">/pages/my/edit_change.jsp</result><!--个人信息修改管理界面--> <resultname="update"type="redirect">/pages/common/success.jsp</result><!--修改管理成功界面--> <resultname="delete"type="redirect">/pages/common/del_success.jsp</result><!--删除成功界面--> <interceptor-refname="paramsPrepareParamsStack"></interceptor-ref> <interceptor-refname="securityInterceptor"></interceptor-ref> </action> </package> </struts>6.2.2功能1)查看个人信息该模块的E-R图查看个人信息查看个人信息修改修改密码(15)图6-8查看个人信息E-R图2)查看工资信息该模块的E-R图查看工资信息查看工资信息查看(16)图6-9查看工资信息E-R图3)个人信息修改申请管理当人事部门看到这个申请后手动将该员工信息进行修改,该模块的E-R图个人信息修改申请管理个人信息修改申请管理添加修改申请单修改删除(17)图6-10个人信息修改申请管理E-R图6.2.3输出项(18)图6-11查看工资单图6.2.4算法详细说明本程序所选用的算法,具体的计算公式和计算步骤。1)密码修改和验证@InputConfig(resultName="passwordInput") publicStringupdatePassword()throwsException{ Useruser=(User)session.get("login"); user.setPassword(password); userService.saveOrUpdate(user); session.put("login",user); session.put("notice","密码修改成功"); return"password"; } publicvoidvalidateUpdatePassword(){ if(isNull(password)){ addFieldError("password","密码不能为空"); } }添加修申请单@InputConfig(resultName="saveInput") publicStringsave()throwsException{ change=newChange(); change.setName(name); change.setContent(content); changeService.saveOrUpdate(change,((User)session.get("login")).getPerson().getId()); session.put("notice","添加修申请单成功"); return"save"; } publicvoidvalidateSave(){ if(isNull(name)){ addFieldError("name","申请单名称不能为空"); } }3)实现操作数据库修改申请表的业务Dao里的重要算法。//修改或保存申请 publicvoidsaveOrUpdate(Changechange,IntegerpersonId){ Personperson=(Person)getHibernateTemplate().get(Person.class,personId); change.setPerson(person); change.setStatus(Status.NEW); change.setCreateTime(newDate()); getHibernateTemplate().saveOrUpdate(change); }//分页查看 @SuppressWarnings("unchecked") publicPagerModel<Change>find(String[]propertyName,Object[]value, intfirstResult,intmaxResult){ DetachedCriteriacriteriaResult=DetachedCriteria.forClass(Change.class); DetachedCriteriacriteriaTotal=DetachedCriteria.forClass(Change.class); for(inti=0;i<propertyName.length&&propertyName[0]!=null;i++){ if(value[i]!=null){ criteriaResult.add(Restrictions.eq(propertyName[i],value[i])); criteriaTotal.add(Restrictions.eq(propertyName[i],value[i])); } }//循环获取返回信息 criteriaTotal.setProjection(Projections.rowCount()); List<Change>datas=((List<Change>)getHibernateTemplate().findByCriteria(criteriaResult,firstResult,maxResult)); inttotal=((List<Integer>)getHibernateTemplate().findByCriteria(criteriaTotal)).get(0); PagerModel<Change>pagerModel=newPagerModel<Change>(total,datas); returnpagerModel; }6.2.5流程逻辑1)查看个人信息该模块的E-R图查看个人信息查看个人信息修改修改密码(19)图6-12查看个人信息E-R单图该模块的流程图:(20)图6-12查看个人信息流程图2)查看工资信息该模块的E-R图查看工资信息查看工资信息查看(21)图6-13查看工资信息E-R图该模块的流程图:(22)图6-14查看工资信息流程图3)个人信息修改申请管理当人事部门看到这个申请后手动将该员工信息进行修改,该模块的E-R图个人信息修改申请管理个人信息修改申请管理添加修改申请单(23)图6-15个人信息修改申请E-R图该模块的流程图:(24)图6-16个人信息修改申请流程图6.2.6接口用图的形式说明本程序所隶属的上一层模块及隶属于本程序的下一层模块、子程序,说明参数赋值和调用方式,说明与本程序相直接关联的数据结构(数据库、数据文卷)。操作数据库修改申请表的业务Dao接口publicinterfaceChangeDaoextendsBaseDao<Change>{ //修改或保存 publicvoidsaveOrUpdate(Changechange,IntegerpersonId); //分页 publicPagerModel<Change>find(String[]propertyName,Object[]value,intfirstResult,intmaxResult);}申请修改服务接口publicinterfaceChangeService{//查看 publicChangefindById(Integerid); //添加申请修改 publicvoidsaveOrUpdate(Changechange,IntegerpersonId); //添加申请修改 publicvoidsaveOrUpdate(Changechange); //删除 publicvoiddelete(Changechange); //分页 publicPagerModel<Change>find(String[]propertyName,Object[]value,intfirstResult,intmaxResult);}6.2.7测试计划采用junit4测试1)测试修改申请表的ServicepublicclassChangeServiceTestextendsTestCase{ @Resource(name="changeService") privateChangeServicechangeService; protectedvoidsetUp()throwsException{ ApplicationContextcxt=newFileSystemXmlApplicationContext("/WebRoot/WEB-INF/applicationContext.xml"); changeService=(ChangeService)cxt.getBean("changeService"); } publicvoidtestDelete(){ System.out.println(changeService.findById(21)); changeService.delete(changeService.findById(21)); } publicvoidtestDeleteAll(){ }}测试结果:成功!6.2.8尚未解决的问题获取数据库时的乱码问题,统一采用UTF-8的编码格式。6.2.9执行界面查看个人信息(25)图6-17查看个人信息图查看工资信息(26)图6-18查看工资信息图查看未发工资的信息(27)图6-19查看未发工资信息图申请修改(28)图6-20申请修改信息图添加申请修改单(29)图6-21申请修改信息图参考文献[1]刘建涛.工资管理系统之数据库设计[DB],2015[2]蒋文明.工资管理系统之需求分析[CP],2015[3]邓杨.工资管理系统之概要设计[CP],2015[4]黄涛.工资管理系统之测试分析报告[CP],2015[5]朱元三.软件工程技术概论[CP].北京:科学出版社,2002
[6]华东师范大学.计算机软件需求说明编制指南(GB9385-2008).北京:中国标准出版社,2008
[7]周明德、冯惠、韩乃平等.计算机软件产品开发文件编制指南(GB8657-2006).北京:中国标准出版社,2006
[8]冯惠、王宝艾、周明德、石柱、杨根兴、朱学其、赵大哲、欧阳树生、王凌、韩红强.计算机软件开发规范(GB8566-2007).北京:中国标准出版社,2007基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基于增强型51系列单片机的TCP/IP协议栈的实现基于单片机的蓄电池自动监测系统基于32位嵌入式单片机系统的图像采集与处理技术的研究基于单片机的作物营养诊断专家系统的研究基于单片机的交流伺服电机运动控制系统研究与开发基于单片机的泵管内壁硬度测试仪的研制基于单片机的自动找平控制系统研究基于C8051F040单片机的嵌入式系统开发基于单片机的液压动力系统状态监测仪开发模糊Smith智能控制方法的研究及其单片机实现一种基于单片机的轴快流CO〈,2〉激光器的手持控制面板的研制基于双单片机冲床数控系统的研究基于CYGNAL单片机的在线间歇式浊度仪的研制基于单片机的喷油泵试验台控制器的研制基于单片机的软起动器的研究和设计基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究基于单片机的机电产品控制系统开发基于PIC单片机的智能手机充电器基于单片机的实时内核设计及其应用研究基于单片机的远程抄表系统的设计与研究基于单片机的烟气二氧化硫浓度检测仪的研制基于微型光谱仪的单片机系统单片机系统软件构件开发的技术研究基于单片机的液体点滴速度自动检测仪的研制基于单片机系统的多功能温度测量仪的研制基于PIC单片机的电能采集终端的设计和应用基于单片机的光纤光栅解调仪的研制气压式线性摩擦焊机单片机控制系统的研制基于单片机的数字磁通门传感器基于单片机的旋转变压器-数字转换器的研究基于单片机的光纤Bragg光栅解调系统的研究单片机控制的便携式多功能乳腺治疗仪的研制基于C8051F020单片机的多生理信号检测仪基于单片机的电机运动控制系统设计Pico专用单片机核的可测性设计研究基于MCS-51单片机的热量计基于双单片机的智能遥测微型气象站MCS-51单片机构建机器人的实践研究基于单片机的轮轨力检测基于单片机的GPS定位仪的研究与实现基于单片机的电液伺服控制系统用于单片机系统的MMC卡文件系统研制基于单片机的时控和计数系统性能优化的研究基于单片机和CPLD的粗光栅位移测量系统研究单片机控制的后备式方波UPS提升高职学生单片机应用能力的探究基于单片机控制的自动低频减载装置研究基于单片机控制的水下焊接电源的研究基于单片机的多通道数据采集系统基于uPSD3234单片机的氚表面污染测量仪的研制\t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗质量总结
- 社区居民动员社会工作专业教学案例宝典
- 《天然药物分析总论》课件
- 中医感冒的临证护理
- 《透视图画法》课件
- 圣诞活动创意音乐课件
- 培训机构维护技巧
- 病案(病历)封存、启封制度
- 《奥林匹克公园小品》课件
- 人流术后的观察及护理
- 【课件】点线传情-造型元素之点线面+课件高中美术人美版(2019)选择性必修1+绘画
- 2024年麻醉药品及精神药品合理应用培训考试试题
- 2024-2025学年新教材高中物理 第一章 动量守恒定律 1 动量教案 新人教版选择性必修第一册
- 农村户改厕施工协议书
- 药事管理实训报告
- 品管圈PDCA持续质量改进提高静脉血栓栓塞症规范预防率
- 儿童支气管哮喘规范化诊治建议(2020年版)
- 2023年人教版中考物理专题复习-九年级全册简答题专题
- ISO28000:2022供应链安全管理体系
- 屋顶光伏发电应急预案
- 保护性约束课件
评论
0/150
提交评论