当前位置:首页 >> 管理学 >>

企业员工信息管理系统


本科毕业设计说明书
企业员工信息管理系统的设计与实现 EMPLOYEE INFORMATION MANAGEMENT SYSTEM DESIGN AND IMPLEMENTATION

学院(部) : 专业班级: 学生姓名: 指导教师:

2012 年 5 月 25 日

企业员工信息管理系统的设计与实现 摘要

现今互联网发展越来越迅速,给人们的工作和生活带来了极大的便利和高效,信 息化,电子化已经成为节约运营成本,提高工作效率的首选。因此在信息化科技飞速 发展的今天,借助于电脑,通过员工信息管理系统管理各部门职工,能为企业人力资 源的管理者提供人性化的服务。同时也能为企业的员工提供一定的方便。 本系统具有多方面特点: 系统功能完备, 用户使用方便简捷, 人性化的用户界面, 安全保密设置齐全,大大减少了操作人员和用户的工作负担,提高了企业员工信息管 理的工作效率和企业的信息化的水平。 本论文从员工信息管理系统的初步调查开始, 详细介绍员工信息管系统的需求分 析和数据流程分析,并进行了系统总体结构设计、数据结构和数据库设计、输入输出 设计等。

关键词:J2EE,Mysql,struts2,企业员工信息管理

I

EMPLOYEE INFORMATION MANAGEMENT SYSTEM DESIGN AND IMPLEMENTATION ABSTRACT

Nowadays, the Internet development is fast, bringing people's work and life tremendous convenience with efficiently.Therefore, the rapid development of technology of information technology today, through the use of computers, employee information management system to manage the various departments and workers, to provide personalized service for corporate human resources managers.Also provides a convenience for the employees of the enterprise. This system has a various characteristics:The system function is complete, using conveniently, the customer interface humanization, the safety keeps secret a constitution well-found, reduced an operation the work of the personnel and customer burden consumedly.Raise the work efficiency of the business enterprise information management and the information-based level of the business enterprise. Papers from personnel management information system, the preliminary survey began detailed introduction of human resource management information system requirements analysis, and data flow analysis, and a system overall structure design, data structure and database design, input/output design, etc.

KEYWORDS:J2EE, Mysql,struts2,Employee information management

II

目录
摘要.................................................................... I ABSTRACT............................................................... II 1 绪论.................................................................. 1 1.1 课题来源 .......................................................... 1 1.2 研究目的 .......................................................... 1 1.3 研究意义 .......................................................... 2 2 方案论证.............................................................. 3 2.1 可行性要求 ........................................................ 3 2.1.1 经济可行性 .................................................... 3 2.1.2 技术可行性 .................................................... 3 2.2 需求分析 .......................................................... 9 2.2.1 系统用户 ..................................................... 10 2.2.2 系统功能需求 ................................................. 10 3 系统设计............................................................. 11 3.1 系统架构设计 ..................................................... 11 3.2 系统功能模块设计 ................................................. 11 3.2.1 登录页面 ..................................................... 11 3.2.2 模块分析 ..................................................... 12 3.3 业务实体设计 ..................................................... 16 3.4 设计域模型 ....................................................... 16 3.5 设计数据模型 ..................................................... 16 4 网站前台的设计....................................................... 19 4.1 网站登录界面的设计 ............................................... 19 4.2 员工信息管理界面设计 ............................................. 20 4.3 部门管理页面设计 ................................................. 22 4.4 员工工资管理设计 ................................................. 24 4.5 员工考勤管理设计 ................................................. 24 4.6 用户密码修改模块的设计 ........................................... 26 4.7 退出系统模块的设计 ............................................... 26 5 网站模块功能的实现................................................... 27 5.1 用户登录实现 ..................................................... 27 5.2 员工信息管理模块实现 ............................................. 28
i

5.3 部门管理模块的实现 ............................................... 31 5.4 工资管理模块的实现 ............................................... 33 5.5 考情管理模块的实现 ............................................... 33 5.6 系统管理模块的实现 ............................................... 35 6 软件测试............................................................. 36 6.1 模块测试 ......................................................... 36 6.2 集成测试 ......................................................... 36 结论................................................................... 38 参考文献............................................................... 39 致谢................................................................... 40

ii

1 绪论
随着计算机技术、网络技术和信息技术的发展,现在办公系统更趋于系统 化、科学化和网络化。网络办公自动化系统是计算机技术和网络迅速发展的一 个办公应用解决方案,它的主要目的是实现信息交流和信息共享,提供协同工 作的手段,提高办公的效率,让人们从繁琐的有纸办公中解脱出来。现在许多 的机关单位的员工信息管理水平还停留在纸介质的基础上,这样的机制已经不 能适应时代的发展,因为它浪费了许多人力和物力,在信息时代这种传统的管 理方法必然被计算机为基础的信息管理所取代。 本系统就是基于本企业的员工信息管理而设计的,是对企业的员工信息 资 料进行管理,为人事管理人员提供了一套操作简单、使用可靠、界面友好、易 于管理和使用的处理工具。本系统对人事各种数据进行统一处理,避免数据存 取、数据处理的重复,提高工作效率,减少了系统数据处理的复杂性。本系统 不仅使学院人事管理人员从繁重的工作中解脱出来,而且提高了人事管理的效 率,提高了人事管理的科学性,方便了用户查询、管理人员进行管理。 在已跨入 21 世纪的今天,各个大中型企业,乃至小型企业都趋向于电子化 智能化管理,不在止步于账本和笔,通过各种各样的软件管理系统,加快了企 业的人员信息管理,同时也减轻了人们的工作压力。 1.1 课题来源 随着科学技术的发展企业公司已经迈入智能化、网络化,越来越多的事件 都是通过网络来处理,所以一个应用于企业员工信息管理的软件也是越来越重 要。通过这个软件可以很简单的对企业的员工基本信息资料、部门信息和员工 考勤来管理,很大程度的提高了企业的人事管理的办事效率,同时也减轻了企 业的工作压力。 近年来网络盛行,丰富的内容加上绚丽的页面, 具有丰富的多媒体表现与 互动特点, 毋庸置疑, 网站已成为最吸引人的也最有效的信息传递手段和方式。 1.2 研究目的 为企业提供一个能够方便的管理员工信息的软件,可 以实现公司对员工以 及部门信息的操作,同时能够在此次的设计中有一个良好的锻炼过程。立志于 为满足企业的需要,站在企业人事部门的角度考虑,完成此次设计。

1

1.3 研究意义 做一个企业员工信息管理系统,就是为了满足企业需求所定制的,所以他 首先要做的是满足最基本得员工信息的增删改查,在此基础上进行功能的扩展, 其次是部门管理,工资管理等等。 一个正规性企业都希望自己的员工管理非常合理,如此复杂性的操作如果 通过人手动的写,会非常的麻烦。基于这一点考虑到设计一个管理类型的软件, 来解决这个繁琐的问题,方便与企业的工作管理以及一些制度的规定。 在企业中,员工信息管理工作是非常重要的一项工作,它负责整个企业的 日常人事安排,员工的人事管理等。高效的人事管理可以提高企业的市场竞争 力,使企业具有更强的凝聚力和活力。为此,提高员工管理工作的效率,设计 一套员工信息管理系统具有实际应用意义。

2

2 方案论证
2.1 可行性要求 开发任何一个基于计算机的系统都会受到时间和资源的限制。因此在开发 软件项目之前,必须根据可利用的时间和资源等条件进行可行性研究。可行性 研究工作的主要任务不是研究如何解决问题,而是要用最小的代价在最短的时 间内确定该项目是否具有开发的可行性。 可行性研究主要包括经济可行性研究,技术可行性研究,运行、操作可行 性研究,法律可行性研究和开发方案的选择。 典型的可行性研究应从以下几步进行。 ( 1 )复查初步分析结果。对系统初步的分析结果和报告书进行复查,改正 含糊或不确切的叙述,重新确定系统目标与规模,清晰地描述对系统的所有约 束条件。 ( 2)研究现有的条件。找出其基本功能和基本信息,指出其缺点或局限性。 ( 3 )导出新系统高层逻辑模型。用某种图形工具导出系统高层逻辑模型, 并与现有系统进行比较。 ( 4 )导出新系统的高层物理解法,提出多个供选择的解决方案,并对每一 个方案的经济可行性、技术可行性、运行和操作可行性等进行分析比较。 ( 5 )推荐建议的方案。如果系统分析员人为之得开发,则应指出开发的价 值、推荐方案的理由,并为推荐的系统草拟一份开发计划,并提交可行性研究 报告等全部文档。若分析员认为不值得开发,也应拿出充分的理由。 ( 6)评审、复审和决策。可行性研究最后要通过技术评审和管理复审,开 发方和客户方或使用部门负责人根据成本 - 效益分析等各项可行性研究的结论 决策是否继续这项工程。 而对于我的这次毕业设计来说可行性研究就是主要从两个方面考虑,一是 经济可行性研究;二是自身的软件开发技术水平,即技术可行性研究。 2.1.1 经济可行性 开发一个本系统的开发可以解决企业人事管理遇到的耗费大量资金和人 力,管理内容繁复,而且容易丢失的问题。本系统的开发周期为 2 个月,耗费 资金较少,且实用价值很高,各类企事业单位及学校等部门都可以使用。 2.1.2 技术可行性 1、Mysql 数据库
3

