admin 管理员组文章数量: 887021
2023年12月19日发(作者:wps宏编程教程)
基于JSP的人力资源管理系统的设计与实现
摘 要
随着计算机的普及和计算机科学技术的飞速发展,人们开始越来越多地利用计算机解决实际问题。人力资源管理是企业信息管理的重要部分,面对大量的人事信息,采用人力处理即浪费时间、又浪费人力和物力,并且数据的准确性低。因此,开发一个界面友好,易于操作的人力资源管理软件进行自动化处理变得十分重要,这正是本系统开发的目的和意义。本文所阐述的企业人力资源管理系统,以 B/C 模式高效地实现了人力资源管理系统的各项功能,可进行多条件查询、更新、密码设置等功能.提升了企业的效率和竞争力,满足了现代企业管理的需要.
JSP继承了所有Java语言的特点,而且发展前景十分的广阔,因此本项目使用用JSP语言作为根本,选用经典的Tomcat作为服务器平台,并用Eclipse作为开发平台,详细介绍了本管理系统的开发过程。并从系统的需求分析、系统分析、概要设计、详细设计的整个开发过程
【关键词】 企业员工、管理系统、JSP、数据库
Abstract
Along with computer popularization and computer science technology rapid development,
the people start to use the computer solution actual problem more and more staff
information management is the enterprise information management important part, facing the
massive human affairs information, uses manpower processing namely to waste the time, to
waste the manpower and the physical resource, and the data accuracy is ore,
develops a contact surface to be friendly, easy to operate the staff information management
software carries on automated processing to become extremely important, this is precisely this
system development goal and the article elaborated the enterprise staff
management system management system, has highly effective realized staff information
management system each function by the B/C pattern, may carry on multi-functions and so on
condition inquiry, renewal, password establishment. Has promoted enterprise's efficiency and
the competitive power, has met the modern business management needs.
JSP has inherited all Java language characteristic, moreover prospects for development
extremely broadness, therefore this project use takes fundamentally with the JSP language,
selects the classics Tomcat to take the server platform, and develops the platform with the
Eclipse achievement, in detail introduced this management system management system
performance from system demand analysis, system analysis, outline design,
detailed design entire performance history
[Key word] :Enterprise staffs, management system management system, JSP, database
目 录
摘 要 ............................................................................................................................................................................................ 1
. 2
第一章 概 述 ............................................................................................................................................................................... 5
1.1
项目背景 ......................................................................................................................................................................... 6
1.2
项目目标与期望.............................................................................................................................................................. 6
1.2.1
树立全新企业形象 ...................................................................................................................................................... 6
1.2.2
激发竞争力 ................................................................................................................................................................... 6
1.2.3
减轻部门负担 ............................................................................................................................................................... 6
1.3
项目设计原则 ................................................................................................................................................................ 7
1.3.1
实用性原则 ............................................................................................................................................................... 7
1.3.2
经济性原则 ............................................................................................................................................................... 7
1.3.3
扩充性原则.............................................................................................................................................................. 7
第二章 系统分析 ........................................................................................................................................................................ 8
2.1
需求分析 ......................................................................................................................................................................... 8
2.2
技术可行性 ..................................................................................................................................................................... 8
2.2.1
动态网站技术介绍 ...................................................................................................................................................... 8
2.2.2
程序语言的选择 ....................................................................................................................................................... 9
2.2.3
语言优势 .................................................................................................................................................................... 11
2.2.4
操作可行性................................................................................................................................................................ 11
2.3
环境可行性分析........................................................................................................................................................... 12
2.3.1
软件环境...................................................................................................................................................................... 12
2.3.2
硬件环境...................................................................................................................................................................... 12
2.4
系统结构可行性分析 ................................................................................................................................................... 12
2.4.1
B/S模式简介............................................................................................................................................................. 12
2.4.2
B/S模式的优点 ........................................................................................................................................................... 13
第三章 总体设计 ...................................................................................................................................................................... 14
3.1
项目规划 ....................................................................................................................................................................... 14
3.2
设计目标 ....................................................................................................................................................................... 14
3.3
系统功能结构图 .......................................................................................................................................................... 14
第四章 系统功能设计 ............................................................................................................................................................. 16
4.1
模块功能介绍 .............................................................................................................................................................. 16
4.2
数据库设计与实现...................................................................................................................................................... 16
4.3
系统中的JAVABEAN结构............................................................................................................................................... 19
4.4
公共模块 ......................................................................................................................................................................... 20
第五章 系统实现 ...................................................................................................................................................................... 21
5.1
登录模块 ................................................................................................................................... 错误!未定义书签。
5.1.1
实现效果.................................................................................................................................. 错误!未定义书签。
5.1.2
相关JAVABEAN程序 ................................................................................................................ 错误!未定义书签。
5.1.3
相关JSP文件 ....................................................................................................................
错误!未定义书签。
5.2
主页面模块................................................................................................................................. 错误!未定义书签。
5.2.1实现效果 .................................................................................................................................. 错误!未定义书签。
5.2.2
主页面相关JSP文件 ............................................................................................................ 错误!未定义书签。
5.3
人员档案模块 ............................................................................................................................ 错误!未定义书签。
5.3.1实现效果 .............................................................................................................................
错误!未定义书签。
5.3.2相关JAVABEAN程序................................................................................................................. 错误!未定义书签。
5.3.3
相关JSP文件.......................................................................................................................... 错误!未定义书签。
5.4
奖惩管理模块 ............................................................................................................................ 错误!未定义书签。
5.4.1
实现效果.................................................................................................................................. 错误!未定义书签。
5.4.2
相关JAVABEAN程序 ................................................................................................................ 错误!未定义书签。
5.4.3
相关JSP文件.......................................................................................................................... 错误!未定义书签。
5.5
奖惩管理模块 ............................................................................................................................ 错误!未定义书签。
5.5.2
相关JAVABEAN程序 ................................................................................................................ 错误!未定义书签。
5.5.3
相关JSP文件.......................................................................................................................... 错误!未定义书签。
5.6
企业人力资源管理系统文件结构图 .................................................................................... 错误!未定义书签。
5.7
技术难点 ..................................................................................................................................... 错误!未定义书签。
5.7.1
中文乱码问题 ......................................................................................................................... 错误!未定义书签。
5.7.2
安全性问题 ............................................................................................................................. 错误!未定义书签。
5.7.3
JAVASCRIPT的实现 .................................................................................................................. 错误!未定义书签。
第六章 系统测试 .................................................................................................................................................................... 34
6.1
测试的定义及目的 ....................................................................................................................................................... 34
6.2
测试的原则..................................................................................................................................................................... 34
6.3
测试的方法..................................................................................................................................................................... 35
6.3.1
界面测试...................................................................................................................................................................... 35
6.3.2
功能测试...................................................................................................................................................................... 35
5.3.3
需求测试...................................................................................................................................................................... 36
6.3.4
性能测试...................................................................................................................................................................... 36
6.4
测试中其他要注意的地方 .......................................................................................................................................... 36
6.5
人力资源管理系统的测试 .......................................................................................................................................... 36
第七章 总结 ............................................................................................................................................................................. 37
致 谢 .......................................................................................................................................................................................... 38
参考文献...................................................................................................................................................................................... 39
第一章 概 述
现在网络的发展已呈现商业化、全民化、全球化的趋势。目前,几乎世界上所有的公司都在利用网络传递商业信息,进行商业活动,从宣传企业、发布广告、招聘雇员、传递商业文件乃至拓展市场、网上销售等,无所不能。如今网络已成为企业进行竞争的战略手段。企业经营的多元化拓展,企业规模的进一步扩大,对于企业的管理、业务扩展、企业品牌形象等提供了更高的要求。在以信息技术为支撑的新经济条件下,越来越多的企业利用起网络这个有效的工具。
全球范围内的企业内部组织正在发生巨变,未来企业成功的关键的依靠企业人力资源,人才之争已经成为市场竞争中的核心内容之一,以人为本成为企业立足和发展的根本。有效力管理企业的人力资源,为企业提供强有力的储备力量,使之成为企业发展的主动力。通过人力资源的有效管理,掌握最新的、准确的企业人力资源信息,并对其进行复杂的统计与分
析,从而充分发挥每个员工的潜能,为企业创造更大的价值。
1.1 项目背景
现在网络的发展已呈现商业化、全民化、全球化的趋势。目前,几乎世界上所有的公司都在利用网络传递商业信息,进行商业活动,从宣传企业、发布广告、招聘雇员、传递商业文件乃至拓展市场、网上销售等,无所不能。如今网络已成为企业进行竞争的战略手段。企业经营的多元化拓展,企业规模的进一步扩大,对于企业的管理、业务扩展、企业品牌形象等提供了更高的要求。在以信息技术为支撑的新经济条件下,越来越多的企业利用起网络这个有效的工具。
全球范围内的企业内部组织正在发生巨变,未来企业成功的关键的依靠企业人力资源,人才之争已经成为市场竞争中的核心内容之一,以人为本成为企业立足和发展的根本。有效力管理企业的人力资源,为企业提供强有力的储备力量,使之成为企业发展的主动力。通过人力资源的有效管理,掌握最新的、准确的企业人力资源信息,并对其进行复杂的统计与分析,从而充分发挥每个员工的潜能,为企业创造更大的价值。
1.2 项目目标与期望
1.2.1 树立全新企业形象
对于任何一个企业而言,企业的品牌形象至关重要。 特别是对于互联网技术高度发展的今天,通过人力资源管理的网站,员工可通过网站侧面的了解企业形象及企业实力,因此,建立具有国际水准的网站能够极大的提升企业在员工心中的整体形象。
1.2.2 激发竞争力
在登录后,员工能看到优秀的上榜员工,而如果这里没有他的名字,会极大的激发他的斗志,这也是本系统的作用之一。通过这种方式,使员工自动的全身心投入工作,这要比开动员大会效果明显得多,效率很高很多。
1.2.3 减轻部门负担
许多人知道,一个公司的所有和员工有关的运作,包括加薪,出差,请假,人员的调
动,离任等等都由人力资源部门来完成,如果是一家拥有上千人的大型企业,这个工作量是相当惊人的。因此本系统的开发,大大缓解了该部门的工作压力,也避免了以前人工作业的错误几率。
总结上述几点,长红机械有限公司网站建设目标可总结如下:
1) 帮助企业建立有效的企业形象宣传、企业风采展示、打造企业新形象。
2) 增加员工间竞争机制,鼓舞大家工作积极性,
3) 采取电脑管理人的方法,为企业节省人力,物力。
1.3 项目设计原则
1.3.1 实用性原则
充分考虑到在人力资源管理中可能遇到的种种问题,尽量全面的做好需求分析,以减少日后更新软件的次数。
1.3.2 经济性原则
建立适合企业自身需求的网络平台,提供广泛的涵盖用户多种需求的功能,数据处理方式灵活以满足需求,节省网站建设成本,并确保其较好的拓展性和开放性;同时网站具有基于WEB界面的管理后台,能够自主的对网站中大部分内容作更新、修改操作,节省了企业网站的运营成本,提高了信息更新、传播效率。
1.3.3 扩充性原则
网站的整体规划及框架设计是具可扩充性的,前台页面的设计能保证网站在增加栏目后不会破坏网站的整体结构。后台数据库的设计具有高度的扩充性,能够根据需要对栏目、类别的增、删、修改。
第二章 系统分析
2.1 需求分析
网络化的今天,网络人力资源管理系统,使新的人力资源协作管理模式成为可能。通过网络管理系统,专门的人力资源管理人员可以提高自身的工作效率,作好人力资源管理的协调工作,提高人力资源利用率;通过网络管理系统,员工可以直接管理自己的技能,有效地发现和挖掘自身的潜能,及时与自己的上级、下属、同事进行的沟通与交流,同心协作,积极为企业的发展与决策贡献力量。通过网络人力资源管理系统对企业人力资源进行管理,使企业人力资源管理适应时代的发展要求,大大提高了企业的核心竞争力。
2.2 技术可行性
2.2.1 动态网站技术介绍
Internet起源于20世纪60年代的美国,它在近几年迅速风靡全球,其根本原因不仅在于她拥有卓越的国际通信功能,更在于它拥有巨大的信息资源.所谓的Internet是指由分布在全世界成千上万的计算机网络遵循一定的通讯协议,并相互联系在一起而形成的国际互连网络,也就是说,Internet是建立和使用这些网络的人群,群体,公司以及各种网络资源的集合体.
随着网络技术的不断发展,单纯的静态页面已经不能满足发展的需要,因为静态页面是用单纯的HTML语言组成的,它没有交互性.因此,为了满足实际的需要,许多网页文件
扩展名不再只是“htm”,“html”,出现了以“php”,“asp”,“jsp”,“shtml”等为后缀的网页文件,这些都是采用动态网页技术制作出来的。
2.2.2 程序语言的选择
1、CGI
CGI( Common Gateway Interface,通用网关接口).首先,客户端(即Web浏览器)根据某资源的URL(Uniform Resource Locator,统一资源定位器)向Web服务器提出请求,Web服务器的HTTP Daemon(守护进程)将此请求的参数通过标准输入stdin和环境变量传递给指定的CGI程序,并启动此应用程序进行处理,如要存取数据库服务器上数据库的数据,则向数据库服务器发出处理请求,数据库服务器将执行结果返回给CGI程序,CGI程序处理结果通过标准输出stdout返回给HTTPDaemon进程,再由HTTP Daemon进程返回给客户端,由浏览器解释执行,将最终结果在用户面前显示.CGI允许Web服务器运行外部应用程序,以通过外部程序来访问数据库等一些外部资源,并产生HTML文档给浏览器.但每次请求CGI程序都要重新启动程序,影响了响应的速度,且CGI程序不能被多个客户请求共享,影响了各种资源的使用效率.为了克服CGI的这些缺点,一些Web服务器厂商开发出了专用的API(Applications Program Interface应用程序接口),这样就允许程序员编写程序来扩展服务器的功能.API相对于CGI与Web服务器的结合更加紧密,占用的资源较少,运行的效率大有提高,安全性与保护性更好.但是开发API应用程序比开发CGI应用程序复杂得多,要求程序员掌握更多的计算机软件知识,且各种API之间的兼容性不好,业界没有一个统一的标准,使得API程序只能工作在专用的Web服务器与操作系统之上.编写CGI的程序设计语言有许多种,常用的有C,PERL,Visual C++等,由于对程序员的要求较高,且编写与 调试比其它队编程技术困难,故近年来基于B/S的信息系统工程时间中已很少被采用。
2、ASP
ASP的程序比HTML更方便而更富有灵活性.是在Web服务器端运行,运行后再将运行结果以HTML格式传送至客户端的浏览器.因此ASP与一般的脚本语言相比要安全得多.ASP最大的好处就是可以包含HTML标签,也可以直接存取数据库及使用无限扩充的ActiveX控件,用户可以直接使用ActiveX控件,调用对象方法和属性,以简单的方式实现强大的交互功能.但ASP技术也并非完美无缺,由于它基本上是局限于微软的操作系统平台,主要的工作环境是微软的IIS应用程序结构,又因ActiveX对象具有平台特性,所以ASP技术要实现在跨平台Web服务器上工作,不是很容易.Microsoft的ASP技术目前已发展到.NET版.对很多人来说,用ASP来创建Windows服务器平台上的动态Web网页,整个站点和基
于Web的应用程序已经成为及其自然的方法.在浏览器地址栏中,文件扩展名.asp同表示动态创建的网页的文件扩展名.pl或.cgi一样,已被浏览者所接受.开发ASP程序,常常先设计静态网页的栏目格式和排版形成HTML语言,接着在HTML的基础上添加脚本程序,形成ASP程序后再实现动态的Web网页.在ASP的程序开发中,它所用的脚本语言是JavaScript和VBScript,在默认情况下使用的是VBscript,它是VB程序设计语言的一个子集,语法与VB基本相同.ASP中的ADO对象用来执行与数据库相关的操作,ADO再以OLEDB或ODBC的方式访问数据库,在.NET版本中这一对象称为。
3、PHP
PHP即Hypertext Preprocessor(超文本预处理器),它是当今Internet上最为火热的脚本语言,其语法借鉴了C,Java,Perl等语言,而且只需要很少的编程知识就能使用PHP建立一个真正交互的Web站点.它与HTML语言具有非常好的兼容性,使用者可以直接在脚本代码中加入HTML标签或者在HTML标签中加入脚本代码从而更好地实现页面控制.PHP提供了标准的数据库接口,数据库连接方便,兼容性更强,扩展性强,可以进行面向对象编程.但是PHP对组件的支持不够,扩展性差,常用它与免费的数据库系统MySQL协同一起用来构建中小型网B/S应用大网站或信息系统。
4、JSP
JSP(JavaServer Pages)是由Sun公司倡导,许多别的公司参与一起创建的一种新动态网页技术标准,类似其他技术标准.在传统的网页HTML文件(*.htm,*.html)中加入Java程序片断(Scriptlet)和JSP标签,构成了JSP网页(*.jsp)Servlet/JSP Container收到客户端发出的请求时,首先执行其中的程序片断,软后将执行结果以HTML格式响应给客户端,其中程序片断可以是:操作数据库,重新定向网页以及发送E-Mail等等,这些都是建立动态网站所需要的功能.所有程序操作都在服务器端运行,网络上传送给客户端的仅是得到的结果,与客户端的浏览器无关,因此,JSP称为Server-side Language.所以被许多人认为是未来最有发展前途的动态网站技术之一。
经过如上的程序语言的比较,PHP功能相对简单,不适合作大程序,而CGI效率相对较低,所以也不考虑,因为该系统并没有原有的基础平台需要扩展,也不需要与其他系统进行太多的交互,所以使用J2EE的模式并不能够体现出J2EE本身的优势,而JSP又是J2EE的核心技术之一,可以随时升级为J2EE程序,,这里暂时不考虑采用J2EE,这样只需要在ASP和JSP中进行选择.在进行了诸多因素的比较之后,最终认为目前这个阶段比较合适的是JSP,,而选择Struts架构作为开发的主体框架,选用Hibernate作为数据持续性处理层,则是考虑到了其高速的开发效率,及代码重用性高,易于维护等各种优势.其最终目的是希
望提高系统底层业务逻辑的可重用性,增加系统的可扩展性,降低系统维护成本。
2.2.3 语言优势
1、将内容的生成和显示进行分离
使用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面.使用JSP标识或者小脚本来生成页面上的动态内容.生成的内容的逻辑被封装在标识和JavaBeans组件中,那么其他人,如Web管理人员和页面设计者,能够编辑和使用JSP页面而不影响内容的生成。
2、一次编写,到处运行
作为Java平台的一部分,JSP拥有Java编程语言”一次编写,到处运行”的特点,随着越来越多的供应商将JSP支持添加到他们的产品中,您可以使用自己所选择的服务器和工具,但并不影响当前的应用。
3、JSP的平台适应性更广
这是JSP比ASP的优越之处,几乎所有的平台都支持Java,它们可以在任何平台下通行无阻.虽然NT的OS占据了很大的市场的份额,但在服务器方面UNIX的优势仍然很大.从一个平台移植到另一个平台,JSP和JavaBeans甚至不用重新编译,因为Java字节码都是标注的字节码与平台无关.
4、健壮的存储管理和安全性
由于JSP页面的内置脚本语言是基于Java编程语言的,而且所有的JSP页面都被编译为Java Servlet,JSP页面就具有Java技术的所有优点,包括健壮的存储管理和安全性。
5、数据库连接技术
很多的OS中都带有JDBC驱动程序,Java就通过JDBC与数据库连接,执行查询,提取数据等操作.Sun公司还提供了JDBC-ODBC的桥连方式,因此Java也可以访问带有ODBC驱动的数据库,目前大多数数据库系统都带有ODBC驱动,所以Java能访问诸如Oracle,Sybase,MS SQL Server 和Access等类型的数据库。
2.2.4 操作可行性
对于用户来说,本系统只要求使用者掌握一定的上网经验,经过仔细设计和测试之后的系统具有操作简单,方便灵活等优点,足可以满足各种用户的不同需求,同时也方便了公司的内部管理。管理人员及用户一定会在短时间内掌握并熟练使用。只要动一动鼠标键盘就
可以达到想要的效果。
2.3 环境可行性分析
2.3.1 软件环境
·操作系统:Win2k Server sp4
·数据库: Microsoft SQL Server 2000 Enterprise Edition sp4
·Web服务器:TOMCAT
·IDE;Eclipse3.1.1+Myeclipse4.1.1GA+Lomboz+emf,Dreamweaver8
·外部包:
2.3.2 硬件环境
AMD Athlon 64 3000+,KingMax PC3200 512MB × 2,Gainward NV35XT
Seagate SATA 8M 120GB × 2
2.4 系统结构可行性分析
2.4.1 B/S模式简介
本系统采用B/S模式。
B/S(Browser/Server)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。以目前的技术看,局域网建立B/S结构的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。它是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN,WAN,Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全。特别是在JAVA这样的跨平台语言出现之后,B/S架构管理软件更是方便、快捷、高效。
2.4.2 B/S模式的优点
1、维护和升级方式简单
目前,软件系统的改进和升级越来越频繁,B/S架构的产品明显体现着更为方便的特性.对一个稍微大一点单位来说,系统管理人员如果需要在几百甚至上千部电脑之间来回奔跑,效率和工作量是可想而知的,但B/S架构的软件只需要管理服务器就行了,所有的客户端只是浏览器,根本不需要做任何的维护.无论用户的规模有多大,有多少分支机构都不会增加任何维护升级的工作量,所有的操作只需要针对服务器进行;如果是异地,只需要把服务器连接专网即可,实现远程维护、升级和共享.所以客户机越来越“瘦”,而服务器越来越“胖”是将来信息化发展的主流方向.今后,软件升级和维护会越来越容易,而使用起来会越来越简单,这对用户人力、物力、时间、费用的节省是显而易见的,惊人的.因此,维护和升级革命的方式是“瘦”客户机,“胖”服务器。
2、成本降低,选择更多
我们都知道windows在桌面电脑上几乎一统天下,浏览器成为了标准配置,但在服务器操作系统上windows并不是处于绝对的统治地位.现在的趋势是凡使用B/S架构的应用管理软件,只需安装在Linux服务器上即可,而且安全性高.所以服务器操作系统的选择是很多的,不管选用那种操作系统都可以让大部分人使用windows作为桌面操作系统电脑不受影响,这就使的最流行免费的Linux操作系统快速发展起来,Linux除了操作系统是免费的以外,连数据库也是免费的,这种选择非常盛行。
比如说很多人每天上“网易”网,只要安装了浏览器就可以了,并不需要了解“网易”的服务器用的是什么操作系统,而事实上大部分网站确实没有使用windows操作系统,但用户的电脑本身安装的大部分是windows操作系统。
第三章 总体设计
3.1 项目规划
企业人力资源管理系统由人员信息管理、奖惩信息管理、人员调动信息管理、系统用户管理4个部分组成,规划系统功能模块如下:
人员信息管理模块:该模块主要功能是对员工基本信息等进行管理
奖惩信息管理模块:该模块主要是对企业员工奖惩情况进行管理。
人员调动信息模块:该模块主要是对企业员工调动信息进行管理。
系统用户管理模块:该模块主要功能是管理员密码修改功能的管理。
3.2 设计目标
本系统主要用于对企业中的员工进行管理。具体地讲,人力资源管理系统就是通过员工信息、员工考核、薪酬管理、奖惩管理、员工培训、员工调动信息管理等一系列手段来提高劳动生产率,最终达到发展目标的一种管理行为。具体实现目标如下:
实现对员工信息进行全面管理的功能。
系统用户信息的管理。
企业员工奖惩信息管理;
企业员工人员调动信息管理;
系统最大限度地实现了易安装性、易维护性和易操作性。
系统运行稳定、安全可靠。
3.3 系统功能结构图
人力资源管理系统功能结构如图1所示。
登录模块
主页面模块
企业员工
管理系统
添加人员档案
人员档案模块管理人员档案
查询人员档案
添加奖惩记录
奖惩管理模块
管理奖惩记录
添加人员调动
人员调动模块
管理人员调动
图1 企业员工管理系统功能结构图
第四章 系统功能设计
4.1 模块功能介绍
1、登录模块
此模块实现用户进入系统管理前的验证操作,只有输入正确的用户名和密码才能进入系统 ,进行各种操作。
2、人员档案模块
此模块实现对企业所有员工的档案进行管理,并且根据需要,可以对某个员工的档案进行修改、删除和查询。
3、奖惩管理模块
本模块提供了记录奖惩类别,内容,原因等奖惩信息的管理。可以根据需要添加奖惩详细信息、删除奖惩详细信息、修改奖惩详细信息。
4、人员调动模块
本模块提供了管理企业人员调动信息管理的功能,可以根据需要,对某条调动记录进行修改和删除。
4.2 数据库设计与实现
1、数据库的需求分析
依据项目的处理需求,对应数据表的设计及功能如下:
a) 员工基本信息表:
主要用于保存员工信息
b) 奖惩管理信息表:
主要用于保存奖惩信息
c) 人事调动管理信息表: 主要用于保存内部人员调动信息
d) 系统用户管理表: 主要用于保存用户信息
2、数据库各表具体设计
表3.2.1 员工基本信息表(employee)
名称
员工编号
姓名
性别
部门
出生日期
籍贯
婚姻
身份证号
政汉面貌
民族
字段名
EmployeeID
UserName
Sex
Branch
Birthday
NativePlace
Marriage
IdentityID
Politics
Folk
类型
varchar
varchar
varchar
varchar
date
varchar
varchar
varchar
varchar
varchar
长度
6
20
10
40
——
20
20
18
20
20
主键
yes
no
no
no
no
no
no
no
no
no
非空
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
学历
专业
毕业时间
毕业院校
行政级别
职务
职称
外语语种
外语等级
家庭电话
手机号码
家庭住址
在职情况
用式形式
个人简历
Education
Department
GraduateDate
University
AdministrationLevel
Duty
Position
ForeignLanguage
FLLevel
Phone
MobilePhone
Address
Incumbency
IncumbencyType
Resume
varchar
varchar
date
varchar
varchar
varchar
varchar
varchar
varchar
varchar
varchar
varchar
varchar
varchar
varchar
varchar
varchar
20
40
——
40
20
20
40
20
20
20
20
20
11
50
20
20
400
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
yes
yes
yes
yes
no
no
no
no
no
no
yes
yes
no
公积金账号 AccumulateID
计算机等级 ComputerLevel
表3.2.2 奖惩管理信息表(rpmanage)
名称
记录编号
员工编号
职称
奖/惩
奖惩内容
原因
批准部门
审核人
开始时间
撤销时间
撤销原因
备注
名称
用户名
密码
字段名
RewardNO
EmployeeID
Position
RewardPunish
Rewardcontent
Reason
Branch
HandleName
StartDate
CancelDate
CancelReason
Remark
字段名
UserName
Password
类型
int
varchar
varchar
varchar
varchar
varchar
varchar
varchar
date
date
varchar
varchar
类型
varchar
varchar
长度
——
6
20
10
50
100
40
20
——
——
100
400
长度
16
16
主键
yes
no
no
no
no
no
no
no
no
no
no
no
主键
yes
no
非空
yes
yes
yes
yes
yes
yes
yes
yes
yes
no
no
no
非空
yes
yes
表3.2.3 系统用户管理表(users)
表3.2.4 人事调动管理信息表(translate)
名称
记录编号
员工编号
调动时间
前部门
字段名
TranslateNO
EmployeeID
TranslateDate
PriorBranch
类型
int
varchar
date
varchar
长度
——
6
——
40
主键
yes
no
no
no
非空
yes
yes
yes
yes
现部门
前职务
现职务
经办人
备注
NextBranch
PriorDuty
NextDuty
HandleName
Remark
varchar
varchar
varchar
varchar
varchar
40
40
40
20
400
no
no
no
no
no
yes
yes
yes
yes
no
3、数据库连接与访问
数据库连接和访问主要由类DBConnect负责,用户使用此类进行连接和访问数据库,其主要实现代码摘录如下:
public class DBConnect {
private String dbUrl;
private String password;
private String username;
private String jdbcClassName;
private Connection conn = null;
private Statement stmt = null;
public DBConnect() throws Exception
{
dbUrl = "jdbc:postgresql:postgres";
jdbcClassName = "";
username = "postgres";
password = "1234";
connect();
}
public DBConnect( String inUrl, String inJdbcClassName, String inUserName,inPassWord )
throws Exception
{
dbUrl = inUrl;
jdbcClassName = inJdbcClassName;
username = inUserName;
password = inPassWord;
connect();
}
private boolean connect()throws Exception
{
boolean opened = false;
Driver driver = (Driver) e(jdbcClassName).newInstance();
erDriver(driver);
conn = nection(dbUrl, username, password);
stmt = Statement ();
opened = true;
return opened;
}
public Connection getDBConnection()
String
{ return conn; }
public void close() throws Exception
{ if (stmt != null)
{ ();
stmt = null;
}
if (conn != null)
();
}
}
数据库访问如下:
DBConnect dbc = new DBConnect();
Connection conn =onnection();
Statement stmt = null;
ResultSet rs = null;
stmt=Statement();
查询语句如下://sql为查询语句
rs = eQuery(sql);
插入、更新语句如下:
eUpdate(sql);
4.3 系统中的JavaBean结构
JavaBean的工作原理是将数据的基本处理逻辑封闭在JavaBean中,然后通过其提供的方法对其进行调用,最大的优点是可以实现代码的重复利用。本系统的JavaBean的目录和包的结构如图2所示。
se
ee
图2 管理系统的JavaBean结构图
staff
4.4 公共模块
本系统的公共模块如图3所示,其内容都是由许多页面共同拥有的,其中包含JavaScript文件,JSP文件,和CSS样式表。
导入类包文件
CSS样式表
公共模块 页面头和尾文件
JavaScript文件
防止非正常登录
图3 公共模块结构图
第五章 系统实现
5、系统实现
5.1 登录模块
登录模块用来难用户的合法性,防止非法用户进入员工管理系统,其结构如图11所示:
登录界面
登录模块
验证用户
图11登录模块结构图
5.1.1 实现效果
用户登录模块是用户进入主页面的入口,其运行结果如图12所示。
图12 用户登录模块实现效果
图13提示输入用户名
图14 输入错误信息
如果用户没有输入用户名或者密码,而单击登录按钮,系统会弹出对话框提示用户如图13所示。输入用户名和密码后,系统会判断输入的用户信息。如信息错误,刚会给出提示信息“用户名或密码不正确”如图14所示。
5.1.2 相关JavaBean程序
业务模型的设计主要定义了类,而控制器的设计则定义了op_user,用以从用户接收登录请求, 将模型与视图匹配在一起,从而实现对管理用户信息的验证。
5.1.3 相关JSP文件
本模块主要涉及到两个页面:
5.2 主页面模块
5.2.1实现效果
主页面是用户通过身分难后进入的页面,也是操作员工信息管理系统各功能的平台,可以在该模块中管理人员档案,奖惩,人员调支等,其结构如图15所示,效果如图16所示:
主页面模块
5.2.2 主页面相关JSP文件
修改密码
页面左部
主页
图15 主面面模块结构图
相关的JSP文件主要有:
, ,,
退出系统
,, 。
图16 主页面效果
5.3 人员档案模块
人员档案是人事管理系统的基本数据资料,是员工管理系统的基本功能,其提供的功能有:添加人员档案,修改人员档案,删除人员档案和查询人员档案。其模块结构如图17所示:
人员档案模块
5.3.1实现效果
模块主页面
添加人员档案
管理人员档案
查询人员档案
图17人员档案模块结构图
图18 添加人员档案页面
图19 管理人员档案页面
5.3.2相关JavaBean程序
图20 查看人员档案页面
业务模型的设计主要定义了类,而控制器的设计则定义了op_eployee,用以从用户接收增加、修改、删除、查询等请求并作出相应操作,其中,方法Add()用于添加人员档案,Modify()用于修改人员档案,Delete(String _EmployeeID)用于删除人员档案,ListAll()用于列出所有人员档案,Search()用于查询人员档案,并将操作结果在新的页面中显示出来。
5.3.3 相关JSP文件
本模块包含的JSP文档及其功能如下: 功能与类似, 用于显示本模块网页的功能链接.
主要用于提供用户输入人员档案信息的界面, 则用于显示控制器操作结果的表单.
主要用于显示人员管理的条件查询页面,
则用于显示控制器操作结果的表单, 单击列表中的“修改”链接如图19所示则进入页面,此页面提供修改人员信息功能,单击修改按钮后,则向控制器提交表单,控制器作出相应处理,并将最终结果成功与否显示在新页面,如果更新成功刚显示“修改人员档案成功”,否则显示“修改人员档案失败!”并将错误显示在页面中,如图21所示。如果单击图19中的删除链接,刚进入
页面,实现删除操作。
页面,主要用于查询人员档案,在管理人员档案操作中,既使用其来进行数据库查询,则用于显示查询结果列表,由于员工信息较多,因此只选取部分显示,如需查看详细信息,则可单击员工编号,并调用控制器实现详细信息查询,并将结果
图21档案修改成功
在页面中显示。如图20所示。限于篇幅有限,这
里就不一一列举各文件的主要操作代码。
4.4 奖惩管理模块
奖惩管理模块主要用于记录企业员工的奖惩情况,其主要提供的功能有添加奖惩记录和修改奖惩记录。
奖惩管理模块的结构如图22所示:
模块主页面
添加奖惩记录
奖惩管理模块
图22 奖惩管理模块结构图
管理奖惩记录
5.4.1 实现效果
图23 添加奖惩记录
图24 管理奖罚记录
图24 管理奖惩记录
4.4.2 相关JavaBean程序
业务模型的设计主要定义了类,而控制器的设计则定义了op_ reward,用以从用户接收增加、修改、删除、查询等请求并作出相应操作,其中,FindByNO(),该方法主要用于实现根据记录号查找奖惩信息,用于整体查询;Add(),主要用于实现奖惩记录的添加操作;Modify(),主要实现奖惩信息的修改操作;Delete()实现删除操作;SearchByID()通过员工编号进行查询操作,主要用于一般查询。ListAll( ),主要用于列出查询结果。将操作结果在新的页面中显示出来。
4.4.3 相关JSP文件
本模块主要包含页面关系如图22的结构图所示,其中功能与作用相似,作用是提供了本模块的功能链接,如添加奖惩记录,管理奖惩记录和退出系统。
添加奖惩记录主要由和两个文件组成,其中前者提供了添加记录的界面,如图23所示,后者则用于显示控制器操作结果的表单。
管理奖惩记录主要由、、、、 五个文件组成,其中ManageReward
和图25 查看奖惩记录
用于显示管理奖惩记录界面如图24所示,当单击图中的修改链接后,则进入ModifyReward
页面,该页面表单和图23类似,当点击修改按钮时刚进入页面,该页面用于显示控制器操作数据库后返回的最终修改结果。如点击删除链接,系统会提示是否确认删除操作,单击确定后则进行删除操作,并返回删除结果,并在页面中显示操作的结果;如点击员工编号,则可进入表单页面,显示该员工的详细奖惩信息。如图25所示。
4.5 人员调动管理模块
人员调动管理模块主要用于记录企业员工的人员调动情况,其主要提供的功能有添加人员调动记录和修改人员调动记录。人员调动管理模块的结构如图26所示:
模块主页面
添加人员调动
人员调动管理模块
管理人员调动
图26 人员调动管理模块结构图
4.5.1 实现效果
图27 添加人员调动页面效果
图28 管理人员调动页面效果
图29 查看人员调动页面效果
4.5.2 相关JavaBean程序
业务模型的设计主要定义了类,而控制器的设计则定义了op_
translate,用以从用户接收增加、修改、删除、查询等请求并作出相应操作,其中,FindByNO(),该方法主要用于实现根据记录号查找人员调动信息,用于整体查询;Add(),主要用于实现人员调动记录的添加操作;Modify(),主要实现人员调动信息的修改操作;Delete()实现删除操作;SearchByID()通过员工编号进行查询操作,主要用于一般查询。ListAll( ),主要用于列出查询结果。将操作结果在新的页面中显示出来。
4.5.3 相关JSP文件
本模块主要包含页面关系如图26的结构图所示,其中功能与作用相似,作用是提供了本模块的功能链接,如添加人员调动记录,管理人员调动记录和退出系统。
添加人员调动记录主要由和两个文件组成,其中前者提供了添加记录的界面,如图27所示,后者则用于显示控制器操作结果的表单。
管理人员调动记录主要由、、
、、和 五个文件组成,其中用于显示管理人员调动记录界面如图28所示,当单击图中的修改链接后,则进入页面,该页面表单和图23类似,当点击修改按钮时刚进入页面,用于显示控制器操作数据库后返回的最终修改结果。如点击删除链接,系统会提示是否确认删除操作,单击确定后则进行删除操作,并返回删除结果,并在页面中显示操作的结果;如点击员工编号,则可进入表单页面,显示该员工的详细人员调动信息。如图29所示。
4.6 人力资源管理系统文件结构图
(见图30)
4.7 技术难点
4.7.1 中文乱码问题
开发java应用出现乱码是很常见的,毕竟现在unicode的使用还不是很广泛,在使用gb2312(包含了gbk简体,big5繁体)的系统中要正确实现中文的display和数据库的存储是最基本的要求。由于浏览器中的参数传递是按字节传送,因此英文和数字不会有任何的问题,而中文汉字则由两个字节组成,因此导致了中文无法正常显示。本次实验中碰到了许多JSP和数据库中的中文显示问题,以及JSP网页的中文显示问题,本人经过上网搜索了好多种中文问题解决方案,但有些并不能解决本次实验所碰到的问题,经过多次测试,现将本系统中文显示问题解决方案列出如下:
(1)在首页将此句<%@page contentType=”text/html;
charset=gb2312″%>包含进去,但是经过测试,许多公用模块无法正常显示中文,如和,以及各模块主页也无法正常显示汉字,如将此句包含到显示乱码的页面中,则系统编译错误,显示如下错误:
Exception:
/(0,0) Page directive: can't have multiple
occurrences of contentType。所以经过多次试验,把将此句包含进文件可以正常显示的文件则保留
此句,不能正常显示的则采用方法(2)
(2)在页首包含此句
<%@page pageEncoding=”GB2312″%>,经过测试,使用此句后,无法正常显示的页面,能够正常显示中文了。
(3)针对JSP与数据库之间的中文转化问题,本系统采取的
方法是在每次传参数的前面都进行编码转换如:
String username = new
图30
人力资源管理系统文件结构图
String(ameter("username").getBytes("ISO8859_1"),"GBK");
4.7.2 安全性问题
将项目发布到互联网上后,有些用户不是点击超链接打开网站的某个页面,而是在地址栏中直接写,而后进入,试图避开身份验证,处于对安全性的考虑,本项目在用户登陆后才能进入的页面中,加入了如下的一行判断,如果用户非法进入,则自动跳转到登录界面:
<%@ include file="../ "%> 其中中的代码如下:
<% if((String)ue("IsLogin")!="true")
{
String loginmsg="loginfirst";
direct("../?loginmsg="+loginmsg);
}%>
4.7.3 JavaScript的实现
为使本系统使用过程中更人性化,本系统中加入了一些JavaScript 代码,例如日历的实现,介于本人水平有限,系统中使用的较难的JavaScript代码一部分摘自互联网,其他的是参考其他书中所介绍的案例。
第六章 系统测试
在完成了程序的编写工作后,接下来将进行软件的测试,这里说的软件,并不单单是指程序本身,还包括其他方面.测试和开发一样,也是一项技术性很强的工作,有着很多的技巧. 软件测试是软件质量保证的主要活动之一,因此,测试的质量直接影响软件的质量。
6.1 测试的定义及目的
软件测试就是在软件投入运行前,对软件的需求分析,设计规格说明和编码的最终复审,是保证软件质量的关键步骤.如果要给软件测试下定义,可以这样将,软件测试是为了发现错误而执行程序的过程。
测试的目的在于将软件设计时设计者与程序开发者之间理解不一致的地方,功能与需求不一致的地方,不符合逻辑思维的情况都反映给质量控制部门,由质量控制部门调配需求部门统一作出一个明确解答,再由开发人员进行修改和补充。
测试的目标是以最少的时间和人力找出软件中潜在的各种错误和缺陷。
6.2 测试的原则
对于相对复杂的产品或系统来说,Zero-Bug是一种理想,Good-Enough是我们的原则.Good-Enough原则就是一种权衡投入/产出比的原则;不充分的测试是不负责任的;过分的测试是一种资源的浪费,同样也是一种不负责任的表现.我们操作的困难在于,如何界定什么样的测试是不充分的,什么样的测试是过分的.目前状况唯一可用的答案是:制定最低通过标准和测试内容,然后具体问题具体分析。
6.3 测试的方法
依据前面所说的测试对象,我们把测试划分为几个方面来进行测试。
6.3.1 界面测试
界面测试是测试过程中比较简单直观的一种测试方法,只要细心地按界面要求核对就行了.可这快往往是程序开发人员容易忽视和遗漏的地方,也是常常出Bug的地方.下面是界面测试中经常出现的几种Bug:
错别字,即界面中的标题或者文本内容中出现了错别字.这种Bug如果测试人员不细心,和难找出来,可能会出现在提示信息或界面中。
出现了一些根本读不懂的内容,一般多出现在程序的提示信息和一些较长的文本中.这种情况基本上出现在拼起来显示的提示中,页面的简单陈述是通过变量拼组起来的,通过程序将字一个一个地输出出来.通常是因为程序中的控制错误或是程序开发人员对程序没有进行认真的自测,导致出现这种Bug。
程序员自创的词语,,虽然意思对,但不符合界面的标准及需求.这种情况基本上是由于开发人员使用一些专业术语,并且混杂着自己的理解出现Bug,主要是由于开发过程中团队合作没又明确的分工,没有统一的规范用语。
页面类似的内容中,明显有字体,字号不同的情况,使界面整体风格看上去不一致,这种情况只出现在没有CSS定义的情况下,或是已经定义的CSS,开发人员在开发过程中没有调用。
标题相近的程序及模块,把标题弄混.这种情况多是因为业务方面的定义名称很相似或很类似,并且业务实体方面也很类似,开发人员在开发过程中忽略了开发名称和模块,只单独地实现其功能。
6.3.2 功能测试
顾名思义,功能测试主要是测试程序模块是否实现了设计中所有要求的功能.功能测试中需要注意的有:
查询功能中,有按单一查询条件进行查询的,也有按多个查询条件组合查询的,这里要注意多个查询条件之间的关系,还有一些常识性的问题,比如按月查询,闰年中二月的天数。
录入功能中,需要注意的是前台设置的数值长度是否大于后台数值长度,以及前台与后台的数据结构是否相符,很多时候录入功能无法实现是由于这些原因.还有就是必须录入的字段的设置是否有误。
测试删除功能中需要注意的是单击”删除”按钮后,一般会出现提示信息,询问是否确定删除.通常情况下,我们单击”确认”按钮查看信息是否被删除掉了,而忽略了单击”取消”按钮后程序的反应,这时有可能的是没有删除,还有一种可能是即便单击了”取消”按钮,也一样删除了数据.另外,在删除多条记录的时候,要注意连续选中的几条记录是否真正都被删除了,即如果再按照这种查询方式查询,是否还能查询出来.有的时候需要在数据库中设一个标志位,而不是真正的物理删除.所以在下一次查询中,可能还会被查询出来,这主要是因为在查询条件中没有将标志位考虑在内。
关于修改功能的测试,主要是看修改确认后是否数据真正已被修改了.这是最基本的功能,需要注意的是看是否能把不应该修改的数据也修改成功了。
6.3.3 需求测试
针对需求测试,是测试中很重要的一个环节.因为需求是在软件设计,开发乃至软件测试中重要的依据.要针对需求测试,首先就要对项目的需求和业务有一定的了解.这些需求很多时候是在实现增,删,查,改这些基本功能之上,针对项目和相关业务所作的一些逻辑上的控制.这就要求程序员在设计和编码的时候要去充分理解考虑需求。
6.3.4 性能测试
性能测试在软件的质量保证中起着重要的作用..通常我们把性能指标全部归结到硬件,操作系统和开发环境上,而忽略了代码本身性能上的考虑.性能需求指标中,稳定性,并访支撑能力以及安全性都很重要,作为程序员需要评估该模块在系统运营中所处的环境,将要受到的负荷压力以及各种潜在的危险和恶意攻击的可能性。
6.4 测试中其他要注意的地方
时常有这样的情况发生,每个模块都能单独工作,但这些模块集成在一起之后却不能正常工作.其主要原因是,模块相互调用时接口会引入许多新问题.这就要求在进行程序设计和编码的时候要尽可能地从整体考虑。
错误本身出现在程序设计阶段,并非由于程序员编码造成的问题.这就要求我们无论是在开发还是测试阶段,对需求或程序设计存在疑问,应及时提出,及时解决.
由于一些模块被修改了,对其他模块造成了影响而出现了新的Bug.发现这些Bug要求我们对程序整体的结构有基本的了解,清楚模块之间的一些联系。
6.5 人力资源管理系统的测试
在完成编码的工作以后,根据以上的方法和步骤进行了如下的测试:
界面测试:反复点击网页上的超链接,测试其连接情况,直到所有的链接都达到预期的效果。
功能测试:对网站的几大功能模块逐一测试,尽最大可能发现起潜在的错误。
性能测试:将程序以局域网的形式发布,查看其他用户是否能够访问到。
需求测试:根据需求分析的内容,测试网站是否和当初的设计一样.
通过这几方面的测试,我及时修正了系统中存在的问题,很好的提高了系统的性能,达到了预期目标。
第七章 总结
经过两个月艰苦卓绝的努力,总于完成了本毕业设计.从当初领到题目到最后一个功能模块的完成,经历了无数次的错误->修改代码->重启服务器->运行的过程,感觉到平时学的知识是多么的浅薄,书到用时方恨少,现在是体验的真真切切.本来已经耳熟能详的代码,一到IDE中书写,却提笔忘字,这充分的反应了我平时的基本功不扎实,常用代码的不熟练.给我以后的工作敲响了警钟,有了努力的方向.
但通过本次毕业设计,我也感受到了开源的方便,遇到什么问题,上网一查,就知道该怎么弄了,以前做个课程设计都是怕别人和我的一样,不愿意给别人看,现在知道了程序弄不出来是多么的着急,学习都是相互的,互相研究才能共同进步的.以后要多多注意这方面的事情,
本次毕业设计是我工作前一次很好的演练和实践的机会,是培养独立思考问题和自学能力的锻炼,使我意识到必须努力学习才能才工作中体现自己的价值,适应社会的需要。
致 谢
本论文是在导师XX教授悉心指导下完成的,VXX从论文研究选题、内容、资料收集、结构及至论文的完成,都给予了作者许多富有关键性的建议和指导。VXX渊博的知识、务实的工作作风和无私的奉献精神将使我终身受益。谨此向VXX老师表示衷心的感谢并致以崇高的敬意!
同时也谢谢那些在我学习过程期间,给我教诲和知识的老师们,在各个方面给予我帮助的单位领导和同学,这将会给我带来终身受益,也感谢我的家人和朋友对我学业的大力支持,鼓励和理解!
参考文献
1 刘洋,精通Hibernate,电子工业出版社,2005,15-234
2 史济民,软件工程――原理、方法与应用,高等教育出版社,2002年,45-345
3 张桂元,贾燕枫,Eclipse开发入门与项目实践,人民邮电出版,2006年,56-78
4 张桂元Struts开发入门与项目实践,人民邮电出版社,2005年,123-156
5 孙卫琴,精通Struts:基于MVC的Java Web设计与开发,电子工业出版社,2004年,26-77
6 鲁晓东,JSP软件工程案例精解,电子工业出版社,2005年,78-210
7 丁鹏,STRUTS技术解密及WEB开发实例,清华大学出版社,2004年,295-323
8 夏昕,深入浅出Hibernate,电子工业出版社,2005年6月
9 孙卫琴,精通Hibernate:Java对象持久化技术详解,电子工业出版社,2005年341-367
10李小喆,张晓辉,李祥胜.SQLServer 2000管理及应用系统开发[M].人民邮电出版社,2002,17--168.
Anyway, I was here in Amber some years ago. Not doing much of anything. Just visiting and being a nuisance. Dad was still around, and when I noticed that he was getting into one of his grumpy moods,
I decided it was time to take a walk. A long one. I had often noticed that his fondness for me tended to increase as an inverse function of my proximity. He gave me a fancy riding crop for a going-away
present-to hasten the process of affection, I suppose. Still, it was a very nice crop-silver-chased, beautifully tooled-and I made good use of it. I had decided to go looking for an assemblage of all my simple
pleasures in one small nook of Shadow.
It was a long ride-I will not bore you with the details-and it was pretty far from Amber, as such things go. This time, I was not looking for a place where I would be especially important. That can get
either boring or difficult fairly quickly, depending on how responsible you want to be. I wanted to be an irresponsible nonentity and just enjoy myself.
Texorami was a wide open port city, with sultry days and long nights, lots of good music, gambling around the clock, duels every morning and in-between mayhem for those who couldn't wait. And the
air currents were fabulous. I had a little red sail plane I used to go sky surfing in, every couple of days. It was the good life. I played drums till all hours in a basement spot up the river where the walls
sweated almost as much as the customers and the smoke used to wash around the lights like streams of milk. When I was done playing I'd go find some action, women, or cards, usually. And that was it for
the rest of the night. Damn Eric, anywayl That reminds me again . . . He once accused me of cheating at cards, did you know that? And that's about the only thing I wouldn't cheat at. I take my card playing
seriously. I'm good and I'm also lucky. Eric was neither. The trouble with him was that he was good at so many things he wouldn't admit even to himself that there were some things other people could do
better. If you kept beating him at anything you had to be cheating. He started a nasty argument over it one night-could have gotten serious-but Gerard and Caine broke it up. Give Caine that. He took my part
that time. Poor guy . . . Hell of a way to go, you know? His throat . . . Well, anyhow, there I was in Texorami, making music and women, winning at cards and jockeying around the sky. Palm trees and
night-blooming wallflowers. Lots of good port smells-spices, coffee, tar, salt-you know. Gentlefolk, merchants, and peons-the same straights as in most other places. Sailors and assorted travelers passing in
and out. Guys like me living around the edges of things. I spent a little over two years in Texorami, happy. Really. Not much contact with the others. Sort of postcard like hellos via the Trumps every now and
then, and that was about it. Amber was pretty much off my mind. All this changed one night when I was sitting there with a full house and the guy across from me was trying to make up his mind whether or
not I was bluffing.
The Jack of Diamonds began talking to me.
Yes, that is how it started. I was in a weird frame of mind anyway. I had just finished a couple very hot sets and was still kind of high. Also, I was physically strung out from a long day's gliding and not
much sleep the night before. I decided later that it must be our mental quirk associated with the Trumps that made me see it that way when someone was trying to reach me and I had cards in my hand-any
cards. Ordinarily, of course, we get the message empty-handed, unless we are doing the calling. It could have been that my subconscious-which was kind of footloose at the time-just seized on the available
props out of habit Later, though, I had cause to wonder. Really, I just don't know.
The Jack said, "Random." Then its face blurred and it said, "Help me." I began getting a feel of the personality by then, but it was weak. The whole thing was very weak. Then the face rearranged itself
and I saw that I was right. It was Brand. He looked like hell, and he seemed to be chained or tied to something. "Help me," he said again.
"I'm here," I said. "What's the matter?" ". . . prisoner," he said, and something else that I couldn't make out. "Where?" I asked.
He shook his head at that.
"Can't bring you through," he said. "No Trumps, and I am too weak. You will have to come the long "
I did not ask him how he was managing it without my Trump. Finding out where he was seemed of first importance. I asked him how I could locate him.
"Look very closely," he said. "Remember every feature. I may only be able to show you once. Come armed, too. . . ."
Then I saw the landscape-over his shoulder, out a window, over a battlement, I can't be sure. It was far from Amber, somewhere where the shadows go mad. Farther than I like to go. Stark, with shifting
colors. Fiery. Day without a sun in the sky. Rocks that glided like sailboats across the land. Brand there in some sort of tower-a small point of stability in that flowing scene. I remembered it, all right. And I
remembered the presence coiled about the base of that tower. Brilliant. Prismatic. Some sort of watch-thing, it seemed-too bright for me to make out its outline, to guess its proper size. Then it all just went
away. Instant off. And there I was, staring at the Jack of Diamonds again, with the guy across from me not knowing whether to be mad at my long distraction or concerned that I might be having some sort of
sick spell.
I closed up shop with that hand and went home. I lay stretched out on my bed, smoking and thinking. Brand had still been in Amber when I had departed. Later, though, when I had asked after him, no
one had any idea as to his whereabouts. He had been having one of his melancholy spells, had snapped out of it one day and ridden off. And that was that. No messages either-either way. He wasn't answering,
he wasn't talking.
I tried to figure every angle. He was smart, damn smart. Possibly the best mind in the family. He was in trouble and he had called me. Eric and Gerard were more the heroic types and would probably
have welcomed the adventure. Caine would have gone out of curiosity, I think. Julian, to look better than the rest of us and to score points with Dad. Or, easiest of all, Brand could have called Dad himself.
Dad would have done something about it. But he had called me. Why?
It occurred to me then that maybe one or more of the others had been responsible for his circumstances. If, say, Dad was beginning to favor him . . . Well. You know. Eliminate the positive. And if he did
call Dad, he would look like a weakling.
So I suppressed my impulse to yell for reinforcements. He had called me, and it was quite possible that I would be cutting his throat by letting anyone back in Amber in on the fact that he had gotten the
message out. Okay. What was in it for me?
If it involved the succession and he had truly become fair-haired, I figured that I could do a lot worse than give him this to remember me by. And if it did not . . . There were all sorts of other possibilities.
Perhaps he had stumbled onto something going on back home, something it would be useful to know about. I was even curious as to the means he had employed for bypassing the Trumps. So it was curiosity,
I'd say, that made me decide to go it alone and try to rescue him.
I dusted off my own Trumps and tried reaching him again. As you might expect, there was no response. I got a good night's sleep then and tried one more time in the morning. Again, nothing. Okay, no
sense waiting any longer.
I cleaned up my blade, ate a big meal, and got into some rugged clothes. I also picked up a pair of dark, polaroid goggles. Didn't know how they would work there, but that warden-thing had been
awfully bright-and it never hurts to try anything extra you can think of. For that matter, I also took a gun. I had a feeling it would be worthless, and I was right. But, like I said, you never know till you try.
The only person I said good-bye to was another drummer, because I stopped to give him my set before I left. I knew he'd take good care of them.
Then I went on down to the hangar, got the sail plane ready, went aloft, and caught a proper current. It seemed a neat way to do it.
I don't know whether you've ever glided through Shadow, but-No? Well, I headed out over the sea till the land was only a dim line to the north. Then I had the waters go cobalt beneath me, rear up and
shake sparkly beards. The wind shifted. I turned. I raced the waves shoreward beneath a darkening sky. Texorami was gone when I returned to the rivermouth, replaced by miles of swamp. I rode the currents
inward, crossing and recrossing the river at new twists and kinks it had acquired. Gone were the piers, the trails, the traffic. The trees were high.
Clouds massed in the west, pink and pearl and yellow. The sun phased from orange through red to yellow. You shake your head? The sun was the price of the cities, you see. In a hurry, I depopulate-or,
rather, go the elemental route. At that altitude artifacts would have been distracting. Shading and texture becomes everything for me. That's what I meant about gliding it being a bit different.
So, I bore to the west till the woods gave way to surface green, which quickly faded, dispersed, broke to brown, tan, yellow. Light and crumbly then, splotched. The price of that was a storm. I rode it out
as much as I could, till the lightnings forked nearby and I feared that the gusts were getting to be too much for the little glider. I toned it down fast then, but got more green below as a result. Still, I pulled it
out of the storm with a yellow sun firm and bright at my back. After a time, I got it to go desert beneath me again, stark and rolling.
Then the sun shrank and strands of cloud whipped past its face, erasing it bit by bit. That was the shortcut that took me farther from Amber than I had been in a long while.
No sun then, but the light remained, just as bright but eerie now, directionless. It tricked my eyes, it screwed up perspective. I dropped lower, limiting my range of vision. Soon large rocks came into
view, and I fought for the shapes I remembered. Gradually, these occurred.
The buckling, flowing effect was easier to achieve under these conditions, but its production was physically disconcerting. It made it even more difficult to judge my effectiveness in guiding the glider. I
got lower than I thought I was and almost collided with one of the rocks. Finally, though, the smokes rose and flames danced about as I remembered them-conforming to no particular pattern, just emerging
here and there from crevasses, holes, cave mouths. Colors began to misbehave as I recalled from my brief view. Then came the actual motion of the rocks-drifting, sailing, like rudderless boats in a place
where they wring out rainbows.
By then, the air currents had gone crazy. One updraft after another, like fountains, I fought them as best I could, but knew I could not hold things together much longer at that altitude. I rose a
considerable distance, forgetting everything for a time while trying to stabilize the craft. When I looked down again, it was like viewing a free-form regatta of black icebergs. The rocks were racing around,
clashing together, backing off, colliding again, spinning, arcing across the open spaces, passing among one another. Then I was slammed about, forced down, forced up-and I saw a strut give way. I gave the
shadows their final nudge, then looked again. The tower had appeared in the distance, something brighter than ice or aluminum stationed at its base.
That final push had done it. I realized that just as I felt the winds start a particularly nasty piece of business. Then several cables snapped and I was on my way down-like riding a waterfall. I got the nose
up, brought it in low and wild, saw where we were headed, and jumped at the last moment. The poor glider was pulverized by one of those peripatetic monoliths. I felt worse about that than I did about the
scrapes, rips, and lumps I collected.
Then I had to move quickly, because a hill was racing toward me. We both veered, fortunately in different directions. I hadn't the faintest notion as to their motive force, and at first I could see no pattern
to their movements. The ground varied from warm to extremely hot underfoot, and along with the smoke and occasional jets of flame, nasty-smelling gases were escaping from numerous openings in the
ground. I hurried toward the tower, following a necessarily irregular course.
It took a long while to cover the distance. Just how long, I was uncertain, as I had no way of keeping track of the time. By then, though, I was beginning to notice some interesting regularities. First, the
larger stones moved at a greater velocity than the smaller ones. Second, they seemed to be orbiting one another-cycles within cycles within cycles, larger about smaller, none of them ever still. Perhaps the
prime mover was a dust mote or a single molecule-somewhere. I had neither time nor desire to indulge in any attempt to determine the center of the affair. Keeping this in mind, I did manage to observe as I
went, though, enough so that I was able to anticipate a number of their collisions well in advance.
So Childe Random to the dark tower came, yeah, gun in one hand, blade in the other. The goggles hung about my neck. With all the smoke and confused lighting, I wasn't about to don them until it
became absolutely necessary.
Now, whatever the reason, the rocks avoided the tower. While it seemed to stand on a hill, I realized as I approached that it would be more correct to say that the rocks had scooped out an enormous
basin just short of it. I could not tell from my side, however, whether the effect was that of an island or a peninsula.
I dashed through the smoke and rubble, avoiding the jets of flame that leaped from the cracks and holes. Finally I scrambled up the slope, removing myself from the courseway. Then for several
moments I clung at a spot just below any line of sight from the tower. I checked my weapons, controlled my breathing, and put on the goggles. Everything set, I went over the top and came up into a crouch.
Yes, the shades worked. And yes, the beast was waiting.
It was a fright all right, because in some ways it was kind of beautiful. It had a snake body as big around as a barrel, with a head sort of like a massive claw hammer, but kind of tapered to the snout end.
Eyes of a very pale green. And it was clear as glass, with very faint, fine lines seeming to indicate scales. Whatever flowed in its veins was reasonably clear, also. You could look right into it and see its
organs-opaque or cloudy as the case might be. You could almost be distracted by watching the thing function. And it had a dense mane, like bristles of glass, about the head and collaring its gullet. Its
movement when it saw me, raised that head and slivered forward, was like flowing water-living water, it seemed, a bedless river without banks. What almost froze me, though, was that I could see into its
stomach. There was a partly digested man in it I raised the gun, aimed at the nearest eye, and squeezed the trigger.
I already told you it didn't work. So I threw the gun, leaped to my left, and sprang in on its right side, going for its eye with my blade.
You know how hard it can be to kill things built along reptilian lines. I decided immediately to try to blind the thing and hack off its tongue as the first order of business. Then, being more than a little
fast on my feet, I might have any number of chances to lay in some good ones about the head until I decapitated it. Then let it tie itself in knots till it stopped. I was hoping, too, that it might be sluggish
because it was still digesting someone.
If it was sluggish then, I was glad that I hadn't stopped by earlier. It drew its head out of the path of my blade and snapped down over it while I was still off balance. That snout glanced across my chest,
and it did feel as if I had been hit by a massive hammer. It knocked me sprawling.
I kept on rolling to get out of range, coming up short near the edge of the embankment. I recovered my footing there while it unwound itself, dragged a lot of weight in my direction, and then reared up
and cocked its head again, about fifteen feet above me.
I know damn well that Gerard would have chosen that moment to attack. The big bastard would have strode forward with that monster blade of his and cut the thing in half. Then it probably would have
fallen on him and writhed all over him, and he'd have come away with a few bruises. Maybe a bloody nose. Benedict would not have missed the eve. He would have had one in each pocket by then and be
playing football with the head while composing a footnote to Clausewitz. But they are genuine hero types. Me, I just stood there holding the blade point upward, both hands on the hilt, my elbows on my hips,
my head as far back out of the way as possible. I would much rather have run and called it a day. Only I knew that if I tried it, that head would drop down and smear me.
Cries from within the tower indicated that I had been spotted, but I was not about to look away to see what was going on. Then I began cursing the thing. I wanted it to strike and get it over with, one
way or the other.
When it finally did, I shuffled my feet, twisted my body, and swung the point into line with my target.
My left side was partly numbed by the blow, and I felt as if I had been driven a foot into the ground.
Somehow I managed to remain upright. Yes, I had done everything perfectly. The maneuver had gone exactly as I had hoped and planned.
Except for the beast's part. It wasn't cooperating by producing the appropriate death throes. In fact, it was beginning to rise.
It took my blade with it, too. The hilt protruded from its left eye socket, the point emerged like another bristle amid the mane on the back of its head. I had a feeling that the offensive team had had it.
At that moment, figures began to emerge-slowly, cautiously-from an opening at the base of the tower. They were armed and ugly-looking, and I had a feeling that they were not on my side of the
disagreement.
Okay. I know when it is time to fold and hope for a better hand another day.
"Brand!" I shouted. "It's Random! I can't get through! Sorry!"
Then I turned, ran, and leaped back over the edge, down into the place where the rocks did their unsettling things. I wondered whether I had chosen the best time to descend.
Like so many things, the answer was yes and no.
It was not the sort of jump I would make for many reasons other than those which prevailed. I came down alive, but that seemed the most that could be said for it. I was stunned, and for a long while I
thought I had broken my ankle.
The thing that got me moving again was a rustling sound from above and the rattle of gravel about me. When I readjusted the goggles and looked up, I saw that the beast had decided to come down and
finish the job. It was winding its phantom way down the slope, the area about its head having darkened and opaqued since I had skewered it upstairs.
I sat up. I got to my knees. I tried my ankle, couldn't use it. Nothing around to serve as a crutch, either. Okay. I crawled then. Away. What else was there to do? Gain as much ground as I could and think
hard while I was about it.
Salvation was a rock-one of the smaller, slower ones, only about the size of a moving van. When I saw it approaching, it occurred to me that here was transportation if I could make it aboard. Maybe
some safety, too. The faster, really massive ones appeared to get the most abuse.
This in mind, I watched the big ones that accompanied my own, estimated their paths and velocities, tried to gauge the movement of the entire system, readied myself for the moment, the effort. I also
listened to the approach of the beast, heard the cries of the troops from the edge of the bluff, wondered whether anyone up there was giving odds on me and what they might be if they were.
When the time came, I went. I got past the first big one without any trouble, but had to wait for the next one to go by. I took a chance in crossing the path of the final one. Had to, to make it in time.
I made it to the right spot at the right moment caught on to the holds I had been eyeing, and was dragged maybe twenty feet before I could pull myself up off the ground. Then I hauled my way to its
uncomfortable top, sprawled there, and looked back.
It had been close. Still was, for that matter, as the beast was pacing me, its one good eye following the spinning big ones.
From overhead I heard a disappointed wail. Then the guys started down the slope, shouting what I took to be encouragement to the creature. I commenced massaging my ankle. I tried to relax. The brute
crossed over, passing behind the first big rock as it completed another orbit.
How far could I shift through Shadow before it reached me? I wondered. True, there was constant movement, a changing of textures.. .
The thing waited for the second rock, slithered by behind it, paced me again, drew nearer. Shadow, Shadow, on the wing-
The men were almost to the base of the slope by then. The beast was waiting for its opening-the next time around-past the inner satellite. I knew that it was capable of rearing high enough to snatch me
from my perch.
-Come alive and smear that thing?
As I spun and glided I caught hold of the stuff of Shadow, sank into the feel of it, worked with the textures, possible to probable to actual, felt it coming with the finest twist, gave it that necessary flip at
the
It came following me! They had even gained some.
Naturally, I got angry. To hell with flight! They were asking for it, and it was time they got it
one came up and joined them.
They were not all that good, but it was getting crowded and there were a lot of points and sharp edges straying about me. I kept parrying and moving, trying to get them to block one another, get in each
other's way. I was partly successful, and when I had the best lineup I thought I was going to get, I rushed them, taking a couple of cuts-I had to lay myself open a bit to do it-but splitting one skull for my
pains. He went over the edge and took the second one with him in a tangle of limbs and gear.
Unfortunately, the inconsiderate lout had carried off my blade, snagged in some bony cleft or other he had chosen to interpose when I swung. It was obviously my day for losing blades, and I wondered
if my horoscope would have mentioned it if I had thought to look before I'd set out.
Anyhow, I moved quickly to avoid the final guy's swing. In doing so, I slipped on some blood and went skidding toward the front of the rock. If I went down that way, it would plow right over me,
leaving a very flat Random there, like an exotic rug, to puzzle and delight future wayfarers.
I clawed for handholds as I slid, and the guy took a couple of quick steps toward me, raising his blade to do unto me as I had his buddy.
I caught hold of his ankle, though, and it did the trick of braking me very nicely-and damned if someone shouldn't choose that moment to try to get hold of me via the Trumps.
"I'm busyl" I shouted. "Call back later!" and my own motion was arrested as the guy toppled, clattered, and went sliding by.
I tried to reach him before he fell to rugdom, but I was not quite quick enough. I had wanted to save him for questioning. Still, my
unegged beer was more than satisfactory. I headed back top and center to observe and muse.
The survivors were still following me, but I had a sufficient lead. I did not at the moment have to worry about another boarding party. Good enough. I was headed toward the mountains once again. The
sun I had conjured was beginning to bake me. I was soaked with sweat and blood. My wounds were giving me trouble. I was thirsty. Soon, soon, I decided, it would have to rain. Take care of that before
anything else.
So I began the preliminaries to a shift in that direction: clouds massing, building, darkening. . . .
I drifted off somewhere along the line, had a disjointed dream of someone trying to reach me again but not making it. Sweet darkness.. . . . . . . . .
版权声明:本文标题:毕业设计-基于JSP的人力资源管理系统的设计与实现—论文 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1702944996h436893.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论