Mysql 是一个快速、多线程、多用户的 SQL 数据库服务器, 其出现虽然只 有短短的数年时间,但凭借着“开放源代码”的东风,它从众多数据库中脱颖 而出,成为 PHP 的首选数据库。相比较其他数据库而言, Mysql 可以称得上是 目前运行速度最快的 Sql 语言数据库。 除了具有其他数据库所不具备的功能和选 择之外, Mysql 数据库是一种完全免费的产品, 用户可以直接从网上下载数据库, 用于个人或商业用途,而不必支付任何费用,这也是我选择用 Mysql 数据库的 主要原因,除此之外还具有以下主要特点: ( 1 ) Mysql 的核心程序采用完全的多线程编程。线程是轻量级的进程,它 可以灵活地为用户提供服务,而不过多地占用系统资源。用多线程和 C 语言实 现的 Mysql 能容易充分利用 CPU 。 ( 2 ) Mysql 可 运 行 在 不 同 的 操 作 系 统 下 。 简 单 地 说 , Mysql 可 以 支 持 Windows95/98/NT/2000 以及 UNIX 、Linux 等多种操作平台。这意味着在一个操 作系统中实现的应用可以很方便地移植到其他操作系统下。 ( 3 ) Mysql 有一个非常灵活而且安全的权限和口令系统。当客户与 Mysql 服务器连接时,他们之间的所有口令传送被加密,而且 Mysql 支持主机认证。 ( 4 )Mysql 支持大型的数据库。虽然对于用 PHP 编写的网页来说只要能够 存放上百条以上的记录数据就足够了,但 Mysql 可以方便地支持上千条记录的 数据库。作为一个开放源代码的数据库,Mysql 可以针对不同的应用进行相应的 修改。 ( 5 ) Mysql 拥有一个非常快速而且稳定的基于线程的内存分配系统,可以 持续使用而不必担心其稳定性。事实上,Mysql 的稳定性足以应付一个超大规模 的数据库。 2、开发技术的选择 1 ) J2EE ( 1 )简化结构 J2EE 平台支持简化的、基于组件开发模型,由于 J2EE 基于 Java 编程语言 和 J2SE 平台,它提供了编写一次,随处运行的可移植性,遵循 J2EE 标准的所 有服务器都支持该模型。 EJB 组件使编写应用程序更为简单。尽管 EJB 体系结构复杂,但应用程序 开发人员一般都必再编写访问系统服务的代码, EJB 容器会实现系统级的服务, 例如,事务、安全性等。 另外, J2EE 还支持异构环境。基于 J2EE 的应用程序不依赖任何特定操作 系统、中间件或硬件,因此,设计合理的基于 J2EE 的程序只需开发一次就可以
4

部署到各种平台,这在典型的异构企业算环境中是十分关键的。 J2EE 标准还允 许客户订购与 J2EE 兼容的第三方的现成组件,把其部署到异构环境中,节省了 由自己制订整个方案所需的费用。 ( 2 )提高开发效率 由于组件技术的使用,可以按照开发人员的技能对应用程序开发进行分工, 并行开发,提供整体开发效率。例如:图形设计师创建 JSP 模板,商业逻辑由 该领域的专家完成, JSP 页面和 EJB 由 Java 工程师完成,应用程序的装配和部 署由团队中其他的成员完成,其中许多工作可以同时进行,有助于加速应用程 序的开发。 ( 3 )可移植性强 除了 Java 语言固有的可移植性外, EJB 体系结构在 Bean 和支持该 Bean 的 容器之间提供了一套标准化的应用程序编程接口,这使开发人员能够将 Bean 从 一种操作环境移植到另一种操作环境,而无需重新编写其源代码。 ( 4 )重用性好 由于在 EJB 模型中,各个软件组件都是严格分离的,因此,可以从现有的 软件组件装配出服务器端应用程序,这与从现有的 JavaBean 可以装配出客户端 应用程序一样,使软件能够重用。 ( 5 )易于维护 基于组件的设计简化了应用程序的维护。由于组件可以被独立地更新和替 代,通过更新应用程序中特定的组件,新的功能可以被很容易地增加。 ( 6 )可伸缩性 企业必须要选择一种服务器端平台,以便满足那些在它们系统上进行商业 动作大批新客户。 基于 J2EE 平台的应用程序可被部署到各种操作系统上, 例如, 可被部署到高端 UNIX 或其他的大型机系统上。 J2EE 领域的供应商提供了更为 广泛的负载平衡策略,能消除系统中的瓶颈,允许多台服务器集成部署,实现 可高度伸缩的系统,满足未来商业应用的需要。 ( 7 )被广泛接受 主要的 IT 供应用商都采纳 EJB 体系结构,不同供应商的产品只要符合 EJB 体系结构,就都是可互操作的。 ( 8 )保护投资 由于企业必须适应新的商业需求,充分利用现有的企业信息系统投资,而 不是重新制定,全盘更新方案就变得尤为重要,这样,一个以渐进的(而不是 激进的,全盘否定的)方式建立在现有系统之上的服务器平台是大多数公司所 希望的。

5

J2EE 架构可以充分利用用户有的投资,通过允许将现有的信息系统和资产 “包裹”在 J2EE 应用程序中,不要求客户更换现有技术。事实上,在关系数据 库中存储数据的企业,已经有了一套已具雏形的实体 Bean ,正等着通过 EJB 外 壳去访问。 这之所以成为可能,主要是因为 J2EE 拥有广泛的业界支持和一些重要的 “企业计算”领域供应商的参与,每一个供应商都对现有的客户提供了不用废 弃自己已有投资的升级途径。由于基于 J2EE 平台的产品几乎能够在任何操作系 统和硬件运行,现有的操作系统和硬件也能被保留使用。 2 ) MVC 模式 模型-视图-控制器(MVC)是 Xerox PARC 在八十年代为编程语言 Smalltalk -80 发明的一种软件设计模式, 至今已被广泛使用。 最近几年被推荐为 Sun 公司 J2EE 平台的设计模式,并且受到越来越多的使用 ColdFusion 和 PHP 的开发者的欢迎。 MVC 模式的好处各施其职,互不干涉。在 MVC 模式中,三个层各施其职,所以如果 一旦哪一层的需求发生了变化, 就只需要更改相应的层中的代码而不会影响到其它层 中的代码。网页设计人员可以进行开发视图层中的 JSP,对业务熟悉的开发人员可开 发业务层,而其它开发人员可开发控制层。有利于组件的重用分层后更有利于组件的 重用。如控制层可独立成一个能用的组件,视图层也可做成通用的操作界面。 MVC (Model-View-Controller) 应用程序结构被用来分析分布式应用程序的特征。 这种抽象结构能有助于将应用程序分割成若干逻辑部件,使程序设计变得更加容易。 MVC 结构提供了一种按功能对各种对象进行分割的方法(这些对象是用来维护 和表现数据的) ,其目的是为了将各对象间的耦合程度减至最小。MVC 结构本来是为 了将传统的输入(input) 、处理(processing) 、输出(output)任务运用到图形化用户 交互模型中而设计的。但是,将这些概念运用于基于 Web 的企业级多层应用领域也 是很适合的。 在 MVC 结构中,模型(Model)代表应用程序的数据(data)和用于控制访问和 修改这些数据的业务规则(business rule) 。通常模型被用来作为对现实世界中一个处 理过程的软件近似,当定义一个模型时,可以采用一般的简单的建模技术。 当模型发生改变时,它会通知视图(View) ,并且为视提供查询模型相关状态的 能力。同时,它也为控制器(Controller)提供访问封装在模型内部的应用程序功能的 能力。 一个视图(View)用来组织模型的内容。它从模型那里获得数据并指定这些数据 如何表现。当模型变化时,视负责维持数据表现的一致性。视同时将用户要求告知控 制器(Controller) 。 控制器(Controller)定义了应用程序的行为;它负责对来自视的用户要求进行解
6

释,并把这些要求映射成相应的行为,这些行为由模型负责实现。在独立运行的 GUI 客户端,用户要求可能是一些鼠标单击或是菜单选择操作。在一个 Web 应用程序中, 它们的表现形式可能是一些来自客户端的 GET 或 POST 的 HTTP 请求。模型所实现 的行为包括处理业务和修改模型的状态。根据用户要求和模型行为的结果,控制器选 择一个视作为对用户请求的应答。通常一组相关功能集对应一个控制器。 (1)各施其职,互不干涉 在 MVC 模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就 只需要更改相应的层中的代码而不会影响到其它层中的代码。假如业务发生了变化, 如在取文章时可能 webmaster 把一些文章作了无效标志, 不能直接把所有文章取出来, 只能取出有效的文章, 这时业务就发生了改变。 再设想一下, 如果这个业务逻辑在 100 个页面中都要用到,那么 MVC 模式就体现了它的灵活性。我们可以不更改任何 JSP, 只要更改 model 层中的相应类中的 SQL 语句即可。 (2)有利于开发中的分工 在 MVC 模式中,由于按层把系统开,那么就能更好的实现开发中的分工。网页 设计人员可以进行开发视图层中的 JSP,对业务熟悉的开发人员可开发业务层,而其 它开发人员可开发控制层。 (3)有利于组件的重用 分层后更有利于组件的重用。如控制层可独立成一个能用的组件,视力层也可做 成通用的操作界面。 3 ) struts2 框架的使用 此次程序中主要的是引入了 Struts2 和 hibernate 框架。 传统的 java web 应用 程序是采用 jsp+servlet+javabean 来实现的, 这种模式实现了最基本的 MVC 分层, 使得程序结构分为几层,有负责显示的 jsp 、负责流程逻辑控制的 servlet 、负责 数据封装的 javabean 。但是这种结构仍然存在问题 :如 jsp 页面中需要使用符号 嵌入很多的 java 代码,造成页面结构混乱, servlet 和 javabean 负责了大量的跳 转和运算工作,耦合紧密,程序复用度低等等。于是便是首先出来了 Struts 。而 Struts 2 是 Struts 的下一代产品,是在 struts 和 WebWork 的技术基础上进行了 合并的全新的 Struts 2 框架。 其全新的 Struts 2 的体系结构与 Struts 1 的体系结构 的差别巨大。 Struts 2 以 WebWork 为核心, 采用拦截器的机制来处理用户的请求, 这样的设计也使得业务逻辑控制器能够与 Servlet API 完全脱离开,所以 Struts 2 可以理解为 WebWork 的更新产品。虽然从 Struts 1 到 Struts 2 有着太大的变 化, 但是相对于 WebWork , Struts 2 只有很小的变化。 Struts2 使用了 WebWork 的设 计核心,而不是 Struts1 的设计核心。 Struts2 中大量使用拦截器来处理用户的请 求,从而允许用户的业务逻辑控 制器与 Servlet API 分离。
7

Struts2 框架由 3 个部分组成:核心控制器 (FilterDispatcher) 、业务控制器和 用户实现的业务逻辑组件。核心控制器 (FilterDispatcher) 是 Struts2 框架的核心控 制器,该控制器作为一个 filter 运行在 web 应用,它负责拦截所有的用户请求, 当用户请求到达时,该 Filter 会过滤用户请求;业务控制器组件就是用户实现 Action 类的实例; JavaEE 应用里的模型组件,通常指系统的业务逻辑组件,而 隐藏在系统的业务逻辑组件下面的可能还包含 Dao 、领域对象等组件,这也就是 Struts2 的模型组件,同时 Struts2 能使用 JSP 、FreeMarker 、Velocity 等作为视图 技术。 Struts 2 框架的大致处理流程如下: ( 1 )浏览器发送请求,例如请求 /mypage.action 、 /reports/myreport.pdf 等。 ( 2) Control 中的核心控制器 FilterDispatcher 根据请求调用相应的业务逻 辑控制器 (Action) 。 ( 3 )回调 Action 中的 execute() 方法 , 并在方法体内调用业务逻辑组件来处 理请求 (Model) 。既可以是将数据保存到数据库,也可以从数据库中检索信息。 实际上,因为 Action 只是一个控制器,它会调用业务逻辑组件来处理用户的请 求。 ( 4 )返回响应,通过 execute 方法将信息返回到 FilterDispatcher 。 ( 5 ) 查 找 响 应 , FilterDispatcher 根 据 配 置 查 找 响 应 的 是 什 么 信 息 如 : SUCCESS 、 ERROR ,将跳转到哪个 jsp 页面。 ( 6 )响应用户( jsp---> 客户浏览器端显示) 。 4 ) Hibernate 的使用 Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常 轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵 数据库。 Hibernate 可以应用在任何使用 JDBC 的场合,既可以在 Java 的客户 端程序使用,也可以在 Servlet/JSP 的 Web 应用中使用,最具革命意义的是, Hibernate 可以在应用 EJB 的 J2EE 架构中取代 CMP ,完成数据持久化的重任。 减低各个模块之间的耦合性。 5 ) Spring 的使用 Spring 是一个开源框架,它由 Rod Johnson 创建。它是为了解决企业应用开 发的复杂性而创建的。 Spring 使用基本的 JavaBean 来完成以前只可能由 EJB 完 成的事情。然而,Spring 的用途不仅限于服务器端的开发。从简单性、可测试性 和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。 传统 J2EE 应用的开发效率低,应用服务器厂商对各种技术的支持并没有真
8

正统一,导致 J2EE 的应用没有真正实现 Write Once 及 Run Anywhere 的承诺。 Spring 作为开源的中间件, 独立于各种应用服务器, 甚至无须应用服务器的支持, 也能提供应用服务器的功能,如声明式事务、事务处理等。 Spring 致力于 J2EE 应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说 Spring 是企 业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。然而,Spring 并不想取代那些已有的框架,而是与它们无缝地整合。 3、 开发工具 Myeclipse 的选择 Eclipse 是一个 IDE( Integrated Developing Environment ) ,而这个 IDE 是允 许安装第三方开发的插件来使自身的功能得到扩展和增强的,而 Myeclipse 就是 其中的一种有名的插件集之一,MyEclipse 将开发者常用到的一些有用的插件都 集合起来,但它是收费的。 Eclipse 是一个开放源代码 ,基于 Java 的可扩张的开发平台,多数人都是将 Eclipse 作为 Java 的集成开发环境使用,虽然 Eclipse 使用 Java 开发:但 Eclipse 不仅仅局限于 Java 开发,还可用于其它语言的开发,如 C/C++ ; Eclipse 是一个 框架和一组服务, 它通过各种插件来构建开发环境, 因此只要提供支持 C/C++ 插 件便能进行相应语言的开发。 MyEclipse 为 Eclipse 提供了一个大量私有和开源的 Java 工具的集合,这解 决了各种开源工具的不一致和缺点。 NitroX 是一个繁杂而强大的加速 Java Web 应用开发的工具, 还包含了一个强大且能够编译所有 JSP 和 Struts Web 应用的工 具 AppXRay。这些工具解析 Java 和 XML 配置文件。 MyEclipse 的 实 际 价 值 来 自 包 含 的 发 布 包 中 的 大 量 的 工 具 。 如 CCS/JS/HTML/XML 的编辑器, 帮助创建 EJB 和 Struts 项目的向导并产生项目的 所有主要的组件如 action/session bean/form 等。还包含编辑 Hibernate 配置文件 和执行 SQL 语句的工具。 2.2 需求分析 从一个企业的角度来设计这个网站,首先要了解用户需要什么,从这一点出发来 把这个软件的内容填充起来。在满足用户的基础上对网站功能的一个丰富化,每当做 完一个功能就站在客户的立场对功能进行评测,如果有需要改善的地方,则在慢慢的 进行完善。 本软件主要是对企业的员工进行的一种管理,人员的工资,所属部门,考勤进行 统一的管理。 这里涉及到的不同的公司里面可能所需要的赏罚制度不一样所以就没有 更多的进行。本系统就是一个架构原型,在此功能上可以更加的完善和美化。

9

2.2.1 系统用户 本系统有定义了两个用户,普通用户,管理员,不同用户能够执行的功能是不一 样的,普通用户只能查看自己的信息,管理员可以对每个员工的信息,部门信息进行 增删改查操作。 2.2.2 系统功能需求 (1)用户登录 用户在登录系统的时候首先是进入系统的登录界面,前面接受的用户名,密码以 及所属身份权限去后台进行验证,如果用户名不存在返回登录页面,如果存在用户名 则就验证密码,如果密码也存在就成功跳转到菜单页面,如果密码错误则返回登录页 面,并提示相应信息。 (2)系统功能分析 本系统主要是考虑对公司人员的一个管理,从基本功能出发,首先是员工,其次 是部门,再者是考勤,最后是工资。还有一个系统功能是用户来自己修改自己的登录 密码。 员工:满足添加一个员工,对员工的增删改查等操作。在这里也可以对员工的身 份权限和职位进行管理。在这里当添加一个员工的时候就为其分配了身份权限,以及 记录了所对应的职位。 每个员工在建立的时候都默认的为其分配了一个相应的用户名 和密码,用户名就是为其分配的员工编号,密码开始默认为 6 个 0。员工添加了以后, 员工可以去系统用户管理界面对自己的密码进行修改以防止有人冒用。 部门:考虑到一个公司里面的部门可能是因为一些事情的原因,因而进行了某些 变动,通过这里可以对部门进行修改。 考勤:公司里面难免少不了员工的迟到,缺勤等诸多事情,在这个时候考虑人事 部此时要了解信息,并且对人员在进行合理的分配要做出一定统筹安排。 工资:不同的员工根据能力的不同因而给的报酬也相应的不同,从这里入手对员 工工资进行一个管理。

10

3 系统设计
3.1 系统架构设计 我把整个系统划分为四大块,视图层,控制层,业务层,持久化层。 视图层主要负责向用户显示或者向后台传递数据, 而控制层则是实现对前台数据 传来的值进行判断和控制,通过与业务层之间的接口来实现数据的传入和传输,之间 的通过单一接口来降低模块之间的耦合性。从而方便与代码的修改和后期的功能添 加。 3.2 系统功能模块设计 系统功能模块划分如图 3-1 所示,主要分为员工信息管理页面、部门管理页面、 考勤页面、工资页面和系统管理页面。
企业员工信息查询系统

员工信息管理

部门管理

考 勤

系统管理

员工工资管理

员 工 查 找

员 工 添 加

部 门 查 找

部 门 添 加

考 勤 查 看

考 勤 登 记

登 陆 密 码 修 改

员 工 工 资 查 询

图 3-1 企业员工信息管理系统功能模块图 3.2.1 登录页面 登录成功后进入主菜单页面,失败则返回登录页面,并且提示错误信息。页面根 据登录人员的权限进入不同主菜单页面,只有管理员才能进行更多的操作,而普通用 户只能进行少部分的操作。具体流程如图 3-2 所示。

11

开 始





N

验 证

Y 根据不同的权限进入不同菜单页面

图 3-2 系统登录流程图

3.2.2 模块分析 1、员工信息管理设计 管理员可以对员工进行增删改查的操作,而普通用户只能进行查询。如图 3-3 所 示。
全部员工信息查看 管理员用户 员工信息修改

员 工 信 息 管 理 模 块

员工信息删除

员工信息添加

普通用户

自身信息查看

图 3-3 员工信息管理功能模块关系图
12

(1)增加用户页面 对员工的基本信息进行添加,员工的基本信息如图 3-4 所示。
职员编号 民族 家庭地址

职员姓名 性别

婚姻状况

职工基本信息

文化程度

出生日期 部门号 入职时间 手机

固定电话

图 3-4 员工基本信息 E-R 图

(2)员工信息查看 可以查看员工的信息,对员工的信息作相应的修改,并且能删除员工信息。 具体 流程如图 3-5 所示。
员工查找

详细查看

员工信息管理

员工查看 员工信息修改

员工信息删除

图 3-5 员工查看流程图 2、部门管理设计 只有管理员才能对部门进行进行增删改查的操作。 具体的部门信息如图 3-6 所示。

13

部门编号 部门名

部门电话

部门经理

设立时间

部门信息

图 3-6 部门信息 E-R 图 部门的查看流程如图 3-7 所示。
部门查找

部门管理

部门查看

部门信息修改

部门删除

图 3-7 部门查询流程图 3、 系统用户信息 这里不管管理员还是普通员工都可以修改自己的登录密码。密码修改流程如图 3-8 所示。

14

密码修改

输入旧密码和新密码

修改成功

返回登录页面

图 3-8 用户密码修改流程图 4、考勤页面设计 只有管理员有对员工迟到,早退,缺勤考勤登记的权限,普通员工的只有请假的 权限考勤进行增查改。如图 3-9 所示。
员工考勤查询

管理员用户 员工考勤登记

考 勤 管 理 模 块

自身考勤查看

普通用户 请 假

图 3-9 考勤管理功能模块关系图

15

5、 工资管理 这个功能只有管理员才能够使用。本系统已经制定了赏罚制度,就是迟到扣除多 少钱,早退扣除多少钱,等如此类的赏罚,本系统根据不同的职位设定的基础工资不 同,在原有的基础工资上进行了进行赏罚。 对赏罚制度设定了一个算法,用来计算每个员工的工资。 3.3 业务实体设计 业务实体在内存中表现为实体域对象,在数据库中表现为关系数据。实现业务实 体包括以下内容: (1) 设计域模型,创建域模型实体对象。 (2) 设计数据模型。 3.4 设计域模型 企业员工信息管理中用到的实体包括员工信息表(worker) 、登录信息(login) 、 部门信息(department) 、职位(job) 、员工职位(staffjob) 、考勤(duty) 。具体含义 如下。 员工信息表( worker ) :是一个员工信息的实体,包含的属性主要有员工姓名 (workerName) 、员工编号(workerCd) 、民族(nation) 、电话(telephone) 、家庭电 话 (hometelephone) 、 家庭住址 (address) 、 文化程度 (educational) 、 婚姻状况 (marriage) 、 出生年月(birthday) 、性别(sex) 、部门编号(deptcd) 、入职时间(stime) 。 登录(login)实体内容如下:员工登录账号(useId) ,员工姓名(useName) 、员 工登录密码(usePassword) 、员工权限(use_flg) 。 部门信息 (department) 实体的内容如下: 部门编号 (deptId) 、 部门名 (deptname) 、 部门经理(deptmanage) 、部门电话(telephone) 、设立时间(deptime) 。 职位( job )实体如下:职位 id ( managecd ) 、职位名( manage_name ) 、薪水 (job_salary) 。 员工职位(staffjob)实体如下:员工编号(staffcd) 、职位编号(managecd) 。 考勤 (duty) 实体如下: id (dutyId) 、 员工编号 (workerCd) 、 员工姓名 (workerName) 、 开始时间( duty_time1 ) 、结束时间( duty_time2 ) 、部门编号( deptId ) 、考勤状态 (duty_type) 。 3.5 设计数据模型 员工信息表(worker) 、登录信息(login) 、部门信息(department) 、职位(job) 、 员工职位(staffjob) 、考勤(duty) 、在数据库中都有相对应的表。下面就详细说明各 个表之间的关系,以及表所对应的属性。
16

员工表(worker)见表 3-1。 表 3-1 worker 员工表
字段说明 员工编号 员工名 电话 手机 家庭住址 性别 民族 出身年月日 文化程度 婚姻状况 入职时间 部门编号 列名 workerCd workerName hometelephone telephone address sex nation birthday educational marriage stime deptcd 字段属性 varchar(50) varchar(50) varchar(50) varchar(50) varchar(50) varchar(50) varchar(50) varchar(50) varchar(50) varchar(50) varchar(50) varchar(50) null no no no no no no no no no no no no Fk 键值 pk

登录表(login)见表 3-2,其中包括登录 id,员工帐号,员工密码。 表 3-2 登录表
字段说明 员工登录账号 员工姓名 员工登录密码 员工权限 列名 useId useName usePassword use_flg 字段属性 varchar(50) varchar(50) varchar(50) varchar(50) null no no no no 键值 pk

部门表(dept)见表 3-3,其中包括部门编号,部门名,部门电话,部门经理, 设立时间。 表 3-3 部门表
字段说明 部门编号 部门名 部门经理 部门电话 设立时间 列名 deptId deptname deptmanage telephone deptime 字段属性 varchar(50) varchar(50) varchar(50) varchar(50) varchar(50) null no no no no no 键值 pk

考情表(dutytable)见表 3-4,包括 id、员工编号、开始时间、结束时间和考勤 状态。

17

表 3-4 考勤表
字段说明 id 员工编号 员工姓名 开始时间 结束时间 部门编号 考勤状态 列名 dutyId workerCd workerName duty_time1 duty_time2 deptId jotaicd 字段属性 int(100) varcha(50) varcha(50) varcha(50) varcha(50) varcha(50) varcha(50) null no no no no no no no 键值 pk

职位表(job)见表 3-5,表中有职位 id,职位名。 表 3-5 职位表
字段说明 职位 id 职位 name 薪水 列名 managecd manage_name job_salary 字段属性 int(50) varchar(100) varcha(50) notnull no no no 键值 pk

员工职位表(staffjob)见表 3-6,包含职工表号和职位 id。 表 3-6 员工职位表
字段说明 员工编号 职位 id 列名 workerCd managecd 字段属性 varcha(50) varcha(50) notnull no no 键值 Fk Fk

18

4 网站前台的设计
4.1 网站登录界面的设计 一个企业的员工信息管理系统不会像普通的网站一样什么人都可以访问, 只有内 部员工才能具有访问的权限,因此网站的登录页面是必不可少的。通过登录能够分析 出访问者的权限,系统根据权限给予不同的反馈。网站登录界面如图 4-1 所示。

图 4-1 登录页面 登录页面里面有输入用户名和密码的 text 框,有控制登录权限的单选按钮,管 理员单选按钮值为 0,员工单选按钮值为 1,也就是对应 login 表的 use_flg 的值。 输入用户名和密码点击登录按钮,就会把前台的值传递给后台,后台去数据库里面进 行验证。如果用户不存在,提示错误信息“用户不存在”,如图 4-2 所示。

图 4-2 登录用户不存在 如果输入的用户名存在但是密码不正确的话,就会返回 login 页面并且提示错
19

误信息“密码不正确,请重新输入”,如图 4-3 所示。

图 4-3 用户登录密码错误 如果后台验证功,则直接跳转到相应菜单页面,如图 4-4 ,4-5 所示。

图 4-4 管理员登录正确跳转界面

图 4-5 员工登录正确跳转界面 4.2 员工信息管理界面设计 只有管理员成功登录以后,在菜单上才有员工信息管理,员工信息管理有两个二 级菜单。如图 4-6 所示。

图 4-6 员工信息管理的二级菜单 员工查找页面如图 4-7 所示。有按职工号查询、按部门号查询、详细查看、员工 信息修改、删除功能。

20

图 4-7 员工查看页面 员工的检索通过选择不同的单选按钮可以选择不同的检索方式, 根据判断单选按 钮的 value 值来调用不同的查询方法。两种查询都是精确查询,而不是模糊查询。当 输入框的值为空时,检索所有员工的信息。 点击详细按钮可以对对应员工的详细信息进行查看,详细页面如图 4-8 所示。

图 4-8 员工信息详细页面 点击删除按钮首先会弹出删除确认窗口,当点击确认时可删除该员工的所有信 息,如图 4-9 所示。

图 4-9 员工信息删除页面 点击更新按钮会跳转到更新页面,在更新页面除了员工工号不能修改外,其他信
21

息都可以修改,修改后点击“更新”按钮,该用户信息将保存并返回到查看页面。更 新页面如图 4-10 所示。

图 4-10 员工信息修改页面 想添加新员工信息可在员工信息管理二级菜单处点击“员工添加” ,跳转到员工 信息添加页面。该页面一共对三个表进行了操作,当一个员工添加时,不仅在员工基 本信息表添加了该员工的基本信息,同时在 login 表也创建了该员工登录本系统的用 户名,登录密码和登录权限,还在员工职位表添加了该员工所在职位的对应数据。员 工添加页面如图 4-11 所示。

图 4-11 员工添加页面

4.3 部门管理页面设计 本系统的部门管理页面同样只有具有管理员权限的才能对公司的部门进行相应

22

的操作。该模块中主要是设计对公司部门的添加,修改与删除。与员工信息管理模块 一样,在部门管理的二级菜单下有部门查看和部门添加。如图 4-12 所示。

图 4-12 部门管理二级菜单页面 部门查看页面有根据部门号和部门名查询两种检索方法,同时有对部门进行删 除,更新的操作,如图 4-13 所示。

图 4-13 部门查看页面 点击更新按钮就可以跳转到部门更新页面,除了部门号不能修改,部门的其他信 息都可修改,然后保存。部门更新页面如图 4-14 所示。

图 4-14 部门信息更新页面
23

4.4 员工工资管理设计 员工工资查询页面,在该页面中,用户可以查询员工的工资。从图中可以看出该 页面分为查询全部、选择个人查询以及按照部门查询。系统可以根据不同的查询条件 从数据库中查询出相应员工的工资,如图 4-15 所示。

图 4-15 员工工资查询页面 4.5 员工考勤管理设计 员工考勤管理主要是对员工的考勤信息管理, 管理员和普通员工都有这部分的操 作,不同在于两点,一是管理员可以查看所有员工的考勤情况,而普通员工只能查看 自己的考勤情况; 而是管理员可以对员工进行考勤登记, 分别有登记员工迟到, 早退, 缺勤三种情况,普通员工只有请假的权力。菜单设计如图 4-16,4-17 所示。

图 4-16 管理员的考勤管理

图 4-17 普通员工的考勤管理
24

管理员在对考勤查看时,为了方便,设计了按部门号查询的功能,这里只是加了 这功能作为演示,当然为了更方便查询,可以设计按时间段查询,员工号查询等。其 实现原理跟按部门号查询类似,只是改变关键字就行。以下是管理员考勤查看页面, 如图 4-18 所示。

图 4-18 管理员考勤信息查看页面 普通用户考勤查看页面,只能查看自己的出勤状况,所以只是简单地用表格显示 相关信息,如图 4-19 所示。

图 4-19 普通员工考勤信息查看页面 考勤登记页面如图 4-20 所示。

图 4-20 考勤登记页面 普通员工的请假如图 4-21 所示。

25

图 4-21 考勤登记页面 4.6 用户密码修改模块的设计 不管是管理员还是普通员工都有用户登录密码的修改页面。在这个页面,用户通 过旧密码的输入,后台通过与 session 保存的登录密码相比对,如果不正确,会清空 输入值,页面提示错误信息,新密码与确认密码之间也存在比对,不一致情况下也在 页面提示错误信息,在这些比对都正确后才完成旧密码的更新,密码修改成功,这时 跳转到成功页面。修改页面如图 4-22 所示。

图 4-22 用户密码修改页面 4.7 退出系统模块的设计 用户点击退出系统以后,清空当前用户的登录信息,清空 session 里面的数据, 然后跳转到登录页面。

26

5 网站模块功能的实现
5.1 用户登录实现 用户登录的实现主要用了 if 条件语句,不同条件下返回不同结果。条件是在 LoginAction 中通过个 get()方法获取从页面传的 Login 对象 u,与传参数 useId 到 dao 层通过数据库的查找到的 Login 对象 use1 进行比对得到的 bool 型值。在 action 层与 dao 层间,加了 service 层来降低模块之间的耦合度。 为了以后其他模块的操作,在 action 中我把用户登录的用户名,用户密码加入到 session 中。以下是各层的代码。 LoginAction 逻辑层处理: public String execute() throws Exception { ActionContext.getContext().getSession().put("id", u.getUseId()); ActionContext.getContext().getSession().put("password", u.getUsePassword()); ActionContext.getContext().getSession().put("name", u.getUseName()); ActionContext.getContext().getSession().put("useflg", u.getUseFlg()); Login user1=this.service.findUserById(u.getUseId()); Map request=(Map) ActionContext.getContext().get("request"); request.put("u",u); if (user1 == null){ this.addFieldError("ds","用户名不存在,请重新输入!"); return "error";} if(user1.getUsePassword().equals(u.getUsePassword())){ if((user1.getUseFlg().equals(u.getUseFlg()))&&(u.getUseFlg().equals("0"))){ return "success";} else if((user1.getUseFlg().equals(u.getUseFlg()))&& (u.getUseFlg().equals("1"))){ return "success1";}} this.addFieldError("aa", "密码不正确,请重新输入"); return "error";} jlchengServiceImpl 业务层实现,主要是方法参数的传递。 private jlchengDao managementdao; public jlchengDao getManagementdao() { return managementdao;} public void setManagementdao(jlchengDao managementdao) {

27

this.managementdao = managementdao;} public Login findUserById(String id) { return this.managementdao.findUserById(id);} jlchengDaoImpl 持久化层实现 public Login findUserById(String id) { Login user1=(Login)this.getHibernateTemplate().get(Login.class, id); return user1 ;} 5.2 员工信息管理模块实现 (1)用户的查询 因为员工查看页面需要打印出所有员工的信息, 所以在菜单点击员工查看时就已 经触发了 WorkerlistAction,这个 action 用来控制查询数据库中所有的员工,在 dao 层 用 list<Worker>来接受查询的结果, 返回到 action 放入 Map 集合 request 中, 在页面用 迭代器遍历然后打印出来。如下面是部分代码所示。 在 dao 层 public List<Worker> findAllWorkers() {String hql = "from Worker us order by us.workerCd desc"; return (List<Worker>) this.getHibernateTemplate().find(hql);} 在 action 层 public String execute() throws Exception{ Map request = (Map)ActionContext.getContext().get("request"); request.put("list", this.service.findAllWorkers()); return "success";} 在页面上部分代码 <s:iterator value="#request.list" id="us"> <tr> <td><s:property value="#us.workerCd"/></td> <td><s:property value="#us.workerName"/></td> <td><s:property value="#us.stime"/></td> <td><s:property value="#us.deptId"/></td> </tr> </s:iterator> 员工查询还有按员工号和部门号查询,通过 SearchWorkerAction 控制调用不同 service 层的方法从而调用不同 dao 层的不同数据搜索语句。 SearchWorkerAction 层代码:
28

public String execute() throws Exception{ if(search.equals("")){ return "searchAllWorker";} if(search_flg.equals("byWorkerCd")){ Map request = (Map)ActionContext.getContext().get("request"); equest.put("list", this.service.findByCd(search)); return "searchByCd";} if(search_flg.endsWith("byDeptId")){ Map request = (Map)ActionContext.getContext().get("request"); request.put("list", this.service.findByDeptId(search));} return "searchByDeptId"; } Dao 层按员工号查询的方法 public List<Worker> findByCd(String search) { String hql = "from Worker us where us.workerCd=?"; return this.getHibernateTemplate().find(hql, search); } Dao 层按部门号查询的方法 public List<Worker> findByDeptId(String search) { String hql = "from Worker us where us.deptId=?"; return this.getHibernateTemplate().find(hql, search);} (2)员工信息的查看 主要是通过在前台返回来的员工编号, 然后去数据库里面进行详细的检索把检索 出来的值再以查询相同的形式传递出去。 在这里值得一提的是, 这里进行了多表查询, 然后把查询的结果统一用新定义的 bean 接受,然后返回到页面去。如下面代码中的 wd 是 bean 里的 WorkerDept 类定义的对象,WorkerDept 里的属性包含多个表里的属 性。 OneWorkerAction 中的代码: public String execute() throws Exception{ WorkerDept wd=new WorkerDept(); Worker worker=this.service.findById(wo.getWorkerCd()); System.out.println(worker.getDeptId()); System.out.println(worker.getWorkerName()); Department dt=this.service.findBydeptid(worker.getDeptId()); System.out.println(dt.getDeptname());

29

wd.setWorkerCd(worker.getWorkerCd()); wd.setWorkerName(worker.getWorkerName()); wd.setSex(worker.getSex()); wd.setAddress(worker.getAddress()); wd.setEducational(worker.getEducational()); wd.setMarriage(worker.getMarriage()); wd.setNation(worker.getNation()); wd.setBirthday(worker.getBirthday()); wd.setDeptId(worker.getDeptId()); wd.setHometelephone(worker.getHometelephone()); wd.setStime(worker.getStime()); wd.setTelephone(worker.getTelephone()); wd.setDeptname(dt.getDeptname()); Map request=(Map) ActionContext.getContext().get("request"); request.put("workerdept", wd); return "success";} (3)update 更新员工信息 在这里不仅仅是可以对员工的基本信息进行修改, 同时也可以对员工所在的的职 位和登录权限进行修改,从上个用户信息页面到这个页面,仅仅根据传递的员工编号 进行查找。这里涉及到了数据库的多个表之间的联系。员工信息表(Worker),部门 表(deptartment),员工职位表(staffjob) ,Login 表。这三张表之间有关的联系就是员 工号这个属性,通过这个属性能把三张表联系起来,也就我们说的外键。比如我们重 新设定了这个员工的权限,那么我们可以通过接收员工号数据库的 Login 表查找有关 这个员工的数据,然后进行修改再保存。 (4)新员工信息添加 上面也提到过新员工的添加不仅对 Worker 表操作,同时 Login 表,Staffjob 表也 添加了新员工的信息,所以这也是对多表操作,也就要求我们在 action 中定义这三个 表对应的对象,通过 set()方法对这三个对象赋予值,在分别传到持久层调用 save()来 在表里添加新数据。下面是部分有关代码。 Action 层 public String execute() throws Exception{ String name=new String(worker.getWorkerName().getBytes("iso-8859-1"),"utf-8"); String address=new String(worker.getAddress().getBytes("iso-8859-1"),"utf-8"); String education=new String(worker.getEducational().getBytes("iso-8859-1"),"utf-8");

30

String marriage=new String(worker.getMarriage().getBytes("iso-8859-1"),"utf-8"); String nation=new String(worker.getNation().getBytes("iso-8859-1"),"utf-8"); String sex=new String(worker.getSex().getBytes("iso-8859-1"),"utf-8"); worker.setWorkerName(name); worker.setAddress(address); worker.setEducational(education); worker.setEducational(education); worker.setMarriage(marriage); worker.setNation(nation); worker.setSex(sex); login.setUseId(worker.getWorkerCd()); login.setUseName(worker.getWorkerName()); login.setUsePassword("000000"); sjob.setWorkerCd(worker.getWorkerCd()); this.service.saveWorker(worker); this.service.saveLogin(login); this.service.savaStaffjob(sjob); return "success";} 程序中有用到 getBytes()方法,是用来解决中文乱码问题的,把从页面传过来的 值换成 utf-8 格式再赋予给对象,这就保证数据库里保存的不是乱码了。解决乱码问 题的方法有很多,这只是其中一种。 5.3 部门管理模块的实现 部门模块主要分为部门的添加和部门的查询,部门修改以及部门的删除。 (1)部门的添加 设计时把对部门的操作做了简化,只做了单表操作,所以部门的添加也就只是往 department 表添加新数据。由 AddDeptAction 控制,下面是该 action 中的程序。 public class AddDeptAction extends ActionSupport{ private jlchengService service; private Department dept; public jlchengService getService() { return service;} public void setService(jlchengService service) { this.service = service;} public Department getDept() {
31

return dept;} public void setDept(Department dept) { this.dept = dept;} public String execute() throws Exception{ String manage=newString(dept.getDeptmanage().getBytes("iso-8859-1"),"utf-8"); String name=new String(dept.getDeptname().getBytes("iso-8859-1"),"utf-8"); dept.setDeptmanage(manage); dept.setDeptname(name); this.service.save(dept); return "success"; }} (2)部门的查询 按部门号和部门名查询部门的操作跟前面员工信息按员工号与部门号查询员工 的设计思想是一样,所以这里就不做详细说明,下面是部门查询的 action 层代码。 public String execute() throws Exception{ String sh=new String(search.getBytes("iso-8859-1"),"utf-8"); if(sh.equals("")){ return "searchAllDept";} if(search_flg.equals("byDaptId")){ Map request = (Map)ActionContext.getContext().get("request"); request.put("list", this.service.findByDeId(sh)); return "searchBydeId";} if(search_flg.equals("byDeptName")){ Map request = (Map)ActionContext.getContext().get("request"); request.put("list", this.service.findByDeName(sh)); }return "searchBydeName"; } (3)部门的信息修改和删除 这里如同前面的员工得查看和修改是一样的道理,首先根据从页面传递的部门号 查出对应的部门对象,再对这个对象做修改或删除操作。下面是部门修改的 action 层 代码: public String execute() throws Exception{ String manage=new String(dept.getDeptmanage().getBytes("iso-8859-1"),"utf-8"); String name=new String(dept.getDeptname().getBytes("iso-8859-1"),"utf-8"); dept.setDeptmanage(manage);

32

dept.setDeptname(name); this.service.updateDept(dept); return "success"; } 部门删除的控制层代码: public class RemoveDeptAction extends ActionSupport{ private jlchengService service; private Department dt; public jlchengService getService() { return service;} public void setService(jlchengService service) { this.service = service;} public Department getDt() { return dt;} public void setDt(Department dt) { this.dt = dt;} public String execute() throws Exception{ this.service.delete(dt); return "success";} } 5.4 工资管理模块的实现 工资的设定是由每个人的工资不同来决定的,每个职位都有自己的固定工资,在 这个工资的基础上进行修改,即根据每个人的考勤不同来给定工资。 这里是早退和迟到是一次扣除五十元,缺勤是一次 100 元,如果是请假的话就不 扣钱。 所以每个月是通过员工的考勤情况来决定工资的,通过从(paytable)考勤表里 面找出员工的考勤状况,然后对考勤状况来判断员工的工资多少。 5.5 考勤管理模块的实现 (1)考勤的添加 数据库中有关考勤信息的只有考勤表,所以对考勤管理模块的设计也是单表操 作。 不管是管理员对员工考勤的登记还是普通员工的请假, 都是对考勤表添加新数据。 public String execute() throws Exception{ Duty duty =new Duty();

33

String name=new String(workerName.getBytes("iso-8859-1"),"utf-8"); String type=new String(dutyType.getBytes("iso-8859-1"),"utf-8"); duty.setWorkerCd(workerCd); duty.setWorkerName(name); duty.setDutyType(type); duty.setDeptId(deptId); duty.setDutyTime1(dutyTime1); duty.setDutyTime2(dutyTime1); this.service.saveDuty(duty); return "success"; } (2)考勤查询页面 进入考勤查询页面,就已经把所有的考勤信息搜出来了,而做的按部门号查询就 是为了缩小查询的范围。这个跟前面按部门号查询员工、部门一样的道理,只是查询 的表变成了考勤表。 下面是 action 层的操作: public class SearchDutyByDeptAction extends ActionSupport{ private jlchengService service; private String deptId; public jlchengService getService() { return service; } public void setService(jlchengService service) { this.service = service; } public String getDeptId() { return deptId; } public void setDeptId(String deptId) { this.deptId = deptId; } public String execute() throws Exception{ if(deptId.equals("")){ return "searchAllDuty";

34

} Map request = (Map)ActionContext.getContext().get("request"); request.put("list",this.service.findDutyByDeptId(deptId)); return "searchBydeptId";}} 5.6 系统管理模块的实现 系统模块的设计只是做了一个登录密码的修改。 在这里我用到了在做登录时保存 在 session 里的登录用户的密码。主要是为了与页面传的值做对比。 UpdatePasswordAction 中代码如下: public String execute() throws Exception { String id=(String)ActionContext.getContext().getSession().get("id"); String password2=(String)ActionContext.getContext().getSession().get("password"); if(olderpassword.equals("")){ this.addFieldError(ERROR, "请输入你的旧密码"); return "input"; } if(!olderpassword.equals(password2)){ this.addFieldError(ERROR, "旧密码不正确"); return "input"; } if(newpassword.equals("")){ this.addFieldError(ERROR, "请输入你的新密码"); return "input"; } if(password.equals("")){ this.addFieldError(ERROR, "请再次输入你的新密码"); return "input"; } if(newpassword.equals(password)){ Login login=this.service.findloginByid(id); login.setUsePassword(password); this.service.updatelogin(login); return "success"; } else{ this.addFieldError(ERROR, "再次输入的密码不正确"); return "input"; }}

35

6 软件测试
6.1 模块测试 模块测试 1:登录功能的测试,当登录功能完成的时候,对其进行测试,主要有 三次,第一次用户名错误的情况,第二次用户名正确密码错误的情况,第三次是用户 名,密码,权限都正确的情况。 第一次输入用户名错误的时候,系统将会在前台下方提示“该用户不存在,请重 新输入” 。 第二次输入密码错误的时候,系统将会在前台下方提示“密码不正确,请重新输 入” 。 第三次如果你输入的密码和用户名都正确,则此时系统将会自动跳转。 模块测试 2:员工信息添加页面,当我们录入一个员工的信息然后提交,如果真 的添加成功则在员工查看页面能看见刚刚添加的新员工信息。 模块测试 3:员工信息查询模块,输入已存在的员工号时,搜出该员工号的信息; 输入已存在的部门号时, 搜出这个部门的所有员工信息; 输入为空时, 搜出所有员工。 模块测试 4:员工信息修改页面,对员工的基础信息,以及其工作,职位权限等 都做相应的改动,然后通过员工查看界面查看,如果查看的值和我们修改过后的值一 样,则恭喜功能实现。 模块测试 5:员工信息的删除,这里所做的是检测的已经删除的数据会不会存在 数据库中。选中要删除的一个员工,点击删除按钮,会提示删除成功,然后去查询一 下是否还存在该员工,如果不存在则功能实现,反之则功能出错。 模块测试 6:部门信息的添加,测试是否能在查询页面找到添加的部门。 模块测试 7:部门信息的修改与删除,这里的测试方法与前面说的一样,如果测 试成功则能在查询页面看到相应的数据改变。 模块测试 8:员工的考勤添加与查看,测试输入一个员工缺勤、请假、迟到、早 退等,然后去查询,看看是否正确添加了该员工的信息。如果成功则模块测试完毕。 模块测试 9:用户密码修改,测试目的,在旧密码输入错的情况下,提示重新输 入;在新密码与确认密码不一致情况下,提示错误信息, ;在三个密码校验都正确下, 密码修改成功,相对应数据库的值也修改成功。 从上面的模块测试来看,系统的模块功能都能与预期的值相同,模块功能成功实 现。 6.2 集成测试 完成上面的模块测试以后, 就是下面的集成测试阶段了。 集成测试主要就是把各
36

个方法各个功能都测试一遍。主要流程如下: 首先管理员先能够成功登录,并且能够操作用户添加页面,添加一个新的员工, 然后去员工查询页面进行查看,是否能找到刚才添加的,如果存在,点击旁边的查看 按钮。此时应该跳到用户信息查看页面,点击下面的修改,测试修改是否能成功,如 果成功以后再次查看该员工的信息,信息就像被修改的那样,就进行删除测试,点击 旁边的删除按钮,提示删除成功并且在用户查询也找不到该员工的信息。 其次管理员对部门管理进行操作,添加一个部门并且查询,然后对部门做相应的 修改,再次查询,成功后对这个部门执行删除操作,再次去查询该部门是否存在。 然后再对用户考勤进行管理,选择一个员工对其进行考勤信息的添加,然后再在 考勤查询中查出该员工的考勤信息。考勤添加成功以后再去工资页面,首先查询一个 考勤正常的员工,查看其工资,然后选择一个缺勤的员工再次查看他的工资是不是少 点。 下面是用户对自己信息的一个查看,已经对密码的修改,管理员可以进入系统管 理的个人信息管理中,查看自己的信息,并且尝试修改自己的密码。然后点击注销按 钮返回登录页面,用已经修改过后的密码进行输入。 上面就是本系统的一整套的工作流程。 因为是第一次设计企业人事管理所以在功 能已经实现方面难免有些漏洞,以后会以此为模板对其一步一步进行优化改良。

37

结论
时间总是过得很快,一转眼就已经到写总结了。经过一个多月的系统架构设计, 代码编写,企业员工信息管理系统终于按预期的想法完成了。由于是第一次个人完成 的系统,所以在一开始设计时就没设计的很复杂,功能模块设计实现的比较少,数据 库设计业比较简单,表不多,表之间的关系只有一对多的关系。在实现时做的最多就 是单表操作。总体来说,系统的绝大功能都能实现,但每个功能模块也存在着很多可 以更加完善的地方。比如员工信息管理的员工信息删除操作,只是对员工信息表的数 据。其实对于这个功能我们还可以考虑级联删除,就对一个员工删除时,不仅要考虑 到该员工的员工基本信息的删除,还要考虑到跟这个员工相关的其他表的数据的删 除,如考勤表,员工职位表的数据。这样我们就可以避免数据库存储空间的浪费。 这次毕业设计做的企业员工信息系统尽管不是很够格,但因为做的很用心,所以 他依然给我带来了好多收获。比如对开发工具 Myclipse 使用更加的熟练,让我了解 到通过已经建好的表, Myclipse 可以自动生成实体类和对应的 hbm.xml 文件。 还有做 的过程中遇到问题,积极、灵活解决问题的能力。在设计的工程中,遇到印象最深的 问题就是中文乱码问题, 刚开始以为是页面的问题, 就着手改 jsp 页面的编码为 utf-8, 但问题没能解决,后来慢慢分析发现从页面传的值查入数据库中就成乱码,所以才明 白是数据库乱码问题,通过网上搜索 mysql 数据库乱码问题找到了解决方法:用 SET character_set_client='utf8' ; SET character_set_connection='utf8' ; SET character_set_results='utf8 修改 mysql 默认编码格式, 此外为了保险我还用 getBytes () 方法先把从页面传的值换成 utf-8 格式再查如数据库。这样乱码问题才最终解决。 总的来说通过此次设计不仅让我学到好多知识, 巩固知识点同时让我意识到自己 学的东西还很薄弱,还有很多的东西需要掌握,此次 J2EE 项目只是一个开始,以后 走进公司还要面临更多更新的知识。所以,如何去最快的学习一样东西,如何利用手 里的资源帮组自己最快最好地完成任务, 也是一门技巧, 相信还有很多值得我去学习。

38

参考文献
[1]乔普拉.JSP 程序设计.北京:人民邮电出版社,2006. [2]耿祥义,张跃华.JSP 使用教程(第 2 版).北京:清华大学出版社,2007. [3]李刚.轻量级 J2EE 企业应用实战.北京:电子工业出版社,2008. [4]孙鑫.Struts2 深入详解[M].北京:电子工业出版社,2009. [5]埃克尔.Java 编程思想(第 4 版).北京:机械工业出版社,2007. [6]刘晓华.张健.JSP 应用开发详解(第 3 版) .北京:电子工业出版社,2007. [7]刘晓华.精通 Java 核心技术.北京:电子工业出版社 ,2004. [8]耿祥义等.Java2 实用教程.北京:清华大学出版社 ,2004. [9]薛为民.Java 应用教程.北京:清华大学出版社 ,2005. [10]姜利群.Java 网络编程实例教程.北京:清华大学出版社 ,2005. [11]朱福喜.Java 项目开发与毕业设计 .北京:清华大学出版社 ,2008. [12]李松林,陈清华.Eclipse 宝典.北京:电子工业出版社,2007. [13]普雷斯曼. 软件工程: 实践者的研究方法(原书第 6 版). 北京:机械工业出版社, 2007. [14]蒲子明,许勇,王黎等 .Struts 2+Hibernate+Spring 整合开发技术详解.北京: 清华大学出版社,2009. [15]王伟平 . Struts 2 完全学习手册.北京:清华大学出版社,2011. [16]Gerald [17]John Post. Albert Kagan. Database management system:design consideration and attribute.2003. B.Miner,Donald P.Crane.Human Resource Management.Harper CollinsCollege Publishers.1995. [18]Paul C.Jorgensen.软件测试(原书第 2 版).北京:机械工业出版社,2003. [19]Donald Brown、Chad Michael Davis、Scott Stanlick. Struts 2 实战.北京: 人民邮电出版社,2010. [20]Java Open Source Programming.Joe Walnes,Ara Abrahamian,Mike Cannon-Brookes,Pat Lightbody.Indianapolis,Indiana:WileyPublishing.2004.

39

致谢
时间飞逝, 大学四年的学习生涯即将结束, 在这里我要感谢我母校安徽理工大学, 感谢她给予我大学四年的学习机会,让我体会了大学生活的丰富多彩,有人说大学不 仅仅是学习的天堂,也是培养个人能力的地方,我深有感触。

40


相关文章:
(精品)企业员工信息管理系统毕业论文.doc
(精品)企业员工信息管理系统毕业论文 - 毕业论文,单片机论文,毕业论文设计,毕
毕业论文员工信息管理系统_图文.doc
毕业论文员工信息管理系统 - 学号 安徽工业大学工商学院 毕业设计(论文) 员工信息管理系统 教学系: 指导教师: 专业班级: 学生姓名: 二零一贰年五月 毕业设计(...
企业职工信息管理系统.doc
14 企业职工信息管理系统摘要随着科技的不断发展,企业的不断壮大,传统的企业人事
企业员工管理系统.doc
企业员工管理系统 - 目录 子题目: 企业员工管理系统 ... 错误!未定义书签
企业员工信息管理.doc
企业员工信息管理 - 企业人事信息管理 企业人事档案是企业在人事管理活动中形成的重要人事记录。 员工管理系统 应该能够为用户提供充足的信息和快捷的查询手段。 但...
企业员工信息管理系统.doc
系统主要是针对中小型企业员工的工资、出勤情况等信息进 行管理,系统主要包括以下几部分: (1)对员工基本信息管理 能够添加、删除、修改、保存、打印和查找员工...
公司员工信息管理系统(c++大作业).doc
公司员工信息管理系统(c++大作业) - 面向对象程序设计说明书 公司员工信息系
企业员工信息管理系统.doc
本科毕业设计说明书企业员工信息管理系统的设计与实现 EMPLOYEE INFOR
企业员工信息管理系统论文.doc
企业员工信息管理系统论文 - 自己毕业的论文,与大家共享... 企业员工信息管理系统论文_其它_高等教育_教育专区。自己毕业的论文,与大家共享 企业人力资源管理系统的设计...
(最新版)企业员工信息管理系统毕业设计.doc
(最新版)企业员工信息管理系统毕业设计 - 毕业论文,单片机论文,毕业论文设计,
(完整版)企业员工信息管理系统(毕业设计论文)_图文.doc
(完整版)企业员工信息管理系统(毕业设计论文) - 单片机论文,毕业设计,毕业论
企业员工信息管理系统论文_图文.doc
企业员工信息管理系统论文 - 1 引言 1.1 开发背景 现代信息技术的发展,在
企业人员信息管理系统设计.doc
企业人员信息管理系统设计 - 企业人员信息管理系统设计 第1章 绪论 .....
某公司人员管理系统(毕业设计论文).doc
企业员工管理系统是现代 企业管理工作不可缺少的一部分,是适应现代企业制度要求、推动企业劳动企业员工管理 走向科学化、规范化的必要条件。 企业员工信息管理系统是...
企业员工信息管理系统(毕业设计论文)_图文.doc
企业员工信息管理系统(毕业设计论文) - 学号 毕业设计(论文) 企业员工信息管理系统设计 教学系: 指导教师: 专业班级: 学生姓名: 二零一零年五月 毕业设计(论文)...
企业员工信息管理系统设计与实现.doc
企业员工信息管理系统设计与实现 - 企业员工信息管理系统设计与实现 摘要 本论文
企业员工信息管理系统.doc
企业员工信息管理系统 - 数学与计算机学院 实训报告 课程名称: 课程代码: 题
企业员工信息管理系统 计算机应用技术专业本科学位论文.doc
企业员工信息管理系统 计算机应用技术专业本科学位论文 - 中图分类号: UDC: 图书馆收藏 密级: 编号: 毕业设计 设计题目名称: 学生姓名: 企业员工信息管理系统 ...
公司员工信息管理系统.doc
公司员工信息管理系统 - 目录 1.1 功能介绍 ... 1 1.1.1 ...
c语言企业员工管理系统.doc
c语言企业员工管理系统 - 全部源代码: #include<stdio.h
更多相关标签: