配色: 字号:
信息管理平台相关论文整合(共7篇)
2022-08-15 | 阅:  转:  |  分享 
  
















<%if(intPageCount>0){

sqlRst.absolute((intPage-1)intPageSize+1);

i=0;

while(i



<%=sqlRst.getString(1)%>

<%=sqlRst.getString(2)%>

<%=sqlRst.getString(3)%>

<%=sqlRst.getString(4)%>

<%=sqlRst.getString(5)%>

<%=sqlRst.getString(6)%>



<%

sqlRst.next();

i++;}}

%>



帐号   








密码   








 



<%

if("error".equals((String)request.getAttribute("error"))){%>

信息错误,请重新填写!

<%}%>

目录



------百货中心供应链管理



------电子政务信息管理



------固定资产信息管理



------合同信息管理



------健康信息管理



------商品供应信息管理



------土地档案信息管理

1、百货中心供应链管理



百货中心供应链管理系统

摘要

近年来,随着计算机技术的发展,以及信息化时代下企业对效率的需求,计算机技术与通信技术已经被越来越多地应用到各行各业中去。百货中心作为物流产业链中重要的一环,为了应对新兴消费方式的冲击,从供货到销售的各个环节也迫切地需要实现信息化、自动化。而上面所提到的这些环节,在二十世纪中期后被称为“供应链”,也是在本世纪初才在中国受到关注的一门新兴科学。

本文就百货中心供应链管理系统的设计与开发展开论述,按照软件工程开发的实际步骤,依次对该项目的可行性分析、需求分析、概要设计、详细设计、系统实现以及系统测试分别进行阐述。

在查阅了各界媒体资料、分析了国内外供应链管理系统的基础上,经过认真学习与不懈探索,利用J2EE技术和Mysql数据库,最终完成了百货中心供应链管理系统的开发,并经过一系列测试及试用,达到了最初的设计目标。



关键词:供应链,软件工程,J2EE

目录

1引言 1

1.1课题背景 1

1.2目的和意义 2

1.3研究内容和组织结构 2

2开发工具及技术 3

2.1开发工具 3

2.2使用技术 4

3可行性分析 6

3.1法律的可行性 6

3.2经济的可行性 6

3.3技术的可行性 6

4需求分析 7

4.1系统功能分析 7

4.1.1经理用例图 7

4.1.2人事部员工用例图 7

4.1.3采购部员工用例图 8

4.1.4物资部员工用例图 8

4.1.5销售部员工用例图 9

4.2功能模块需求分析 9

4.3数据流图 10

4.3.1顶层数据流图 10

4.3.2一层数据流图 10

4.4数据字典 11

4.4.1数据项的描述 11

4.4.2数据流的描述 12

4.4.3描述外部实体 14

5系统设计 15

5.1系统结构设计 15

5.2系统子模块功能介绍 15

5.3数据库设计 16

5.3.1数据库概念设计(E-R模型) 16

5.3.2数据库表结构设计 17

6系统实现 20

6.1系统登录界面 22

6.2登录成功界面 23

6.3人事管理界面 25

6.4合作公司管理界面 26

6.5采购管理界面 28

6.6库存管理界面 31

6.7销售管理界面 34

6.8经营统计界面 35

7系统测试 35

7.1测试目的 35

7.2测试方法 36

7.3测试结果 36

8总结 37

参考文献 38

致谢 39

1引言

1.1课题背景

随着国内物流行业的迅速发展,越来越多的企业认识到了“供应链”一词的含义以及它对整个企业物流活动的重大意义,于是,“供应链管理”也逐渐受到了大家的重视。供应链管理主要涉及到四个领域:供应、生产计划、物流、需求[1]。职能领域主要包括产品工程、产品技术保证、采购、生产控制、库存控制、仓储管理、分销管理[2]。在供应链管理中涉及到如此广泛、复杂的物流活动,要对其进行统筹、控制绝非易事,这也是我国企业目前在供应链管理中亟待解决的难题。与此同时,互联网和网络技术的进步为我们解决这一问题提供了方案,借助互联网及互联网技术,企业各个物流阶段的大量数据可以得到及时传输,并通过日益成熟的算法或处理手段实现对这些数据的准确分析,从而指导企业的物流活动或对未来做出预测。百货中心作为现在物流以及商业中的重要一环,为了应对新兴消费方式的冲击,其供应链模式自然也有统筹优化的必要,同时,Internet和网络技术的飞速发展也为供应链的管理提供了新的手段。

SCM(SupplyChainManagement)系统即供应链管理系统,利用计算机和Internet的优点,将供应链中的信息流加以收集并控制,只需要少量的人工,便可实现对整个供应链进行监管[3]。

国际上研究供应链主要是开始于二战后期的物流管理,主要从多级库存以及生产-分销的角度来研究供应链的优化问题。从最初的物流管理到供应链管理,再到如今把供应链增长到战略管理来研究,花费了半个多世纪的时间。国内对供应链的研究起步较晚,国内一些企业对于供应链管理的认识比较肤浅,直到1997年以后,随着各种有关供应链方面的研究和报道增多,人们对物流领域的这一新鲜事物的关注也逐渐升温,直到今天,许多国外的知名公司如IBM、SAP都能为企业的供应链管理提供一整套的解决方案,国内近些年也出现了许多解决企业供应链管理问题的公司和软件[1]。但总体来说,对于这一门相对还很年轻的科学,我们还有很长的路要走。

随着我国经济结构调整的深入,对企业节能减排的要求更加严格,企业只有通过强化环境保护的自我约束机制,来降低产品和生产过程相关的环境污染所带来的生产经营风险。绿色供应链管理能使整个供应链的资源消耗和环境负作用最小,并能有效满足日益增长的绿色消费需求,从而提高供应链的竞争力。

因此,实施绿色供应链管理是企业发展的必然趋势,这对我国供应链管理行业提出了更高的要求。

1.2目的和意义

对于课题-百货中心供应链管理系统,在了解了传统SCM的基础上,结合了计算机及Internet技术的优点,旨在于简化操作,提高效率,提高数据、信息的安全程度,为企业及其员工提供一个更加便捷高效的工作环境。

与传统仅仅利用表格、账目来实现对供应链的管理,基于Web的百货中心供应链管理系统具有如下优点:

信息存放在数据库中,安全稳定,便于备份;

不同职位的员工都可以使用一套系统,节约成本、方便管理;

基于Web的办公系统,方便员工维护,无地域限制;

利用计算机将不同数据整合,方便企业管理、进行决策。

1.3研究内容和组织结构

本文主要通过对百货中心供应链管理系统进行需求分析,结合供应链管理的相关理论,设计出供应链管理系统的各个功能模块,并对其做出一定的说明指导,方便使用者进行操作。

系统的主要研究内容包括:

百货中心供应链管理系统的可行性分析

研究供应链管理相关方面的知识,了解百货中心供应链的运作模式及现状,分析确定开发本系统的必要性和可行性。

系统需求分析

确定业务流程,分析数据流向,完成数据流图和系统用例图的绘制,完成数据字典的制作。

系统概要/详细设计

根据需求分析阶段的结果,以提高百货中心各层员工的工作效率为目的,将整个系统分成若干个小模块,通过设计、编写代码实现不同功能,完成数据库的搭建,最后将整个系统进行整合。

系统测试

对完成的系统进行条件许可下的测试,对系统的安全性、稳定性、容错性进行评估。

本文组织结构:

引言部分-阐述本系统的该项研究的目的和范围,以及该项研究工作在国民经济中的实用价值与理论意义;本文所要解决的问题;论文内容安排等。

开发工具及技术分析-对于本系统开发将要用到的开发工具及技术进行简单的说明,并分析其优势。

系统需求分析-分析系统业务流程,为整个系统的设计开发打下基础。

概要/详细设计-依据前文的分析进一步设计系统的各模块功能,为一些比较有难度的部分提供解决方案。

系统实现及测试-描述系统各模块的功能并展示部分关键代码,并且完成一些简单的数据录入测试。

2开发工具及技术

2.1开发工具

本设计主要利用MyEclipse和Tomcat服务器,加上Mysql数据库进行开发,同时使用Maven来辅助、简化开发。下面对使用到的开发工具进行简要的介绍。

MyEclipse

MyEclipse企业级工作平台(MyEclipseEnterpriseWorkbench,简称MyEclipse)是一个功能丰富的JavaEE开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSP,CSS,Javascript,SQL,Hibernate[4]。它是对EclipseIDE的扩展,是一个十分优秀的用于开发Java,J2EE的Eclipse插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持都十分不错[5]。

Tomcat

Tomcat服务器是一个免费的开放源代码的Web应用服务器,它属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,十分符合本项目的需求[6]。Tomcat运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能,并且它仍在不断地改进和完善中,因此十分受程序员的青睐。

Mysql

Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(RelationalDatabaseManagementSystem:关系数据库管理系统)应用软件之一[7]。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySql使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性;支持多种操作系统;为多种编程语言提供了API;支持多线程,充分利用CPU资源;提供TCP/IP、ODBC和JDBC等多种数据库连接途径;可以处理拥有上千万条记录的大型数据库[8]。

Maven

Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven是一个项目管理工具,它包含了一个项目对象模型(ProjectObjectModel),一组标准集合,一个项目生命周期(ProjectLifecycle),一个依赖管理系统(DependencyManagementSystem),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。

2.2使用技术

JSP

JSP,全名为JavaServerPages,是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态技术标准[9]。在传统的网页HTML文件中加入Java程序片段和JSP标签,就构成了JSP网页java程序片段可以操纵数据库、重新定向网页以及发送E-mail等,实现建立动态网站所需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,这样大大降低了对客户浏览器的要求,即使客户浏览器端不支持Java,也可以访问JSP网页。

JSP的根本是一个简化的Servlet设计,他实现了Html语法中的java扩张(以<%,%>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览[10]。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户端。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。

SSH框架

SSH为struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架[11]。集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理struts和hibernate。

采用上述开发模型,不仅实现了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离[12]。这样无论前端如何变化,模型层只需很少的改动,并且数据库的变化也不会对前端有所影响,大大提高了系统的可复用性。而且由于不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率。

Tiles

Tiles是一种JSP布局框架,主要目的是为了将复数的jsp页面作为一个的页面的部分机能,然后用来组合成一个最终表示用页面用的,这样的话,便于对页面的各个机能的变更及维护。Tiles使得struts在页面的处理方面多了一种选择。并且更容易实现代码的重用。

JavaScript

JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言[13]。同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML(标准通用标记语言的子集)网页添加动态功能,比如响应用户的各种操作,是一种动态、弱类型、基于原型的语言,内置支持类。在HTML基础上,使用JavaScript可以开发交互式Web网页[14]。JavaScript的出现使得网页和用户之间实现了一种实时性的、动态的、交互性的关系,使网页包含更多活跃的元素和更加精彩的内容。JavaScript的一个重要功能就是面向对象的功能,通过基于对象的程序设计,可以用更直观、模块化和可重复使用的方式进行程序开发。

3可行性分析

在进行系统开发时,会受到来自时间、资源等多方面的限制,因此,在每一个项目开发开始之前,首先进行系统的可行性分析就显得十分重要,它可以减少项目开发的风险,避免人力、物力、财力的浪费[15]。下面将就法律、经济和技术三方面对本项目进行讨论。

3.1法律的可行性

百货中兴供应链管理系统是自主开发的管理系统,开发过程中使用的开发工具及技术都是免费的,开源的,不存在侵权的问题,所有的源代码都是亲自编写或直接由工具自动生成,没有使用他人的项目成果或方案,因此在法律上是可行的。

3.2经济的可行性

本系统所使用的开发工具都是开源的,为开发软件节省了大量的金钱和时间,采用的技术也是完全开放的、免费的,达到了降低成本的目的。软件对企业的硬件需求也不高,市场上的中低档计算机也可以符合使用要求,同时由于利用了互联网,比一般的供应链管理系统更加经济、效率。

3.3技术的可行性

系统使用的开发工具是MyEclipse、Maven和Mysql数据库,工具免费且小巧,安装方便,简单易学。并且采用了目前十分流行的J2EE技术,因而有很多途径找到相关的学习资料,在大学期间我也学习了许多相关的知识,包括对于数据库和编程思想的学习,使得在这个项目中更容易上手,能够迅速投入到系统的设计开发中去。

4需求分析

4.1系统功能分析

经过对百货中心供销流程的了解和对供应链管理相关资料的分析,决定将系统用户分成五类不同的用例,系统应根据用例的不同职能实现不同的功能,经过分析,系统应具备人事管理、合作公司管理、采购订单管理、库存管理、销售管理、经营统计六大功能模块。具体用例图如下:

4.1.1经理用例图

经理用例-经理应是百货中心的最高负责人之一,负责百货中心大部分的业务管理及监督工作,必要时也可以完成所有其他用例的操作,地位相当于系统管理员,具有最高权限。



图4.1经理用例图

4.1.2人事部员工用例图

人事部员工用例-人事部员工主要操作系统的人事管理模块,同时也可以进入经营统计模块查看。



4.2人事部员工用例图

4.1.3采购部员工用例图

采购部员工用例-采购部员工主要负责操作系统的合作公司管理模块和采购订单管理模块,同时也可以进入经营统计模块查看。



4.3采购部员工用例图

4.1.4物资部员工用例图

物资部员工用例-物资部员工主要负责操作系统的库存管理模块,同时也可以进入经营统计模块查看。



4.4物资部员工用例图

4.1.5销售部员工用例图

销售部员工用例-物资部员工主要负责操作系统的销售管理模块,同时也可以进入经营统计模块查看。



4.5销售部员工用例图

4.2功能模块需求分析

考虑到用户可能对计算机操作不是十分熟悉,本系统应具备操作简便、界面友好的特点,再结合系统分析的结论,本系统还应增加一个登录模块以实现不同用例登录系统后可以进行不同的操作,具体分析如下:

系统界面简洁大方,使用简便,有友好的操作提示信息;

系统具有一定的安全性,避免恶意操作对系统及数据造成损害;

贴近实际用户的工作情况,对一些关键数据提供打印、保存功能;

系统应具备登录、人事管理、合作公司管理、采购订单管理、库存管理、销售管理、经营统计七大功能。

4.3数据流图

根据之前的分析,绘制数据流图。

4.3.1顶层数据流图

用户通过输入用户名和密码,来实现用户登录,登录失败时会给出相应的提示并留在登录页面,登录成功后可以顺利进入供应链管理系统。



图4.6系统顶层数据流图

4.3.2一层数据流图

成功登录的用户可以进入不同的模块完成相应的操作,根据登录用户的身份不同,可以进行的操作也会不同。



4.7系统第一层数据流图

4.4数据字典

数据字典的作用是对数据流图中的各种成分进行详细说明,作为数据流图的细节补充,和数据流图一起构成完整的系统需求模型[16]。数据字典一般应包括对数据项,数据结构、数据存储和数据处理的说明。以下列出本系统的主要数据字典条目。

4.4.1数据项的描述

4.1用户信息数据项描述

数据项 类型 长度 值范围 ID 数字 11 00000000000至99999999999之间 用户名 文本 255 最多255个字符 密码 文本 255 最多255个字符





表4.2合作公司数据项描述

数据项 类型 长度 值范围 ID 数字 11 00000000000至99999999999之间 公司名 文本 255 最多255个字符

表4.3采购订单数据项描述

数据项 类型 长度 值范围 ID 数字 11 00000000000至99999999999之间 商品名 文本 255 最多255个字符 数量 数字 11 00000000000至99999999999之间 价格 数字 双精度浮点型

表4.4库存信息数据项描述

数据项 类型 长度 值范围 ID 数字 11 00000000000至99999999999之间 产品名 文本 255 最多255个字符 数量 数字 11 00000000000至99999999999之间

表4.5销售信息数据项描述

数据项 类型 长度 值范围 ID 数字 11 00000000000至99999999999之间 数量 数字 11 00000000000至99999999999之间 价格 数字 双精度浮点型 4.4.2数据流的描述

数据流编号:F1

数据流名:员工简要信息

简述:判断用户输入的信息是否符合要求,登录成功后用户可根据自己的权限对系统进行操作

组成:用户名+密码

数据流编号:F2、F3、F4

数据流名:员工登录信息

简述:获得与员工权限相关的信息,根据不同权限在页面上显示不同的操作选项

组成:ID+用户名+密码+真实姓名+所在部门

数据流编号:F5、F6

数据流名:员工信息

简述:实现对员工信息的增、删、改、查操作

组成:ID+用户名+密码+真实姓名+性别+年龄+所在部门+创建人+创建时间+修改人+修改时间

数据流编号:F7、F8

数据流名:合作公司信息

简述:实现对合作公司信息的增、删、改、查操作

组成:ID+公司名+负责人+公司地址+联系电话+创建人+创建时间+修改人+修改时间

数据流编号:F9、F10

数据流名:采购订单信息

简述:实现对采购订单信息的增、删、改、查操作

组成:ID+商品名+数量+价格+运输方式+货物状态+创建人+创建时间+修改人+修改时间

数据流编号:F11、F12

数据流名:库存信息

简述:实现对库存信息的增、改、查操作

组成:ID+产品名+数量+存放位置+存放状态+创建人+创建时间+修改人+修改时间

数据流编号:F13、F14

数据流名:销售信息

简述:实现对库存信息的增、查操作

组成:ID+数量+价格+创建人+创建时间+修改人+修改时间

数据流编号:F15

数据流名:销售人员信息

简述:统计销售人员情况

组成:姓名+销售金额

数据流编号:F16

数据流名:采购人员信息

简述:统计采购人员情况

组成:姓名+采购金额

数据流编号:F17

数据流名:销售商品信息

简述:统计销售商品信息

组成:产品名+销售总量

4.4.3描述外部实体

外部实体名称:经理

简述:系统管理员,具有最高权限

输入的数据流:人事信息、合作公司信息、采购订单信息、库存信息、销售信息

输出的数据流:人事信息、合作公司信息、采购订单信息、库存信息、销售信息、经营统计

外部实体名称:人事部员工

简述:负责百货中心的人事活动及管理

输入的数据流:人事信息

输出的数据流:人事信息、经营统计

外部实体名称:采购部员工

简述:负责百货中心与外部合作、采购的事物

输入的数据流:合作公司信息、采购订单信息

输出的数据流:合作公司信息、采购订单信息、经营统计

外部实体名称:物资部员工

简述:负责管理百货中心的仓库、完成商品的入库、出库工作

输入的数据流:库存信息

输出的数据流:库存信息、经营统计

外部实体名称:销售部员工

简述:负责百货中心的销售工作

输入的数据流:销售信息

输出的数据流:销售信息、经营统计

5系统设计

5.1系统结构设计

按照需求分析阶段的结果,本系统的结构主要由两部分构成,首先是登录模块,之后会由登录模块中返回的结果给用户展示可以进行的操作,包括人事管理、合作公司管理、采购订单管理等六大类操作。系统结构图大致如下:













图5.1系统结构图

5.2系统子模块功能介绍

登录模块:用户通过输入用户名和密码来登录系统,如果输入错误会返回登录界面,成功登录后用户的登录信息会存储在浏览器中,系统会根据这些信息判断该用户的操作权限。

人事管理模块:已经登录的符合权限的用户可以在此模块中查看公司员工信息,也可以根据需要添加、修改、删除员工信息。

合作公司管理模块:已经登录的符合权限的用户可以在此模块中查看合作公司信息,也可以根据需要添加、修改、删除合作公司信息。

采购订单管理模块:已经登录的符合权限的用户可以在此模块中查看采购订单信息,也可以根据需要添加、修改、删除采购订单信息。

库存管理模块:已经登录的符合权限的用户可以在此模块中查看商品库存信息,也可以根据需要添加、修改、商品库存信息。

销售管理模块:已经登录的符合权限的用户可以在此模块中查看商品销售信息,也可以根据需要添加商品销售信息。

经营统计模块:已经登录的用户可以在此模块中查看最佳销售、最佳采购、最佳商品的信息。

5.3数据库设计

5.3.1数据库概念设计(E-R模型)

本系统实体与其属性的关系用E-R模型表示如下(见下页):

















































































图5.1百货中心供应链管理系统E-R模型



5.3.2数据库表结构设计

根据上述模型,在将其转化成关系模型后,在数据库(数据库名:chain)中创建如下5张表:

用户表(表名:tb_chain_user)

用来存储公司员工的表,主要用于系统的登录判断。包含用户id、用户名、密码、真实姓名、性别、年龄、就职日期、是否为管理员、照片、所在部门、创建人、创建日期、更新人、更新日期字段。

5.1用户表(tb_chain_user)



合作公司表(表名:tb_chain_cooperation)

用来存储百货中心的合作公司的表,主要用于管理与百货中心合作的公司及公司的商品。主要包含合作公司id、公司名、负责人、公司地址、联系电话、创建人、创建日期、更新人、更新日期等字段。

5.2合作公司表(tb_chain_cooperation)



订单表(表名:tb_chain_purchase)

用来存储采购订单的表,用于记录采购的商品在入库前的状态。包含订单id、商品名、数量、价格、运送方式、运送状态、商品公司(合作公司)、创建人、创建时间、更新人、更新时间字段。

5.3订单表(tb_chain_purchase)



库存表(表名:tb_chain_stock)

用来存储商品的表,用于显示百货中心仓库中的货物及其相关信息。包含商品id、商品名、数量、摆放位置、存储状态、创建人、创建时间、更新人、更新时间字段。

5.4库存表(tb_chain_stock)



销售单表(表名:tb_chain_sale)

用来存储销售信息的表,用于存储百货中心商品的销售情况。包含销售单id、数量、价格、商品id、用户id、创建人、创建时间、更新人、更新时间字段。



5.5销售单表(tb_chain_sale)



6系统实现

在经过了需求分析、概要设计和详细设计后,便开始了百货中心供应链管理系统的实现阶段,首先我利用Tiles结合JavaScript对页面进行布局,之后再利用Maven完成整个项目框架的搭建,利用Hibernate反向工程生成Java实体类,再使用Struts和Spring完成之前设计的业务逻辑。部分关键代码及最终程序的运行效果如下:

登录模块关键代码

publicStringlogon(){

UserEntityuserEntity=userService.getUserEntity(username,password);

if(userEntity!=null){

ActionContext.getContext().getSession().put("user",userEntity);

returnSUCCESS;

}else{

this.addActionError("用户名或者密码不正确");

returnINPUT;

}

}

增、删、改、查功能调用关键代码

publicStringlist(){

if(userEntityPaginationBean==null){

userEntityPaginationBean=newPaginationBean();

}

userEntityPaginationBean=userService.pagedList(userEntityPaginationBean);

returnSUCCESS;

}

publicStringshow(){

userEntity=userService.getUserEntity(userEntity);

returnSUCCESS;

}

publicStringadd(){

returnSUCCESS;

}

publicStringupdate(){

userEntity=userService.getUserEntity(userEntity);

returnSUCCESS;

}

publicStringdelete(){

try{

userService.delete(userEntity);

list();

this.addActionMessage("用户删除成功!");

}

catch(Exceptione){

list();

this.addActionMessage("删除失败,不能删除已登录用户!");

}

returnSUCCESS;

}

publicStringsave(){

userService.saveOrUpdateEntity(userEntity);

list();

this.addActionMessage("用户操作成功!");

returnSUCCESS;

}

经营统计模块关键代码

publicListtop10BestSale(){

HibernateTemplatetmpl=getHibernateTemplate();

returntmpl.execute(newHibernateCallback>(){

publicListdoInHibernate(Sessionsession)throwsHibernateException,SQLException{

SQLQueryquery=session.createSQLQuery("selectt1.real_name,sum(t2.amount)total_amountfromtb_chain_usert1"+

"leftjointb_chain_salet2ont1.USER_ID=t2.user_id"+

"groupbyt1.real_name"+

"orderbytotal_amountdesc"+

"limit0,10");

Listresults=query.list();

return(List)results;

}

});

}

publicListtop10BestPurchases(){

HibernateTemplatetmpl=getHibernateTemplate();

returntmpl.execute(newHibernateCallback>(){

@SuppressWarnings("unchecked")

@Override

publicListdoInHibernate(Sessionsession)throwsHibernateException,SQLException{

SQLQueryquery=session.createSQLQuery("selectt1.real_name,sum(t2.amount)total_amountfromtb_chain_usert1"+

"leftjointb_chain_purchaset2ont1.USER_ID=t2.user_id"+

"groupbyt1.real_name"+

"orderbytotal_amountdesc"+

"limit0,10");

Listresults=query.list();

return(List)results;

}

});

}

publicListtop10BestProduct(){

HibernateTemplatetmpl=getHibernateTemplate();

returntmpl.execute(newHibernateCallback>(){

@SuppressWarnings("unchecked")

@Override

publicListdoInHibernate(Sessionsession)throwsHibernateException,SQLException{

SQLQueryquery=session.createSQLQuery("selectt1.`product`,sum(t2.`QUANTITY`)total_quantityfromtb_chain_stockt1"+

"leftjointb_chain_salet2ont1.`COO_ID`=t2.stock_id"+

"groupbyt1.product"+

"orderbytotal_quantitydesc");

Listresults=query.list();

return(List)results;

}

});

}

6.1系统登录界面

项目发布后,在浏览器地址栏输入http://localhost:8080,页面会跳转到webapp目录下的index.jsp页面并发送index.action请求,未登录的用户会再发送一个login.action请求并跳转到login.jsp页面。



图6.1系统登录界面

如果未输入用户名/密码,或输入的用户名/密码不正确,点击登录按钮后会给出出错提示,提醒重新登录。



6.2登录出错提示

6.2登录成功界面

成功登录的用户会进入系统欢迎界面,整个界面是借助Tiles的帮助完成的,它让系统可以在执行不同的请求后只让页面的主题部分跳转,而网页的头、导航栏、尾部不跳转,节省了大量重复书写代码带来的开销。

根据用户的身份不同,登录后所能看到的操作选项也有所区别。

经理登录界面

在本系统中,经理被定义为具有最高权限的用例,可以使用系统的所有功能,能够看到系统所有的操作选项。





6.4经理登录界面

人事部员工登录界面

本系统中,人事部员工可以操作系统的人事管理模块,因此进入系统后只能看到人事管理的操作选项以及经营统计选项。



6.5人事部员工登录界面

其他部分员工登录成功界面相似,故不再附图。

6.3人事管理界面

经理、人事部员工可以进入人事管理界面对百货中心的员工信息进行添加、删除、修改、查看功能。

人事管理界面

用户进入人事管理界面后,可以根据页面的文字提示对人事信息进行相应的操作,所有员工的主要信息被页面上的表格列出并实现分页功能。



6.6人事管理界面

添加员工界面

用户点击人事管理界面上的“添加员工”按钮进入添加员工界面,在本页面中输入要添加的员工的信息后,点击保存,即可将新的员工信息添加进数据库中,如果有关键的信息没有正确输入,页面会给出相应的提示。



6.7添加员工界面

更新员工信息界面

类似于添加员工信息,修改员工信息界面实现了对单个员工信息的修改,同样实现了出错提示功能。



6.8更新员工信息界面

删除员工成功界面

成功删除员工信息后会在页面上给出绿色的成功提示信息。



6.9删除员工信息成功

删除员工信息失败界面

当已经登录的用户想要删除自己的信息时,会给出删除失败的提示,因为已经登录的用户不能删除自己。



6.10删除员工信息失败

6.4合作公司管理界面

经理、采购部员工可以登录合作公司管理界面对合作公司进行添加、删除、修改、查看操作。

合作公司管理界面

用户进入合作公司管理界面后,可以根据页面的文字提示对合作公司信息进行相应的操作,所有合作公司的主要信息被页面上的表格列出并实现分页功能。



6.11合作公司管理界面

添加合作公司界面

用户点击合作公司管理界面上的“添加合作公司”按钮进入添加合作公司界面,在本页面中输入要添加的合作公司信息后,点击保存,即可将新的合作公司信息添加进数据库中,如果有关键的信息没有正确输入,页面会给出相应的提示。





6.12添加合作公司

修改合作公司信息界面

类似于添加合作公司信息,修改合作公司信息界面实现了对单个合作公司信息的修改,同样实现了出错提示功能。





6.13修改合作公司

删除合作公司成功界面

成功删除合作公司信息后会在页面上给出绿色的成功提示信息。



6.14删除合作公司成功

6.5采购管理界面

经理、采购部员工可以进入采购管理界面,对采购订单进行添加、删除、修改、查看操作。其中添加的采购商品必须来自已经有合作关系的公司。

采购管理界面

用户进入采购管理界面后,可以根据页面的文字提示对采购信息进行相应的操作,所有采购订单的主要信息被页面上的表格列出并实现分页功能。



6.15采购管理界面



添加采购信息界面

用户点击采购管理界面上的“添加采购信息”按钮进入添加采购信息界面,在本页面中输入要添加的采购信息后,点击保存,即可将新的采购信息添加进数据库中,如果有关键的信息没有正确输入,页面会给出相应的提示。





6.16添加采购信息

修改采购信息界面

类似于添加采购信息,修改采购信息界面实现了对单个采购信息的修改,同样实现了出错提示功能。



6.17修改采购信息

删除采购信息成功界面

成功删除采购信息后会在页面上给出绿色的成功提示信息。



6.18删除采购信息成功

采购单明细界面

在采购管理界面点击单个的采购信息链接,可以进入采购信息明细界面,在本页面中可以看到本采购订单的详细信息。



6.19采购信息明细

打印采购信息明细界面

在采购信息明细界面下方点击“打印”按钮,进入打印采购信息明细界面,可以将相应的采购订单详细信息保存或打印。



6.20打印采购信息明细

6.6库存管理界面

经理、物资部员工可以进入库存管理界面,并添加、修改库存信息。

库存管理界面

用户进入库存管理界面后,可以根据页面的文字提示对库存信息进行相应的操作,所有库存的主要信息被页面上的表格列出并实现分页功能。





6.21库存管理界面

添加库存信息界面

用户点击库存管理界面上的“添加库存信息”按钮进入添加库存信息界面,在本页面中输入要添加的库存信息后,点击保存,即可将新的库存信息添加进数据库中,如果有关键的信息没有正确输入,页面会给出相应的提示。





6.22添加库存信息

修改库存信息界面

类似于添加库存信息,修改库存信息界面实现了对单个库存信息的修改,同样实现了出错提示功能。



6.23修改库存信息

库存信息明细界面

在库存管理界面点击单个的库存信息链接,可以进入库存信息明细界面,在本页面中可以看到本库存的详细信息。





6.24库存信息明细

打印库存信息明细界面

在库存信息明细界面下方点击“打印”按钮,进入打印库存信息明细界面,可以将相应的库存详细信息保存或打印。



6.25打印库存信息明细

6.7销售管理界面

经理、销售部员工可以进入销售管理界面,并对销售信息进行添加、查看操作。

销售管理界面

用户进入销售管理界面后,可以根据页面的文字提示对库存信息进行相应的操作,所有销售情况被页面上的表格列出并实现分页功能。



6.26销售管理界面

添加销售记录界面

用户点击库存管理界面上的“添加销售记录”按钮进入添加销售信息界面,在本页面中输入要添加的销售信息后,点击保存,即可将新的销售信息添加进数据库中,如果有关键的信息没有正确输入,页面会给出相应的提示。



6.27添加销售信息

6.8经营统计界面

所有权限的员工都可以查看百货中心的经营状况,其中统计了销售量前十的员工、采购额前十的员工和销售数目前十的商品,方便员工了解公司经营现状,帮助决策层找到公司可能存在的问题。



6.28经营状况统计

7系统测试

7.1测试目的

软件测试(softwaretesting),描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。在整个软件生命周期中,软件测试占了很大一部分比例,它是保证软件质量的关键环节,也是降低软件开发风险的必要手段,软件测试工作应该贯穿整个项目开发的始终。

7.2测试方法

白盒测试-白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。在系统开发初期,由于参数设置的失误,我开发的系统经常出现如下的错误:



图7.1系统出错

经过耐心的调试、测试,已经基本解决了这些错误。

黑盒测试-黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在系统功能实现后,我也对系统进行了一部分文本录入测试作为黑盒测试,解决了之前部分页面文字提示错误、页面跳转错误的bug,但由于用户测试的时间有限,还有一些有待改进的地方需要在实际使用中发现。

7.3测试结果

实现了所有模块的功能,修正了已经发现的所有问题、错误。但系统还有许多不完善的地方,有待实践阶段的检验和提高。

8总结

通过这次对百货中心供应链管理系统的设计与开发,让我进一步温习了大学课堂上学到了软件工程相关的知识,也使得书本上J2EE、数据库相关的知识得到了实践的机会,同时也对Jsp、JavaScript、Maven等有了进一步的了解,通过查询相关的资料并学习,我也发现了许多不足的地方,还有更多更新更实用的技术,等着我去学习去钻研。总之,经过不懈的学习与调试,我的编程能力有了很大的提高,更重要的是,我也看到了自己仍需努力的方向。



参考文献

[1]曹俊超,戴克商.物资管理理论与实务.北京:清华大学出版社,2006.

[2]罗伯特·M·蒙兹卡.刘秉镰,李莉,刘洋译.采购与供应链管理.北京:中信出版社,2004.

[3]肯尼斯·莱桑斯,迈克尔吉林厄姆,鞠磊等译.采购与供应链管理.北京:电子工业出版社,2004.

[4]刘京华等.JavaWeb整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring).北京:清华大学出版社,2010.

[5]HUNTJ,LFTUSC.精通J2EE-Java企业级应用[M].北京:清华大学出版社,2004.

[6]LIANGYD..Java语言程序设计[M].北京:机械工业出版社,2003.

[7]AngelaYochem.J2EE应用与BEAWebLogicServer[M].北京:电子工业出版社,2005.

[8]陈天河.Java数据库高级编程宝典[M].北京:电子工业出版社,2005.

[9]泰勒.JDBC数据库编程与J2EE[M].北京:电子工业出版社,2004.

[10]顾兵.XML实用技术教程[M].北京:清华大学出版社,2007.

[11]丁宝康.数据库实用教程[M].北京:清华大学出版社,2003.

[12]李刚.轻量级Java+EE企业应用实战(第3版).北京:电子工业出版社,2012.

[13]陈亚辉,缪勇.Struts2+Spring+Hibernate框架技术与项目实战.北京:清华大学出版社,2012.

[14]刘勇军,王电钢.JavaEE项目应用开发:基于Struts2,Spring,Hibernate.北京:电子工业出版社,2012.

[15]埃克尔.Java编程思想(第4版).北京:机械工业出版社,2007.

[16]张海藩.软件工程导论[M].北京:清华大学出版社,2003.2、电子政务信息化建设论文

摘要

当前阶段,伴随着社会信息技术的快速发展,使得电子政务能够成为我国政府职能部门进行办公管理的一个重要内容,其中就包括了提升办公效率完善服务质量以及实现信息共享等。但是,虽然当前我国政府的信息化事业已经取得了初步的成效,能够依据不同的客观业务需求来实现信息系统的开发设计。但是,目前所存在的问题也是较为明显的,那就是这些信息系统彼此之间都是孤立的,难以做到协同工作,这就造成了比较严重的“信息孤岛”的现象,成为我国电子政务应用的一个巨大的障碍。想要解决这个问题,就需要实现电子政务“一站式”服务平台。

本系统的目的是建立一个高效的平台,采用简洁高效的JSP技术与SQLserver数据库等技术,设计和开发了这一库尔勒经济开发区电子政务网站。该网站前台包含领导信箱,表格下载,政务公开,便民电话以及留言板等功能模块;这些信箱都可以进入网站的管理后台进行维护。

本系统可以根据实际应用的具体情况,适当加以修改,以便更好应用。本系统操作简单,灵活性好,系统安全性高,运行稳定。

关键词:电子政务;Web;JSP















绪论

研究背景

推进信息化是我国加快实现工业化和现代化的必然选择,是关系到现代化建设全局的战略举措,是实现社会生产力跨越式发展的重大措施,是提高国际竞争力和综合国力的迫切要求,已被放在优先发展的战略地位。在国家信息化体系建设中,政府信息化是整个信息化中的关键,是优先发展的领域。而电子政务是政府信息化建设的重要内容,几乎覆盖了信息技术信息内容信息服务等产业的所有领域,又与改革开放发展等当代中国的重大问题密切相关,这就要求政府必须以战略眼光,从全局出发,来充分认识电子政务建设的战略地位理论价值和实践意义。

无论是发达国家还是发展中国家,都在顺应时代发展的潮流,把推进信息化建设作为增强综合国力和国际竞争力的重要举措,并将其提升至国家战略的高度。我国政府也确立了“大力推进信息化,以信息化带动工业化,以工业化促进信息化,走新型工业化道路”的国家战略。党的十六大明确提出,要“进一步转变政府职能,改进管理方式,推行电子政务”。国家信息化领导小组从我国的实际情况出发,明确提出电子政务要先行,以电子政务建设带动国民经济和社会信息化。由此,电子政务建设成为推动国家信息化的龙头工程,成为政府深化行政管理体制改革的主要动力和重要内容,也成为政府实现管理现代化的必由之路。信息化建设要从电子政务入手,以政府信息化带动信息化发展,“以信息化带动工业化”,这些都显示着电子政务建设的战略地位和意义。随着国民经济的发展和信息技术的进步,特别是电子政务建设的深入推进,我国各级政府网站内容日益丰富,功能逐渐增强。截至2007年12月,使用“.gov.cn”域名的政府网站总数发展到近3.5万个,25.4%的人访问过政府网站,即半年内有5334万人访问过中央政府或者地方政府网站?。近年来,中国中央政府和各级地方政府对于电子政务建设的关注程度投资水平和推进力度都在不断加强,电子政务正成为促进政府职能从管理型政府向服务型政府转变的重要因素,政府网站也逐步成为政务公开的重要窗口和承建服务型政府的主要平台。然而我国政府信息化建设起步较晚以及信息化的地方差异,电子政务建设在飞速发展的同时也难免存在一定的不足与缺陷。政务部门在各自的信息系统建设中,多从自身业务出发来构建信息系统,业务数据固化于软件实现中,信息资源单独管理,造成了业务与数据的相对自我封闭,以致跨部门跨地区间大量事实性信息孤岛出现。可以看出,传统的电子政务模式存在方法欠灵活可扩展性弱,且部署与实施复杂程度高,不利于各取所需要求下的业务开展。同时在电子政务实际应用过程中,不同的应用系统受政务部门职能分割影响,重复管理重复维护,不仅使工作量大大增加,而且极易产生不一致现象,这些弊端都已经成为影响电子政务进一步发展的障碍。因此,跨地区跨部门的业务协同亟需开辟新的途径。

在传统的电子政务建设的过程当中,因为往往会受到各方面的技术条件的制约,再加上不具备完整统一的规划管理机制,使得各个部门所建设的办公系统一般都是互相独立的,未能实现和其他相关部门的信息交换,造成了政府部门办公效率低下,难以让广大服务对象满意。而在本课题中,则是重点构建了一个电子政务“一站式”的服务平台载体,而且这个平台载体还是相对灵活的,有着较强的可拓展性。能够有效的解决不同部门之间的信心集成应用问题,而且还能够实数据交换。这对于电子政府的系统整合来说,有着至关重要的关键意义。

研究意义

对于电子政务系统来说,其内在的要求是比较高的,比如由于受到自身数据量大系统复杂的影响,就在安全稳定数据交互分析计算等方面提出了较高的要求。在目前大部分的电子政务所应用的技术一般都是J2EE与Microsoft.NetFramework这两个主要的构建方式,属于企业级的应用平台,能够构建起来MVC三层架构的WEB应用系统。可以最大程度低减少信息应用集成以及系统开发的成本,从而给目前电子政务系统的构建提供了一个能够面向服务的体系结构。应用SSH,可以借助抽象以及具体的组合把,自身的电子政务进行组件化,这样就能够真正的实现跨平台即时业务流程对接。具体来说,在电子政务系统的构建方面,应用SSH当做架构基础能够有效的消除信息孤岛的现象,达成信息共享的目的;支持业务协同,促进职能的转变;并且能够对信息投资进行优化,从而减少用户所遇到的风险。这就能够有效的提升软件的可重用性,在具体的硬件软件的配置方面也有着较好的灵活性,从而能够在有效的满足当前政务需要的同时,还方便了日后的维修升级。

国内外研究现状综述

根据相关的调查结果显示,我国的省市级两级政府门户网站的建设率已达99%之高[2],而且伴随着信息技术的发展,我国的县级政府网站在最近几年也有着上升的趋势。这就能够有效的证明,我国电子政务信息基础设施已经得到了初步的建立,在一定程度上实现了政府部门的办公自动化。然而,由于在基层政府以及较低层次的政府下属机构里面,大多会受到资金不足以及领导忽视的原因制约,系统的软硬件设备难以及时的更新换代,网络办公的条件也比较落后,相关的管理人员能力水平不够,这就使得这些部门的办公自动化的实际效率大打折扣,难以做到让服务对象满意。

而在2006年我国将顶层规划思想引入之后,很快就应用到了“网站群建设”建设工程当中,再加上在政府主导之下每年都举办一次官方评价的排序活动,可以督促地方政府建立起来自己的网站系统,从而加快了我国政府部门网站建设的总体进程[3]。当前阶段,我国政府网站的总体建设水平已经取得了初步的成就,在很多方面都有了比较大的改观,相关的信息构建的概念以及“以用户为中心”的理念也能够被充分的应用到政府网站的实际建设过程当中。而伴随着我国政府网站信息公开得到加强,以及网上在线服务功能的逐步完善,使得广大人民群众对于电子政务也由开始的陌生,到现在的熟悉,同时也逐渐的认可起来。通过对哈尔滨天津北京等地区政府部门的电子政府系统服务的民众满意程度的相关调查能够发现,人民群众对于政府网站的满意度所受到的影响是多个方面的,其中不仅包括技术功能安全水平,还涉及到了普通公民自身的因素制约,比如学历职业年龄等。当前阶段,我国已经在义务教育阶段就开始设立了信息技术课程,某些地区还能够在广大的农村地区给农民设立各种信息技术培训班,这就能够在最大的程度上推广电子政务的应用。与其他的计算机信息系统相同的是,电子政务系统对于软件技术以及系统建设理念也逐渐的提高了标准。开始时候,电子政务系统主要是应用大型机集中运算,之后发展到了C/S(Client/Server)模式分布式计算,中间又经历了B/S模式的Web计算技术,从而实现了电子政务系统的层级提高。

电子政务的体系架构

电子政务公众服务是信息化进程的产物,它是政府机构在内部高度信息化的基础上,以政府门户网站作为平台和入口向公众提供的具有电子化特征的公共服务产品。经过多年的探索实践,政务公开网上办事和互动参与已成为当前政府门户网站的主要职能,进而成为电子政务公众服务的主要内容,其体系架构图如图1-1所示。电子政务公众服务的交互与信息系统的应用密不可分,政府门户网站是提供服务的主要载体和渠道,三大功能的实现程度直接决定了电子政务公众服务水平的高低,体现了政府职能转变与管理创新的意识和效果。



图1-1电子政务体系架构



电子政务是一种政府的运作模式,一般而言,电子政务包括了两个方面的内容:利用信息技术,政府部门内部实现了办公的信息化管理;政府各部门之间以及政府部门与社会之间利用信息技术进行信息的充分共享,利用网络来进行政府服务。目前,对电子政务含义的解释一半存在以下几种:

(1)电子政务就是政府机关利用先进的通信技术以及信息技术,将政府部门内部或者部门与社会之间通过网络进行集成,利用网络将政府内部各部门的功能以及工作的流程进行重新整合以及优化,使得政府部门的工作能够不受时间空间以及部门功能的限制,为社会提供全方位优质透明的政府管理功能。简而言之,电子政务就是利用现代信息技术,以网络为核心,将传统的政府政务活动进行优化,从而达到提高政府管理效率与质量的目的。

(2)电子政务是现代政府部门在信息飞速发展的背景下,为了能够提高办公效率;提高工作质量;以及降低办公成本,而将政府的一部分功能(比如信息的发布信息的管理以及政府内部各部门政府内部和社会之间的沟通等功能)通过互联网技术来实现,电子政务就是政府利用先进的信息技术,通过计算机网络来进行行政等内部管理功能,建立起政府内部以及政府内部和公众之间的有机服务体系。

从上面国内外对电子政务的定义我们可以看出:现代信息与通信技术是目前电子政务的核心;电子政务的主要目的在于提高传统行政管理的效率行政管理的质量以及降低传统行政管理的成本。

因此,我们可以将电子政务的定义概括为:电子政务就是政府部门为了提高传统行政管理的效率行政管理的质量以及降低传统行政管理的成本,为了消除政府行政在时间空间以及部门分割等限制,利用先进的现代信息网络技术,社会提供优质透明规范的管理和服务而建立的电子信息系统。

目前我国政务所面临的问题

我国在经历了电子政务的基础建设以及应用系统的建设热潮之后,目前我国电子政务面临最大的问题是进行信息资源的整合。只有利用先进的信息技术,来进行各部门信息的沟通,实现业务中各部门信息的共享,才能不断完善我国电子政务建设,达到电子政务提高政务透明度降低办公成本的目的。

目前,通过我国电子政务的现状分析,我国电子政务在信息共享以及信息的及时沟通方面还有很大的缺陷。随着信息技术的不断发展,政府也在不断的利用先进的技术来努力消除各部门之间的信息壁垒。但是这种努力并没有一个统一的规范,对于不同平台不同规范的电子政务系统而言,并没有从根本上来解决异构系统之间信息交互的问题。总的来说,目前我国电子政务系统正面临了信息孤岛以及一体化问题。

政府各部门之间不仅运行的平台不统一,而且其采用的数据格式也各自不同,因此,很难将各部门之间的孤立信息进行快速的出传递。很难建设一个各部门统一的的政府电子政务系统,不能提供一站式的服务,不能从根本上提高政府机关的办事效率。因此,目前,我国电子政务系统迫切的需要建立一个统一规范的电子政务平台接口,采用统一的标准化语言来描述电子政务系统,从而提高政府部门的办事效率,降低政府部门的办公成本。

另一方面,我国电子政务系统对自身数据的安全性重视不够,由于电子政务本身的特点就是开放性的,因此,系统内部的数据很容易被未授权的第三方窃听以及篡改。由于有的电子政务系统对安全性的中实行不够,导致了许多政府部门内部敏感的信息没有按照国家安全管理的规定来严格执行,存在了非常大的安全隐患。还是采用防火墙,网络隔离等传统的安全措施,并没有从系统设计的角度来对电子政务系统进行规范。

主要研究工作

本论文的主要研究工作包括了以下几个方面的内容:

1.对电子政务的相关理论基础以及具体的实现技术进行阐释,在充分认识到传统电子政务实际应用情况之后,指出传统的常用架构的优势以及缺陷,并最终提出具体的解决策略。

2.重点进行了开发技术方面的理论研究,对J2EE的相关概念重要特征及其明显优势等方面都作出了详细的介绍,并且对在实际应用过程当中所涉及到的相关技术也作出了阐释。

3.在具体的参照了电子政务网站的实际应用的基础之上,采用了SSH架构的主体思想,设计并实现了一个能够被实际应用的电子政务网站。

4.借助对具体业务流程的相关描述,将具体的面向服务架构作为基础的中心,从而能够开发出来一个对外服务接口。









本系统采用的架构和主要技术

主要技术分析

J2EE技术的发展现状

J2EE是一套全然不同于传统应用开发的技术架构,包含许多组件,主要可简化且规范应用系统的开发与部署,进而提高可移植性、安全与再用价值。

J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共通的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,企业内部或外部难以互通的窘境[7]。

目前,Java2平台有3个版本,它们是适用于小型设备和智能卡的Java2平台Micro版(Java2PlatformMicroEdition,J2ME)、适用于桌面系统的Java2平台标准版(Java2PlatformStandardEdition,J2SE)、适用于创建服务器应用程序和服务的Java2平台企业版(Java2PlatformEnterpriseEdition,J2EE)。J2EE是一种利用Java2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。J2EE技术的基础就是核心Java平台或Java2平台的标准版,J2EE不仅巩固了标准版中的许多优点,例如"编写一次、随处运行"的特性、方便存取数据库的JDBCAPI、CORBA技术以及能够在Internet应用中保护数据的安全模式等等,同时还提供了对JavaServletsAPI、JSP(JavaServerPages)以及XML技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。

J2EE体系结构提供中间层集成框架用来满足无需太多费用而又需要高可用性、高可靠性以及可扩展性的应用的需求。通过提供统一的开发平台,J2EE降低了开发多层应用的费用和复杂性,同时提供对现有应用程序集成强有力支持,完全支持EnterpriseJavaBeans,有良好的向导支持打包和部署应用,添加目录支持,增强了安全机制,提高了性能[8]。

J2EE为搭建具有可伸缩性、灵活性、易维护性的商务系统提供了良好的机制:

1.保留现存的IT资产:

由于企业必须适应新的商业需求,利用已有的企业信息系统方面的投资,而不是重新制定全盘方案就变得很重要。这样,一个以渐进的(而不是激进的,全盘否定的)方式建立在已有系统之上的服务器端平台机制是公司所需求的。J2EE架构可以充分利用用户原有的投资,如一些公司使用的BEATuxedo、IBMCICS,IBMEncina,、InpriseVisiBroker以及NetscapeApplicationServer。这之所以成为可能是因为J2EE拥有广泛的业界支持和一些重要的''企业计算''领域供应商的参与。每一个供应商都对现有的客户提供了不用废弃已有投资,进入可移植的J2EE领域的升级途径。由于基于J2EE平台的产品几乎能够在任何操作系统和硬件配置上运行,现有的操作系统和硬件也能被保留使用。

2.高效的开发:

J2EE允许公司把一些通用的、很繁琐的服务端任务交给中间供应商去完成。这样开发人员可以集中精力在如何创建商业逻辑上,相应地缩短了开发时间。高级中间件供应商提供以下这些复杂的中间件服务:状态管理服务让开发人员写更少的代码,不用关心如何管理状态,这样能够更快地完成程序开发。持续性服务让开发人员不用对数据访问逻辑进行编码就能编写应用程序,能生成更轻巧,与数据库无关的应用程序,这种应用程序更易于开发与维护。分布式共享数据对象CACHE服务-让开发人员编制高性能的系统,极大提高整体部署的伸缩性。

3.支持异构环境:

J2EE能够开发部署在异构环境中的可移植程序。基于J2EE的应用程序不依赖任何特定操作系统、中间件、硬件。因此设计合理的基于J2EE的程序只需开发一次就可部署到各种平台。这在典型的异构企业计算环境中是十分关键的。J2EE标准也允许客户订购与J2EE兼容的第三方的现成的组件,把他们部署到异构环境中,节省了由自己制订整个方案所需的费用。

4.可伸缩性:

企业必须要选择一种服务器端平台,这种平台应能提供极佳的可伸缩性去满足那些在他们系统上进行商业运作的大批新客户。基于J2EE平台的应用程序可被部署到各种操作系统上。例如可被部署到高端UNIX与大型机系统,这种系统单机可支持64至256个处理器。(这是NT服务器所望尘莫及的)J2EE领域的供应商提供了更为广泛的负载平衡策略。能消除系统中的瓶颈,允许多台服务器集成部署。这种部署可达数千个处理器,实现可高度伸缩的系统,满足未来商业应用的需要。

5.稳定的可用性:

一个服务器端平台必须能全天候运转以满足公司客户、合作伙伴的需要。因为INTERNET是全球化的、无处不在的,即使在夜间按计划停机也可能造成严重损失。若是意外停机,那会有灾难性后果。J2EE部署到可靠的操作环境中,他们支持长期的可用性。一些J2EE部署在WINDOWS环境中,客户也可选择健壮性能更好的操作系统如SunSolaris、IBMOS/390。最健壮的操作系统可达到99.999%的可用性或每年只需5分钟停机时间。这是实时性很强商业系统理想的选择[9]。

J2EE综述

J2EE是一个非常广泛而通用的标准,很大程度上简化了应用开发和移植过程,节省了系统开发的时间;计算平台支持Java语言,使得基于J2EE标准开发的应用系统可以跨平台地移植;J2EE提供了企业计算需要的几乎所有服务,且更加方便实用。由于J2EE具有的这些优点,用户可以根据需要方便地更新和定制符合企业项目特点的功能模块,从而使小区物业管理系统的通用性和实用性都能得到保证。

J2EE(Java2Platform,EnterpriseEdition)是美国Sun公司推出的一种全新概念的模型,与传统的互联网应用程序模型相比有着无法比拟的优势。Java2企业版(J2EE)规范指出,J2EE是一个开发JSP(JavaServerPage),Servlet等web应用的平台。另外,J2EE还描述了这些技术是如何协作来提供一套完整解决方案的。整个J2EE体系是构建在J2SE(Java2PlatformStandardEdition)的基础之上的,这表明J2EE的实现技术依靠的是J2SE所提供的标准API和运行时环境,这一点也保证了J2EE技术具有跨平台的可移植性和良好的兼容性。其次,彼此独立的模块代表了J2EE体系中的各种类型的容器。所谓容器,就是指为组件提供各种必要的底层服务支持的一个运行时环境。这些底层服务包括了支持数据库访问、消息服务、邮件服务、事务管理、安全性、远程访问支持等各个方面运行于容器中的组件,如Applet,Servlet和JSP等,依靠容器提供的这些底层服务来完成具体的业务逻辑。不难看出,在J2EE体系为开发人员提供了多种灵活的组件访问方式和数据访问方式。从组件间的访问关系来看,客户端既可以通过标准的HTTP协议访问Web容器组件进而访问ETB组件:从组件和数据的访问关系来看,客户端组件、web容器组件都具备了通过标准的JDBCAPI访问数据库的能力[10]。

J2EE的四层模型

J2EE使用多层的分布式应用模型,应用逻辑按功能划分为组件,各个应用组件根据他们所在的层分布在不同的机器上。事实上,sun设计J2EE的初衷正是为了解决两层模式(client/server)的弊端,在传统模式中,客户端担当了过多的角色而显得臃肿,在这种模式中,第一次部署的时候比较容易,但难于升级或改进,可伸展性也不理想,而且经常基于某种专有的协议??通常是某种数据库协议。它使得重用业务逻辑和界面逻辑非常困难。现在J2EE的多层企业级应用模型将两层化模型中的不同层面切分成许多层。一个多层化应用能够为不同的每种服务提供一个独立的层,以下是J2EE典型的四层结构:

运行在客户端机器上的客户层组件;

运行在J2EE服务器上的Web层组件;

运行在J2EE服务器上的业务逻辑层组件;

运行在EIS服务器上的企业信息系统(Enterpriseinformationsystem)层软件;

J2EE应用程序组件

J2EE应用程序是由组件构成的.J2EE组件是具有独立功能的软件单元,它们通过相关的类和文件组装成J2EE应用程序,并与其他组件交互。J2EE说明书中定义了以下的J2EE组件:

应用客户端程序和applets是客户层组件。

JavaServlet和JavaServerPages(JSP)是web层组件。

客户层组件

J2EE应用可以是基于Web的,也可以是不基于web的。在一个基子Web的J2EE应用中,用户的浏览器可以在客户层中运行,并且从一个Web服务器上下载Web层中的静态HTML,页面或由JSP或ServletS生成的动态HTML页面。

web层组件

J2EEweb层组件可以是JSP页面或Servlets.按照J2EE规范,静态的HTML页面和Applets不算是web层组件。web层可能包含某些JavaBean对象来处理用户输入,并把输入发送给运行在业务层上的enterprisebean来进行处理。

业务层组件

业务层代码的逻辑用来满足银行,零售,金融等特殊商务领域的需要,由运行在业务层上的enterprisebean进行处理.下图表明了一个enterprisebean是如何从客户端程序接收数据,进行处理(如果必要的话),并发送到EIS层储存的,这个过程也可以逆向进行。

有三种企业级的bean:会话(session)beans,实体(entity)beans,和消息驱动(message-driven)beans.会话bean表示与客户端程序的临时交互.当客户端程序执行完后,会话bean和相关数据就会消失.相反,实体bean表示数据库的表中一行永久的记录.当客户端程序中止或服务器关闭时,就会有潜在的服务保证实体bean的数据得以保存.消息驱动bean结合了会话bean和JMS的消息监听器的特性,允许一个业务层组件异步接收JMS消息。

企业信息系统层

企业信息系统层处理企业信息系统软件包括企业基础建设系统例如企业资源计划(ERP),大型机事务处理,数据库系统,和其它的遗留信息系统.例如,J2EE应用组件可能为了数据库连接需要访问企业信息系统[11]。

J2EE的分布式应用技术

J2EE平台由一整套服务(Services)、应用程序接口(API)和协议构成,它对于开发基于Web的多层、分布式应用提供了功能支持:

1.组件/容器技术

这种基于组件具有平台无关性的J2EE结构使得J2EE程序的编写十分简单,因为业务逻辑被封装成可复用的组件,并且J2EE服务器以容器的形式可为所有的组件类型提供后台服务。

J2EE应用组件可以安装部署到以下几种容器中去:

(1)Web容器管理所有J2EE应用程序中JSP页面和Servlet组件的执行。Web组件和它们的容器运行在J2EE服务器上;

(2)应用程序客户端容器管理所有J2EE应用程序中应用程序客户端组件的执行。应用程序客户端和它们的容器运行在客户端机器上;

(3)Applet容器是运行在客户端机器上的Web浏览器和Java插件的结合。

容器设置定制了J2EE服务器所提供的内在支持,包括安全,事务管理,JNDI(JavaNamingandDirectoryInterface)寻址,远程连接等服务,以下列出了最重要的几种服务:

(1)J2EE事务管理(TransactionManagement)模型让你指定组成一个事务中所有方法间的关系,这样一个事务中的所有方法被当成一个单一的单元。

(2)JNDI寻址(JNDILookup)服务向企业内的多重名字和目录服务提供了一个统一的接口,这样应用程序组件可以访问名字和目录服务。

(3)数据库连接池(DatabaseConnectionPooling)模型是一个有价值的资源。获取数据库连接是一项很耗时的工作,而且连接数非常有限。容器通过管理连接池来缓和这些问题。

2.Servlet和JSP

JSP(Javaserverpages)是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(.jsp)。用JSP开发的Web应用是跨平台的,即能在Linux下运行,也能在其他操作系统上运行。

JSP技术使用Java编程语言编写类XML的tags和Scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和Scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。JSP与JavaServlet一样,是在服务器端执行的,通常返回该客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。

JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求n以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。Javaservlet是JSP的技术基础,而且大型的Web应用程序的开发需要JavaServlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。

JavaServlet:Servlet是一种小型的Java程序,它扩展了web服务器的功能。Servlet提供的功能大多与JSP类似,不过实现的方式不同。JSP通常是大多数HTML代码中嵌入少量的Java代码,而Servlet全部由Java写成并且生成HTML。

(1)JSP技术的强势

一次编写,到处运行。在这一点上Java比PHP更出色,除了系统之外,代码不用做任何更改。系统的多平台支持。基本上可以在所有平台上的任意环境中开发,在任意环境中进行系统部署,在任意环境中扩展。相比ASP/PHP的局限性是显而易见的。它具有强大的可伸缩性。从只有一个小的Jar文件就可以运行Servlet/JSP,到由多台服务器进行集群和负载均衡,到多台Application进行事务处理、消息处理,一台服务器到无数台服务器,Java显示了一个巨大的生命力。多样化和功能强大的开发工具支持。这一点与ASP很像,Java已经有了许多非常优秀的开发工具,而且许多可以免费得到,其中一些己经可以顺利的运行于多种平台之下。

(2)JSP技术的弱势

与ASP一样,Java的一些优势正是它致命的问题所在。正是由于为了跨平台的功能,为了极度的伸缩能力,所以极大的增加了产品的复杂性。Java的运行速度是用class常驻内存来完成的,所以它在一些情况下所使用的内存比起用户数量来说确实是“最低性能价格比”了。另一方面,它还需要硬盘空间来储存一系列的.java文件和.Class文件,以及对应的版本文件。

3.数据库访问

JDBC(JavaDatabaseConnectivity):JDBCAPI为访问不同的数据库提供了一种统一的途径,像ODBC一样,JDBC对开发者屏蔽了一些细节的问题,另外,JDBC对数据库的访问也具有平台无关性[12]。

软件体系结构

软件的设计不但要考虑到软件系统的功能,更重要的是软件的可修改性、可重用性和可靠性等非功能性问题。软件体系结构的好坏直接关系到软件性能的好坏。软件系统的体系结构定义了系统的可计算部件及其相互关系。部件是系统中的一些个体,如客户、服务器、数据库等。在这一层次的部件间的交互可以是简单的,如过程调用及共享变量访问等也可以是复杂的、语义丰富的,如客户服务器协议、数据库访问协议等。体系结构不仅说明了系统的构成和拓扑结构,它还显示了组成系统的元素与系统需求之间的关系,而且体系结构还说明了部件和关联之间的结构和语义的区别[13]。

分层体系结构是大规模系统的多层次结构,分层还提供了一个管理软件复杂度及重用的方法。分层体系结构一般用于大规模系统,一般这些系统都有强烈的管理系统变化和复杂度的要求。由于分层系统登记形式的组织形式,是每一层都给上层提供服务,对下一层则作为一个客户存在。连接件则由协议来定义,决定层与层之间如何交互。分层系统具有多个良好的特性,它支持基于不断增长的抽象层次的设计。

这允许应用者将一个复杂的问题分解成一系列递增的步骤。当一个系统可以分成若干个由清晰的边界定义的区域时,分层系统可以应用在上面。一般情况下,由于复杂度、多软件包和平台的差异,并不希望应用开发人员知道系统中每个软件层次的细节,分层则正好提供了管理每个个人开发者复杂度的体系结构边界。其次,它支持提升。另外,它也支持重用。如抽象数据类型一样,它允许被同一层的不同应用交互使用,而且使它们可以支持相邻层的相同接口,这使得用不同的应用程序建立标准的层间接口成为可能。一个分层体系结构可以产生在应用服务的深度和广度上而得出的信息系统的模型。

Struts2体系结构

Struts2使用了WebWork的设计核心,大量使用拦截器来处理用户的请求,从而允许用户的业务逻辑控制器与ServletAPI分离。图2.2是Struts2的体系结构简图。

??

图2.1Struts2的体系结构简图??

Struts2框架的大概处理流程如下:

1、浏览器发送一个请求。

2、核心控制器FilterDispatcher根据请求决定调用合适Action。3、WebWork的拦截器链自动对请求应用通用功能,如验证等。4、回调Action的execute方法,该execute方法根据请求的参数来执行一定的操作。5、Action的execute方法处理结果信息将被输出到浏览器中,支持多种形式的视图[14]。

此框架的优点

通过上面对Struts2体系结构的了解,我们发现Struts2框架适合要设计的系统。主要表现在如下几个方面:

与Struts1相比,Struts2对Struts1进行了巨大的改进。在Action的实现方面:Struts1要求必须统一扩展自Action类,而Struts2中可以是一个普通的POJO。线程模型方面:Struts1的Action工作在单例模式,一个Action的实例处理所有的请求。Struts2的Action是一个请求对应一个实例。没有线程安全方面的问题。Servlet依赖方面:Struts1的Action依赖于ServletAPI,比如Action的execute方法的参数就包括request和response对象。这使程序难于测试。Struts2中的Action不再依赖于ServletAPI,有利于测试,并且实现TDD。封装请求参数:Struts1中强制使用ActionForm对象封装请求的参数。Struts2可以选择使用POJO类来封装请求的参数,或者直接使用Action的属性。表达式语言方面:Struts1中整合了EL,但是EL对集合和索引的支持不强,Struts2整合了OGNL(ObjectGraphNotationLanguage)。绑定值到视图技术:Struts1使用标准的JSP,Struts2使用“ValueStack”技术。类型转换:Struts1中的ActionForm基本使用String类型的属性。Struts2中使用OGNL进行转换,可以更方便的使用。数据校验:Struts1中支持覆盖validate方法或者使用Validator框架。Struts2支持重写validate方法或者使用XWork的验证框架。Action执行控制的对比:Struts1支持每一个模块对应一个请求处理,但是模块中的所有Action必须共享相同的声明周期。Struts2支持通过拦截器堆栈为每一个Action创建不同的声明周期[15]。

综合考虑,此系统运用Struts2框架结构。

运行环境与开发模式的选择

由于时间以及技术的关系,本系统前台采用JSP作为WEB开发平台。JSP是一项功能强大的,用于构建动态Web应用程序的技术[12]。JSP可完全利用JAVA架构的强大,安全,高效的平台特性。JSP是运行在服务器后端编译后的普通语言运行时代码,运行时早绑定(EarlyBinding),即时编译,本地优化,缓存服务,零安装配置,基于运行时代码受管与验证的安全机制等都为JSP带来卓越的性能。

数据库开发系统采用MicrosoftSQLServer2005数据库。SQLServer是由Microsoft开发的一个功能强大的关系型数据库管理系统。它能够处理大量的数据和管理众多的并发用户,保证数据的完整性,并提供许多高级管理和数据分布能力[16]。

SQLServer2000数据库

SQLServer2000是Microsoft公司推出的SQLServer数据库管理系统的最新版本。它的特性包括:

1.Internet集成。SQLServer2000数据库引擎提供完整的XML支持。它还具有构成最大的Web站点的数据存储组件所需的可伸缩性、可用性和安全功能。SQLServer2000程序设计模型与WindowsDNA构架集成,用以开发Web应用程序,并且SQLServer2000支持EnglishQuery和Microsoft搜索服务等功能,在Web应用程序中包含了用户友好的查询和强大的搜索功能。

2.可伸缩性和可用性。同一个数据库引擎可以在不同的平台上使用,从运行MicrosoftWindows®98的便携式电脑,到运行MicrosoftWindows2000数据中心版的大型多处理器服务器。SQLServer2000企业版支持联合服务器、索引视图和大型内存支持等功能,使其得以升级到最大Web站点所需的性能级别。

3.企业级数据库功能。SQLServer2000关系数据库引擎支持当今苛刻的数据处理环境所需的功能。数据库引擎充分保护数据完整性,同时将管理上千个并发修改数据库的用户的开销减到最小。SQLServer2000分布式查询使您得以引用来自不同数据源的数据,就好象这些数据是SQLServer2000数据库的一部分,同时分布式事务支持充分保护任何分布式数据更新的完整性。复制同样使您得以维护多个数据复本,同时确保单独的数据复本保持同步。可将一组数据复制到多个移动的脱接用户,使这些用户自主地工作,然后将他们所做的修改合并回发布服务器。

4.易于安装、部署和使用。SQLServer2000中包括一系列管理和开发工具,这些工具可改进在多个站点上安装、部署、管理和使用SQLServer的过程。SQLServer2000还支持基于标准的、与WindowsDNA集成的程序设计模型,使SQLServer数据库和数据仓库的使用成为生成强大的可伸缩系统的无缝部分。这些功能使您得以快速交付SQLServer应用程序,使客户只需最少的安装和管理开销即可实现这些应用程序。

数据仓库。SQLServer2000中包括析取和分析汇总数据以进行联机分析处理(OLAP)的工具。SQLServer中还包括一些工具,可用来直观地设计数据库并通过EnglishQuery来分析数据[17]。

基于B/S的体系结构

本管理系统采用B/S模式,服务器采用著名的web服务器端软件apache,该http服务器有着良好的跨平台性和安全性,可以运行在包括windows、linux、mac等操作系统上。用户客户端使用各种浏览器都能够进行正常的浏览和操作。需要注意的是在程序的开发过程中,程序和路径相关的要考虑到不同的操作系统的文件目录结构。

B/S结构,即Browser/Server(浏览器/服务器)结构,就是只安装维护一个服务器(Server),而客户端采用浏览器(Browse)运行软件。它是随着Internet技术的兴起,对C/S结构的一种变化和改进。主要利用了不断成熟的WWW浏览器技术,结合多种Script语言(VBScript、JavaScript等)和ActiveX技术,是一种全新的软件系统构造技术。

B/S三层体系结构采用三层客户/服务器结构,在数据管理层(Server)和用户界面层(Client)增加了一层结构,称为中间件(Middleware),使整个体系结构成为三层。三层结构是伴随着中间件技术的成熟而兴起的,核心概念是利用中间件将应用分为表示层、业务逻辑层和数据存储层三个不同的处理层次。三个层次的划分是从逻辑上分的,具体的物理分法可以有多种组合。中间件作为构造三层结构应用系统的基础平台,提供了以下主要功能:负责客户机与服务器、服务器与服务器间的连接和通信;实现应用与数据库的高效连接;提供一个三层结构应用的开发、运行、部署和管理的平台。这种三层结构在层与层之间相互独立,任何一层的改变不会影响其它层的功能[18]。











图2.3B/S三层体系结构

在B/S体系结构系统中,用户通过浏览器向分布在网络上的许多服务器发出请求,服务器对浏览器的请求进行处理,将用户所需信息返回到浏览器。而其余如数据请求、加工、结果返回以及动态网页生成、对数据库的访问和应用程序的执行等工作全部由WebServer完成。随着Windows将浏览器技术植入操作系统内部,这种结构已成为当今应用软件的首选体系结构。显然B/S结构应用程序相对于传统的C/S结构应用程序是一个非常大的进步。

B/S三层体系结构的主要优点:

?B/S模式提供灵活的信息交流和信息发布服务。B/S模式借助Internet强大的信息发布与信息传送能力可以有效地解决企业、高等学校内部的大量不规则的信息交流

?可共享性。单个应用服务器可以为处于不同平台的客户应用程序提供服务,在很大程度上节省了开发时间和资金投入;

?较好的安全性。在这种结构中,客户应用程序不能直接访问数据,应用服务器不仅可控制哪些数据被改变和被访问,而且还可控制数据的改变和访问方式。

?三层模式成为真正意义上的“瘦客户端”,客户端计算机不需要很高的硬件配置,也无需特殊的软件配置要求,只要有web浏览器就可以使用系统。

?B/S模式提供了一致的用户界面:B/S模式的应用软件都是基于Web浏览器的,这些浏览器的界面都很相似。对于无用户交互功能的页面,用户接触的界面都是一致的,从而可以降低软件的培训费用。

?在B/S模式下,外部的用户亦可通过通用的浏览器进行访问。

?B/S模式的结构易于扩展:由于Web的平台无关性,B/S模式结构可以任意扩展,可以从一台服务器、几个用户的工作组级扩展成为拥有成千上万用户的大型系统。

?B/S模式具有更强的信息系统集成性:在B/S模式下,集成了解决企事业单位各种问题的服务,而非零散的单一功能的多系统模式,因而它能提供更高的工作效率。

运行环境

该系统运行的必备条件如下:

(1)服务器端操作系统:独立于操作系统的跨平台系统,采用MicrosoftWindows2000及以上版本,考虑其稳定性。

(2)数据库:MicrosoftSQLServer2000服务器版本。

(3)Web服务器:IIS服务器。

(4)客户端运行环境:能运行IE4.0以上或Netscape4.5以上浏览器的操作系统。

开发模式

对于本系统,其功能目标是实现传统的人工管理到利用计算机辅助管理的转变,所以它必须实现整个选课流程的进行,实现对系统用户的不同管理。由于系统数据收集的实时性要求不高,因此采用Browser/Server结构来进行设计是合理可行的。图2.4是本系统的网络应用原理示意图[19]。

















图2.4系统原理示意图





系统需求分析

电子政务是新时期政府改革的重要手段,也是政府为民服务亲民执政的主要渠道。然而,一浪高过一浪的电子政务建设热潮并没有带来期望的效果,据有关专家分析,电子政务的成功率平均不到30%[17],低下的电子政务成功率不仅困扰着政府的决策者,也引起了世界范围内有关专家和学者的高度关注,各种相关的理论和方法已经开始用于电子政务系统的研究,如系统工程理论组织符号学理论与方法需求工程方法等。由于电子政务非常复杂,目前专家们还没有一个确定的共识,但普遍认同的是:电子政务属于信息系统,但不是一般的技术信息系统,而是一个复杂的社会-技术系统,并且,系统越大,功能越全,包含的社会成份越多,社会因素在系统中所占的比例就越大。同时,由于电子政务是人参与较多的系统,人的主动性和自学习性将引起电子政务的需求不断发生变化,使电子政务变得更为复杂[18]。因此,电子政务绝不是技术本身能够解决的。Standish集团1996年提供的一份报告认为:在一个信息系统项目失败的各种原因及所占的比重中,与需求相关的原因占63%[19]。这说明,信息系统项目失败的最常见的原因并不是技术原因,而是需求问题。既然电子政务是信息系统,需求问题自然也就成为电子政务的主要问题,并且,由于电子政务的特殊性和复杂性,使得需求问题表现得更加突出。因此,研究解决电子政务的需求问题是实现电子政务系统目标的有效手段,也是提高电子政务成功率的迫切需要。

电子政务自身特点

与一般信息系统相比,电子政务有许多特殊之处:(1)协调环节多。电子政务项目一般涉及多个不同的部门或一个部门的多个级别层次,以我国电子政务建设为例,分为纵向和横向两大类系统。纵向系统出自同一部门,但涉及中央省市县乡五级,由于各级政府的人力和资金存在级别及地区差量客户价值,然后对客户进行细分,针对不同价值的客户群体采取不同的客户关系管理措施。异,统一协调环节多,难度大;横向系统出自同一地区,但涉及不同的职能部门,由于受部门利益及对电子政务认识的影响,协调难度更加突出,部门之间或地区上下级之间的协调成为开展电子政务的最大瓶颈[20]。(2)影响因素多。影响电子政务建设的因素很多,主要有:①认识因素。认识是基础,人的认识不但受客观现状的影响,还受人的思想观点期望和偏好的影响。认识指导行动,行动影响结果,认识不足最终将影响系统的实际效果。如,对电子政务的重视留在口头上多,实际行动少;硬件投入多,软件投入少;重视“形象工程”多,关心实际效果少等。②体制因素。体制是行动的保障,体制不全或不顺,再好的认识也无法付诸实施,或收不到预期的效果。如,全国从上到下没有一个统一的电子政务领导与管理机构,各地机构设置混乱,领导变更频繁,不同的领导带来不同的思路,不同的机构采取不同的做法等。(3)变化频率快。目前中国正处在政府改革时期,新的政策新的规则随时都可能出现,每一次变革都对电子政务提出新的要求等。这些都是引起电子政务需求不断发生变化的因素。(4)服务范围宽。一般信息系统要达到的目标是为组织内部服务的实现组织自身利益的最大化,而电子政务除了需要为政府内部服务,实现政府自身办公自动化的目标外,还有一个很重要的目标是为社会公众提供服务,不仅要提供单项业务服务,还要提供多项业务的“一站式”服务。这种多业务的“一站式”服务需要政府单独建立一个综合性的平台,联通与此相关的所有政府部门的业务。这种高标准的服务大大增加了电子政务实现的复杂度。(5)安全要求高。电子政务涉及国家安全,对网络和信息的安全要求比一般信息系统高。按照信息的涉密程度,电子政务网络分内网专网外网互联网等,不仅这些网络之间需要安全地互联互通,分布在这些网络上的应用系统信息也要进行安全的交换,有些还涉及保密,这种高安全性和保密性的要求大大增加了电子政务建设的难度。(6)政策依赖性强。政府是依法行政的,电子政务建设也需要法律和政策依据。如,政府要建设阳光政府,首先要做到政务公开,这时就需要《信息公开法》。类似的法律和政策还有《个人隐私法》《电子签名法》《数据共享目录》《信息交换机制》等,但目前在法制建设方面还比较薄弱,这在一定程度上制约了电子政务的顺利开展。(7)决策周期长。电子政务项目通常是集体决策的,有些项目还需要逐级汇报,每一级的制约因素是不同的,因此,电子政务的决策过程比较长,而目前电子政务系统对变化的需求反应不敏感。

需求分析

解决需求问题的最有效的办法是采用工程化的方法进行电子政务系统开发,即用工程化的办法解决电子政务系统的需求问题。需求分析是工程化方法的核心内容,处在系统开发生命周期的最初阶段,是决定系统成败的关键。

需求分类

所有系统都有需求(Require-ment),需求可以分多个不同的层面,最顶层可分为用户需求信息需求和系统需求三个方面,用户需求包括业务需求和目标需求;信息需求分为角色需求任务需求资源需求和进度需求等;系统需求分为功能需求性能需求用户界面需求等[9]。如图3所示:(1)业务需求(Businessrequirement)。



图3-1需求分类



描述组织的业务流程改进所需要开展的活动,与组织的目标相关。在本文的研究中业务需求描述了为实现电子政务项目目标所需要进行的改进业务流程的工作。(2)目标需求(Objectiverequirement)。描述了组织为什么要开发一个系统及组织希望系统色需求用于描述参与电子政务项目的利益相关者。(4)任务需求,也称活动需求(Activityrequirement)。描述组织为实现既定目标所需要开展的各项活动。在本文的研究中,任务需求用于描述电子政务项目的任务,即“做什么”。(5)资源需求(Resourcerequirement)。描述组织在完成任务过程中所需要的各种资源。在本文的研究中,资源需求用于描述电子政务项目的软硬件环境需求。(6)进度需求(Planningrequirement)。也称计划需求,描述组织开展活动的时间安排。在本文的研究中,计划需求用于描述电子政务项目的进度安排。(7)功能需求(Functionalrequirement)。规定开发人员必须在产品中实现的软件功能,用户利用这些功能来完成任务,实现系统目标。(8)性能需求,也称非功能需求(Non-functionalrequirement)。包括系统的性能指标,质量属性和约束。性能指标包括系统的开放性稳定性可维护性可扩展性安全性等。质量属性包括系统的可用性完整性效率和健壮性等。约束指限制系统实现的外部环境,包括资金人才资源条件政策措施等。(9)用户界面需求。用户界面需求是用户愿意使用软件的关键,友好的用户界面可以使用户方便有效愉快地使用该软件,从而发挥软件的作用。

需求分析过程

需求分析按需求分类拆分成两部分,第一部分为用户需求转变为信息需求部分,即将用户的业务需求和目标需求转换成信息系统的信息需求,包括目标需求流程需求角色需求任务需求资源需求进度需求等,这部分工作由用户自己完成;第二部分将信息系统的信息需求转变为系统需求,包括功能需求性能需求和用户界面需求等,这部分工作由系统分析师完成。则称第一部分为用户需求分析过程,所交付的产品是用户需求方案;称第二部分为分析师需求分析过程,所交付的产品是需求规格说明书。本文研究的是第一个过程,即如何将用户需求转变为信息系统的信息需求过程。本文的用户需求方案是指用户将用户需求转变成信息系统的信息需求所提交的一系列文档,通过对业务需求目标需求角色需求任务需求资源需求和进度需求的分析,得到有关系统目标业务流程任务软硬件条件等在内的详细表达用户需求的一套系统需求文档。

系统可行性分析

技术可行性

本系统将会是一个基于JSP下的电子政务系统设计与实现,对现有技术进行评价,以明确能否利用现有技术进行系统开发及系统实施。计算机网络技术的发展和计算机硬件性价比的不断提升,使计算机全面应用于企业管理的各个环节成为可能。B/S开发模式COMDCOM技术在国内各行各业的信息管理系统开发中已经被广泛采用,实践证明这些技术都非常适合企业客户关系管理系统的开发。本系统网络数据库平台为SQLServer2005,辅助开发工具用Dreamweaver8,并基于通用可扩展的数据接口(JDBC)全面支持MS-SQL数据库技术,继承了传统的客户关系管理系统的优点,同时又突出了基于Internet平台的交流渠道,在个性化方面也具有独到的优势。

安全可行性

电子政务不仅是一项先进的软件技术产品,也是一项企业的商业战略和管理理念。功能方面包括客户服务客户关怀和数据挖掘,是极少数能涵盖互联网时代全面客户关系需要的产品。在客户端,它提供了统一客户服务渠道电子邮件电话等与客户互动的能力;在服务器端提供了客户追踪分析功能,实现一对一行销。所以为企业运作过程提供了可靠保证。

效率可行性

本电子政务系统旨在通过将人力资源业务流程与信息技术进行有效的整合,不断地改善企业销售服务和市场营销等与客户关系有关的业务流程并提高各个环节的自动化程度,使得企业可以更低成本更高效率地满足客户的需求,最大程度的提高客户满意度及忠诚度,挽回失去的客户,保留现有的客户,不断发展新的客户,发掘并牢牢地把握住能给企业带来最大价值的客户群。因此带来的经济回报将远远超过信息化过程中的投入。

管理可行性

在软件开发中的管理策略对软件本身质量影响极大,由于软件是逻辑产品而不是物质产品,其开发进度的“能见度”比较低,软件生产的进度和指标不易标识和度量,问题不易及时发现和纠正。需求条件的不定因素多且易发生变化,从而使得软件生产的管理不同于一般的工程管理,有它自身的特殊性和复杂性。

管理规范是一套指导性文件,也是一套技术规范,是管理技术人员进行业务活动的行为准则。其中,管理规范的作用和效果:(1)提高了软件开发过程的“能见度”,将逻辑产品物资化;(2)促进标准制定与贯彻的统一;(3)促进了标准化管理与软件系统建设的统一;(4)促进了标准编制与技术开发的统一;(5)根据规范可以统一软件开发及运行管理的有关想法,使有关人员的相互理解和协作变得更为容易;(6)减少了作业和文档的重复,从而提高了开发效率;(7)可以排除软件研制中的人为因素的影响,保证了软件质量的均匀化,因而易于积累开发经验,促进技术水平的提高;(8)由于规范对软件的文档内容格式都做了明确的规定,使软件开发的委托者和软件开发的承当者之间相互理解。

在团队合作上必须有较好的管理,管理的好坏是该项目成败的关键。本系统是独立开发的管理系统,也应当以管理规范为出发点,提高软件的能见度,提高软件的可复用性。(1)将软件开发周期分为可行性研究及计划需求分析概要设计详细设计编码和单元测试(实现)组装测试运行和维护七个方面;(2)规定对软件项目的术语项目描述任务技术方法工具等方面进行详细说明和标识。

有统一的规范,对于他人参与软件的开发是有利的,这虽是一个毕业设计,但一个开放规范的代码为他人学习今后提高软件的开发有利的,统一的管理规范对于开发后期软件的修改排错是有利的,在开发前提出管理规范是可行的。

电子政务系统开发流程

(1)由用户自己提出需求方案的必要性通过分析电子政务特殊性及需求问题对电子政务系统的影响,本文认为,电子政务系统应由用户自己提供需求方案。原因在于:①电子政务项目建设的目的是应用,而应用的主体是政府公务员,如果政府内部没

图3-2管理信息系统生命周期



图3-3电子政务系统生命周期



有明白人,政府CIO对自己要建一个什么样的系统都表达不清楚的话,这样的电子政务项目是不可能成功的。②鉴于电子政务项目的特殊性和复杂性,只有政府公务员出身的政府CIO才能对电子政务有深刻的了解,并能动态跟踪需求的变化。让他们直接参与电子政务项目的需求分析,提供相应的需求方案,既是必要的,也是必须的,对提高电子政务项目的成功率具有重要意义。③用户提供的电子政务需求方案不仅有利于系统分析师分析需求,而且可以成为评价电子政务项目建设结果的依据。因此,在电子政务项目的开发流程中,增加由用户直接提供需求方案的环节,让政府CIO参与并主导项目的需求,是很有必用一个单独的包图表示,系统功能包。



系统安全需求

对于企业用户来说,商业数据是高度敏感的信息,系统安全是需要认真考虑和严密计划的问题。系统的安全性需求主要包括以下方面:

(1)身份认证

本系统采用用户名+密码+验证码的身份认证机制。通过系统的检验,成功后才可以登录系统。

(2)防止非法数据访问

安全问题除了包括合法身份的确认,还包括数据在保存和传输中不被窃取或更改,以及如何阻止非法侵入主机和核心数据系统等。

对私有数据访问的识别(密码安全代码等信息),这些信息一直有效,直至用户退出系统。防止非法用户进入主机系统和数据库。利用防火墙技术和网管系统,对非法进入进行严格审查,过滤非法数据,可以确保主机系统的安全运行和核心数据库的完整。

采用多种网络安全技术,可以通过防火墙加密设置口令设置权限和安全协议SSL技术保证数据的安全性。

系统用例分析

这个系统涉及到三大系统用例,通过系统的用例分析来构建软件模型,采用面向对象的现代软件分析来分析出每一个模型图实体图,通过系统用例分析来剖析系统功能。本系统涉及的用例为公众用户和管理员。



图3-4公众用例分析

面向公众的功能模块的主要功有:

(1)领导信箱

用户可以在网站上面给政府领导发送邮件。

(2)表格下载

在该模块当中能够下载政府提供的相关资料表格。

(3)政务公开

广大公众在充分的了解到了政务相关政务信息信箱。

(4)便民电话

提供政府政务电话。

(5)留言板

广大公众用户能够对政务信箱进行留言,如果有异议还可以进行投诉。









图3-6管理员用例分析



由于在这个系统管理平台当中,其主要的政务网站的管理与维护的系统管理人员。这个平台能够在政务专网内部得到实际的运行。























总体设计

本系统基于MVC模式,采用Struts+Hibernate架构,如图3-1,分为表示层、业务层和数据访问层。层与层之间通过接口联系,业务实体贯穿于三个层次,表现层的业务实体展现视图通过表单和业务实体之间进行转换。通过系统构件的分层,可以将频繁变动的业务逻辑层分离出来,实现通用类构件的完全复用。并且在各个模块之间设计统一的接口,当某一模块业务逻辑改变时,使系统之间的影响最小,使系统实现即插即用,让系统容易升级。



图4-1系统设计架构图



系统规划

4.1.1系统总体目标

整个库尔勒市经济技术开发区网站系统分为十大子模块:首页、领导信箱、地区概况、动态信息、法律法规、招商引资、网上办事、政务公开、便民服务、政府部门网站。作为面向公众的交流平台,充分展示库尔勒市经济技术开发区的业绩和风采。首页是对网站九个主要频道中主要功能的展示,它包含各个栏目的导航、最新的即时政务信息、工作动态、公告通知等一些的最新发布消息,还包含了相关网站的友情链接和对站内的政务信息搜索引擎,便于更方便地查找站内政务信息和资料;后台的主要功能是对系统用户、政务公开、公告通知、招商信息、规划方案、政策法规、注册会员进行管理,包括对信息进行新增、修改、删除及对网站进行一些相关的维护。

4.1.2系统的总体结构

领导信箱:书记信箱,办公室主任信箱

地区概况

动态信息:公告公示,政务信息动态

法律法规

招商引资:投资要闻,招商活动,展会信息

网上办事:办事指南,意见反馈,表格下载

政务公开:干部任免,政府文件,政府采购

便民服务:便民电话,投诉举报

政府部门网站

4.1.3开发环境

开发此系统所需用到的软件环境如下:

1.JDK1.6及其以上版本:该版本是当前的最高版本,其中添加了旧版本所不具备的许多新特性。

2.Web应用服务器:Tomcat6.0及其以上版本。虽然是一款绿色软件,但其功能比较强大,方便易用,极适合中小型系统应用。可从网上免费下载,从而降低开发成本。

数据流程图

数据流程图是一种能全面地描述信息系统逻辑模型的主要工具,它可以用少数几种符号综合地反映出信息在系统中的流动、处理和存储情况。

市规划和国土资源局网站总体图如图4.2所示









图4.2总体图



电子政务工会网站的结构设计



图4.3结构设计

(1)领导信箱

用户可以在网站上面给政府领导发送邮件。

(2)表格下载

在该模块当中能够下载政府提供的相关资料表格。

(3)政务公开

广大公众在充分的了解到了政务相关政务信息信箱。

(4)便民电话

提供政府政务电话。

(5)留言板

广大公众用户能够对政务信箱进行留言,如果有异议还可以进行投诉。

数据库概要设计

人们在总结信息资源开发、管理和服务的各种手段时,认为最有效的是数据库技术。数据库的应用已越来越广泛。从小型的单项事务处理系统到大型复杂的信息系统大都用先进的数据库技术来保证系统数据的整体性、完整性和共享性。目前,一个国家的数据库建设规模(指数据库的个数、种类)、数据库信息量的大小和使用频度已成为衡量这个国家信息化程度的重要标志之一。

数据库设计是建立数据库及其应用系统的技术,是信息系统开发和建设中的核心技术,具体说,数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求。

总的来说,数据库的设计对系统的经济性、功能性和效率有很大的影响,要设计一个好的数据库,就要求在设计时尽量避免数据的多余,另外,还要尽可能提高数据的存取速度。按规范化理论的要求,关系模式应尽量取高级范式,尤其对记录数较多的关系,低级范式将会造成存储的大量重复,是空间遭受严重浪费。另一方面,从存取速度上考虑,希望一个模式涉及的属性越多越好,相互运算越少越好,这样,又应取低级范式,因此,速度与空间在范式上是相互矛盾的。

这样,就要求我们在设计数据库时要严格地探讨它的使用环境,充分了解用户的需求,清楚地掌握数据库系统的特点,进行综合的评价和分析设计出的数据库应满足以下要求:

(1)充分反映出用户的要求,即能够正确地反映出用户的实现环境,包括预处理的全部数据。

(2)能够支持用户所需的所有“加工”

(3)能够被某种数据库管理系统所接受。

(4)具有较高的质量,冗余量最小,数据一致性,完整性好,无更新异常,易于理解,便于维护,高效率等等。







图4.4电子政务工会网站ER图

































系统的实现

前台



在首页的政务公开栏目中列出即时的政务公开。当用户想查看更多政务信息时,点击政务公开栏中的更多按钮,此时会列出系统的所有政务信息信息,选择所要查看的某一条政务信息便会把详细内容显示在政务动态页面。可以在政务公开栏目底部的政务检索框中直接输入所要查找的政务信息中的关键字,同样可以链接到与输入关键字相关的政务信息显示在政务页面。



用户可以在网站上面给政府领导发送邮件。





4.3.2后台

成功登录到的界面后安全性测试是有关验证应用程序的安全服务和识别潜在安全性缺陷的过程,安全性测试并不最终证明应用程序是安全的,而是用于验证所设立策略的有效性,这些对策是基于威胁分析阶段所做的假设而选择的,主要分两个方面网页安全漏洞检测注[36]Prez-Sorrosal.F,Patino-Martinez.M,Jimenez-Peris.R,Vuckovic.J.HighlyAvailableLongRunningTransactionsandActivitiesforJ2EEApplications.DistributedComputingSystems,July2006:2-2

[37]Wojciechowski,J.Sakowicz,B.;Dura,K.Napieralski,A.MVCmodel,strutsframeworkandfileuploadissuesinwebapplicationsbasedonJ2EEplatform.TelecommunicationsandComputerScience[J],Feb.2004:342-345

3、固定资产管理系统

摘要

随着计算机信息技术的发展以及对资产、设备的管理科学化、合理化的高要求,利用计算机实现设备及资产的信息化管理已经显得非常重要。

固定资产管理系统是一个单位不可缺少的部分。但一直以来人们使用传统的人工方式管理固定资产的信息,这种管理方式存在着许多缺点,这对于查找、更新和维护都带来了不小的困难。因此,开发一个界面友好,易操作的资产管理软件进行自动化管理变得十分重要。这正是本系统开发的目的和意义。本文所阐述的固定资产管理系统,以浏览器/服务器模式高效地实现了固定资产管理的各项功能,可进行资产的添加,删除、修改、查询、打印报表等功能;还可以对每位职工的添加、删除、修改、查询基本操作;本系统还对权限进行限制,操作员只可对资产和用户进行基本操作,管理员可以为每位员工赋权限。

使用本系统,不仅提升了效率,而且满足现代高校资产管理的需要。



关键词:资产管理JSPStrutsHibernateSpring

目录

固定资产管理系统 I

摘要 I

Abstract II

前言 V

第1章绪论 1

1.1项目背景 1

1.2项目设计原则 1

1.2.1实用性原则 1

1.2.2经济性原则 1

1.2.3扩充性原则 2

1.2.4社会可行性原则 2

1.3本章小结 2

第2章系统分析 3

2.1需求分析 3

2.2技术可行性 3

2.2.1动态网站技术介绍 3

2.2.2程序语言的选择 3

2.3软件可行性分析 4

2.3.1软件环境 4

2.3.2硬件环境 7

2.4系统结构可行性分析 7

2.4.1B/S模式简介 7

2.4.2B/S模式的优点 8

2.5本章小结 8

第3章关键技术 9

3.1开发架构 9

3.1.1软件开发架构的意义 9

3.1.2Struts架构简介 9

3.2数据持久层 11

3.2.1持久层主流方案 11

3.2.2持久层主流方案 12

3.2.3持久化技术 12

3.3本章小结 13

第4章总体设计 14

4.1总体设计 14

4.2数据库设计 15

4.2.1数据库的需求分析 15

4.2.2数据库表的具体设计 15

4.3详细设计 17

4.3.1功能设计 17

4.3.2系统登陆 18

4.3.3系统用户管理 20

4.3.4员工信息管理 23

4.3.5资产入库管理 24

4.3.6资产维护管理 28

4.3.7资产借还管理 29

4.3.8打印报表 31

4.3.9密码修改 34

4.4技术难点 34

4.4.1中文乱码 34

4.4.2图片处理 34

4.4.3HQL语言 35

4.4.4安全性 35

4.5本章小结 36

第5章系统测试 37

5.1测试的定义及目的 37

5.2测试的原则 37

5.3系统的方法 37

5.3.1界面测试 37

5.3.2功能测试 38

5.3.3需求测试 38

5.3.4性能测试 38

5.4系统中其它要注意的地方 38

5.5固定资产管理系统的测试 39

5.6本章小结 39

结论 40

致谢 41

参考文献 42





前言

随着社会经济的迅速发展和科学技术的全面进步,计算机事业的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。随着企业的发展,企业的规模也逐渐发生变化,其管理难度也越来越大,如何优化企业设备、资产的日常管理也就成为了一个大众化的课题。如何更好的提高生产效率,相关的企业资产管理系统的研发在社会中越来越受到重视。

固定资产已成为公司管理中不可或缺的一部分,在许多国家得到了广泛的研究与应用。总的说来,固定资产管理系统就是通过集中固定资产信息,对公司的资产进行调控。实现固定资产管理系统现代化的根本途径是信息化、系统化。

作为计算机应用的一部分,使用计算机对固定资产进行管理,具有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高固定资产管理的效率,也是科学化、正规化管理的重要条件。固定资产管理系统通过采集固定资产日常工作中所产生的各种原始数据,根据资产管理的要求,对数据进行分类、统计、汇总、分析,建立程序化、制度化、规范化的固定资产计算机软件管理系统,包括了固定资产的一般特性、固定资产状态数据和固定资产能力数据,及时准确地报出各种报表,为固定资产管理提供了一个现代化的管理手段,这一手段可以强化和规范对固定资产的管理。便于计划、财务、审计等管理部门的介入,形成严格的监督、约束机制。绪论

项目背景

随着我国高等教育事业的迅猛发展,高等学校使用的固定资产规模在急速增长,使其日趋复杂,管理难度越来越大。尤其是随着校际间的合并与调整、学校内部推行的后勤、财务、人事、分配等各项改革的深化,对高等学校的固定资产管理工作不断提出新要求。但是,多年来固定资产管理工作一直是高校管理的一个薄弱环节,管理基础工作不够规范,资产安全控制体系尚不完善,家底不清、帐实不符、资产流失的现象在不少的学校依然存在,与高等教育发展改革的新形势很不适应。近几年来,为加强固定资产管理工作,国内一些地区和学校进行了有益的探索,开发管理软件,开始使用计算机管理教学仪器、设备等,技术上有了一定的进步。但总的看来,这些软件实现的往往是对原来手工劳动的简单替代,完成的仅仅是单一业务和专门用途资产的管理,未能从根本上改变高校固定资产管理被动、滞后的局面。

因此,必须以有力支撑高等教育发展改革的高度出发,对固定资产管理工作进行系统的规划和建设,运用现代信息技术真正实现管理水平上的飞跃。本系统就是基于此种社会背景进行独立开发,解决了以往资产管理中存在的普遍问题,如资产的录入、删除等模糊不清,数据来去不透明,致使资产无据可查。本系统不仅实现了通过简单操作完成繁琐的资产管理功能,而且将每笔资产的动态信息进行数据记录,里面有资产、相关操作人员和时间的记录,使得所有资产都有据可查、透明可见,提高资产管理效率,解决以往资产管理弊端。

项目设计原则

实用性原则

固定资产管理是企业管理中的一个重要组成部分,其管理具有数量大、种类多、价值高、使用周期长、使用地点分散等特点,管理难度比较大。很多单位目前仍采用人工记账的管理方式,因为以上原因使得管理工作异常艰难,导致资产流失和重复购置等问题,所以迫切的需要一款实用的管理软件的出现。充分考虑到在固定资产管理中可能遇到的种种问题,系统主要应该包括资产管理中的日常管理,从而实现对资产的全方位监控管理。

从实用性来分析。系统已实际需求为基础,尽量全面的做好需求分析,解决固定资产中的种种普遍问题,以减少日后更新软件的次数。

经济性原则

系统开发需要进行多方面的考虑,不仅要从使用性和扩充性考虑,还需要从适当的经济角度分析。首先,进行开发成本的估算以及了解取得效益的评估,确定要开发的项目是否值得投资开发,这些即为经济可行性研究的内容。对于大多数系统,一般衡量经济上是否合算,应考虑一个底线。其次,经济可行性研究范围比较广,包括成本—效益分析、公司的长期经营策略、开发所需的成本和资源、潜在的市场前景。

本系统建立适合高校自身需求的网络平台,提供广泛的涵盖资产管理多种需求的功能,数据处理方式灵活,满足需求,节省网站建设成本,并确保其较好的拓展性和开放性;同时网站具有基于WEB界面的管理后台,能够自主的对网站中的内容作更新、修改操作,节省了高校网站的运营成本,提高了信息更新、传播效率。

扩充性原则

网站的整体规划及框架设计是具可扩充性的。首先前台页面的设计能保证网站在增加栏目后不会破坏网站的整体结构。以此方便后期维护升级,不仅减少经济开支,并且大大提高了解决实际问题的效率,所以本系统具有很高的实际应用价值。其次后台数据库的设计具有高度的扩充性,能够根据需要对资产、员工的增、减、改、查,从而完成对资产设备的大批量录入或者删除及修改等相关操作,对员工表亦可如此操作,达到了根据实际需求实现操作并完成提高升级性能和高度扩充的目的。

社会可行性原则

研究要开发的项目是否存在任何侵犯、妨碍等责任问题,要开发项目的运行方式在用户组织内是否行的通,现有管理制度、人员素质和操作方式是否可行,这些即为社会可行性研究的内容。社会可行性所涉及的范围也比较广,它包括合同、责任、侵权、用户组织的管理模式及规范,其他一些技术人员常常不了解的陷阱等。本项目根据实际需求开发,能够完成资产的基本管理应用,具有一定的上线应用价值。

因为本平台是个人自主开发的,所以不存在侵权、管理制度、组织管理等问题,这个平台的社会可行性是可行的。

本章小结

本章主要介绍固定资产的管理在过去有很大的弊端,急需一个系统高效的管理系统。并且以实际角度出发,根据固定资产具有的相关特点对项目进行实用性、经济性、扩充性和社会可行性等多方面做到深层次的分析,达到管理容易、更新信息方便、操作简便、信息透明化等目的,从而解决以往存在的问题。



系统分析

需求分析

设备不仅是高校固定资产的重要组成部分,也是一个高校技术装备水平的重要标志,赖以正常经营和参与市场竞争的物质技术基础。根据高校的实际需求本系统具有以下的功能需求:

统一、友好的操作界面,能保证系统的易用性。

完善的资产及设备档案管理,支持资产及设备信息的增加、删除、修改、查询等基本管理模块。

软件同时提供了资产及设备的借出、归还管理,资产及设备的维修管理。

软件提供了多功能查询,有多种查询条件可以任意选择,方便信息的汇总。

连续录入式的应用增添及维护管理,用户的权限、密码修改设置。

技术可行性

动态网站技术介绍

Internet起源于20世纪60年代的美国,它在近几年迅速风靡全球,其根本原因不仅在于它拥有卓越的国际通信功能,更在于它拥有巨大的信息资源。所谓的Internet是指由分布在全世界成千上万的计算机网络遵循一定的通讯协议,并相互联系在一起而形成的国际互连网络,也就是说,Internet是建立和使用这些网络的人群、群体、公司以及各种网络资源的集合体。

随着网络技术的不断发展,单纯的静态页面已经不能满足发展的需要,因为静态页面是用单纯的HTML语言组成的,它没有交互性.因此,为了满足实际的需要,许多网页文件扩展名不再只是“htm”、“html”,出现了以“php”、“asp”、“jsp”、“shtml”等为后缀的网页文件,这些都是采用动态网页技术制作出来的。

程序语言的选择

CGI

CGI(CommonGatewayInterface,通用网关接口)。首先,客户端(即Web浏览器)根据某资源的URL(UniformResourceLocator,统一资源定位器)向Web服务器提出请求,Web服务器的HTTPDaemon(守护进程)将此请求的参数通过标准输入stdin和环境变量传递给指定的CGI程序,并启动此应用程序进行处理,如要存取数据库服务器上数据库的数据,则向数据库服务器发出处理请求,数据库服务器将执行结果返回给CGI程序,CGI程序处理结果通过标准输出stdout返回给HTTPDaemon进程,再由HTTPDaemon进程返回给客户端,由浏览器解释执行,将最终结果在用户面前显示。CGI允许Web服务器运行外部应用程序,以通过外部程序来访问数据库等一些外部资源,并产生HTML文档给浏览器。但每次请求CGI程序都要重新启动程序,影响了响应的速度,且CGI程序不能被多个客户请求共享,影响了各种资源的使用效率。为了克服CGI的这些缺点,一些Web服务器厂商开发出了专用的API(ApplicationsProgramInterface应用程序接口),这样就允许程序员编写程序来扩展服务器的功能。API相对于CGI与Web服务器的结合更加紧密,占用的资源较少,运行的效率大有提高,安全性与保护性更好。但是开发API应用程序比开发CGI应用程序复杂得多,要求程序员掌握更多的计算机软件知识,且各种API之间的兼容性不好,业界没有一个统一的标准,使得API程序只能工作在专用的Web服务器与操作系统之上。编写CGI的程序设计语言有许多种,常用的有C,PERL,VisualC++等,由于对程序员的要求较高,且编写与调试比其它队编程技术困难,故近年来基于B/S的信息系统工程时间中已很少被采用。

JSP

JSP(JavaServerPages)是由Sun公司倡导,许多别的公司参与一起创建的一种新动态网页技术标准,类似其他技术标准。在传统的网页HTML文件(.htm,.html)中加入Java程序片断(Scriptlet)和JSP标签,构成了JSP网页(.jsp)Servlet/JSPContainer收到客户端发出的请求时,首先执行其中的程序片断,然后将执行结果以HTML格式响应给客户端,其中程序片断可以是:操作数据库,重新定向网页以及发送E-Mail等等,这些都是建立动态网站所需要的功能。所有程序操作都在服务器端运行,网络上传送给客户端的仅是得到的结果,与客户端的浏览器无关,因此,JSP被称为Server-sideLanguage,所以被许多人认为是未来最有发展前途的动态网站技术之一。

经过如上的程序语言的比较,PHP功能相对简单,不适合作大程序,而CGI效率相对较低,所以也不考虑,因为该系统并没有原有的基础平台需要扩展,也不需要与其他系统进行太多的交互,所以使用J2EE的模式并不能够体现出J2EE本身的优势,而JSP又是J2EE的核心技术之一,可以随时升级为J2EE程序,这里暂时不考虑采用J2EE,这样只需要在ASP和JSP中进行选择.在进行了诸多因素的比较之后,最终认为目前这个阶段比较合适的是JSP,而选择Struts架构作为开发的主体框架,选用Hibernate作为数据持续性处理层,则是考虑到了其高速的开发效率,及代码重用性高,易于维护等各种优势。其最终目的是希望提高系统底层业务逻辑的可重用性,增加系统的可扩展性,降低系统维护成本。

软件可行性分析

软件环境

开发一个固定资产管理系统需相应的前段开发工具和数据管理系统,还需要一个服务器等。本系统根据Struts+Spring+Hibernate组合结构设计而成,利用Hibernate进行持久层开发,Struts进行业务逻辑控制,利用Spring进行Bean的管理,依赖注入。MVC模式贯穿了整个设计流程,Model层的使用spring的核心技术IOC控制依赖注入对调用者和被调用者几乎没有任何要求,完全支持对POJO之间的依赖关系管理,如此减少代码冗余,View层主要运用Ajax无刷新提交,充分增加了客户体验,JSTL的应用使各个层之间的联系更加容易,JavaScript进行多种页面的验证,判断是否符合逻辑要求,若不符合验证需要重新填写,为后台服务器节省资源,已达到提高效率减轻服务器压力,继承使得我们可以对持久层的对象进行抽象,方便理解易于管理,可以简化创建用户界面的过程。Controller层中的action主要负责接受HTTP请求信息,可以接管用户请求并对异常进行处理。根据配置文件struts-config.xml的配置信息,把请求转发给合适的Action对象。Action类负责调用模型的方法,更新模型的状态,并帮助控制应用程序的流程。本文开发的固定资产管理系统所需要的环境如下:

开发工具:Myeclipse8.0,PowerDesigner12.5,RationalRose

数据库:MySQL5.1

Web服务器:Tomcat6.0

操作系统:Windows7

外部包:Struts.jar,Hibernate.jar,JavaReport-V3-Enterprise-Released.jar

服务器端

开发工具

MyEclipse企业级工作平台(MyEclipseEnterpriseWorkbench,简称MyEclipse)是对EclipseIDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布,以及应用程序服务器的整合方面极大地提高了工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML、Struts、JSF、CSS。JavaScript、SQL、Hibernate。本系统利用现在JAVAEE开发的主流工具MyEclipse进行开发,它不仅是一个开源软件,而且是一个基于Java的可扩展开发平台。MyEclipse的功能十分强大,支持也十分广泛,尤其是对各种开元产品的支持十分不错。

数据库

MySQL是最受欢迎的开源SQL数据库管理系统,它由MySQLAB开发、发布和支持。它是一个快速的、多线程、多用户和健壮的SQL数据库服务器,服务器支持关键任务、重负载生产系统的使用,也可以将它嵌入到一个大配置(mass-deployed)的软件中去,一个数据库是一个结构化的数据集合,如果要添加、访问和处理存储在一个计算机数据库中的数据,就需要一个像MySQL这样的数据库管理系统。从计算机可以很好的处理大量的数据以来,数据库管理系统就在计算机处理中和独立应用程序或其他部分应用程序一样扮演着一个重要的角色。MySQL服务器就是这样一个快的、可靠的和易于使用的数据库服务器,它的连接性、速度和安全性使MySQL非常适合访问在Internet上的数据库。

Web服务器

Tomcat不仅仅是一个Servlet容器,它也具有传统的Web服务器的功能:处理Html页面。基于Tomcat的开发其实主要是Jsp和Servlet的开发,开发Jsp和Servlet非常简单,可以用普通的文本编辑器或者IDE,然后将其打包成WAR即可,和传统的桌面应用程式不同,Tomcat中的应用程式是个WAR(WebArchive)文件,WAR是Sun提出的一种Web应用程式格式,和JAR类似,也是许多文件的一个压缩包。这个包中的文件按一定目录结构来组织:通常其根目录下包含有Html和Jsp文件或包含这两种文件的目录,另外还会有一个WEB-INF目录,这个目录非常重要。通常在WEB-INF目录下有一个web.xml文件和一个classes目录,web.xml是这个应用的设置文件,而classes目录下则包含编译好的Servlet类和Jsp或Servlet所依赖的其他类(如JavaBean)。通常这些所依赖的类也能打包成JAR放到WEB-INF下的lib目录下进行统一管理。在Tomcat4以后的高级版本中可以利用Servlet2.3提供的事件监听器功能,来对系统的应用或者Session实行监听。Tomcat也提供其它的一些特征,如与SSL集成到一块,实现安全传输。还有Tomcat也提供JNDI支持,这与那些J2EE应用服务器提供的是一致的。

开发语言

Java是一种跨平台,适合于分布式计算环境的面向对象编程语言。具体来说,它具有如下特性:面向对象、多态性、分布式、可靠、安全、多线程等如下:

面向对象:面向对象其实是现实世界模型的自然延伸。现实世界中任何实体都可以看作是对象。对象之间通过消息相互作用。另外,现实世界中任何实体都可归属于某类事物,任何对象都是某一类事物的实例。如果说传统的过程式编程语言是以过程为中心以算法为驱动的话,面向对象的编程语言则是以对象为中心以消息为驱动。用公式表示,过程式编程语言为:程序=算法+数据;面向对象编程语言为:程序=对象+消息。

所有面向对象编程语言都支持三个概念:封装、多态性和继承,Java也不例外。现实世界中的对象均有属性和行为,映射到计算机程序上,属性则表示对象的数据,行为表示对象的方法(其作用是处理数据或同外界交互)。所谓封装,就是用一个自主式框架把对象的数据和方法联在一起形成一个整体。可以说,对象是支持封装的手段,是封装的基本单位。Java语言的封装性较强,因为Java无全程变量,无主函数,在Java中绝大部分成员是对象,只有简单的数字类型、字符类型和布尔类型除外。而对于这些类型,Java也提供了相应的对象类型以便与其他对象交互操作。

多态性:就是多种表现形式,具体来说,可以用“一个对外接口,多个内在实现方法”表示。举一个例子,计算机中的堆栈可以存储各种格式的数据,包括整型,浮点或字符。不管存储的是何种数据,堆栈的算法实现是一样的。针对不同的数据类型,编程人员不必手工选择,只需使用统一接口名,系统可自动选择。运算符重载(operatoroverload)一直被认为是一种优秀的多态机制体现,但由于考虑到它会使程序变得难以理解,所以Java最后还是把它取消了。继承是指一个对象直接使用另一对象的属性和方法。事实上,我们遇到的很多实体都有继承的含义。例如,若把汽车看成一个实体,它可以分成多个子实体,如:卡车、公共汽车等。这些子实体都具有汽车的特性,因此,汽车是它们的“父亲”,而这些子实体则是汽车的“孩子”。Java提供给用户一系列类(class),Java的类有层次结构,子类可以继承父类的属性和方法。与另外一些面向对象编程语言不同,Java只支持单一继承。

平台无关性:Java是平台无关的语言是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。平台无关有两种:源代码级和目标代码级。C和C++具有一定程度的源代码级平台无关,表明用C或C++写的应用程序不用修改只需重新编译就可以在不同平台上运行。Java主要靠Java虚拟机(JVM)在目标码级实现平台无关性。JVM是一种抽象机器,它附着在具体操作系统之上,本身具有一套虚机器指令,并有自己的栈、寄存器组等。但JVM通常是在软件上而不是在硬件上实现。(目前,SUN系统公司已经设计实现了Java芯片,主要使用在网络计算机NC上。另外,Java芯片的出现也会使Java更容易嵌入到家用电器中。)JVM是Java平台无关的基础,在JVM上,有一个Java解释器用来解释Java编译器编译后的程序。Java编程人员在编写完软件后,通过Java编译器将Java源程序编译为JVM的字节代码。任何一台机器只要配备了Java解释器,就可以运行这个程序,而不管这种字节码是在何种平台上生成的。另外,Java采用的是基于IEEE标准的数据类型。通过JVM保证数据类型的一致性,也确保了Java的平台无关性。Java的平台无关性具有深远意义。首先,它使得编程人员所梦寐以求的事情(开发一次软件在任意平台上运行)变成事实,这将大大加快和促进软件产品的开发。其次Java的平台无关性正好迎合了“网络计算机”思想。如果大量常用的应用软件(如字处理软件等)都用Java重新编写,并且放在某个Internet服务器上,那么具有NC的用户将不需要占用大量空间安装软件,他们只需要一个Java解释器,每当需要使用某种应用软件时,下载该软件的字节代码即可,运行结果也可以发回服务器。目前,已有数家公司开始使用这种新型的计算模式构筑自己的企业信息系统。

分布式:分布式包括数据分布和操作分布。数据分布是指数据可以分散在网络的不同主机上,操作分布是指把一个计算分散在不同主机上处理。Java支持WWW客户机/服务器计算模式,因此,它支持这两种分布性。对于前者,Java提供了一个叫做URL的对象,利用这个对象,你可以打开并访问具有相同URL地址上的对象,访问方式与访问本地文件系统相同。对于后者,Java的applet小程序可以从服务器下载到客户端,即部分计算在客户端进行,提高系统执行效率。Java提供了一整套网络类库,开发人员可以利用类库进行网络程序设计,方便得实现Java的分布式特性。

可靠性和安全性:Java最初设计目的是应用于电子类消费产品,因此要求较高的可靠性。Java虽然源于C++,但它消除了许多C++不可靠因素,可以防止许多编程错误。首先,Java是强类型的语言,要求显式的方法声明,这保证了编译器可以发现方法调用错误,保证程序更加可靠;其次,Java不支持指针,这杜绝了内存的非法访问;第三,Java的自动单元收集防止了内存丢失等动态内存分配导致的问题;第四,Java解释器运行时实施检查,可以发现数组和字符串访问的越界,最后,Java提供了异常处理机制,程序员可以把一组错误代码放在一个地方,这样可以简化错误处理任务便于恢复。

由于Java主要用于网络应用程序开发,因此对安全性有较高的要求。如果没有安全保证,用户从网络下载程序执行就非常危险。Java通过自己的安全机制防止了病毒程序的产生和下载程序对本地系统的威胁破坏。当Java字节码进入解释器时,首先必须经过字节码校验器的检查,然后,Java解释器将决定程序中类的内存布局,随后,类装载器负责把来自网络的类装载到单独的内存区域,避免应用程序之间相互干扰破坏。最后,客户端用户还可以限制从网络上装载的类只能访问某些文件系统。上述几种机制结合起来,使得Java成为安全的编程语言。

多线程:线程是操作系统的一种新概念,它又被称作轻量进程,是比传统进程更小的可并发执行的单位。C和C++采用单线程体系结构,而Java却提供了多线程支持。Java在两方面支持多线程。一方面,Java环境本身就是多线程的。若干个系统线程运行负责必要的无用单元回收,系统维护等系统级操作;另一方面,Java语言内置多线程控制,可以大大简化多线程应用程序开发。Java提供了一个类Thread,由它负责启动运行,终止线程,并可检查线程状态。Java的线程还包括一组同步原语。这些原语负责对线程实行并发控制。利用Java的多线程编程接口,开发人员可以方便得写出支持多线程的应用程序,提高程序执行效率。必须注意地是,Java的多线程支持在一定程度上受运行时支持平台的限制。例如,如果操作系统本身不支持多线程,Java的多线程特性可能就表现不出来。

客户端

客户端由于不涉及到系统的开发和维护等问题,因此可以不用安装过多的软件,只要能够实现对服务器端的访问就可以,一般来说普通PC机即可。

硬件环境

服务器端

服务器端的配置是有建立站点所需的硬件来决定的。在最低配置下,服务器虽然能正常工作,但其性能往往不尽如人意,如果我们想使服务器工作的更好的话,我们需要更好的配置,特别是服务器的内存应该大于2G,下面为服务器的最低配置:

处理器:双核2.1GHz

内存:2GB

显卡:SVGA显示适配器

光驱:安装系统及相关软件

网卡:PCI和ISA接口均可

客户端

客户端主要用于浏览系统界面、同web数据库进行数据交互等基本操作,因此客户端对硬件要求不高,主要由所安装的Windows的要求来决定。但若期望性能更好,需要的配置应该高于以下配置:

处理器:双核2.1GHz

内存:2GB

硬盘:320G

显卡:SVGA显示适配器

网卡:PCI和ISA接口均可

系统结构可行性分析

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架构管理软件更是方便、快捷、高效。

B/S模式的优点

维护和升级方式简单

目前,软件系统的改进和升级越来越频繁,B/S架构的产品明显体现着更为方便的特性。对一个稍微大一点的单位来说,系统管理员如果需要在几百甚至上千部电脑之间来回奔跑,效率和工作量是可想而知的,但B/S架构的软件只需要管理服务器就行了,所有的客户端只是浏览器,根本不需要做任何的维护。无论用户的规模有多大,有多少分支机构都不会增加任何维护升级的工作量,所有的操作只需要针对服务器进行就可以;如果是异地,只需要把服务器连接专网即可,实现远程维护、升级和共享。所以客户机越来越“瘦”,而服务器越来越“胖”是将来信息化发展的主流方向。今后,软件升级和维护会越来越容易,而使用起来会越来越简单,这对用户人力、物力、时间、费用的节省是显而易见的惊人。因此,维护和升级革命的方式是“瘦”客户机,“胖”服务器。

成本降低,选择更多

大家都知道windows操作系统在平常应用上几乎一统天下,浏览器成为了标准配置,但在服务器操作系统上windows并不是处于绝对的统治地位。现在的趋势是凡使用B/S架构的应用管理软件,只需安装在Linux服务器上即可,而且安全性高。所以服务器操作系统的选择是很多的,不管选用哪种操作系统都可以让大部分人使用windows作为桌面操作系统,电脑不受影响,这就使得最流行免费的Linux操作系统快速发展起来,Linux除了操作系统是免费的以外,连数据库也是免费的,这种选择非常盛行。

比如说很多人每天上“网易”网,只要安装了浏览器就可以了,并不需要了解“网易”的服务器用的是什么操作系统,而事实上大部分网站确实没有使用windows操作系统,但用户的电脑本身安装的大部分是windows操作系统。

本章小结

本章节首先对项目所要实现的功能进行分析,应主要包含对资产的录入、销毁、维修、借入借出和多功能查询,和对相关工作人员的管理和权限的分配。然后介绍一下本系统所涉及到的技术知识,及对系统所需要的软硬件环境进行说明。最后阐述为何会选择B/S结构和诸多好处。

关键技术

开发架构

软件开发架构的意义

对于已经习惯了使用传统的JSP设计方式实现动态网站的程序员,在刚开始接触Struts时经常会出现一种困惑:专业书籍和文章中总是使用StrutsFramework这种说法,Struts通常也被称为是一种Web应用开发的架构(Framework),那么到底什么是架构,软件开发架构的意义又是什么呢?

如果将早期的软件开发方式比喻为传统手工业生产方式的话,那么基于软件开发架构的开发方式则是大型现代化工厂生产方式的体现。虽然二者都能够制作出产品,但是在生产效率及产品质量的保证上显然会有巨大的差异。

汽车生产厂家在制造一辆汽车时,总是先在各条生产线上制作出不同类型的零件,最终再由专业的技师在专业的组装生产线上将成百上千的零件组装成一台完整的汽车,显然,设计者的主要精力并不是用于重复地制造相同的车轮,相同的方向盘,而是利用现成的车轮组装出一辆辆不同的汽车。同样,开发人员也可以利用软件架构中提供的组建库(如同已经生产好的规范化的汽车核心零部件库),按照既定的组装方式将不同的组建应用在软件产品的各个环节,最终开发出一个完整的,高质量的软件产品。

实际上,如果需要,汽车设计者也可以将原有的车轮进行改造,例如涂上不同的颜色,贴上不同的装饰物等。同理,软件开发人员可以在现有组件的基础上进行扩展和改进,这实际上充分地实现了软件开发的可扩展性。

组件复用是面向对象编程思想的结晶,而在软件架构的基础上进行开发可以最大限度地实现组件的复用。在大型、多层结构的软件开发项目中,开发和使用具有可重用性,可扩展性,经过良好测试的软件组织,可以使开发者从大量繁琐的代码工作中解脱出来,专注于软件设计和业务逻辑的实现。通常将被验证为有效的,相同类型问题的解决方案进行抽象,即可提取形成一个应用程序框架,即Framework。每一种Framework都有自己的一套明确的实现机制,通常在Framework结构中都会包含一个“命令和控制”组件(“commandandcontrol”component),类似于工业生产中的“控制中心”,开发人员通过它可以很容易地控制、扩充和实现该Framework上的开发结构。

Struts架构简介

随着Web开发技术的日益成熟,在Web开发领域中出现了许多设计好的软件开发框架,Struts就是一种基于MVC经典设计模式的框架,也是当前Web开发中比较成熟的一种框架。

经典的MVC模式

MVC(Model-View-Controller)模式,即模型-视图-控制器模式,其核心思想是将整个程序代码分成相对独立而又能协同工作的3个组成部分。

(1)模型(Model):业务逻辑层。实现具体的业务逻辑,状态管理的功能。

(2)视图(View):表示层。即与用户实现交互的界面,通常实现数据输入和输出功能。

(3)控制器(Controller):控制层。起到控制整个业务流程(FlowControl)的作用,实现View和Model部分的协同工作。

MVC设计模式可以针对需要为同样的数据提供多个不同视图的应用程序,例如:公司产品数据库中同样的产品信息数据,但需要根据用户的不同需求在页面中显示其所需的不同产品信息。

MVC设计模式中,事件一般是指客户端Web浏览器提交的各种不同请求,这些请求由控制器进行处理,控制器根据事件的类型来改变模型或各个视图,视图也可以接受模型发出的数据更新的通知,依据数据更新的结果调整视图效果,呈现在用户面前。而模型也可以通过视图所获得的用户提交的数据进行具体业务逻辑的处理。

显然这样的运行机制可以起到分工明确,职责清晰,各尽所长的效果。而在软件开发的过程中,这样的开发方式无疑可以有效地区分不同的开发者,尽可能减少彼此之间的互相影响。充分发挥每个开发者的特长。这在开发大型复杂的Web项目时体现得尤为突出。如图3-1所示。































图3-1MVC设计模式的结构

Struts1.2开发框架

作为基于MVC设计模式的Web应用的一种典型体现,Struts架构实际上是建立在Model2基础上的,对Model,View和Controller都提供了现成的实现组建。

Controller控制器部分

Struts中的Controller控制器部分是通过专门的Servlet来实现的,该Servlet是一个StrutsAPI中提供的ActionServlet类型的实例,ActionServlet类继承了javax.servlet.http.HttpServlet类,因此该类的实例可以和普通的Servlet一样工作,其作用是接收客户端浏览器的请求,然后选择执行相应的业务逻辑,再把响应结果送回到客户端。

Action对象是开发者定义的类(该类必须是StrutsAPI中提供的Action类的子类)的实例。在继承该类的过程中开发者可以加入具体业务逻辑或调用业务逻辑模块。Action对象在进行了业务逻辑或调用业务逻辑模块。Action对象在进行了业务逻辑的处理以后会将应用程序流程转到合适的View组件,最终将响应送回浏览器客户端。Struts中提倡Action对象只用来决定“做什么”,相当于一个低层面的控制器,因此也可以将Action归纳为Controller的组成部分。

Model模型部分

MVC系统中的Model模型部分从概念上可以分为两类:系统的内部状态和改变系统状态的动作。Struts中的Model部分一般由JavaBean以及EJB组成。在Struts架构中使用JavaBean来提供具体的业务逻辑,即“怎么做”,对于复杂的系统也可以使用EJB等组件来实现系统状态维护。这种业务逻辑的细分可以增强代码的可重用性。

View视图部分

Struts中的View视图部分依然可以采用JSP来实现.此外,Struts还提供了丰富的自定义标签库,View部分使用这些自定义标签同样可以实现与Model部分的有效交互并能够增强显示功能。

Struts开发环境安装

在Tomcat安装完成后,即可将Struts框架工具安装到对应的WEBContainer中。可以通过Struts的二进制发布包安装Struts框架,具体操作步骤:

(1)下载二进制发布版;

(2)将下载的Struts二进制发布包进行解包,将解包目录下的lib目录下的所有.jar文件全部复制到项目目录的WEB-INF/lib下,如果在多个项目中都用到了Struts,则将上述文件直接复制到Tomcat目录下的common/lib下;

(3)将对应的lib目录下的struts.jar文件添加到环境变量CLASSPATH中即可。以上资源可以从http://jakarta.apache.org/struts/userGuide/index.html获得更多关于Struts安装和相关配置的说明信息。

数据持久层

数据是软件系统中不可缺少的环节,数据持久化的解决之道也一直是企业计算标准中最有影响力的部分。如今关系型数据库已经稳定地占据着主要的数据库市场,XML技术和XML数据库技术也日渐成熟。

J2EE的三层结构是指表示层(Presentation),业务逻辑层(BusinessLogic)以及基础架构层(Infrastructure),这样的划分非常经典,但是在实际的项目开发法中,开发者通常对三层结构进行扩展来满足一些项目的具体要求,一个最常用的扩展就是将三层体系扩展为五层体系,即表示层(Presentation),控制/中介层(Controller/Mediator)、领域层(Domain),数据持久层(DataPersistence)和数据源层(DataSource)。它其实是在三层架构中增加了两个中间层。控制/中介层位于表示层和领域层之间,数据持久层位于领域层和基础架构层之间。由于对象范例和关系范例这两大领域之间存在“阻抗不匹配”,所以把数据持久层单独作为J2EE体系的一个层提出来的原因就是能够在对象-关系数据库之间提供一个成功的企业级映射解决方案尽最大可能弥补这两种范例之间的差异。

持久层主流方案

数据是我们软件开发人员必须考虑的对象。无论你使用哪种技术,借助哪种工具,以及购买哪种软件平台产品,当接受一个实际的问题时,你都需要面对实际的数据,考虑实际数据的各种问题。在这些问题中往往都包含数据持久化的问题,这不仅是因为我们的计算机内存有限,更主要的原是业务逻辑的需要,作为一个接触软件技术,尝试写程序的人,我们要接触各种类型的数据。下面列举了三种常见的数据类型:

随机数据

这种数据指的是不确定结构,不了解数量,目前也搞不清关系的数据。它听起来很奇怪,但在实际的程序设计中十分常见。例如:从一个震动源传递到计算机采集卡的数据,再比如一个自然物生长过程中的数据。可能有些数据实际上是很有规律的,但是在设计程序时由于对它的了解很少,使它对于我们来说也成了随机的数据了。我曾经在遇到这种搞不大清楚的数据时,使用很大的数组或者多个链表来表述,不管下一个数据的值是什么,先存储起来再说。有时候当遇到的数据总也摸不到规律,或者越来越多,内存也容纳不下时,就找个文件存放起来,后来发现其实存入文件的方式很不错,起码可以一直继续下去。也许这就是最佳的持久化策略了。

属性数据

在接触具体的项目开发任务时,更多的时候要接触到属性类型的数据,这些数据来源于对象的属性,当然这些属性之间还存在关系,对于此类数据,似乎最好的持久化方法就是利用关系型数据库表了,在存入数据表的过程中还可以借助Hibernate来提高开发的效率,或者直接使用JDBC来传递SQL语句。这两种方法有些相似但还有细微的差别。

XML数据

现在很多网络上的应用程序都使用XML类型的数据,或者说是一种树状的数据,如何将这两种数据持久化保存下来呢?一种方法是将XML数据拆分为属性数据,然后存储到关系型数据库中。另一种方式比较新,是将XML数据存储到XML数据库中,在XML数据库中存储这种数据时,数据的结构不变,XML数据在XML数据库中以文档对象形式保存,使用XPaht和XQuery查询语言来查询XML数据中的节点数据,或者多个XML文档中的多个节点数据。

持久层主流方案

JDBC

许多开发者用JDBC进行数据库程序的开发。此中方式很多情况下都使用DAO模式,采用SQL进行查询。虽然用此方式可以使应用程序代码与具体的数据库厂商和数据库位置无关,不过JDBC是低级别的数据库访问方式,JDBC并不支持面向对象的数据库表示。JDBC数据库表示完全围绕关系数据库模型。在大型应用程序的DAO中书写这样的代码,维护量是非常大的。

EJB

在J2EE的规范中,为EJB定义了两种持久化的解决方案:一种是BMP,另一种是CMP。其中CMP不需要将SQL语句加入到代码中。目前,在采用J2EE的应用中,EJBCMP方式得到了广泛应用。更加引人注意的是,随着EJB规范的发展,CMP也包含了一些高级关系的内容。但是,CMP的使用比较复杂,对很多开发人员来说比较难以掌握。而且,不是在所有的情况下都适合在系统中采用EJB,而且想要非常清楚的了解EJB规范也是非常费时的。在用EJB编码前,先要让专家理解API,然后需要了解每一个容器部署时所要关注的技术。此外,许多情况下商用容器的性能和支持也不是很好。

JDO

JDO是一个存储java对象的规范,JDO规范1.0的提出可以使你将精力集中在设计Java对象模型,然后在企业应用软件架构的不同层面中存储传统的Java对象(PlainOldJavaObjects,简称POJOs),采用JDOQL语言进行SQL操作。一些公司(包括sun)企图根据JDO规范进行设计并实现JDO产品,然而他们都不能很好的进行实现,并且性能优化上比较差。

持久化技术

一直以来,在Java开发领域中基于数据库应用的设计实现一直是面向关系的,也就是说与数据库相关的处理过程并没有实现真正的面向对象。如何在数据存取的操作中实现真正的面向对象,一直是开发人员探索的问题。正在使用中的对象序列化技术,EJB中EntityBean技术等,都是在这方面很好的探索。但是实体Bean设计实现过程中的繁琐和复杂,使得许多开发人员望而却步。

而Hibernate的出现,提供了一个符合Java面向对象编程思想,易于使用的数据库持久化解决方案。因此,在目前行业的Java数据库应用项目中,有越来越多的开发人员开始尝试使用Hibernate在数据库外面包裹上一层面向对象的外衣,从而将开发人员从繁琐、重复、技术含量不高的数据库编程中结果出来。

Hibernate概述:

Hibernate在英文中的意思是“冬眠”,从这个角度也可以体会到Hibernate架构下提供的相关技术可以实现对十角状态的持久性保存。在传统的数据库编程中,开发人员要面对大量重复行代码的编写,以实现对不同数据表中的数据的获取,并将获取到的记录数据封装成对象,在处理完成之后,如果需要进行对象状态的存取,需要将对象中的数据拆卸成数据库记录中的对应字段的值,然后向数据库中进行存取。

这种工作方式显然没有实现真正意义上的数据存取阶段的面向对象。虽然数据存取过程中的工作步骤是基本固定的,但是由于操作的数据表中字段列表数据的不同,使得开发人员必须要不厌其烦地书写与相应的实体类对应的封装处理过程。

而在Hibernate中,类似这种重复性高,工作量大,但是又必须保证高质量完成的体力活,全部由Hibernate接管过去。这对广大的Java开发人员无疑是个非常好的消息。

Hibernate本质上是一个面向Java开发环境的对象/关系数据库映射工具。在Hibernate之前,开发人员要将面向对象的软件和关系数据库结合在一起,往往会费长麻烦。而借助Hibernate对象/关系数据库映射技术,可以非常轻松地将以面向对象思想封装的对像的各个状态数据映射到基于SQL的关系模型数据结构中去。如图3-2所示。























图3-2Hibernate工作示意图

本章小结

本章节阐述了Struts框架有何优点,并将MVC模式以图形加文字的双重方式进行介绍,充分展现其好处,引出固定资产管理系统选取Struts1.2为开发框架,采用经典的MVC模式对项目进行整体的分层,让项目层次分明、代码规范。再由框架引出数据库同样是系统中不可分割的一部分,然后提出通过Hibernate的映射文件简化对数据库的操作,从而达到更好的面向对象进行开发。

总体设计

系统设计是在系统分析的基础上由抽象到具体的过程。主要目标是将系统分析阶段所提出的反映了信息需求的系统逻辑方案转换成可以实施的基于计算机与通信系统的物理(技术)方案,为下一阶段系统实施提供必要的技术资料,应符合系统性、灵活性、可靠性、经济性的要求。根据系统分析阶段能确定新系统的逻辑模型、功能要求,在可实现的环境下设计出一个能在计算机网络环境上实施的方案,即建立新系统的物理模型。本阶段的任务是设计软件系统的模型层次结构,设计数据库的结构以及涉及模块的控制流程,其目的是明确系统具体怎么实现。这个阶段又分为两个步骤:概要设计和详细设计。概要设计解决软件系统的模块划分和模块的层次机构以及数据库设计;详细设计解决每个模块的控制流程,内部算法和数据结构的设计。根据种种分析设计在逐步实现各个功能,完成一个完整的固定资产管理系统。

总体设计

本系统对固定资产进行标识,实现了固定资产生命周期和使用状态的全程跟踪。标识后的资产在进行清查和巡检时依靠设备编号从而达到:方便、快捷、准确的定位资产,保证了信息流和资产实物流的对应。利用计算机支持不同的团体机构完成固定资产管理的事物,由计算机来代替人工执行一系列的诸如增加新的资产信息、变更资产信息、删除资产信息、查询、修改等操作。这样使办公室人员可以轻松快捷地完成固定资产管理的任务,使企业的员工管理资产能够系统化、规范化、半自动化,从而有效地解决了企业固定资产的管理难题,使企业更轻松、更有效地管理固定资产。总体设计如图4-1所示。

图4-1系统功能模块图

本系统主要分为四大模块:

资产管理模块:根据不同资产的唯一编号对资产进行购入、销毁、修改属性和多种组合条件的查询操作等,里面包括相应的逻辑验证及提示。对资产维护的增加维修设备、删除已经维修好的信息、查询操作;支持对固定资产库存报表的多种格式打印。

用户管理模块:可直接添加员工成为用户并为其分配不同的权限,管理员权限是本系统最大的权限,可以对所有的设备和人员进行维护、查询等操作。操作员不拥有分配权限的功能,可以完成除了此模块之外的所有功能,如:首先,可对资产进行录入、所有资产不同方式的查询、销毁某些设备、修改设备属性信息及对设备进行借出归还状态的跟踪和更改,及时更新设备的所处状态和库存设备的全部信息等。其次可对员工进行的增加、删除、修改信息和查询等相应的维护,可以将库存设备信息根据不同需求打印出来。

员工管理:支持对学校的教工信息的维护,包括新增员工、删除员工、修改员工所处状态和对员工进行明细查询等。

系统管理:修改登陆用户的登录密码及安全退出系统,保证系统的正常运行。

数据库设计

数据库的需求分析

依据项目的处理需求,对应数据表的设计及功能如下:

资产信息表:主要用于保存入库的资产信息。

资产设备的借出归还表:主要用于保存借出设备的信息。

资产设备维修信息表:主要用于保存维修资产的信息。

管理资产信息的用户表:主要用于保存系统管理员的信息。

公司员工其本信息表:主要用于保存公司员工的基本信息。

部门表:主要用于保存部门信息。

数据库表的具体设计

首先从用户的业务数据出发,设计出一张大表,然后对其进行优化。业务分析一定要具体,对于出现的每一张单据和报表都要分析清楚,看哪些字段会用来作为查询字段,然后为这些字段建立数字型的代码,如果字段本身就是数字型的可不予考虑。仔细分析业务数据,从优化查询的角度把业务数据的大表分割开,确保数据正确分布到相应的数据库表中,每个字段都代表此表的特性。本系统首先就从固定资产的实际出发,以资产表为主表,扩充出资产修为表、借出归还表和员工表,员工表属于部门表,员工升级成为用户,产生用户表。然后根据实际需求并考虑系统的后期扩展和健全性填充各个表的字段,以便完成资产管理的操作。

各个数据表如下:

设备借出归还表是由资产表和员工表根据实际需求衍生出来的一张业务表,此表用于保存某位员工于某个时间借出了某个编号的资产借,并打算在什么时间归还及实际的归还时间的全部信息,使得用户对资产的管理更加方便简单。表结构如表4-1资产设备借出归还表。

表4-1资产设备借出归还表

字段名 数据类型 长度 是否主键 描述 inout_no int 10 是 借用流水号 ic_id varchar 30 资产编号 comployee_no varchar 30 员工编号 out_time varchar 20 借出时间 should_time varchar 20 应还时间 back_time varchar 20 归还时间 用户表是依附于员工表而存在的一张管理员表,此表中根据competence字段区分管理员及操作员两种权限,管理员具有最高权限,操作员可对资产进行全方位的管理和信息查询。表结构如表4-2用户表。

表4-2用户表

字段名 数据类型 长度 是否主键 描述 userName varchar 30 是 用户名 pwd varchar 20 密码 comployee_no varchar 30 员工编号 competence varchar 15 权限 员工信息表是跟资产基本表密切相关的一张相关操作表,员工编号为唯一主键,能够标识员工身份。每一次对资产的操作都应该落实到具体的员工头上,让所有的操作都可查,使业务更加清晰,方便应用。表结构如表4-3员工信息表。

表4-3员工信息表

字段名 数据类型 长度 是否主键 描述 comployee_no varchar 30 是 员工编号 comployee_name varchar 25 员工姓名 sex varchar 5 性别 age int 10 年龄 dept varchar 45 部门 profession varchar 20 现任职务 address varchar 60 家庭地址 phone varchar 20 联系方式 comployee_statu varchar 10 员工状态 设备借出归还表是由资产表和员工表根据实际需求衍生出来的一张业务表,此表用于保存某位员工于某个时间借出了某个编号的资产借,并打算在什么时间归还及实际的归还时间的全部信息,使得用户对资产的管理更加方便简单。表结构如表4-4资产设备借出归还表。

表4-4资产设备借出归还表

字段名 数据类型 长度 是否主键 描述 inout_no int 10 是 借用流水号 ic_id varchar 30 资产编号 comployee_no varchar 30 员工编号 out_time varchar 20 借出时间 should_time varchar 20 应还时间 back_time varchar 20 归还时间 部门表的存在是专门为了方便使用单而存在的表,其主要用于区分不同部门而方便操作,每个员工都有一个字段叫做dept,使得不同部门的人员,进行不同的归拢,方便管理。具体表结构如表4-5部门表。

表4-5部门表

字段名 数据类型 长度 是否主键 描述 dept varchar 45 是 部门名称 资产设备维修信息表也是由资产基本表衍生出来的一张业务表,它用于管理哪些设备因为何种原因而需要维修,其中有由谁送去维修并经过谁手而修,维修流水号应该为唯一主键,包含所有的维修相关信息。表结构如表4-6资产设备维修信息表。

表4-6资产设备维修信息表

字段名 数据类型 长度 是否主键 描述 repair_no int 10 是 维修流水号 zc_id varchar 30 资产编号 send_time varchar 30 送修时间 sender varchar 50 送修人 Login_user varchar 50 经手人 reason varchar 50 送修原因 wx_time varchar 30 维修时间 wx_result varchar 45 维修结果 cost float 30 花费金额 wx_comment varchar 45 维修备注 详细设计

功能设计

本系统主要用于高校中的“资产”进行管理。具体地讲,固定资产管理系统就是通过资产的增加、删除、查看、借出、归还、维修等一系列手段来提高效率,最终达到发展目标的一种管理行为。总体来说就是解决固定资产管理中经常出现的实物与财务账目不符的情况,以实物管理为特点,以简化为目的,实现信息流和实物流的统一,并且提高工作效率减轻工作负担。本系统中各种功能操作都非常简单方便,操作员无须专门的培训就可以使用,大大的减少了误操作的几率。具体实现目标如下:

系统用户管理功能

当前登陆的用户可根据个人需要对自己的登陆密码进行修改。系统用户即管理员可对系统中的资产进行管理,可以对资产进行录入、资产查询、资产销毁、资产信息修改、资产借用等相关操作。用户是本系统中最大权限所有者,可以给任意员工分配权限使其成为新的用户,用户可以根据实际需求增加新的员工、修改员工的状态、修改员工的相关信息,亦可根据员工唯一ID对员工进行查询和删除。

员工信息管理功能

员工是本系统中的一个模块,主要和资产的归还、借出、维修等实物资产的流向状态进行绑定,使每一次对资产的操作都能落实到具体的人头上,让资产管理透明可查。

资产入库管理功能

资产入库功能由用户进行管理,用户有权限进行增、减、改、查操作。

资产维护管理功能

对于资产的管理必定涉及到资产的状态如:维修、报废、借出、正常,这些功能都是根据实际需要进行实现,保证了资产的不明流向和总体管理。

打印报表

针对资产清单进行打印,可根据实际不同需求打印不同格式如:word、excel、pdf等

系统最大限度地实现了易安装性、易维护性和易操作性

本系统以tomcat为服务器,搭建服务器小而轻便,安装简单。用户可根据不同的需求自行对资产进行维护,并且不必经过专门的培训即可掌握本系统的使用,实现了简单易懂方便维护等特性。

系统运行稳定、安全可靠

系统经过严格的测试并实际运行无误,可以安全稳定上线运行;根据权限拦截器防止越过登陆对本系统进行操作,所以安全可靠,能保证正常的工作运转。

系统登陆

用户登录模块是用户进入主页面的入口,用户可根据自己的用户名和密码进行登录,若不符则给予相应提示,重置按钮可将当前所填的信息清空,登陆页面如图4-2所示。



图4-2用户登录

系统登陆是固定资产管理系统中最先使用的功能,因为用户登陆在数据库中使用的是用户表,人员表中有一个competence字段,是来标识用户权限的。在登陆时要根据数据库的这个字段来判断此用户是否具有管理员的权限。在网页里添写用户名和密码和验证码后点击【确定】按钮,网页通过action="login"进Struts配置文件中,代码如下:

这个html:form与loginForm相绑定,在struts配置文件中的代码如下:








type="org.springframework.web.struts.DelegatingActionProxy">







在这个配置文件中,可以了解到如下信息:

根据type="org.springframework.web.struts.DelegatingActionProxy"可以找到Spring配置文件中对应的具体Action类是class="com.jdy.gdzc.web.struts.action.LoginAction"。

根据可以了解,Action返回success时页面会被转到mainframe/framework.jsp文件,这就是登陆成功的页面。如果当Action返回fail时,页面会被转到index.jsp文件,这个文件是当用户登陆失败将要转到的页面。

Struts的Action的实现类是这个登陆页的核心内容,就来看看它是怎么实现的吧,如下所示:

importjavax.servlet.http.Cookie;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importjavax.servlet.http.HttpSession;

importorg.apache.struts.action.ActionForm;

importorg.apache.struts.action.ActionForward;

importorg.apache.struts.action.ActionMapping;

importcom.jdy.gdzc.web.struts.form.LoginForm;

publicclassLoginActionextendsBaseAction{

publicActionForwardexecute(ActionMappingmapping,ActionFormform,

HttpServletRequestrequest,HttpServletResponseresponse){

Stringerr="";

HttpSessionsession=(HttpSession)request.getSession();//获得图片上的验证码

StringrandCode=(String)session.getAttribute("code");

LoginFormlf=(LoginForm)form;

Stringusername=lf.getUsername();

Stringpassword=lf.getPassword();

if(lf.getCheckcode().equals(randCode)){

if(assetManagerImpl.login(username,password)){

//把登录成功的用户名,放在cookie中

Cookiec=newCookie("username",username);

c.setMaxAge(606024);

response.addCookie(c);

//登录成功,跳到显示所有课程的页面

Stringcompetence=userManaManagerImpl.competence(username);

session.setAttribute("username",username);

session.setAttribute("competence",competence);

returnmapping.findForward("success");

}else{

err="用户名或密码错误!";

}

}else{

err="验证码错误!";

}

request.setAttribute("gdzc.login.error",err);

returnmapping.findForward("fail");

}

}

Struts的Action实现类的execute()方法是最先被执行的,这个方法本身也没有具体的事务,而是根据action的参数不同执行相应的方法。在登陆页里面可以找到有一个“action=login”的字样,它的目的就是在这里做逻辑判断。当action=login时进入Action中执行execute()方法。execute()方法从LoginForm中得到用户提交的数据,然后在调用控制层中的login()方法,并将从LoginForm中得到的username,password做为参数传给控制层,调用后会返回一个boolean型的值。控制层再继续调用DAO层,DAO层得到从上层传进来的username,password并进行处理,调用后会返回一个boolean型的值并传给上层。如果为真则将username用户名放到session范围中,并返回“mapping.findForward("success")”,进入系统主页;否则返回“mapping.findForward("fail")”,将错误信息存到request范围中,跳到登陆界面并提示登陆错误信息:用户名或者密码错误、验证码错误。需要用户重新正确输入才能完成登录。接下来看一下DAO层是如何实现登陆:

importorg.hibernate.Query;

importorg.hibernate.Session;

importorg.hibernate.SessionFactory;

importcom.jdy.gdzc.dao.IUserDAO;

publicclassUserDAOImplimplementsIUserDAO{

privateSessionFactorysessionFactory;

publicvoidsetSessionFactory(SessionFactorysessionFactory){

this.sessionFactory=sessionFactory;

}

protectedSessiongetSession(){

returnsessionFactory.getCurrentSession();

}

publicbooleanlogin(StringuserName,Stringpassword){

booleanflag=false;

Sessionsession=this.getSession();

Stringhql="selectpwdfromUserInfowhereuserName=:userName";

try{

Queryquery=session.createQuery(hql);

query.setString("userName",userName);

Stringpwd=(String)query.setMaxResults(1).uniqueResult();

if(password.equals(pwd)){

flag=true;

}

}catch(Exceptione){

e.printStackTrace();

}

returnflag;

}

}

系统用户管理

系统用户管理:主要包括对系统用户的增加、系统用户的权限修改、系统用户的删除、分配系统用户的权限功能及对本身的登录密码做修改和对资产的相关维护,其中权限的分配分为操作员和管理员,操作员只能对除了用户管理之外的其他功能进行操作,而管理员是本系统中权限最大的,可以进行所有操作。当点击【用户管理】时出现用户管理界面如图4-3所示。



图4-3用户管理界面

当点击【用户管理】时,系统会通过Stuts框架,找到userManaAction.do从后台取出数据库中所有的员工信息,并将信息返回到界面显示出来,具体的表现代码实现如下:


onmouseover="this.style.color=''red''"

onMouseOut="this.style.color=''#1e7977''"onclick="window.location=''findUserbyname.do?username=${item.userName}''">


onmouseover="this.style.color=''red''"

onMouseOut="this.style.color=''#1e7977''"

onclick="if(confirm(''您确定要删除编号为${item.comployee.comployeeNo}的用户吗?''))

window.location=''deleteUserAction.do?userName=${item.userName}''">

在点击【添加用户】时,会出现添加用户界面如图4-4所示。



图4-4添加系统用户

在这个功能里可以增加新的用户并且为他分配相应的权限,用户必须是本系统中的员工,由当前用户通过添加系统用户功能,使其具有登陆系统的权限成为用户,但是这个权限分为管理员或者是操作员。按照提示输入完毕后点击【保存】按钮系统首先进行表单验证,若验证不通过给予相应的提示,如验证通过后,则获取表单数据,再将表单数据保存到后台数据库中,【返回】按钮会将用户带回用户管理界面,添加用户的具体代码如下:

publicActionForwardexecute(ActionMappingmapping,ActionFormform,

HttpServletRequestrequest,HttpServletResponseresponse)

throwsException{

AddUserFormauf=(AddUserForm)form;

UserInfouser=newUserInfo();

Comployeecom=newComployee();

user.setUserName(auf.getUserName());

user.setPwd(auf.getPassword());

user.setCompetence(auf.getCompetence());

Stringeno=auf.getComployeeNo();

com.setComployeeNo(eno);

user.setComployee(com);

if(!employeeManagerImpl.isEmployeebyno(eno)){

request.setAttribute("error","员工编号不存在");

returnmapping.findForward("fail");

}

if(userManaManagerImpl.insertUser(user)){

returnmapping.findForward("success");

}

else{returnmapping.findForward("fail");}

员工信息管理

员工信息管理:

主要包括对学校教工的增加、修改、删除、查询功能。

添加员工功能:

不同部门根据各自需求,可添加任意数量的员工,添加员工时首先给其建立一个唯一的标识员工编号,以后对资产的相关操作都与员工编号进行绑定,另外员工还有一个状态分为:在职、休假、离职三类。

修改员工信息功能:

当进入员工信息管理主页面后,系统默认查处员工的信息,并且每个员工后面都有【修改】和【删除】两个按钮,当点击【修改】按钮时,系统首先将本条信息带到修改页面,除了员工的唯一标识符员工编号之外都可更改,用户可根据需求对员工信息进行修改,然后点击【保存】保存。

删除员工信息功能:

点击【删除】按钮会弹出提示框“您确定要删除员工编号为的员工吗?”,点击【确定】即删除成功,点击【取消】则返回操作。

员工信息管理主页面如图4-5所示。



图4-5员工信息管理

查询员工信息的具体代码如下:

publicActionForwardexecute(ActionMappingmapping,ActionFormform,

HttpServletRequestrequest,HttpServletResponseresponse)

throwsException{

HttpSessionsession=request.getSession();//分页

intpageCount=10;//inttotalCount=0;//总记录数

intcurrrentPage=1;inttotalPage=0;

StringtempStr=request.getParameter("currentPage");

if(tempStr!=null){

currrentPage=Integer.parseInt(tempStr);

totalCount=employeeManagerImpl.showAllEmployee().size();

totalPage=(totalCount%pageCount==0)?(totalCount/pageCount)

:(totalCount/pageCount+1);

if(totalPage==0){totalPage=1;}

//修正当前页面编号,确保:1<=currrentPage<=totalPage

if(currrentPage>totalPage){currrentPage=totalPage;}

elseif(currrentPage<1){currrentPage=1;}

//计算当前页面所显示的第一个记录的索引

intpageStartRow=(currrentPage-1)pageCount;

Listlist=employeeManagerImpl.findPageEmployee(pageStartRow,pageCount);

request.setAttribute("totalCount",totalCount);

request.setAttribute("pageCount",pageCount);

session.setAttribute("countpage",totalPage);

request.setAttribute("pages",currrentPage);

request.setAttribute("list",list);

returnmapping.findForward("success");}

资产入库管理

资产入库管理:作为本系统两大主要模块之一的它主要包括对资产的录入、资产的属性修改、资产的报废删除、资产的属性查询功能。本功能根据实际资产管理需要完成,首先满足实时录入新的不同设备功能了,可由用户随意添加,然后可以根据不同的信息改变完成对设备信息的修改更新,若此设备已经不具备继续使用功能,则可由用户点击【删除】完成销毁操作,彻底删除设备信息。如图4-6所示。



图4-6资产入库管理

默认资产查询操作具体代码如下:

publicActionForwardexecute(ActionMappingmapping,ActionFormform,

HttpServletRequestrequest,HttpServletResponseresponse){

HttpSessionsession=request.getSession();//分页

intpageCount=10;inttotalCount=0;

intcurrrentPage=1;inttotalPage=0;

StringtempStr=request.getParameter("currentPage");

if(tempStr!=null){

currrentPage=Integer.parseInt(tempStr);}

totalCount=assetManagerImpl.showAllAssets().size();

totalPage=(totalCount%pageCount==0)?(totalCount/pageCount)

:(totalCount/pageCount+1);

if(totalPage==0){totalPage=1;}

//修正当前页面编号,确保:1<=currrentPage<=totalPage

if(currrentPage>totalPage){currrentPage=totalPage;}

elseif(currrentPage<1){currrentPage=1;}

intpageStartRow=(currrentPage-1)pageCount;

Listlist=assetManagerImpl.findPageAssets(pageStartRow,pageCount);

request.setAttribute("totalCount",totalCount);

request.setAttribute("pageCount",pageCount);

session.setAttribute("countpage",totalPage);

request.setAttribute("pages",currrentPage);

request.setAttribute("list",list);

returnmapping.findForward("success");

}

点击【添加资产】后出现如图4-7所示。



图4-7添加资产

此系统从前台获取数据,首先进行表单验证,若所填不符合逻辑则给予提示,如正确则将数据封装到javaBean中,将对像传到底层,最后保存到数据库中,实现资产的添加。【重置】和【返回】两个按钮可尽最大程度的满足用户需求,简化添加资产的操作。具体代码实现如下:

//添加资产

publicbooleanaddAssets(ZcInfozcinfo){

booleanflag=false;

Sessionsession=this.getSession();

try{

session.save(zcinfo);

flag=true;

}catch(Exceptione){

e.printStackTrace();

}

returnflag;

}

在点击【修改】后,出现界面如图4-8所示。

图4-8资产修改

修改主要是对当前行的数据进行修改,首先将相关信息带回到修改页面,然后再根据更改后的信息对数据库中的数据进行一次更新操作,具体代码如下:

//保存修改资产信息

publicvoidsaveUpdate(ZcInfozcinfo){

booleanflag=false;

Sessionsession=this.getSession();

try{

session.update(zcinfo);

flag=true;

}catch(Exceptione){

e.printStackTrace();}

}

若要对库存资产进行查询,可以选择菜单栏中的【资产查询】,出现界面如图4-9所示。



图4-9资产查询

查询主要是对库存的资产进行按条件查询,可以根据所输入的查询条件不同,进行不同条件的多种组合,然后点击【查询】,就会按条件索引数据。此功能大大方便了用户对资产管理的查询操作,只需要根据实际需求的不同,输入不同的查询条件进行查询操作,即可查询出相应的结果。具体代码如下:

publicListcheckZC(StringzcId,StringzcFactory,StringzcNo,

StringzcName,StringzcType,StringzcStatus,

StringzcBuyer){

Listlist=null;

Sessionsession=this.getSession();

Stringsql="fromZcInfowherezcId=:zcIdorzcNo=:zcNoorzcName=:zcNameorzcType=:zcTypeorzcStatus=:zcStatusorzcFactory=:zcFactoryorzcBuyer=:zcBuyer";

try{

Queryquery=session.createQuery(sql);

query.setString("zcId",zcId);

query.setString("zcNo",zcNo);

query.setString("zcName",zcName);

query.setString("zcType",zcType);

query.setString("zcStatus",zcStatus);

query.setString("zcBuyer",zcBuyer);

query.setString("zcFactory",zcFactory);

list=query.list();

}catch(Exceptione){

e.printStackTrace();

}

returnlist; }

资产维护管理

资产维护管理:是本系统的另一主要模块,主要包括对维护物资的送去维修、维护物资的信息修改即此物资是否维修完成及各种相关维护信息、维护物资的删除即是此物资以无须维护可通过删除维护信息后正常使用、当前用户可根据自身实际需求进行多种组合查询维护物资的信息。如图4-10所示。



图4-10资产维护管理

维修操作页面里的经手人一栏是有系统将当前登陆的用户名默认填上,并且不能修改,在这里当用户输入相应的维修信息后,点击【确定送修】后,系统会先进行表单验证,验证通过后会将表单的数据提交到后台数据库中,实现维修操作。具体的代码如下:

publicActionForwardexecute(ActionMappingmapping,ActionFormform,

HttpServletRequestrequest,HttpServletResponseresponse){

HttpSessionsession=request.getSession();//分页

intpageCount=10;//每页显示的记录数

inttotalCount=0;//总记录数

intcurrrentPage=1;//当前页面编号

inttotalPage=0;//页面总数

StringtempStr=request.getParameter("currentPage");

if(tempStr!=null){currrentPage=Integer.parseInt(tempStr); }

//计算总记录数

totalCount=assetPerManagerImpl.showAllPerAssets().size();

//计算总页数

totalPage=(totalCount%pageCount==0)?

(totalCount/pageCount)

:(totalCount/pageCount+1);

if(totalPage==0){totalPage=1; }

//修正当前页面编号,确保:1<=currrentPage<=totalPage

if(currrentPage>totalPage){currrentPage=totalPage;

}elseif(currrentPage<1){currrentPage=1; }

//计算当前页面所显示的第一个记录的索引

intpageStartRow=(currrentPage-1)pageCount;

Listlist=assetPerManagerImpl.findPagePerAssets(pageStartRow,pageCount);

request.setAttribute("totalCount",totalCount);

request.setAttribute("pageCount",pageCount);

session.setAttribute("countpage",totalPage);

request.setAttribute("pages",currrentPage);

request.setAttribute("list",list);

returnmapping.findForward("success");

}

资产借还管理

资产借出归还管理:此模块是根据固定资产管理的实际需求出发,以达到简化资产管理为目的的具体应用实现,是本系统的中心模块,也是资产管理的核心表现,作为本系统的另一主要模块,功能主要包括增加借出资产、查询借出资产、归还以借出的资产,用以实现对资产的初步管理,满足用户基本需求。

首先,用户可通过员工编号和设备编号查询是否有相关的借出信息,若有则查询出相应结果并显示,如若相关信息,则给予相关提示。

其次,用户可根据实际需求将某个编号的设备借给某个编号的员工,并自动将此借出信息保存到一张叫做借出归还的中间表中,用以储存借出与归还的信息,完成资产信息化,方便查询管理并且易于保存及信息交互。

最后,就是用户可以查询借出信息中的员工和设备的详细信息,也可将设备进行归还,删除掉借出信息,将设备中的状态字段通过实际需求变动改成符合实际的标示,这样就使得设备的实际所处状态一目了然,只要注意设备的状态字段,变可知道其是否处于正常应用状态或者是借出状态还是维修状态,极大地减轻了工作量,方便日后维护操作等相关的实际应用。如图4-11所示。



图4-11资产借还管理

具体的代码如下:

publicActionForwardexecute(ActionMappingmapping,ActionFormform,

HttpServletRequestrequest,HttpServletResponseresponse)

throwsException{

Stringmessage="";

HttpSessionsession=(HttpSession)request.getSession();

StringzcId=request.getParameter("zc_id");

StringcomployeeNo=request.getParameter("em_id");

Stringstatus=inOutAssetManagerImpl.zcStatus(zcId);

if(!employeeManagerImpl.isEmployeebyno(comployeeNo)){

message="此员工编号不存在!";

}elseif(status==null){

message="此物品不存在!";

}elseif(status.equals("维修")){

message="此物品正在维修,无法借出!请选择其他资产!";

}elseif(status.equals("报废")){

message="对不起,此物品已经报废!请选择其他资产!";

}elseif(status.equals("借出")){

message="对不起,此物品已经借出!请选择其他资产!";

}else{

returnmapping.findForward("success");

}

request.setAttribute("gdzc.status.message",message);

returnmapping.findForward("fail");

}

打印报表

报表管理功能:本功能用于明细统计资产,用户可根据自己的不同需求将资产进行打印输出,如word、excel、pdf等,打印内容包括资产的详细信息,及使用状态和购买人,使得资产管理不仅仅局限于电脑上,考虑用户需求以便资产管理。如图4-12所示。



图4-12打印报表

具体实现代码如下:

publicReportcreateReport(HttpServletRequestrequest)throwsException{

ArrayListlist=(ArrayList)request.getAttribute("list");

//实例化报表对象

Reportreport=newReport();

//在页眉中添加文本信息内容

report.addHeaderText("打印入库单");

//在报表的页眉添加一条横直线

report.addHeaderSeparator(1);

//在页尾添加一条横直线

report.addFooterSeparator(1);

//在页尾添加文本信息内容

report.addFooterText("第{P}页,共{N}页");

//在报表中添加文本信息内容

report.addText("入库单一览表:");

//在报表中添加换行符号

report.addBreak();

//在报表中添加表格

report.addTable(getTableA(list));

//在报表中添加换行符号

report.addBreak();

//在报表中添加文本信息内容

//report.addText("销售情况一览表(合并表格):");

//在报表中添加换行符号

//report.addBreak();

//在报表中添加表格

//report.addTable(getTableB());

//在报表中添加换行符号

//report.addBreak();

returnreport;

}

//------得到销售情况一览表对象------

publicTablegetTableA(ArrayListlist){

String[][]data=getData(list);

Tabletable=newTable(data);

table.setColBorder(0);

table.setRowBorder(0);

table.setRowBorder(0,1);

table.setRowBackground(0,newColor(128,0,0));

table.setRowForeground(0,Color.white);

for(inti=1;i<=list.size();i++){

if(i%2==0){

table.setRowBackground(i,newColor(188,224,222));

}

table.setRowForeground(i,Color.black);

}

returntable;

}

//------得到销售情况一览表(合并表格)对象------

publicTablegetTableB(){

String[][]data=getTotalData();

Tabletable=newTable(data);

table.setAlignment(Table.H_CENTER+Table.V_CENTER);

table.setColAutoSize(true);

table.setRowBackground(0,Color.LIGHT_GRAY);

table.setRowBackground(1,Color.LIGHT_GRAY);

table.setColBackground(0,Color.LIGHT_GRAY);

table.setRowBackground(7,newColor(255,255,128));

table.setHeaderRowCount(2);

table.setHeaderColCount(1);

table.setRowBorder(table.LINE_THIN);

table.setColBorder(table.LINE_THIN);

table.setCellSpan(0,0,newDimension(1,2));

table.setCellSpan(0,1,newDimension(2,1));

table.setCellSpan(0,3,newDimension(2,1));

table.setCellSpan(0,3,newDimension(2,1));

returntable;

}

//生成销售情况数据,实际工程中一般从数据库中获取

publicString[][]getData(ArrayListlist){

String[][]data=newString[list.size()+1][9];

data[0][0]="资产编号";data[0][1]="资产名称";data[0][2]="资产类型";

data[0][3]="供应商";data[0][4]="单价";

data[0][5]="出产日期";data[0][6]="购买日期";data[0][7]="购买者";data[0][8]="资产状态";

for(inti=1;i<=list.size();i++){

data[i][0]=list.get(i-1).getZcId();

data[i][1]=list.get(i-1).getZcName();

data[i][2]=list.get(i-1).getZcType();

data[i][3]=list.get(i-1).getZcFactory();

data[i][4]=list.get(i-1).getZcPrice()+"";

data[i][5]=list.get(i-1).getZcProduceTime();

data[i][6]=list.get(i-1).getZcBuyTime();

data[i][7]=list.get(i-1).getZcBuyer();

data[i][8]=list.get(i-1).getZcStatus();

}

returndata;

}

//得到销售汇总统计数据,实际工程中一般从数据库中获取

publicString[][]getTotalData(){

String[][]data=newString[8][5];

data[0][0]="区域";data[0][1]="上半年";data[0][3]="下半年";

data[1][1]="第一季度";data[1][2]="第二季度";data[1][3]="第三季度";data[1][4]="第四季度";

data[2][0]="华南地区";data[2][1]="¥2,000,000";data[2][2]="¥2,500,000";

data[2][3]="¥2,200,000";data[2][4]="¥0";

data[3][0]="华东地区";data[3][1]="¥6,000,000";data[3][2]="¥4,500,000";

data[3][3]="¥4,800,000";data[3][4]="¥0";

data[4][0]="华中地区";data[4][1]="¥500,000";data[4][2]="¥400,000";

data[4][3]="¥700,000";data[4][4]="¥0";

data[5][0]="华北地区";data[5][1]="¥3,000,000";data[5][2]="¥3,200,000";

data[5][3]="¥2,500,000";data[5][4]="¥0";

data[6][0]="东北地区";data[6][1]="¥4,000,000";data[6][2]="¥5,000,000";

data[6][3]="¥4,400,000";data[6][4]="¥0";

data[7][0]="总计";data[7][1]="¥15,500,000";data[7][2]="¥15,600,000";

data[7][3]="¥14,600,000";data[7][4]="¥0";

returndata;

}

//定制Web报表在页面首部显示的工具栏为标准的样式,增加一个【返回】按钮,返回到首页

publicStringgetToolbarScript(HttpServletRequestrequest){

return"
"?op=Resource&name=/resource/back.gif\"border=\"0\"alt=\"返回\">";

}

%>

密码修改

修改密码:主要对当前用户的密码修改功能,首先用户需要重新输入登录密码,然后第一次输入新密码,再次输入新密码,当点击【提交】时,需验证两次输入的新密码是否一致,若不一致则不予以更改,确保正确操作完成修改功能。如图4-13所示。



图4-13修改密码

技术难点

中文乱码

由于浏览器中的参数传递是按字节传送,因此英文和数字不会有任何的问题,而中文汉字则由两个字节组成。为了解决这个问题,使用了下面的两种方法:

<%request.setCharacterEncoding(“gb2312”);%>

request.getParameter("Password").getBytes("ISO-8849-1"),"GB2312")。

图片处理

在MySQL的数据库中可以存放任何格式的图片,但是要将其转换为二进制的数据存入数据库,在调用时再将二进制数据转换为图片,这样虽然便于管理,但是在当前国内的网速来看,这样的方法实在是不可取。因此本系统的图片均是存放的相对路径,将图片放在系统根目录下的upload文件夹中,按类分好,然后将其相对路径存入数据库的对应列中。这样可以大大提高网页浏览的速度。

HQL语言

本系统中,所有对数据库的操作都由Hibernate来完成,因此用到了大量的HQL语言。HQL是Hibernate设计的一套完整而实用高效的查询语言,它通过面向对象的语句结构实现了和SQL语言类似的功能。HQL拥有面向对象语言的所有特性,这其中包括多态、继承和组合。如果向表里插入一条数据的话,直接调用save()方法即可,但如果要使用查询功能的话,我按照一般的SQL语句的方法:from表名where条件,却总是找不到预期的数据,后来看书中发现,from后跟的是表对应映射的类文件名,而非表名,比如招聘表为invite,它对应的类为Invite.java,所以在from后要根Invite而不是invite。在本文中并不讨论那些非常复杂的查询,只使用连接两个表的查询。

Hibernate配备了非常强大的查询语言,HQL语言被设计为完全面向对象的查询,次语言具有主要特点如下:

HQL语言不区分大小写,但对于对象和属性的名称则必须区分大小写。

HQL是面向对象的查询方式,它是对持久化对象实体进行操作,从而实现对数据库的操作。

HQL进行实体查询时,语句可以省略select子句。

HQL在执行查询或是删除、更新操作时,要实体对象和数据库的表名不同,一定要与实体对象名称一致,包括大小写。

安全性

将项目发布到互联网上后,有些用户不是点击超链接打开网站的某个页面,而是在地址栏中直接写,而后进入,试图避开身份验证,处于对安全性的考虑,本项目在用户登陆后才能进入的页面中,特意添加了拦截器,用于防止恶意跳过登陆而操作系统,以确保系统安全正确的运行。拦截器配置如下。




class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">





/zcgl

/add

/updateAssets

/save

/deleteAssets









authorityInterceptor







在拦截器中设置了对用户名的判断,因为在登陆中以经将用户名放入到Session中了,所以只用判断是否有用户就行了,代码如下。

importjavax.servlet.http.HttpServletRequest;

importorg.aopalliance.intercept.MethodInterceptor;

importorg.aopalliance.intercept.MethodInvocation;

importorg.apache.struts.action.ActionMapping;



publicclassAuthorityInterceptorimplementsMethodInterceptor{

publicObjectinvoke(MethodInvocationinvocation)throwsThrowable{

HttpServletRequestrequest=null;

ActionMappingmapping=null;

Object[]args=invocation.getArguments();

for(inti=0;i
if(args[i]instanceofHttpServletRequest)

request=(HttpServletRequest)args[i];

if(args[i]instanceofActionMapping)

mapping=(ActionMapping)args[i];

}

if(request.getSession().getAttribute("username")!=null)

{

returninvocation.proceed();

}else{

returnmapping.findForward("faillogin");

}

}

}

本章小结

本章节为系统设计章节。首先详细设计系统应具备的功能,主要分为:资产管理模块、资产维护模块、员工管理模块、用户管理模块等四大模块。并充分分析项目需求,完善数据库的各个表。然后逐一演示系统功能,由语言叙述到截图显示进行全面讲解,最后到代码的详细分析,全面的介绍了系统的具体实现。其基本功能符合用户需求,能够实现对固定资产的基本信息录入、更新、操作、删除、打印等,从而实现对资产的管理。

最后简单阐述了一下项目进行中所遇到的主要问题及解决方法和为保证系统的安全性所采用的拦截器。

系统测试

在完成了程序的编写工作后,接下来将进行软件的测试,这里说的软件,并不单单是指程序本身,还包括其他方面。测试和开发一样,也是一项技术性很强的工作,有着很多的技巧。软件测试是软件质量保证的主要活动之一,因此,测试的质量直接影响软件的质量。

测试的定义及目的

软件测试就是在软件投入运行前,对软件的需求分析,设计规格说明和编码的最终复审,是保证软件质量的关键步骤。如果要给软件测试下定义,可以这样讲,软件测试是为了发现错误而执行程序的过程。

测试的目的在于将软件设计时设计者与程序开发者之间理解不一致的地方,功能与需求不一致的地方,不符合逻辑思维的情况都反映给质量控制部门,由质量控制部门调配需求部门统一做出一个明确解答,再由开发人员进行修改和补充。

测试的目标是以最少的时间和人力找出软件中潜在的各种错误和缺陷。

测试的原则

对于相对复杂的产品或系统来说,Zero-Bug是一种理想,Good-Enough是我们的原则。Good-Enough原则就是一种权衡投入/产出比的原则;不充分的测试是不负责任的;过分的测试是一种资源的浪费,同样也是一种不负责任的表现。我们操作的困难在于,如何界定什么样的测试是不充分的,什么样的测试是过分的。目前状况唯一可用的答案是:制定最低通过标准和测试内容,然后具体问题具体分析。

系统的方法

依据前面所说的测试对象,我们把测试划分为几个方面来进行测试。

界面测试

界面测试是测试过程中比较简单直观的一种测试方法,只要细心地按界面要求核对就行了。可这点往往是程序开发人员容易忽视和遗漏的地方,也是常常出Bug的地方。下面是界面测试中经常出现的几种Bug:

错别字,即界面中的标题或者文本内容中出现了错别字。这种Bug如果测试人员不细心,很难找出来,可能会出现在提示信息或界面中。

出现了一些根本读不懂的内容,一般多出现在程序的提示信息和一些较长的文本中。这种情况基本上出现在拼起来显示的提示中,页面的简单陈述是通过变量拼组起来的,通过程序将字一个一个地输出来。通常是因为程序中的控制错误或是程序开发人员对程序没有进行认真的自测,导致出现这种Bug。

程序员自创的词语,虽然意思对,但不符合界面的标准及需求。这种情况基本上是由于开发人员使用一些专业术语,并且混杂着自己的理解出现Bug,主要是由于开发过程中团队合作没有明确的分工,没有统一的规范用语。

页面类似的内容中,明显有字体,字号不同的情况,使界面整体风格看上去不一致,这种情况只出现在没有CSS定义的情况下,或是已经定义的CSS,开发人员在开发过程中没有调用。

标题相近的程序及模块,把标题弄混。这种情况多是因为业务方面的定义名称很相似或很类似,并且业务实体方面也很类似,开发人员在开发过程中忽略了开发名称和模块,只单独地实现其功能。

功能测试

顾名思义,功能测试主要是测试程序模块是否实现了设计中所有要求的功能,功能测试中需要注意的有:

查询功能中,有按单一查询条件进行查询的,也有按多个查询条件组合查询的,这里要注意多个查询条件之间的关系,还有一些常识性的问题。

录入功能中,需要注意的是前台设置的数值长度是否大于后台数值长度,以及前台与后台的数据结构是否相符,很多时候录入功能无法实现是由于这些原因。还有就是必须录入的字段的设置是否有误。

测试删除功能中需要注意的是单击【删除】按钮后,一般会出现提示信息,询问是否确定删除。通常情况下,我们单击【确认】按钮查看信息是否被删除掉了,而忽略了单击【取消】按钮后程序的反应,这时有可能的是没有删除,还有一种可能是即便单击了【取消】按钮,也一样删除了数据。另外,在删除多条记录的时候,要注意连续选中的几条记录是否真正都被删除了,即如果再按照这种查询方式查询,是否还能查询出来。有的时候需要在数据库中设一个标志位,而不是真正的物理删除。所以在下一次查询中,可能还会被查询出来,这主要是因为在查询条件中没有将标志位考虑在内。此外,最重要的一种删除方式既级联删除,当删除一个有子数据的信息时就会有异常抛出,这时我们需要用一个提示语“此信息有子数据,如果删除该信息则会连带的删除子数据,是否确定删除?”如果点击【是】那么就顺带的把与这条数据有关的信息都删除。如果点击【否】则什么信息都不会删除。

关于修改功能的测试,主要是看修改确认后是否数据真正已被修改了。这是最基本的功能,需要注意的是看是否能把不应该修改的数据也修改成功了。

需求测试

针对需求测试,是测试中很重要的一个环节。因为需求是在软件设计,开发乃至软件测试中重要的依据。要针对需求测试,首先就要对项目的需求和业务有一定的了解。这些需求很多时候是在实现增、减、查、改这些基本功能之上,针对项目和相关业务所作的一些逻辑上的控制。这就要求程序员在设计和编码的时候要充分理解考虑需求。

性能测试

性能测试在软件的质量保证中起着重要的作用。通常我们把性能指标全部归结到硬件,操作系统和开发环境上,而忽略了代码本身性能上的考虑。性能需求指标中,稳定性,并访支撑能力以及安全性都很重要,作为程序员需要评估该模块在系统运营中所处的环境、将要受到的负荷压力以及各种潜在的危险和恶意攻击的可能性。

系统中其它要注意的地方

时常有这样的情况发生,每个模块都能单独工作,但这些模块集成在一起之后却不能正常工作。其主要原因是,模块相互调用时接口会引入许多新问题。这就要求在进行程序设计和编码的时候要尽可能地从整体考虑。

实引用某些控件,实现了程序中未实现的功能的同时,也容易引发新的Bug。

错误本身出现在程序设计阶段,并非由于程序员编码造成的问题。这就要求我们无论是在开发还是测试阶段,对需求或程序设计存在疑问,应及时提出,及时解决。

由于一些模块被修改了,对其他模块造成了影响而出现了新的Bug。发现这些Bug要求我们对程序整体的结构有基本的了解,清楚模块之间的一些联系。

固定资产管理系统的测试

在完成编码的工作以后,根据以上的方法和步骤进行了如下的测试:

界面测试:在不开启Web服务器的情况下,反复点击网页上的超链接,测试其连接情况,直到所有的链接都达到预期的效果。

功能测试:对网站的几大功能模块逐一测试,尽最大可能发现其潜在的错误。

性能测试:将程序以局域网的形式发布,查看其是否满足多用户的要求。

需求测试:根据需求分析的内容,测试网站是否和当初的设计一样。

通过这几方面的测试,我及时修正了系统中存在的问题,很好的提高了系统的性能,达到了预期目标。

本章小结

代码虽然编写完成,却并不意味着项目的结束,还需要最后的一步检测。软件测试是软件质量保证的主要活动之一。因此,测试的质量直接影响软件的质量。所以要从诸多方面考虑测试的方向如:界面测试、功能测试、需求测试、性能测试,然后根据实际需求判断是否有不符,再进行校正修改。



结论

毕业论文是本科学习阶段一次非常难得的理论与实际相结合的机会,通过这次比较完整的固定资产管理系统的设计,我摆脱了单纯的理论知识学习状态,实际设计的结合锻炼了我的综合运用所学的专业基础知识,解决实际问题的能力,同时我也提高我查阅文献资料、设计手册、设计规范等其他专业能力水平,而且通过对整体的掌控,对布局的取舍,以及对细节的斟酌处理,都使我的能力得到了锻炼,经验得到了丰富的提高,并且意志品质力,抗压能力及耐力也都得到了不同程度的提升。这一次设计让我累计了无数实际经验,使我的头脑更好的被知识武装了起来,也必然会让我在未来的工作学习中表现出更高的应变能力,更强的沟通力和理解力。

论文在撰写过程中,力求将理论与实践相结合,在对资产管理进行阐述的同时,配合此系统从实际应用和操作技巧上加以说明,以期达到更深层次的理解与认识。

该系统由于在设计前期,进行了大量的需求分析,在此基础上将理论知识与开发技术运用到系统的实现过程当中,所以该系统具有较强的实用价值,能够实现一个中小型团体的固定资产管理系统所具备的各种功能。当然,由于时间有限,以及软、硬件设施的配置等限制因素,这个系统还不太完善,还有许多地方有待改进与完善;世界上对资产管理的内涵、标准及技术也日新月异,处于不断的变化发展之中,将会不断有观点、技术和实践的创新与突破,需要我们加以学习与改进,因此,我在论文的撰写过程当中,尽量避免使用结论性的语言;加之固定资产管理范围是一个涉及多领域的概念,每个不同的团体具体需要方向不同,且文理渗透,很难从整体上把握,难免存在许多疏漏,恳请各位老师加以批评指点。



参考文献

[1]刘洋.精通Hibernate[M].电子工业出版社,2010.

[2]史济民.软件工程――原理、方法与应用[J].高等教育出版社,2008.

[3]张桂元,贾燕枫.Eclipse开发入门与项目实践[M].人民邮电出版,2006.

[4]张桂元.Struts开发入门与项目实践[M].人民邮电出版社,2005.

[5]孙卫琴.精通Struts:基于MVC的JavaWeb设计与开发[M].电子工业出版社,2004.

[6]鲁晓东.JSP软件工程案例精解[J].电子工业出版社,2005.

[7]丁鹏.STRUTS技术解密及WEB开发实例[M].清华大学出版社,2009.

[8]夏昕.深入浅出Hibernate[M].电子工业出版社.2008.

[9]孙卫琴.精通Hibernate:Java对象持久化技术详解[DB].电子工业出版社,2007.

[10]李小喆,张晓辉,李祥胜.SQLServer2000管理及应用系统开发[M].人民邮电出版社,2002.

[11]ThomasKyte.ExpertOracleDatabaseArchitecture9iand10gProgrammingTechniquesandSolutions[M].BeiJing:Posts&TelecomPress.2005.

[12]TsichritzisDC.LochovskyFH.DataModels[M].Prentice-Hall.2010.

[13]AbrahamSilberschatz.DatabaseSystemConcepts(FourthEdition)[M].BeiJing:HigherEducationPress.2010.

[14]ThomasConnolly.DatabaseSystem:APracticalApproachtoDesign,Implementation,andManagement(ThirdEdition)[M].BeiJing:PublishingHouserofElectronicsIndustry.2009.

[15]CayS.Horstmann,GaryCornell.CoreJava2.VolumeI-Fundamentals(SeventhEdition)[M].U.S.A.:SunMicrosystemsPress.2005.





4、合同信息管理系统











毕业设计(论文)



题目:JSP合同信息管理系统

学校:

专业:

年级:

姓名:

学号:

指导教师:





年月日

目录

摘要 3

Abstract 4

1、引言 4

1.1开发背景 4

1.2课题研究的意义 5

1.3发展趋势 5

1.4系统开发方法 6

1.6可行性研究 7

1.6.1经济可行性 7

1.6.2技术可行性 7

1.6.3运行可行性 7

1.6.4时间可行性 7

1.6.5法律可行性 8

2、相关技术简介 8

2.1JSP技术简介 8

2.2JSP工作原理 9

2.3JSP体系结构 9

2.4JSP的特点 10

2.5SQLSERVER2005 11

2.6系统数据库连接 11

2.7BS模式与C/S模式的比较分析 16

3、需求分析和设计方案 19

3.1需求分析 19

3.1功能模块图 19

3.2处理流程设计 20

3.2.1系统操作流程图 21

3.2.2数据增加流程 21

3.2.3数据修改流程 22

3.2.4数据删除流程 23

4、数据库设计 24

4.1数据库的概念设计 24

4.2数据库逻辑结构设计 24

4.3数据库物理结构设计 25

4.4输入输出设计 26

4.5代码设计 26

5、系统模块设计 27

5.1登陆模块 27

5.2系统主界面 28

5.3合同管理模块设计 28

5.3.1合同管理 28

5.3.2合同添加 28

5.4合同收款提醒模块设计 29

5.5合同查询模块设计 29

5、系统调试与测试 30

5.1程序调试 30

5.2程序的测试 30

5.2.1测试的重要性及目的 30

5.2.2测试的步骤 32

5.2.3测试的主要内容 32

结束语 34

致谢 36

参考文献 37













摘要

随着信息科学技术的飞速发展,人们逐渐意识到对信息管理软件的运用可以使日常工作更加方便、快捷和高效。论文详细论述了公司合同管理系统的开发设计过程。软件采用JSP开发技术,Tomcat作容器,SQLServer2000作数据库管理系统,实现了创建合同、修改合同、删除合同、合同收款提醒、合同时间管理、合同查询等几大功能。。软件符合公司合同管理的需求,能够帮助公司切实提高工作效率。软件的开发符合一般管理软件的开发流程,对开发其他类似的管理软件具有相当的参考价值。

论文组织如下:首先阐述了该系统的开发背景、意义;其次介绍了相关的理论基础;接着对系统的需求进行了分析,并提出了具体的设计方案;然后展现了系统各功能模块的实现;最后对该软件进行了严格的测试。



关键词:合同管理;JSP;Tomcat;SQLserver2000



























1、引言

1.1开发背景

在人类的文明历史中,一直以来合同管理都是手工作业,由于涉及部门众多,需要管理的合同要素也各不相同。因此造成信息不集中,实时性不强,不断的出现各个部门间合同流转时间过长,监督制度执行方面效率不高,并且容易出错的一系列费时费力问题,具体表现在如下方面:

1) 文档管理困难:传统纸质合同和电子版合同共存,但对于不同的人员想阅读参考合同时,存在查阅不方便的问题,尤其是领导需要了解某合同内容时,就要耗费很多时间在查找合同,而不是阅读合同上。

2) 进度控制困难:由于合同的数量会随着时间的流逝而不断累积,参与的人员也会越来越多,合同进度的控制靠手工和Word、Excel等办公软件管理已经很难满足公司的发展需求,并且当领导想全局或全程了解合同进展情况时存在很大障碍。财务人员的付款依据也跟进度有着密切的关联,但同样存在障碍。

3) 信息汇总困难:采用人手或Excel等办公软件管理时,由于不同部门的数据格式不统一,采集也不能够及时继续,汇总工作需要耗费大量时间,也不一定准确。对于领导的决策会有一定的影响。

4) 缺少预警机制:缺少对合同进度、结款等关键时刻的预警,不能准确地预测近期可能的收支项目,不能有效帮助公司进行财务规划,掌控现金流量,更好地达到资金运作的最大效益。

1.2课题研究的意义

在背景里已经合同管理的现状,在这种大环境下,公司对合同管理也变的十分重要了,怎么提高管理效率,实现员工的工作智能化,成为迫切需要解决的问题,而此管理软件正是为满足公司的管理而出现的。

虽然合同管理软件这块,中国远远比不上做了几十年的欧美,但是欧美软件的成本却让中国本土的公司望而却步,这就对国内软件行业提出了要求,谁能占得先机就能拥有更多的市场竞争力,谁能针对行业开发出更适应公司的合同管理软件就拥有更多的技术竞争里,所以,开发公司合同管理软件不只能提高公司的管理和办公的效率,更重要的是,中国本土开发的软件,成本上就有竞争力,对整个行业都有很大的贡献。

1.3发展趋势

完善的合同管理是公司运作的一个主要标志。然而,完善的合同管理需要公司的许多资源,如何去解决格式不统一而带来的文档管理困难,让不同人员想阅读参考合同时,查找不方便的问题,减少领导了解合同文本时的时间。如何去解决进度控制的困难,减少合同数量多而引发参与的人员众多的显现,从而减少公司的成本。如何去解决信息汇总的困难,让不同格式的合同得以汇总,解决以前手工管理时不能够及时汇总的问题。如何去解决缺少预警机制而不能掌控现金流、不能更好的发挥资金的运作等一系列问题。解决这些问题能有效的提高公司的经济效益。

目前国内主流的软件开发基于两种模式:客户机/服务器(Client/Server,简称C/S)模式和Web浏览器/服务器(Browser/Server,简称B/S)模式。虽然出于安全性等方面的因素,C/S结构的管理信息系统仍然占据企业管理信息系统的主流,但是,由于B/S系统更适合维护,而且起安全性正在不断完善,所以当前企业信息管理系统正在从C/S结构向B/S结构转移。而现在开发B/S系统的主流技术就是ASP.net和JSP,虽然ASP.net为新兴技术正不断抢占JSP的市场,但出于系统的移植性的考虑,本系统还是运用JSP技术开发,因为JAVA的跨平台性能给我们带来更多的用户。

服务器上我们选择Tomcat,是因为它小巧却功能强大,更重要的是,它是开源的,如今,开源软件越来越受到人们的重视,Linux就是一个成功的典型,虽然这对我们的开发没有实际的用处,但是顾客会优先选择用流行工具开发的软件,这也是我们选择Tomcat的原因。

现在主流的数据库就三种:Access,Oracle和SQLServer。Access短小精干,操作方便,是开发小型系统的首选;Oracle功能强大,适合开发大型系统;但是我们选择SQLServer,它兼备Access和Oracle优点,强大的可视化操作和不亚于Oracle的功能是我们选择它的理由。

1.4系统开发方法

本系统是以Browser/Server(浏览器/服务器)结构和JSP语言及SQLServer2000数据库和TOMCAT作为服务器开发的管理系统。首先,使用JSP具有较好的安全性和可移植性,具有动态页面和静态页面分离,能够脱离硬件平台的束缚,而使用Browser/Server结构是因为这种结构可以减少客户端很大维护工作量,且具有很强的使用范围的伸缩性,客户端通过浏览器统一界面,就可以完成内部的信息处理和外部环境的信息查询,而使用SQLServer2000主要是由于它有快捷而健全的数据库查询引擎,能够保护数据库以防止不合法的使用所造成的数据泄露,更改或破坏,SQLServer提供多层用户身份验证的安全保证,其次,公司要求用JSP来实现系统功能,基于以上两方面的原因,我采用了JSP来实现系统的建设。





1.6可行性研究

该阶段通过对系统目标的初步调研和分析,提出可行性方案并进行论证。我们在这里主要从技术可行性、经济可行性和操作可行性等方面进行分析。

1.6.1经济可行性

开发该系统所需的相关资料可以通过已存在的相关系统进行调查采集,所需的其他应用软件、硬件系统也易于获得.因此,开发成本较低。而引进使用本系统后,与传统方式相比,具有高效率、低成本、高质量的特点,可以节省不少人力、物力及财力。所以,从经济的角度来看,该系统可行。

1.6.2技术可行性

技术可行性要考虑现有的技术条件是否能够顺利完成开发工作,软硬件配置是否满足开发的需求等。本网站用的是JSP开发语言,调试相对简单,当前的计算机硬件配置也完全能满足开发的需求,因此在技术上是绝对可行的。软件方面:由于目前单机模式相对发展成熟,故软件的开发平台成熟可行,它们速度快、容量大、可靠性能高、价格低,完全能满足系统的需求。

1.6.3运行可行性

运行可行性是对组织结构的影响,现有人员和机构和环境对系统的适应性及人员培训补充计划的可行性。当前信息化技术已经相当普及,各类操作人员水平都有相当的高度,所以在运行上是可行性的。

本系统的开发,是典型的Mis开发,主要是对数据的处理,包括数据的收集,数据的变换,及数据的各种报表形式的输出。采用流行的JSP+SQLSERVER2000体系,已无技术上的问题。

1.6.4时间可行性

从时间上看,在两个月的时间里学习相关知识,并开发系统,时间上是有点紧,但是不是不可能实现,通过两个多月的努力功能基本实现。

1.6.5法律可行性

①所有技术资料都为合法。

②开发过程中不存在知识产权问题。

③未抄袭任何网站,不存在侵犯版权问题。

④开发过程中未涉及任何法律责任。

综上所述,本系统的开发从技术上、从经济上、从法律上都是完全可靠的。























2、相关技术简介

2.1JSP技术简介

JSP(JavaServerPage服务器网页)是从1998年开始出现的新技术。由Sun公司倡导、许多公司参与一起建立的一种动态网页技术标准,是基于JavaServlet以及整个Java体系的web开发技术。在传统的网页HTML文件(.htm,.html)中加入脚本片段和JSP标记(Tag),构成JSP网页(.jsp)。JSP技术为创建显示动态生成内容的web页面提供了简便的方法。JSP作为Java家族的一员,承袭了Java的特点,即跨平台的特性,也即一次编译,到处运行。

在国外,己经大量使用JSP作为网络应用程序的开发工具,而在国内,尽管JSP还不是主流开发技术,但是由于JSP的强大优势,许多网站都已经准备转向JSP,利用JSP来开发动态网站。

2.2JSP工作原理

JSP是面向服务器的,因此支持任何浏览器。当Web服务器和JSP引擎遇到访问JSP网页的请求时,JSP引擎将请求对象发送给服务器端的相关组件,比如JavaBean组件、Servlet或EJB等,然后由服务器端组件处理这些请示,可能需要从数据库或数据存储中检索信息,然后服务器端组件再将响应对象返回JSP引擎。JSP引擎将响应对象传递给JSP页面,根据JSP页面的HTML格式完成数据编排,最后Web服务器和JSP引擎将格式化后的JSP页面以HTML格式返回客户浏览器。这就是当前网站构建中广泛采用的浏览器——Web服务器——后台数据库的三层架构模式。因为JSP所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果。

2.3JSP体系结构

JSP网站开发标准给出了两种使用JSP的技术,可以归纳为模式一、模式二。

模式一:JSP+JavaBeans技术在这种模式中,JSP页面独自响应请求并将处理结果返回给客户。Bean处理所有数据访问,JSP实现页面的表现,以实现内容生成与显示相分离。当处理复杂的大型应用时,页面被嵌入大量的脚本或Java代码段,当需要处理的商业逻辑复杂时,这种情况会变得非常糟糕,大量的内嵌代码使得页面程序变得复杂,对于前端界面设计人员,这是不可思议的事情。所以模式一可用于小型应用,不能够满足大型应用的需要。

模式二:JSP+Servlet+JavaBeans技术Servlet技术是一种采用Java技术来实现CGI功能的一种技术,Servlet技术非常适于服务器端的处理和编程,并且Servlet会长期驻留在内存。

从开发的观点看,模式二具有更清晰的页面表现,清楚的开发者角色划分,在大规模项目开发中,模式二更被采用,模式二也更符合当前流行的MVC结构(Model/view/controller),其中Servlet对应controller,处于控制者的位置,处理HTTP请求,负责生成JSP中使用的Beans组件或对象,并判断应将请求传递给哪个JSP等,JSP对应view,负责生成最终的动态网页并返回给浏览器。而JavaBeans对应的是Model,实现各个具体的应用逻辑与功能。

2.4JSP的特点

简化的页面生成技术。

JSP页面用标准的HTML或XML命令来处理页面的格式化和布局设计,而用类似HTML、XML的标记和Java语言编写的脚本程序生成页面内容。这使得页面形式与页面内容互相独立,非常有利于大型项目的分工合作。

与Java平台有机集成。

JSP技术是Java2平台的重要组成部分,JSP使用Java语言作为它的脚本语言。在JSP页面中可以使用几乎所有的Java组件和JavaAPI,这就能充分发挥出Java语言的强大功能。使用JSP技术可以创建具有高度可伸缩性和可靠性的Web应用程序。

硬件平台和服务器无关性。

JSP作为Java家族的一员,秉承了Java技术的“一次编写,随处可用(WriteOnce,RumAnywhere)”的特性,可以运行于大多数流行的操作系统平台及Web服务器,这种与服务器硬件和操作系统平台的无关性是JSP相对于其它动态网页技术最大的一个优点。

功能可扩展性。

如同Microsoft的JSP技术可以通过ActiveX/COM组件来扩展功能一样,JSP可以通过JavaBean和EJB(EnterpriseJavaBean)以及自定义的标记来扩展功能。

JSP可以通过JDBC,与诸如Oracle、SQLServer这样的大型关系数据库进行连接。

JSP提供了一些隐含对象。这些隐含对象在JSP页面中可以直接引用,而不必首先声明。利用JSP提供的这些隐含对象,可以使脚本功能更加强大,并且编程更加容易、方便。例如,利用request对象,可以很容易地接收用户在HTML表单中提交的信息。

2.5SQLSERVER2005

SQLServer是由Microsoft开发和推广的关系数据库管理系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的,并于1988年推出了第一个OS/2版本。SQLServer近年来不断更新版本,1996年,Microsoft推出了SQLServer6.5版本;1998年,SQLServer7.0版本和用户见面;SQLServer2005是Microsoft公司于2005年推出的最新版本。SQLServer特点:

1.真正的客户机/服务器体系结构。

2.图形化用户界面,使系统管理和数据库管理更加直观、简单。

3.丰富的编程接口工具,为用户进行程序设计提供了更大的选择余地。

4.SQLServer与WindowsNT完全集成,利用了NT的许多功能,如发送和接受消息,管理登录安全性等。SQLServer也可以很好地与MicrosoftBackOffice产品集成。

5.具有很好的伸缩性,可跨越从运行Windows95/98的膝上型电脑到运行Windows2000的大型多处理器等多种平台使用。

6.对Web技术的支持,使用户能够很容易地将数据库中的数据发布到Web页面上。

7.SQLServer提供数据仓库功能,这个功能只在Oracle和其他更昂贵的DBMS中才有。





2.6系统数据库连接

JDBC技术是JavaDataBaseConnectivity的缩写,它是SUN公司提供的一种支持基本SQL功能的通用的应用程序接口(ApplicationProgrammingInterface)。它由一组用Java语言编写的类和接口组成。通过这些类和接口,程序开发人员可以在Java语言中方便地建立与数据库的链接,通过执行相应SQL语句,完成对不同数据库的访问。因此,开发人员使用JDBCAPI可以不必编写一个应用程序来访问Sybase数据库,又另外编写一个应用程序去访问Oracle数据库,再写一个应用程序访问Microsoft的SQLServer。不但如此,使用Java语言编写的应用程序可以在任何支持Java的平台上运行,不必在不同的平台上开发不同的应用程序。

简单地说,JDBC能完成下列三件事:

同一个数据库建立连接;

向数据库建立连接;

处理数据库返回的结果。

JDBC是一种通用低层的应用程序编程接口,它在不同的数据库功能模块的层次上提供一个统一的用户界面。说JDBC是一处低级的API,是指它直接调用SQL命令,它比其他的一些数据库连接API要容易使用些,但它有同样可以作为更高级的,用户办面更友好的API或开发工具基础。

很多可视化的Java开发工具,如VisualAgeForJava、VisualCafé、J++等都提供了基于JDBC的更面向用户的类和包,直接将关系数据库的表或视图映射为Java类,程序员通过可视化工具直接对Java对象进行操作,而真正需要的SQL调用则根据程序员发出的对对象的各种属性、方法的操作来自动产生。另一种使用JDBCAPI的方式为,用户程序可以提供一个界面(如菜单等)让用户选择对数据库进行的操作,选中一个任务后,提示用户输入一些必要的信息,然后根据用户的输入产生相应的SQL命令以及Java程序。通过这处方式,用户可以完成对数据库的操作,即使他并不了解SQL语法以及JDBC编程。

数据库访问的三层结构如图5.1所示,浏览器端程序要访问数据库,首先通过中间件,然后由中间件对数据库操作权限进行认证,认证通过才能对数据库进行操作。



图5.1使用中间件的数据库访问三层结构

用户对数据库的存取权限认证是中间件中完成,对数据库的查询、插入、更新和删除操作等都封装在中间件中,该中间件位于服务器端,中间件对数据库进行操作后,再将处理结果通过Web服务器返回到浏览器端用户。这样,在用户端输入的用户名和密码,可以通过加密算法进行加密后在网络上传输,在中间件中进行解密认证,然后再进行数据库的存取操作,数据库存取权限的用户名和密码出现在位于服务器端的中间件中,这样就更加安全。本系统采用的正是这样的三层结构的数据库访问模式。

在三层模型中,命令将被发送到服务的”中间层”,而”中间层”将SQL语句发送到数据库。数据库处理SQL语句并将结果返回”中间层”,然后”中间层”将它们返回用户。其模型如图5.2所示。



图5.2JDBC的三层模型

因为”中间层”可以进行对访问的控制并协同数据库的更新,并且可以使用一个易用的高层API,这个API可以由“中间层”进行转换,转换成低层的调用。所以在许多种情况下,三层模型可以提供更好的性能,本系统中所采用的就是此种模型。

JDBC是JAVA应用程序与数据库的沟通桥梁。它提供了三项服务功能:一、与数据库建立连接。二、将SQL语句传递给数据库。三、从数据库取得SQL语句的执行结果。当JDBC要与数据库建立连接前,首先,它必须先取得连接此数据库的JDBC驱动程序,Class.forName()即是在执行此项工作。建立数据库连接的第一步骤就是将JDBC驱动程序的类载入至JVM(JavaVirtualLMachine)中,本系统中利用java.lang.Class类内的forName()静态函数依据指定的类名称,将JDBC驱动程序载入进来。完成载入驱动程序的步骤后,必须使用java.sal.DriverManager类所提供的getConnection()静态函数,取得与数据库间的连接对象。此连接对象的类类型为java.sal.Connection,必须通过它才能将SQL指令传递给数据库,而执行结果也需要通过连接对象来取得。当取得连接对象后,还必须取得Statement对象才能对数据库执行SQL指令。Statement主要实现两个功能:执行SQL语句以及取得执行结果。在java.sql.Statement的sql对象中执行查询或修改命令的函数后传回的是一个ResultSet对象,这个对象提供了一个存取SQL执行结果的管道,以便通过它将表格数据从数据库中取出。每个Statement对象只能产生一个ResultSet对象。

数据库连接如图5.3所示:



图5.3数据库的连接处理

数据库的连接处理具体实现如下:

//建立JDBC——ODBC桥

sun.jdbc.odbc.JdbcOdbcDriver;

//桥建立不成功时的错误处理

catch(ClassNotFoundExceptionevent){}

//建立与数据库的连接,并发送SQL查询语句,将结果保存到rs对象中

Con=建立JDBC——ODBC桥

Sql=SQL查询语句

执行查询

Rs=返回结果

//SQL出错处理

catch(SQLExceptione1){}



有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。换言之,有了JDBCAPI,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBCAPI写一个程序就够了,它可向相应数据库发送SQL调用。同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势。

Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法。JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。作为API,JDBC为程序开发提供标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。JDBC使用已有的SQL标准并支持与其它数据库连接标准,如ODBC之间的桥接。JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。??

Java具有坚固、安全、易于使用、易于理解和可从网络上自动下载等特性,是编写数据库应用程序的杰出语言。所需要的只是Java应用程序与各种不同数据库之间进行对话的方法。而JDBC正是作为此种用途的机制。

JDBC扩展了Java的功能。例如,用Java和JDBCAPI可以发布含有applet的网页,而该applet使用的信息可能来自远程数据库企业也可以用JDBC通过Intranet将所有职员连到一个或多个内部数据库中(即使这些职员所用的计算机有Windows、Macintosh和UNIX等各种不同的操作系统)。随着越来越多的程序员开始使用Java编程语言,对从Java中便捷地访问数据库的要求也在日益增加。

MIS管理员们都喜欢Java和JDBC的结合,因为它使信息传播变得容易和经济。企业可继续使用它们安装好的数据库,并能便捷地存取信息,即使这些信息是储存在不同数据库管理系统上。新程序的开发期很短。安装和版本控制将大为简化。程序员可只编写一遍应用程序或只更新一次,然后将它放到服务器上,随后任何人就都可得到最新版本的应用程序。对于商务上的销售信息服务,Java和JDBC可为外部客户提供获取信息更新的更好方法。

简单地说,JDBC可做三件事:与数据库建立连接、发送SQL语句并处理结果。下列代码段给出了以上三步的基本示例:

Connectioncon=DriverManager.getConnection("jdbc:odbc:wombat","login",

"password");

Statementstmt=con.createStatement();

ResultSetrs=stmt.executeQuery("SELECTa,b,cFROMTable1");

while(rs.next()){

intx=rs.getInt("a");

Strings=rs.getString("b");

floatf=rs.getFloat("c");

}

上述代码对基于JDBC的数据库访问做了经典的总结。





2.7BS模式与C/S模式的比较分析

C/S模式主要由客户应用程序(Client)、服务器管理程序(Server)和中间件(middleware)三个部件组成。客户应用程序是系统中用户与数据进行交互的部件。服务器程序负责有效地管理系统资源,如管理一个信息数据库,其主要工作是当多个客户并发地请求服务器上的相同资源时,对这些资源进行最优化管理。中间件负责联结客户应用程序与服务器管理程序,协同完成一个作业,以满足用户查询管理数据的要求。

B/S模式是一种以Web技术为基础的新型的MIS系统平台模式。把传统C/S模式中的服务器部分分解为一个数据服务器与一个或多个应用服务器(Web服务器),从而构成一个三层结构的客户服务器体系。

第一层客户机是用户与整个系统的接口。客户的应用程序精简到一个通用的浏览器软件,如Netscape?Navigator,微软公司的IE等。浏览器将HTML代码转化成图文并茂的网页。网页还具备一定的交互功能,允许用户在网页提供的申请表上输入信息提交给后台,并提出处理请求。这个后台就是第二层的Web服务器。

第二层Web服务器将启动相应的进程来响应这一请求,并动态生成一串HTML代码,其中嵌入处理的结果,返回给客户机的浏览器。如果客户机提交的请求包括数据的存取,Web服务器还需与数据库服务器协同完成这一处理工作。

第三层数据库服务器的任务类似于C/S模式,负责协调不同的Web服务器发出的SQ请求,管理数据库。

B/S模式的优势

首先它简化了客户端。它无需象C/S模式那样在不同的客户机上安装不同的客户应用程序,而只需安装通用的浏览器软件。这样不但可以节省客户机的硬盘空间与内存,而且使安装过程更加简便、网络结构更加灵活。假设一个企业的决策层要开一个讨论库存问题的会议,他们只需从会议室的计算机上直接通过浏览器查询数据,然后显示给大家看就可以了。甚至与会者还可以把笔记本电脑联上会议室的网络插口,自己来查询相关的数据。其次,它简化了系统的开发和维护。系统的开发者无须再为不同级别的用户设计开发不同的客户应用程序了,只需把所有的功能都实现在Web服务器上,并就不同的功能为各个组别的用户设置权限就可以了。各个用户通过HTTP请求在权限范围内调用Web服务器上不同处理程序,从而完成对数据的查询或修改。现代企业面临着日新月异的竞争环境,对企业内部运作机制的更新与调整也变得逐渐频繁。相对于C/S,B/S的维护具有更大的灵活性。当形势变化时,它无须再为每一个现有的客户应用程序升级,而只需对Web服务器上的服务处理程序进行修订。这样不但可以提高公司的运作效率,还省去了维护时协调工作的不少麻烦。如果一个公司有上千台客户机,并且分布在不同的地点,那么便于维护将会显得更加重要。

再次,它使用户的操作变得更简单。对于C/S模式,客户应用程序有自己特定的规格,使用者需要接受专门培训。而采用B/S模式时,客户端只是一个简单易用的浏览器软件。无论是决策层还是操作层的人员都无需培训,就可以直接使用。B/S模式的这种特性,还使?MIS系统维护的限制因素更少。

最后,B/S特别适用于网上信息发布,使得传统的MIS的功能有所扩展。这是C/S所无法实现的。而这种新增的网上信息发布功能恰是现代企业所需的。这使得企业的大部分书面文件可以被电子文件取代,从而提高了企业的工作效率,使企业行政手续简化,节省人力物力。

鉴于B/S相对于C/S的先进性,B/S逐渐成为一种流行的MIS系统平台。各软件公司纷纷推出自己的Internet方案,基于Web的财务系统、基于Web的ERP。一些企业已经领先一步开始使用它,并且收到了一定的成效。

B/S模式的新颖与流行,和在某些方面相对于C/S的巨大改进,使B/S成了MIS系统平台的首选。





































3、需求分析和设计方案

3.1需求分析

根据客户的需要,本软件系统是公司合同管理系统,用户仅限于公司内部员工,需求功能主要是员工或者公司的管理层能通过软件系统,进行一系列的操作,从而实现管理公司的目的,下面是具体的需求:

(1)既然软件系统的用户仅限于公司内部的员工,所以就必须要有判断是否内部员工的功能。

(2)员工应该能从软件系统上查看合同,管理合同

(3)有一些突发事件随时有可能发生,如地址和联系方式的变化,这就要求员工能通过系统对自己的一些资料进行修改。

(4)员工不可能记的住公司所有合同等,所以要有通过查询得知一些合同的具体资料的功能。

(5)公司随时都可能根据合同的变化,删除,废止,修改合同。



3.1功能模块图

需求分析是从客户的需求中提取出软件系统能够帮助用户解决的业务问题,而设计方案则是根据需求分析,规划出系统的功能模块,具体的划分如下:

编写企业合同管理系统,让其能创建合同、修改合同、删除合同、合同变更标识、合同收款提醒、合同时间管理、合同废止标识、结束合同、合同统计、合同查询等几大功能。

(1) 创建合同

管理人员将签订后的合同的各项信息存入数据库中,使合同进入开始执行的状态。

(2) 修改合同

让管理的人员能对数据库里的合同的各项信息进行修改。

(3) 删除合同

管理人员能对无用的合同,进行删除。

(4) 合同变更标识

合同被修改后,系统会有标识指明合同曾被修改。

(5) 合同收款提醒

系统会标识到期收款的合同,方便用户对合同的收款。

(6) 合同查询

以合同的各项信息为关键字来对数据库进行查询。如图1所示:





图1合同管理系统功能模块示意图



3.2处理流程设计



3.2.1系统操作流程图







































































3.2.2数据增加流程

添加信息时,编号字段由系统自动生成,且不能修改,其他信息由用户输入,之后对数据进行合法判断,合法则写入保存至数据库,不合法则重新输入数据。数据增加流程图:





图3.2数据增加流程图





3.2.3数据修改流程

在修改信息时,先选中一条待修改的记录,然后直接输入数据,判断合法性,合法则保存至数据库,不合法重新输入。数据修改流程图如图3.3所示。



图3.3数据修改流程图

3.2.4数据删除流程

当用户选定一条记录时,单击删除按钮,会提示用户是否确定删除,然后删除数据库相关内容。数据删除流程图如图3.4所示。

图3.4数据删除流程图



4、数据库设计



4.1数据库的概念设计

数据库的概念结构设计是反映全组织信息需求的整体数据库概念结构(概念模式)。概念模式必须是独立于计算机硬件和具体数据库管理系统,不受特定DBMS(数据库管理系统)的限制,不考虑计算机软硬件技术细节。在需求分析阶段得到的数据流程图对数据的动态运动轨迹进行了描述,数据库需求分析定义了数据本身的静态特征,但他们反映的仅是应用需求,并无反映出数据之间的本质联系(即数据的内在特征)。他们之间存在着数据关联并且靠数据库关键字段进行索引,建立表关联。

E-R图如下:



4.2数据库逻辑结构设计

设计逻辑结构应该选择最适于描述与表达相应概念结构的数据模型,然后选择最合适的DBMS。设计逻辑结构时一般要分三步进行:将概念结构转换为一般的关系、网状、层次模型,并将转化来的关系、网状、层次模型向特定DBMS支持下的数据模型转换,关系模型的逻辑结构是一组关系模式的集合。而E-R图则是由实体、实体的属性和实体之间的联系三个要素组成的。所以将E-R图转换为关系模型实际上就是要将实体、实体的属性和实体之间的联系转化为关系模式。

本管理系统所存在的数据库中有不同的表结构,这些物理表中存放着各种网站所调用的数据,为整个网站的流程提供最基本的数据来源。本网站采用MYSQL数据库它是由Microsoft公司开发。对于它的安全性和易操作性来说是开发者首选。

4.3数据库物理结构设计

数据库在整个进销存管理系统中占据重要的地位,数据库结构设计的好坏直接影响系统和实现的效果。好的数据库结构设计会减少数据库的存储量,数据的完整性和一致性比较高,系统具有较快的响应速度。本系统采用MYSQL的数据库,根据分析阶段对实体和联系的分析结果,进行表结构设计,可以得到以下数据表。

表4-1为管理员信息表,存储系统中的管理员信息。

表4-1管理员信息表(t_admin)

列名 数据类型 字段大小 必填字段 默认值 说明 UserId int 20 是 无 管理员帐号(主键) UserName varchar 50 是 无 管理员姓名 UserPw varchar 50 是 无 管理员密码

表4-2为合同信息表,记录系统中合同的详细信息。

表4-2合同信息表(t_hetong)

列名 数据类型 字段大小 必填字段 默认值 说明 id int 20 是 无 合同编号(主键) Mingcheng varchar 50 是 无 合同名称 jiafangfuzeren varchar 50 是 无 甲方负责人 yifangfuzeren varchar 50 是 无 乙方负责人 kaishishijian varchar 50 是 无 开始时间 jieshushijian varchar 50 是 无 结束时间 jine Int 20 是 无 金额 beizhu varchar 50 是 无 备注 表4-3为合同提醒信息表,记录系统中已有合同提醒的信息。

表4-3合同提醒信息表(t_tixing)

列名 数据类型 字段大小 必填字段 默认值 说明 id int 20 是 无 编号(主键) hetongId Int 50 是 无 合同编号 shoukuanshijian varchar 50 是 无 收款时间 shoukuanjine varchar 50 是 无 收款金额

4.4输入输出设计

输入输出设计是系统设计中很容易被忽视的环节,又是一个重要的环节。一个好的输出系统设计可以为用户和系统双方带来良好的工作环境,一个好的输出设计可以为管理者提供简捷、明了、有效、实用的管理和控制信息。本管理系统输入设计数据根据输出的要求来选择。输出类型设计是根据需求设计为打印输出,这是用户通常要求的最主要的形式。输入内容设计主要是根据数据库设计和输出设计的结果来确定的。外部输入主要是键盘输入,内部输入只要是数据库中调用的信息,如会员资料信息的注册,在后台对帖子管理,用户信息,重要通知的添加。

4.5代码设计



设计的好坏,不仅关系到计算机的处理效率,而且直接影响人们的接受与使用。代码设计必须从整个企业MIS的高度,统筹规划、全面考虑代码设计关系到系统的可扩展性、一致性、完整性和可维护性的重要问题。设计代码的目的是为了便于计算机和人识别和处理,更方便的进行分类和排序,使计算机对数据进行快速的查询。对客观实体,通过代码进行识别、分类。从计算机信息处理而言,使用代码节省处理时间与空间,提高处理速度与效率。代码设计在系统中,它是人与计算机的共同语言,起着沟通人与计算的作用。采用代码,可以使数据表达标准化、简化程序设计、加快输入、减少出错率、节省存储空间、提高处理速度。代码设计是一项重要的基础工作。因此,代码设计有他特有的意义。





5、系统模块设计

5.1登陆模块

登录模块图示如图5-1所示:



图5-1系统登录界面

页面程序说明,如表5-1所示:

表5-1页面程序说明

程序名称 程序文件 Login.jsp 页面传入参数 Username,password 页面提交URL 页面传出参数 Session["username"]

Session["group"] 功能说明 登录系统 特殊注解 无 5.2系统主界面



5.3合同管理模块设计

5.3.1合同管理





5.3.2合同添加







5.4合同收款提醒模块设计









5.5合同查询模块设计





































































5、系统调试与测试

5.1程序调试

在设计系统的过程中,存在一些错误是必然的。对于语句的语法错误,在程序运行时自动提示,并请求立即纠正,因此,这类错误比较容易发现和纠正。但另一类错误是在程序执行时由于不正确的操作或对某些数据的计算公式的逻辑错误导致的错误结果。这类错误隐蔽性强,有时会出现,有时又不出现,因此,对这一类动态发生的错误的排查是耗时费力的。

5.2程序的测试

5.2.1测试的重要性及目的

(1)测试的重要性

软件的测试在软件生命周期中占据重要的地位,在传统的瀑布模型中,软件测试学仅处于运行维护阶段之前,是软件产品交付用户使用之前保证软件质量的重要手段。近来,软件工程界趋向于一种新的观点,即认为软件生命周期每一阶段中都应包含测试,从而检验本阶段的成果是否接近预期的目标,尽可能早的发现错误并加以修正,如果不在早期阶段进行测试,错误的延时扩散常常会导致最后成品测试的巨大困难。

事实上,对于软件来讲,不论采用什么技术和什么方法,软件中仍然会有错。采用新的语言、先进的开发方式、完善的开发过程,可以减少错误的引入,但是不可能完全杜绝软件中的错误,这些引入的错误需要测试来找出,软件中的错误密度也需要测试来进行估计。测试是所有工程学科的基本组成单元,是软件开发的重要部分。自有程序设计的那天起测试就一直伴随着。统计表明,在典型的软件开发项目中,软件测试工作量往往占软件开发总工作量的40%以上。而在软件开发的总成本中,用在测试上的开销要占30%到50%。如果把维护阶段也考虑在内,讨论整个软件生存期时,测试的成本比例也许会有所降低,但实际上维护工作相当于二次开发,乃至多次开发,其中必定还包含有许多测试工作。

在实践中,软件测试的困难常常使人望而却步或敷衍了事,这是由于对测试仍然存在一些不正确的看法和错误的态度,这包括:

①认为测试工作不如设计和编码那样容易取得进展难以给测试人员某种成就感;

②以发现软件错误为目标的测试是非建设性的,甚至是破坏性的,测试中发现错位是对责任者工作的一种否定;

③测试工作枯燥无味,不能引起人们的兴趣;

④测试工作是艰苦而细致的工作;

⑤对自己编写的程序盲目自信,在发现错误后,顾虑别人对自己的开发能力的看法。

这些观点对软件测试工作是极为不利的,必须澄清认识、端正态度,才可能提高软件产品的质量。

(2)测试的目的

如果测试的目的是为了尽可能多地找出错误,那么测试就应该直接针对软件比较复杂的部分或是以前出错比较多的位置。

①软件测试是为了发现错误而执行程序的过程;

②测试是为了证明程序有错,而不是证明程序无错误;

③一个好的测试用例是在于它能发现至今未发现的错误;

④一个成功的测试是发现了至今未发现的错误的测试。

这种观点可以提醒人们测试要以查找错误为中心,而不是为了演示软件的正确功能。但是仅凭字面意思理解这一观点可能会产生误导,认为发现错误是软件测试的唯一目,查找不出错误的测试就是没有价值的,事实并非如此。

首先,测试并不仅仅是为了要找出错误。通过分析错误产生的原因和错误的分布特征,可以帮助项目管理者发现当前所采用的软件过程的缺陷,以便改进。同时,这种分析也能帮助我们设计出有针对性地检测方法,改善测试的有效性。其次,没有发现错误的测试也是有价值的,完整的测试是评定测试质量的一种方法。

5.2.2测试的步骤

与开发过程类似,测试过程也必须分步骤进行,每个步骤在逻辑上是前一个步骤的继续。大型软件系统通常由若干个子系统组成,每个子系统又由若干个模块组成。因此,大型软件系统的测试基本上由下述几个步骤组成:

(1)模块测试在这个测试步骤中所发现的往往是编码和详细设计的错误。

(2)系统测试在这个测试步骤中发现的往往是软件设计中的错误,也可能发现需求说明中的错误。

(3)验收测试在这个测试步骤中发现的往往是系统需求说明书中的错误。

5.2.3测试的主要内容

为了保证测试的质量,将测试过程分成几个阶段,即:代码审查、单元测试、集成测试、确认测试和系统测试。

(1)单元测试

单元测试集中在检查软件设计的最小单位—模块上,通过测试发现实现该模块的实际功能与定义该模块的功能说明不符合的情况,以及编码的错误。

(2)集成测试

集成测试是将模块按照设计要求组装起来同时进行测试,主要目标是发现与接口有关的问题。如一个模块与另一个模块可能有由于疏忽的问题而造成有害影响;把子功能组合起来可能不产生预期的主功能;个别看起来是可以接受的误差可能积累到不能接受的程度;全程数据结构可能有错误等。

(3)确认测试

确认测试的目的是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是确认测试的任务,即软件的功能和性能如同用户所合理期待的那样。

(4)系统测试

软件开发完成以后,最终还要与系统中其他部分配套运行,进行系统测试。包括恢复测试、安全测试、强度测试和性能测试等。

单独对系统的测试主要从以下几方面入手:

①功能测试:测试是否满足开发要求,是否提供设计所描述的功能,是否用户的需求都得到满足。功能测试是系统测试最常用和必须的测试,通常还会以正式的软件说明书为测试标准。

②强度测试及性能测试:测试系统能力最高实际限度,即软件在一些超负荷情况下功能实现的情况。

③安全测试:验证安装在系统内的保护机构确实能够对系统进行保护,使之不受各种非常的干扰。针对本系统主要是对权限系统的测试和对无效数据、错数据、和非法数据干扰的能力的测试。

经过上述的测试过程对软件进行测试后,软件基本满足开发的要求,测试宣告结束。



























结束语

几个月来忙碌紧张而又有条不紊的毕业设计,使我有机会对本专业的基本理论、专业知识和基本技术有了更深入的了解和体会,使我在四年中所学到的知识得到了系统和升华,真正达到了学以致用。

对管理信息系统的体会

管理信息系统是一门融管理科学、信息科学、系统科学、计算机科学与现代通信技术为一体的一门综合性边缘学科。它是运用系统的方法以计算机和现代通信技术为基本信息处理手段和工具的,能为管理决策提供信息服务的人—机系统.它可以实现数据处理功能、预测功能、计划功能、控制功能和辅助决策功能。管理信息系统的开发是一项复杂的系统工程,必须严格的按照系统规划、系统分析、系统设计、系统实施、系统运行与评价的开发步骤来进行。

管理信息系统旨在提供一个全面的信息加工处理进一步利用的工具,以提高管理水平。在系统开发之前,必须了解该系统的特点、适用范围以及使用者需要一个什么样的系统,以此作为基础为开发系统准确定位,然后对使用者所需实现的功能进行分析总结,根据使用者的实际要求来给系统设计一个初步方案。系统的开发不仅是要实现对数据处理的及时与正确,而且要考虑系统是否具有控制功能,及时将数据反馈给操作者,以进行监测和协调,保证系统的正常运行;也要考虑是否具有预测功能,运用一定的数学方法利用历史的数据对未来进行预测的工作。

设计实践上的体会

在设计的过程中,我掌握了很多了很多关于本系统的编程知识,并对这种成熟并广泛应用的技术进行了深入的学习。设计的过程也是一个再学习的过程,在遇到问题的时候我尽量自己想办法解决,这在很大程度上激发了我们的自学能力;在没有办法解决的情况下,认真的向老师请教,从老师那里我学到了很多的知识,老师对我的指导起到了画龙点睛的作用。

以往我们曾经有过多次设计的体会,但只是设计一个模块或一个小系统,而这一次毕业设计是综合所学的管理和计算机的知识来设计一个适合运行管理的系统软件。要想设计使用户满意,就需要我们付出更多的努力。我在设计中经常出现一些问题不知该如何解决,在此时许多同学给予了我们帮助。在设计的过程中增加了于实际接触的机会,不仅培养了我的自学和编程能力,让我在即将离开学校进入社会之前有了一定的资本,提高了我与人沟通的能力。

程序设计中的体会

在我的程序设计过程中,我充分的体会到了“实践出真知”这一点,书本上的知识是不够的,只有把理论与实践相结合才能够真正的学到知识。一个管理信息系统的设计,不可能一步到位,还需要不断的完善和补充。同时,系统中还存在许多问题,有待在日后的使用中发现和解决。编程前的深思熟虑是减少程序调试工作量的重要方法,只有进行充分考虑,才会减少调试过程中的工作量。虽然在开始写程序之前我们做了多的准备工作,但在真正的写程序时仍然发现许多问题,有些问题是分析时的疏漏,有些则是如果不做无论如何也想不到的。





















参考文献

[1]BruceEckel.《JAVA编程思想》.机械工业出版社,2003年10月:1-378

[2]赛奎春.《JAVA工程应用与项目实践》.机械工业出版社,2002年8月:23-294

[3]FLANAGAN.《JAVA技术手册》.中国电力出版社,2002年6月:1-465

[4]孙一林,彭波.《JSP数据库编程实例》.清华大学出版社,2002年8月:30-210

[5]LEEANNEPHILLIPS.《巧学活用JSP》.电子工业出版社,2004年8月:1-319

[6]飞思科技产品研发中心.《JSP应用开发详解》.电子工业出版社,2003年9月:32-300

[7]耿祥义,张跃平.《JSP实用教程》.清华大学出版社,2003年5月1日:1-354

[8]孙涌.《现代软件工程》.北京希望电子出版社,2003年8月:1-246

[9]萨师煊,王珊.《数据库系统概论》.高等教育出版社,2002年2月:3-460

[10]Brown等.《JSP编程指南(第二版)》.电子工业出版社,2003年3月:1-268

[11]清宏计算机工作室.《JSP编程技巧》.机械工业出版社,2004年5月:1-410

[12]朱红,司光亚.《JSP编程指南》.电子工业出版5、健康管理平台设计与实现











班级:学号:

姓名:

学院:

专业:

指导教师:













面向特定群体的健康管理平台设计与实现

摘要

随着网络技术的不断发展,网站的开发与运用变得更加广泛。这次采用java语言SSH框架(Spring,Struts,Hibernate)设计并实现了面向特定群体的健康管理平台。该网站主要有教师饮食管理、教师健康日志、教师体检管理、疾病预测评估等功能模块。通过该网站,教师可以更好的关注自己的体检状况以及最近的身体状况,根据自身情况调整饮食,睡眠等生活习惯,并且可以及时预测高血压以及糖尿病的患病可能性大小,以便采取有效地预防措施。

本系统采用的是典型的J2EE三层结构,分为表现层、中间层(业务逻辑层)和数据服务层。三层体系将业务规则、数据访问及合法性校验等工作放在中间层处理。客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与数据库交互。



关键词:健康管理,慢性病,Spring,Struts,Hibernate











目录

1引言 1

1.1设计背景 1

1.2设计目的和意义 1

1.3国内外研究现状 2

2系统需求分析 3

2.1系统目标 3

2.2系统功能要求 3

2.2.1前台功能 3

2.2.2后台功能 4

2.3系统性能要求 4

2.4系统数据要求 4

2.4.1数据的性质 4

2.4.2数据字典 5

2.4.3实体联系图 6

3系统设计 9

3.1开发工具介绍 9

3.1.1Myeclipse介绍 9

3.1.2Oracle介绍 9

3.2开发技术介绍 10

3.2.1Struts2介绍 10

3.2.2Spring介绍 11

3.2.3Hibernate介绍 11

3.2.4Jsp介绍 12

3.2.5Jquery介绍 12

3.2.6Dwr(Ajax)介绍 13

3.3系统架构设计 13

3.3.1Hibernate持久化 15

3.3.2Service层 16

4系统概要设计 17

4.1系统体系结构 17

4.1.1设计原则 17

4.1.2运行架构 17

4.2网站功能结构 18

4.3数据库表设计 19

4.3.1数据库详细设计 19

4.3.2数据库逻辑结构设计 19

4.3.3数据库表设计 20

4.4信息安全设计 21

4.4.1网络安全 22

4.4.2其他安全 22

5详细设计 23

5.1系统流程图 23

5.2前台主页界面设计 23

5.2.1前台主页功能设计 23

5.2.2教师饮食管理功能设计 24

5.2.3教师健康日志功能设计 25

5.2.4教师体检管理功能设计 26

5.2.5疾病预测评估功能设计 27

5.2.6注册功能设计 28

5.3后台主页界面设计 29

5.3.1管理员用户登录功能 29

5.3.2管理管理员功能 30

5.3.3管理员管理体检结果 31

5.3.4管理员管理健康新闻 32

5.3.5管理员管理教师功能 33

6系统测试 34

6.1编写测试用例 34

6.2单元测试 34

6.3系统和集成测试 35

7结论 36

参考文献 37

致谢 38



1引言

1.1设计背景

紧张的工作节奏、教学和科研的压力、个人不良的工作生活习惯、以及伴随工作压力而来的家庭关系、人际关系紧张等因素使得高校群体成为慢性病的高发群体[1]。学生入学的定期体检,教职工人入职体检,以及所有学生和教职工的定期体检工作,甚至个人自愿定期进行身体健康检查等都离不开医院的体检。人们对体检工作越来越重视,目前,传统的体检一直延用手工管理的方式,对健康信息的可视化平台需求迫切。

实现对健康信息分析的可视化,根据高危人群的日常行为,建立由此引发的发病概率预测模型,对高危人群做出相应的行为干预。健康管理平台不仅包含对个体健康曲线的可视化,同时包含对某群体健康曲线的可视化及预测,并以此为基础对个体日常行为的干预显示,以此为背景我选择设计健康管理平台。

1.2设计目的和意义

健康管理既是一个概念,也是一种方法,更是一套完善、周密的服务程序,其目的在于使病人以及健康人更好地拥有健康、恢复健康、促进健康并尽量节约经费开支,有效降低医疗支出。健康管理有如下几大作用:一是可以了解居民的身体年龄,判断疾病指向;二是可以根据日常行为判断发病概率,以此为基础由医生提供降低慢性病发生危险性的行为干预方案;三是可以长期(终生)跟踪高危人群的健康,最大限度减少重大疾病的发生;四是可以节省维护健康的时间和金钱,提高保健效率[2]。

建立面向教师的健康管理平台的目的,对于个人,是如何利用健康体检系统中的信息为人们的健康保驾护航。而健康信息信息管理系统的管理和利用,不仅需要具备基础医学知识、临床医学知识、流行病学知识、计算机技术、数学统计知识等综合素质的专业人员,同时需要有庞大的保健医学、预防医学、临床医学、康复医学等专业的资深专家团队的支持,才能够为个人提供一系列的健康管理服务。

当今世界,信息管理数字化非计算机莫属,只有利用计算机技术,使用我国各个高校统一标准的健康体检系统表格,开发高校健康体检系统的系统软件,设置教师健康体检系统的计算机编号,制作教师的健康体检档案,并详细记录其本次体检程中所发现的健康问题和处理情况等,实现用户的健康体检系统信息在学校范围内的网络信息交换和共享,利用计算机技术,对用户的健康体检系统实现连续的动态管理。健康信息管理系统以计算机为工具,通过对用户体检所得的数据进行信息管理,把管理人员从繁琐的数据计算处理中解脱出来,为更好的帮组用户身体健康监督检查,从而全面提高质量。具体通过本系统可以对用户的基本健康状况进行各种必要的统计和分析[3]。

本项目将针对高校群体研发多模态的健康数据采集系统,对历年体检数据、就诊数据、膳食结构、生活习惯等健康相关信息建立统一管理系统,并在此基础上采用数据挖掘方法对诸如心血管疾病、高血压、糖尿病等慢性病进行有效建模与评估,对高校群体内广泛存在的亚健康状态进行综合客观评价和风险预测,最终实现针对高校群体慢性病患者及其高危人群的动态跟踪健康管理与干预。

1.3国内外研究现状

健康管理的概念最早见于美国,早在1929年美国洛杉矶水利局就成立了最早的健康维护组织。早在20世纪70年代的美国,由于健康保险的发展以及医疗服务模式的改变,要求医生能更好地指导病人进行疾病预防以及更加节省医疗费用。健康服务组织通过对人群的健康状况进行评价和疾病的风险评估,科学预测疾病的危险因素,制定具体的、有针对性的预防和保健措施。通过健康管理美国的医疗费比以前节省了大约10%,同时避免了疾病的发生,提高了生活质量。资料显示,通过健康管理计划,在1978-1983年,美国人的胆固醇水平下降了2%;高血压水平下降了4%;冠心病发病率下降了16%。美国密执安大学健康管理研究中心主任第·艾鼎敦博士(Dee.W.Edington)曾经提出美国20多年的研究得出了9:1定律结论,即90%的人通过健康管理后,医疗费用降到了原来的10%;10%的人未做健康管理,医疗费用比原来上升了90%。通过经济学分析发现,在健康管理方面投入1元钱,相当于减少3-6元医疗费用的开销。如果加上由此产生的劳动生产率提高的回报,实际效益达到投入的8倍[4]。

健康管理在中国刚刚起步,是一个朝阳的产业。目前在中国大陆地区仅有少数专业的健康管理机构,大部分为医院及体检中心的附属部门。健康管理的从业人数没有准确的数据,估计全国在10万人以上,也就是说我国享受科学、专业的健康管理服务的人数只占人口总数的万分之二,这一比例与美国70%居民能够在健康管理公司或企业接受完善的服务相去甚远。而且目前健康管理仍然主要依赖于简单的单次体检或就诊数据由医生提供一些生活习惯的建议和意见,并没有把个人的历史病历以及日常行为对个人慢性病的影响考虑进去。此外,目前的健康管理也主要是针对已患病的患者,还未做到“早筛选、早预防、早发现、早诊断”的动态追踪的健康管理模式。

2系统需求分析

2.1系统目标

健康管理平台的总目标是:在计算机网络,数据库和先进的开发平台上,利用现有的软件,配置一定的硬件,开发一个具有开放体系结构的、易扩充的、易维护的、具有良好人机交互界面的教师健康管理平台。

具体的要求如下:

1)教师可以方便的使用五大基本功能;

2)独立于具体的数据库平台。对于与数据库交互的部分充分考虑兼容性;

3)容易在原先基础上进行二次开发;

4)中间基础平台的无型性。尽量采用开放的标准技术,达到跨平台运行的效果。

为了达到以上的开发目的,健康管理平台应遵循一定的设计和开发与原则:

1)模块接口定义清晰;

2)基础类库和接口设计合理,尽量建立叮扩展的接口和抽象类;

3)数据库操作使用标准SQL语句,如果一定要使用有差别的SQL语句,则尽量集中在一起,以减少将来维护和移植的难度;

4)采用开放的标准和工具等。

2.2系统的功能要求

2.2.1前台功能

在前台的功能实现上,可以分为以下几个部分:

1.教师饮食管理:根据教师的相关信息,计算其每天所需热量,给出一周的推荐菜单。

2.教师健康日志:用户可以记录自己健康日记,记录每一天的睡眠,饮酒,吸烟,血压,体重等情况。

3.教师体检管理:教师可通过该平台查询每次的体检结果,显示部分项目随时间变化的曲线。

4.疾病预测评估:针对糖尿病和高血压两种疾病,利用数学线性回归的方法,模拟计算出教师患病概率。

2.2.2后台功能

后台主要有四个功能:

1.管理员用户登录功能:通过编号登录系统。

2.管理员管理教师功能:可以增删改查教师基本信息。

3.管理员管理体检结果:可以增删改查教师体检记录。

4.管理员管理健康新闻:可以发布或删除新闻。

2.3系统的性能需求

健康管理平台的特性要求网站系统需要具备以下几个主要特性:

1)多样性:健康管理平台在设计时必须遵循的一个重要原则,就是以用户为系统设计的中心。网络的发展大大降低了信息咨询的成本,用户面临更多的选择,所以,健康管理平台除了降低成本以外,还必须在外观,功能的多样性上下工夫,才能够得到用户的认可。具体来说,应用系统应能实现用户特定的需求,操作界面友好、方便,功能设置符合用户的习惯和要求。

2)易维护:管理员能够简单方便地管理系统,定义新的应用,并对系统进行日常维护;随着健康管理平台信息的变更或增加、数据规模的增大,系统升级、维护应易于操作;各子系统、功能模块的设计应具有良好的灵活性,保证在健康管理平台系统建设过程中后期系统功能的实现不影响前期已投入使用的系统功能。

3)安全性:系统应充分考虑信息、设备、运行和管理的安全性,建立完善的多层次的安全保障体系,保证用户的个人信息等资料的数据安全。

4)可扩展:健康管理平台的用户从事着各种行业,他们的需求各不相同,系统在设计时应充分考虑到用户需求不断变化的需要,降低系统在扩展新的业务功能时的复杂度[5]。

2.4系统的数据要求

2.4.1数据的性质

1.数据录入和处理的准确性和实时性。

数据的输入是否准确是数据处理的前提,错误的输入会导致系统输出的不正确和不可用,从而使系统的工作失去意义。数据的输入来源是用户的手工输入。手工输入要通过系统界面上的安排系统具有容错性,并且对用户操作进行实时的跟踪和错误提示。

在系统中,数据的输入往往是大量的,因此系统要有一定的处理能力,以保证迅速的处理数据。

2.数据的一致性与完整性。

由于网站的数据是共享的,所以如何保证这些数据的一致性,是网站必须解决的问题。要解决这一问题,要有一定的人员维护数据的一致性,在数据录入处控制数据的去向,并且要求对数据库的数据完整性进行严格的约束。

对于输入的数据,要为其定义完整性规则,如果不能符合完整性约束,网站应该拒绝该数据。

3.数据的共享与独立性。

整个健康管理平台的数据是共享的。然而,从网站开发的角度上看,共享会给设计和调试带来困难。因此,应该提供灵活的配置,使各个分系统能够独立运行,而通过人工干预的手段进行系统数据的交换。这样,也能提供系统的强壮性。

2.4.2数据字典

健康管理平台主要涉及到真实姓名数据字典,如表2.1所示:

表2.1真实姓名数据字典





















用户注册界面涉及到电话的数据字典,如表2.2所示:

表2.2电话数据字典



















用户注册界面涉及到邮箱的数据字典,如表2.3所示:

表2.3邮箱数据字典























2.4.3实体联系图

健康管理平台主要涉及的实体联系图有六个,实体有Teacher、Manager、Food、

Notice、Exam、Dairy。



图2.1教师E-R图



图2.2食物E-R图







图2.3新闻E-R图



图2.4体检E-R图







图2.5管理员E-R图





图2.6日志E-R图















































3系统设计

3.1开发工具介绍

3.1.1MyEclipse介绍

MyEclipse企业级工作平台(MyEclipseEnterpriseWorkbench,简称MyEclipse)是对EclipseIDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSP,CSS,SQL,Javascript,Spring,Hibernate。

MyEclipse是一个十分优秀的用于开发Java,J2EE的Eclipse插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。MyEclipse目前支持JavaServlet,AJAX,JSP,JSF,Struts,Spring,Hibernate,EJB3,JDBC数据库链接工具等多项功能。MyEclipse几乎囊括了目前所有主流开源产品的专属eclipse开发工具[6]。

MyEclipse2013支持HTML5、JQuery和主流的JavaScript库。随着MyEclipse2013支持Html5,可以添加音频、视频和API元素到项目,从而为移动设备创建复杂的Web应用程序。甚至还可以通过HTML5可视化设计器设计令人难以置信的用户界面。同时,随着MyEclipse2013支持JQuery,可以通过插件提升性能,并添加动画效果到设计中。

3.1.2Oracle介绍

Oracle数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如SilverStream就是基于数据库的一种中间件。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。

Oracle数据库最新版本为OracleDatabase12c。Oracle数据库12c引入了一个新的多承租方架构,使用该架构可轻松部署和管理数据库云。此外,一些创新特性可最大限度地提高资源使用率和灵活性,如OracleMultitenant可快速整合多个数据库,而AutomaticDataOptimization和HeatMap能以更高的密度压缩数据和对数据分层。这些独一无二的技术进步再加上在可用性、安全性和大数据支持方面的主要增强,使得Oracle数据库12c成为私有云和公有云部署的理想平台[7]。

3.2开发技术介绍

3.2.1Struts2

Struts是Apache软件基金会(ASF)赞助的一个开源项目。它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用Java?Servlet/JSP技术,实现了基于JavaEE的Web应用的MVC设计模式的应用框架,是MVC经典设计模式中的一个经典产品。

在Struts中,已经由一个名为ActionServle的Servlet充当控制器(Controller)的角色,根据描述模型、视图、控制器对应关系的struts-config.xml的配置文件,转发视图(View)的请求,组装响应数据模型(Model)。在MVC的模型(Model)部分,经常划分为两个主要子系统(系统的内部数据状态与改变数据状态的逻辑动作),这两个概念子系统分别具体对应Struts里的ActionForm与Action两个需要继承实现超类。在这里,Struts可以与各种标准的数据访问技术结合在一起,包括EnterpriseJavaBeans(EJB),JDBC与JNDI。在Struts的视图(View)端,除了使用标准的JavaServerPages(JSP)以外,还提供了大量的标签库使用,同时也可以与其他表现层组件技术(产品)进行整合,比如VelocityTemplates,XSLT等。通过应用Struts的框架,最终用户可以把大部分的关注点放在自己的业务逻辑(Action)与映射关系的配置文件(struts-config.xml)中。

在JavaEE的Web应用发展的初期,除了使用Servlet技术以外,普遍是在JavaServerPages(JSP)的源代码中,采用HTML与Java代码混合的方式进行开发。因为这两种方式不可避免的要把表现与业务逻辑代码混合在一起,都给前期开发与后期维护带来巨大的复杂度。为了摆脱上述的约束与局限,把业务逻辑代码从表现层中清晰的分离出来,2000年,CraigMcClanahan采用了MVC的设计模式开发Struts。后来该框架产品一度被认为是最广泛、最流行JAVA的WEB应用框架。2006年,WebWork与Struts这两个优秀的JavaEEWeb框架(Web?Framework〕的团体,决定合作共同开发一个新的,整合了WebWork与Struts优点,并且更加优雅、扩展性更强的框架,命名为“Struts2”,原Struts的1.x版本产品称为“Struts1”。

其全新的Struts2的体系结构与Struts1的体系结构差别巨大。Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts2可以理解为WebWork的更新产品。虽然从Struts1到Struts2有着太大的变化,但是相对于WebWork,Struts2的变化很小。

3.2.2Spring介绍

2002年wrox出版了《ExpertoneononeJ2EEdesignanddevelopment》一书。该书的作者是RodJohnson。在书中,Johnson对传统的J2EE架构提出深层次的思考和质疑。并提出J2EE的实用主义思想。2003年,J2EE领域出现一个新的框架:Spring,该框架同样出自Johnson之手。事实上,Spring框架是《ExpertoneononeJ2EEdesignanddevelopment》一书中思想的全面体现和完善,Spring对实用主义J2EE思想进一步改造和扩充,使其发展成更开放、清晰、全面及高效的开发框架。一经推出,就得到众多开发者的拥戴。传统J2EE应用的开发效率低,应用服务器厂商对各种技术的支持并没有真正统一,导致J2EE的应用并没有真正实现WriteOnce及RunAnywhere的承诺。Spring作为开源的中间件,独立于各种应用服务器,甚至无须应用服务器的支持,也能提供应用服务器的功能,如声明式事务等。Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的"一站式"选择,并贯穿表现层、业务层及持久层。然而,Spring并不想取代那些已有的框架,而与它们无缝地整合[8]。总结起来,Spring有如下优点:

1.低侵入式设计,代码污染极低。

2.独立于各种应用服务器,可以真正实现WriteOnce,RunAnywhere的承诺。

3.Spring的DI机制降低了业务对象替换的复杂性。

4.Spring并不完全依赖于Spring,开发者可自由选用Spring框架的部分或全部。

3.2.3Hibernate介绍

Hibernate是目前最流行的ORM框架,其采用非常优雅的方式将SQL操作完全包装成对象化的操作。其作者GavinKing在持久层设计上极富经验,采用非常少的代码实现了整个框架,同时完全开放源代码,即使偶尔遇到无法理解的情况,也可以参照源代码来理解其在持久层上灵巧而智能的设计。下面通过对比来了解Hibernate和传统JDBC操作数据库持久层之间的差异[9]。

3.2.4JSP介绍

JSP是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态技术标准。在传统的网页HTML文件(.htm,.html)中加入Java程序片段(Scriptlet)和JSP标签,就构成了JSP网页java程序片段可以操纵数据库、重新定向网页以及发送E-mail等,实现建立动态网站所需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,这样大大降低了对客户浏览器的要求,即使客户浏览器端不支持Java,也可以访问JSP网页。

JSP全名为JavaServerPages,其根本是一个简化的Servlet设计,他实现了Html语法中的java扩张(以<%,%>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户端。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。

JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。JSP(JavaServerPages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。

JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。Java?Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要JavaServlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。

3.2.5Jquery(JavaScript)介绍

JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言。同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML(标准通用标记语言的子集)网页添加动态功能,比如响应用户的各种操作。它最初由网景公司(Netscape)的BrendanEich设计,是一种动态、弱类型、基于原型的语言,内置支持类。JavaScript是Sun公司(已被oracle收购)的注册商标。Ecma国际以JavaScript为基础制定了ECMAScript标准。JavaScript也可以用于其他场合,如服务器端编程。完整的JavaScript实现包含三个部分:ECMAScript,文档对象模型,浏览器对象模型。

jQuery是一个兼容多浏览器的javascript框架,核心理念是writeless,domore(写得更少,做得更多)。jQuery是免费、开源的,使用MIT许可协议。jQuery的语法设计可以使开发者更加便捷,例如操作文档对象、选择DOM元素、制作动画效果、事件处理、使用Ajax以及其他功能。除此以外,jQuery提供API让开发者编写插件。其模块化的使用方式使开发者可以很轻松的开发出功能强大的静态或动态网页。

3.2.6DWR(Ajax)介绍

AJAX指异步JavaScript及XML(AsynchronousJavascript+XML)。核心是JavaScript对象XmlHttpRequest。该对象在InternetExplorer5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。

AJAX不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。在浏览器与Web服务器之间使用异步数据传输(HTTP请求),这样就可使网页从服务器请求少量的信息,而不是整个页面;可使因特网应用程序更小、更快,更友好;是一种独立于Web服务器软件的浏览器技术。DWR它包含两个主要的部分:允许JavaScript从WEB服务器上一个遵循了AJAX原则的Servlet中获取数据.另外一方面一个JavaScript库可以帮助网站开发人员轻松地利用获取的数据来动态改变网页的内容。DWR采取了一个类似AJAX的新方法来动态生成基于JAVA类的JavaScript代码。这样WEB开发人员就可以在JavaScript里使用Java代码,就像它们是浏览器的本地代码一样;但是Java代码运行在WEB服务器端而且可以自由访问WEB服务器的资源。

3.3系统架构设计

本系统采用严格的J2EE应用结构,主要有如下几个分层。

表现层:由JSP页面组成。

MVC层:使用Struts框架。

业务逻辑层:主要由Springloc容器管理的业务逻辑组件组成。

DAO层:由DAO组件组成,实现类必须继承Spring提供的HibernateDaoSupport。

Hibernate持久层:由PO组成,并在HibernateSession管理下,完成数据库访问。

数据库服务层:使用Oracle数据库存储持久化数据。

系统的具体分层如图3.1所示:























图3.1系统结构图

在图3.1黑色大方框内的MVC控制层、Service层及DAO组件层的组件,都由SpringIOC容器负责生成,并管理组件的实例。

本系统不仅严格按MVC模式设计,还按J2EE分层设计,将中间层严格分成业务逻辑层、DAO层及数据持久层等。MVC层的控制器绝对禁止持久层访问,甚至不参与业务逻辑的实现。表现层采用传统JSP技术。

本系统采用的是典型的J2EE三层结构,分为表现层、中间层(业务逻辑层)和数据服务层。三层体系将业务规则、数据访问及合法性校验等工作放在中间层处理。客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与数据库交互。JSP广泛的应用和稳定的表现,为其作为表现层技术打下了坚实的基础。中间层采用的是流行的Spring+Hibernate,为了将控制层与业务逻辑层分离,又细分为以下几种:

Web层,就是MVC模式里面的C,负责逻辑层和表现层的交互。调用业务逻辑层,并将业务数据返回给表现层作组织表现,该系统的MVC采用Struts框架。

Service层(就是业务逻辑层),负责实现业务逻辑。业务逻辑层以DAO层为基础,通过对DAO组件的正面模式包装,完成系统所要求的业务逻辑。

DAO层,负责与持久化对象交互。该层封装了数据的增、删、查、改的操作。

PO,持久化对象。通过实体关系映射工具将关系型数据库的数据映射成对象,很方便地实现以面向对象方式操作数据库,该系统采用Hibernate作为ORM框架。Spring的作用贯穿了整个中间层,将Web层、Service层、DAO层及PO无缝整合,其数据服务层用来存放数据。

3.3.1Hibernate持久化

通过使用Hibernate持久层,可以避免使用传统的JDBC操作数据库,对JDBC近一步包装,从而更好地使用面向对象的方式来操作数据库。保证了整个软件开发过程以面向对象的方式进行,即面向对象分析、设计及编程,透过Hibernate对PO对象持久化操作,不管插入还是查询都是通过PO。

在Hibernate持久层之上,可使用DAO组件再次封装数据库操作。通过DAO层,可以让业务逻辑层与具体持久层技术分离,一旦需要更换持久层技术时,业务逻辑层组件不需要任何改变。因此,使用DAO组件,即意味着引入DAO模式,使每个DAO组件包含了数据库的访问逻辑:每个DAO组件可对一个数据库表完成基本的CRUD等操作。

DAO模式的实现至少需要如下三个部分:

1.DAO工厂类。

2.DAO接口。

3.DAO接口的实现类。DAO模式是一种更符合软件工程的开发方式,使用DAO模式有如下理由:

DAO模式抽象出数据访问方式,业务逻辑组件无须理会底层的数据库访问,而只专注于业务逻辑的实现。

DAO将数据访问集中在独立的一层,所有的数据访问都由DAO对象完成,这层独立的DAO分离了数据访问的实现与其他业务逻辑,使得系统更具可维护性。

DAO还有助于提升系统的可移植性。独立的DAO层使得系统能在不同的数据库之间轻易切换,底层的数据库实现对于业务逻辑组件是透明的。数据库移植时仅仅影响DAO层,不同数据库的切换不会影响业务逻辑组件,因此提高了系统的可复用性。

对于不同的持久层技术,Spring的DAO提供一个DAO模板,将通用的操作放在模板里完成,而对于特定的操作,则通过回调接口完成。

3.3.2Service层

Service组件采用正面模式封装多个DAO组件,DAO对象与Service组件之间的关Service组件需要实现的业务方法主要取决于业务的需要,通常需要在业务组件中包含对应的方法。

业务层组件的实现业务层组件与具体的数据库访问技术分离,使所有的数据库访问依赖于DAO组件,定义一个FacadeManagerImpl来包装7个Dao这样就可以把逻辑层和Dao分开,达到松散耦合的效果。事务管理将推迟到Service组件而不是DAO组件,因为只有对业务逻辑方法添加事务才有实际的意义,对于单个DAO方法(基本的CRUD方法)增加事务操作是没有太大实际意义的。关于事务属性的配置,本系统使用Spring提供的TransactionProxyFactoryBean配置事务代理。这样不必为每个目标对象配置代理bean;避免了目标对象被直接调用。部署业务层组件单独配置系统的业务逻辑层,可避免因配置文件过大引起配置文件难以阅读。将配置文件按层和模块分开配置,可以提高Spring配置文件的可读性和可理解性。在applicationContext.xml配置文件中配置数据源、事务管理器、业务逻辑组件和事务管理器等bean[10]。



























4系统概要设计

4.1系统体系结构

基于B/S结构的健康管理平台,应由终端(用户主机/浏览器)、WEB服务器、数据服务器构成。健康管理平台的核心是中间的接入服务器和应用服务器部分。健康管理平台的总体结构图如图4.1所示:



图4.1健康管理平台总体结构

4.1.1设计原则

在进行软件系统开发的最初环节,一般都需要进行系统的选型,即根据系统功能的实际需求,选择合适的开发工具及软件架构。

本系统设计时,比较主流的B/S设计有基于JSP、ASP、PHP、CGI及J2EE等模式。相比较而言PHP的功能相对简单,不适合做大程序;而CGI效率相对较低,所以也不考虑。由于J2EE的开源的框架中提供了MVC模式实现框架Struts、对象关系模型中的Hibernate的框架及拥有事务管理和依赖注入的Spring。利用现存框架可以更快开发系统,所以选择Java技术作为健康平台的开发工具。

4.1.2运行架构

首先要对系统进行分析,确定对系统的综合要求,分析系统的数据要求,导出系统的逻辑模型。再对系统分析后确定系统的模块,对每个模块进行研究,这也是该系统的一个主要解决的地方。本系统包括了用户,管理员等很多信息,所以对该系统要建立数据库。管理系统是基于WEB的,所以需要一定的网页支持以及与数据库的连接。该系统主要是以JSP技术为主来开发的,所以要对该技术进行了解,学习。除此之外采用的技术和环境要求如下:

数据库访问:oracle数据库

服务器访问:Tomcat系列服务器

网页编程技术:DIV+CSS、JAVASCRIPT、AJAX等

后台处理技术:Struts2+Hibernate+Spring

硬件需求:PIII/512M/10G及以上配置

操作系统:Windows2000及以上操作系统

4.2网站功能结构

网站前台功能结构图,如图4.2所示:



















图4.2网站前台功能结构图

网站后台功能结构图,如图4.3所示:



















图4.3网站后台功能结构图



4.3数据库设计

4.3.1数据库详细设计

数据项和数据结构如下:

1.管理员表(Manager):管理员编号,管理员名字,管理员密码;

2.新闻表(Notice):新闻编号,新闻标题,新闻内容,发布时间,图片路径,发布者;

3.食物表(Food):食物编号,食物名字,食物热量,食物类型,食物碳水化合物,纤维素,脂肪,蛋白质;

4.体检表(Exam):收缩压,舒张压,体重指数,腰臀比,尿素,尿酸,肌酐,甘油三酯,胆固醇,高密度脂蛋白胆固醇,低密度脂蛋白胆固醇,葡萄糖,同型半膀胱氨酸,微量白蛋白,微量白蛋白/尿肌酐;

5.教师表(Teacher):教师编号,教师昵称,教师密码,教师年龄,教师性别,教师邮箱,找回密码问题,找回密码答案,教师真实名字;

6.日志表(Dairy):日志内容,日志时间,睡眠时间,心情,抽烟,体重,压力,高压,低压,心率;

7.日志食物表(Dairy-food):日志编号,食物编号。





4.3.2数据库逻辑结构设计

数据库逻辑结构设计汇总表,如表4.1所示:

表4.1汇总表

表名 功能说明 Manager 管理员表 Notice 新闻表 Food 食物表 Exam 体检表 Teacher 教师表 Dairy 日志表 Dairy-food 日志食物表 4.3.3数据库表设计

数据库中共涉及到七张表,分别是管理员表,新闻表,食物表,日志表,日志食物表,体检表以及教师表。

表4.2管理员表

字段名称 字段含义 数据类型 长度 NULL 注释 id ID Number 10 NO 主键 name 用户名 Varchar2 20 NO password 密码 String 20 NO 表4.3新闻表

字段名称 字段含义 数据类型 长度 NULL 注释 id ID Number 10 NO 主键 title 用户名 Varchar2 50 NO content 密码 Varchar2 2000 NO datetime 发布时间 Timestamp 6 NO imagepath 图片路径 Varchar2 30 NO manager_id 发布者 Number 10 YES 表4.4食物表

字段名称 字段含义 数据类型 长度 NULL 注释 id ID Number 10 NO 主键 name 食物名 Float 20 NO heat 热量 Float 126 YES carbohydrate 碳水化合物 Float 126 YES fat 脂肪 Float 126 YES fiber 纤维素 Float 126 YES protein 蛋白质 Float 126 YES type 类型 Number 10 NO 表4.5日志表

字段名称 字段含义 数据类型 长度 NULL 注释 datetime ID Varchar2 20 NO 主键 text 日志 Varchar2 2000 YES sleephour 睡眠 Float 126 YES mood 心情 Varchar2 255 YES cigrette 抽烟 Number 10 YES weight 体重 Float 126 YES pressure 压力 Varchar2 255 YES bphigh 高压 Float 126 YES bplow 低压 Float 126 YES bs 心率 Float 126 YES teacher_id 教师号 Number 10 YES



表4.6日志食物表

字段名称 字段含义 数据类型 长度 NULL 注释 dairy_id 日志ID Varchar2 20 NO 主键 food_id 食物ID Number 10 NO 主键 表4.7体检表

字段名称 字段含义 数据类型 长度 NULL 注释 id ID Number 10 NO 主键 datetime 体检时间 Varchar2 6 NO sbp 收缩压 Float 255 YES dbp 舒张压 Float 255 YES bmi 体重指数 Float 255 YES whr 腰臀比 Float 255 YES bun 胆固醇 Float 255 YES ua 尿素 Float 255 YES crea 尿酸 Float 255 YES tg 肌酐 Float 255 YES chol 甘油三酯 Float 255 YES glu 葡萄糖 Float 255 YES hcy 同型半膀胱氨酸 Float 255 YES m_alb 微量白蛋白 Float 255 YES m_alb_crea 微量白蛋白/尿肌酐 Float 255 YES teacher_id 教师ID Number 10 YES 表4.8教师表

字段名称 字段含义 数据类型 长度 NULL 注释 id ID Number 10 NO 主键 name 教师名 Varchar2 20 NO password 密码 Varchar2 20 NO age 年龄 Number 10 NO sex 性别 Varchar2 10 NO email 邮箱 Varchar2 30 NO question 找回密码问题 Varchar2 50 NO answer 找回密码答案 Varchar2 50 NO phone 电话 Varchar2 11 NO realname 真实名字 Varchar2 20 NO

4.4信息安全设计

网络的开放性导致网络技术的全面开放,任何团体和个人都可以获得网络资源,因而网络所面临的破坏和攻击将会是多方面的,可以是对软件环境实施攻出,也可以是对硬件环境实施攻击。网络的国际性还意味着网络的攻击将不仅仅来自本地网络用户,它可能来自Internet上的任何一台机器。即,发起攻击的节点可以位于世界上任何地方。因此可以说,网络安全所面临的将是一个国际性全球化的挑战。网络的自由性意味着网络最初对用户的使用并没有提供任何的技术约束,用户可以自由地访问网络,自由地使用和发布各种类型的信息。用户只对自己的行为负责,而没有受到任何的法律限制。如何保护个人的机密信息不受木马和病毒的入侵,己成为信息安全化健康发展所要考虑的重要事情之一。

健康管理平台用户个人信息的安全问题是至关重要的,制定切实可行的安全策略和实施有力的防范手段是非常必要的。系统的安全体系由下述结构组成,如下图4.4所示:























图4.4系统的安全体系结构

4.4.1网络安全

Jsp技术虽然比较安全,但还是存在着很多安全上的问题的,客观的说,服务器软件的开发商在内部测试中不可能将系统中的所有bug找出来,即使发布了软件后,被发现的漏洞也只会是其中的很小一部分,将来还会不断的有新的安全问题出现,所以我们必须时刻提高警惕。网站服务器的操作系统要打好补丁,进行安全权限的设置,并安装好防火墙,杀毒软件等,定时对数据进行备份。

4.4.2其他安全

环境安全是整个系统安全的基础,要把信息泄露的危险减至最低限度,需要选择适当的设施位置,要充分考虑水灾、地震、电磁干扰与辐射以及其他等人为威胁,保证净化电源等等。物理安全也是整个系统安全的基础设置之一,物理安全涉及以系统中微机和主机、服务器等资源的房间,必须进行严格的管理。

5详细设计

5.1系统流程图

在计算教师所需标准热量值得流程图,如图5.1所示:

























18601860











图5.1计算热量值流程图



5.2前台功能设计

5.2.1前台主页面设计

健康管理平台的主页面主要功能有教师的登陆,注册功能,后台界面的入口,四项主要功能的入口和简单介绍,健康新闻的展示,校园风景的动态展示以及相关部门的网站链接,此界面在实现登录时采用DWR异步刷新。主页面具体界面如图5.2所示:



图5.2健康管理平台主界面

5.2.2教师饮食管理功能设计

教师饮食管理功能中,主要是根据教师身高,体重,年龄,性别,活动量来计算其每天所需热量,给出一周的推荐菜单。用到的计算式是[11]:

人体基础代谢的需要的基本热量(REE)精确算法如表5.1所示:



表5.1基本热量精确算法表



女子 18-30岁 14.6x体重(公斤)+450 31-60岁 8.6x体重(公斤)+830 60岁以上 10.4x体重(公斤)+600

男子 18-30岁 15.2x体重(公斤)+680 31-60岁 11.5x体重(公斤)+83 60岁以上 13.4x体重(公斤)+490 每天所需的热量=REE×活动系数=(大卡)



表5.2活动系数表

活动内容 活动系数 卧床(全天) 1.2 轻活动生活模式(多坐或缓步) 1.3 一般活动度 1.5-1.75 活动量大的生活模式 2.0











该功能具体界面如图5.3所示:



图5.3教师饮食管理功能界面

5.2.3教师健康日志功能设计

用户可以记录自己健康日记,还可记录每一天的睡眠,饮酒,吸烟,血压体重,心情等情况,录入自己一天的饮食量,记录健康日志采用的是kindeditor这款文本编辑器健康日志功能界面具体如图5.4所示:



图5.4健康日志功能界面

5.2.4教师体检管理功能设计

校医院从后台导入体检结果,教师可通过该平台查询每次的体检结果,并且利用Highcharts显示体检部分项目随时间变化的曲线,例如血压,血糖等。

Highcharts是一个用纯JavaScript编写的一个图表库,能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习、个人网站和非商业用途使用。目前Highcharts支持的图表类型有曲线图、区域图、柱状图、饼状图、散状点图和综合图表。Highcharts界面美观,由于使用JavaScript编写,所以不需要像Flash和Java那样需要插件才可以运行,而且运行速度快。另外Highcharts还有很好的兼容性,能够完美支持当前大多数浏览器[12]。体检管理功能具体界面如图5.5所示:

图5.5教师体检管理功能界面

5.2.5疾病预测评估功能设计

主要是针对糖尿病和高血压两种疾病,根据用户的体检相关项以及数据库近十年同类人患病情况,分析出致病的危险因素,利用数学线性回归的方法,建立预测模型,未来体检者可输入相关体检项来模拟计算出教师患病概率,预测模型如图5.6所示:



图5.6疾病预测模型图

疾病预测评估界面具体如图5.7所示:



图5.7疾病预测功能界面

5.2.6注册功能设计

新用户可以按提示进行注册,每一项都用具体的正则表达式进行表单验证,确保信息有效可用,注册界面具体如图5.8所示:



图5.8注册功能界面

5.3后台功能设计

5.3.1管理员登录功能

管理员使用用户名密码登陆系统后台,登陆界面如图5.9所示:



图5.9管理员后台登录界面

管理员登陆后台后进入欢迎界面,此界面显示后台主要功能菜单以及登录时间,欢迎界面图5.10所示:



图5.10后台欢迎界面

5.3.2管理管理员功能

对管理员管理主要有查询、删除和添加操作,其中查询出来的管理员采用分页显示,调用的是HibernateTemplate中的excutefind方法,此方法中的参数为一个回调函数,查询及删除管理员具体界面如图5.11所示:



图5.11管理员查询及删除界面

添加管理员中分别对用户名密码进行验证添加,管理员添加界面如图5.12所示:



图5.12管理员添加界面

5.3.3管理员管理体检结果

教师体检结果管理可显示所有教师体检结果并可以删除不需要的记录,体检结果采用分页显示,每页默认显示10条记录,体检结果显示及删除具体界面如图5.13所示:



图5.13管理员管理体检结果界面

教师体检结果的添加使用POI读取Excel表格,POI是apache的子项目,目标是处理ole2对象。目前比较成熟的是HSSF接口,处理Excel对象。它不仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,可以控制一些属性如sheet,cell等[13]。体检结果添加具体界面如图5.14所示:



图5.14体检结果添加界面

5.3.4管理员管理健康新闻

健康新闻管理中可以添加,修改以及删除新闻,修改和删除具体界面如图5.15所示:



图5.15健康新闻修改删除界面

健康新闻的添加功能中,图片的上传采用struts处理文件上传,具体界面如图5.16所示:



图5.16健康新闻添加界面

5.3.5管理员管理教师功能

教师个人信息管理中有查看及删除教师信息功能,具体界面如图5.17所示:



图5.17教师管理界面



























系统测试

6.1编写测试用例

表6.1登陆测试用例

字段名称 描述 标识符 UC001 测试项 用户登录功能测试 测试环境要求 1.用户test/pass为有效登陆用户,用户test1为无效登录用户;

2.浏览器的cookie为被禁用 输入标准 用户输入正确的用户名和密码,单击登陆按钮

输入错误的用户名密码,单击登陆按钮

不输入用户名密码,单击登陆

输入正确的用户名不输入密码,单击登陆 输出标准 1.数据库中存在的用户可以正确登陆

2.显示错误提示界面

3.提示“请输入用户名”

4.提示“请输入密码”



表6.2注册测试用例

字段名称 描述 标识符 UC002 测试项 用户注册功能测试 测试环境要求 用户未注册过 输入标准 1.用户输入真实名字大于四个或小于两个

2.用户输入手机号不是11位

3.用户输入邮箱不含@

4.用户必填项输入为空 输出标准 1.系统提示输入正确的名字

2.系统提示输入正确的手机号

3.系统提示输入正确的邮箱格式

4.系统提示完成所有必要输入

6.2单元测试

在单元测试的时候,主要测试的是前后台各功能模块的功能是否都正常运行,是否和预期的结果相同,页面间的跳转和页面数据显示是否正常,实现的方式是单步调试,调试工具是用VS2005,辅助工具使用IE的脚本调试。在VS2005中设置断点,跟踪语句,逐句或者逐过程的调试,对出现的问题进行记录,并在完成所有测试后,对BUG进行了修复。

6.3系统和集成测试

系统测试是通过将健康管理的前后系统进行整合,整体的测试平台的性能,测试前后台是否有数据不匹配,或者数据冲突等问题。集成测试是将整个平台放在服务器上,通过远程的访问、使用,测试系统平台是否能正常运行,通过使用VS2005提供的压力测试工具,对平台进行压力测试,以测试在用户使用高峰期时,平台的承受能力。?

集成压力测试方法:?

1.创建测试项目;?

2.添加Web测试;?

3.运行健康管理平台,此时web测试工具将对网站的相应操作记录,记录充足后停止记录,并生成相应代码;

4.添加负载测试;?

5.在向导中设置需要测试环境,运行测试。

































7结论

本文从健康管理平台所需要实现的功能模块开始分析,决定使用Java开发该网站。并利用JDK,Tomcat,MyEclipse,Oracle等软件来搭建开发环境,利用Java技术的Spring、Hibernate、Struts等开源框架设计J2EE三层结构的中业务逻辑层和数据服务层,健康管理平台以Spring框架为核心,向下整合Hibernate进行持久层访问;向上整合Struts按清晰的MVC模式控制。这样可以更快开发松散耦合的健康管理平台。通过这次毕业设计学会利用java构建Web网站,在毕业设计中接触过不少开源框架。开源框架的强大让我觉得还有很多技术需要去学习,这也让我明白,要不断地学习新知识才会利于自己各方面的发展。

































参考文献

[1]王磊,河南省高校教师亚健康状态状况研究,河南师范大学学报(自然科学版),39(4):163-167,2011.

[2]中国卫生部疾病预防控制局,中国慢性病报告,北京,2009.

[3]北京交通大学校医院,北京交通大学教职工慢性病统计报告,北京,2012.

[4]WorldHealthOrganization.Preventingchronicdisease:avitalinvestment.Geneva,2005.

[5]辛立伟,张帆.Java从初学到精通.北京:电子工业出版社,2010.552.

[6]林建素,孟康健.《Eclipse开发学习笔记》(第1版)北京:电子工业出版社.2008.4.

[7]《程序员》杂志社.程序员2004合订本下?北京:电子工业出版社:2005.

[8]辛立伟,张帆.Java从初学到精通.北京:电子工业出版社,2010.552.

[9]耿祥义,张跃平.java2实用教程.北京:清华大学出版社,2006.134.

[10]朱福喜,唐晓军.Java程序设计技巧与开发实例?北京:人民邮电出版社:2004.

[11]万方数据库,亚健康相关论文,http://s.g.wanfangdata.com.cn/Paper.aspx?q=subhealth,2012.

[12]张智勇.JavaScript开发技术大全.北京:清华大学出版社,2009.201.

[13]李松林,陈华清,任鑫.《Eclipse宝典》(第1版).北京:电子工业出版社.2007.9.































































采购管理系统的分析与实现



摘要

当今社会己进入信息社会时代,信息己经受到社会的广泛关注,被看作社会和科学技术发展的三大支柱(材料、能源、信息)之一。信息是管理的基础,是进行决策的基本依据。在一个组织里,信息己作为人力、物力、财力之外的第四种能源,占有重要的地位。然而,信息是一种非物质的,有别于基本资源的新形式的资源。信息也是管理的对象,必须进行管理和控制。随着信息技术的发展及ERP系统的日益普及,计算机在管理中的作用越来越不容忽视。企业之间通过网络进行交易的趋势越来越明显。在这种环境中,采购作为生产经营的一个重要环节应加强管理,充分利用外部环境条件,逐步实现物资采购的信息化管理。

物资采购管理系统是针对内部而设计的,应用于的局域网,这样可以使得内部管理更有效的联系起来。企业采购管理系统是将IT技术用于企业采购信息的管理,它能够收集与存储企业采购的档案信息,提供更新与检索企业采购信息档案的接口;提高工作效率。

系统采用Java为编程语言。论文主要介绍了本课题的开发背景,所要完成的功能和开发的过程。重点的说明了系统设计的重点、设计思想、难点技术和解决方案。

关键词:企业采购;管理;系统;开发;JAVA

目录

摘要 i

Abstract ii

第一章引言 1

1.1研究现状 1

1.2主要研究的目的及内容 1

1.3研究方法及设计思路 2

1.3.1研究方法 2

1.3.2设计思路 2

1.4.相关技术简介 3

1.4.1JSP技术简介 3

1.4.2Struts框架 3

1.4.3Hibernate数据访问框架 4

1.4.4B/S模式分析 4

1.5系统开发步骤 5

第二章需求分析及可行性分析 6

2.1需求分析 6

2.1.2运行需求分析 6

2.1.3其他需求分析 6

2.2可行性分析 6

2.2.1经济可行性 6

2.2.2技术可行性 7

2.2.3运行可行性 7

2.2.4时间可行性 7

2.2.5法律可行性 7

第三章系统分析与设计 8

3.1系统实现目标 8

3.2系统设计 8

3.2.1系统设计 8

3.3数据库设计 9

3.3.1数据库概述 9

3.3.2数据库实现 9

3.4系统体系结构 10

3.5系统流程图 11

3.6系统用例图 14

第四章系统实现 16

4.1.系统实现 16

4.1.1登录模块 16

4.1.2系统主界面 20

4.1.3用户操作 21

4.1.4供应商管理 23

4.1.5材料信息管理 26

4.1.6订单信息管理 28

4.1.7信息查询 35

第五章系统测试 39

5.1系统调试 39

5.1.1程序调试 39

5.2程序测试 39

5.2.1测试的重要性及目的 39

5.2.2测试的步骤 40

5.2.3测试的主要内容 40

结束语 43

参考文献 44

致谢 45

外文原文 46

中文翻译 54













第一章引言

1.1研究现状

随着信息技术的发展及ERP系统的日益普及,计算机在管理中的作用越来越不容忽视。在这种环境中,采购作为生产经营的一个重要环节应加强管理,充分利用外部环境条件,逐步实现企业采购的信息化管理。企业采购管理系统是针对内部而设计的,应用于的局域网,这样可以使得内部管理更有效的联系起来。本课题就是针对企业采购管理,开发一个基于JAVA设计语言的管理系统,本系统采用了目前流行EclipseJAVAEE开发工具,后台采用SQLServer2008数据库。其中系统涉及用户登录模块、订单管理模块、基本信息管理模块、采购查询模块四大模块。本课题研究的重点是中小型企业采购管理问题。实现业务流程控制,生成采购计划,直至生成采购执行单,提高采购业务效率,为企业决策者快速决策提供实时的关键数据支持。

近年来我国信息事业发展迅速,手工管理方式在企业采购信息管理等需要大量事务处理的应用中已显得不相适应,采用IT技术提高服务质量和管理水平势在必行。目前,对外开放必然趋势使信息行业直面外国同行单位的直接挑战,因此,信息行业必须提高其工作效率,改善其工作环境。这样,企业采购信息管理的信息化势在必行。

在传统的企业采购信息管理中,其过程往往是很复杂的,繁琐的,企业采购信息管理以企业采购信息管理为核心,在此过程中又需要经过若干道手续,因为整个过程都需要手工操作,效率十分低下,且由于他们之间关联复杂,统计和查询的方式各不相同;且会出现信息的重复传递问题,因此该过程必须实现信息化。

随着计算机技术和网络技术的飞速发展,各企业都相继采用信息技术对企业采购有关信息进行管理。然而,也注意到许多单位,并没有很好地运用现代信息技术对企业采购等信息进行管理,很多企业采购管理系统将所有的管理事务全都交给管理员来完成,如果信息有任何的增删改查,都需要通过管理员来完成,非常麻烦。如何开发一个实用的企业采购管理系统,是摆在设计者面前的一大难题。通过对企业采购管理系统进行深入分析和研究,本文从功能模块、数据格式、通用性三个方面进行细化,提出企业采购管理系统设计的理论依据和实现的方法。设计系统的数据层、逻辑层、界面层,重点体现数据格式的规范,也为通用性的实施提供保障。最后在系统开发环节,从技术层面实现代码的可重用性及系统的通用性,从而使系统的设计更具实用性和通用性。总之我觉得现在逐渐发展起来的信息系统可以让企业采购管理变得非常灵活,每一种角色都有自己的权限,保证了信息的安全性以及操作简易性。因此,基于MVC的企业采购管理系统将会是以后的趋势。所以我通过开发完成一个小型企业采购管理系统,以便能更好的衔接。

1.2主要研究的目的及内容

国内企业在激烈的环境生存与发展,需要发挥采购的积极作用,在进行详细分析与研究的基础上,明确企业的不足并迅速加以弥补,采购管理目标是以最小的成本取得最大的效益。

采购管理就是以合适的时间、地点、质量和数量在企业外部获取产品,采购管理的目的是保证企业的商品供应,以使生产顺利进行,并提升企业的竞争力。

国外,大卫.琼斯在其著作《采购原理与管理》一书中说,采购的角色发生了变化,采购不再被认为是例行公事的或行政性的订购活动,即采购不再仅仅是订购或购买,而是具有战略作用的,关乎从原材料到使用和弃置整个过程的物料流动。

供应链管理现在已经被大型组织看作是降低成本和增加价值的一个领域。组织从供应链中削减成本的能力会受到采购活动发展阶段的影响。如果采购职能得到了适当的发展,采购可以在供应链管理领域进行运作性的,战术的和战略的改进。如果某些组织的采购部门能够以积极主动的战略方式提高供应链的效率和有效性,那么其他组织也可以,然而,降低购置成本、战略外包、电子商务,所有这些都要靠采购活动发展到适当水平。事务性的、被动的采购活动是无法对这些理念真正做出贡献的,而得到良好发展的战略性的采购活动则能够做到。具体细化到设计上,主要体现在以下几个方面:

1.数据库的建立与维护:系统中需要长期保存的信息应持久化到数据库,方便读取、更新、修改。如何设计数据库及其各类表是我们首先应解决的关键问题。

2.简易实用的采购管理:通过简单实用的各种采购管理功能,能够有效地提高采购效率,使企业快速决定其他决策目标。

3.实现信息共享:使企业采购人员和其他部门所有成员及时准确的了解供应商信息、采购计划、采购执行单的各流程的状态等等。

4.数据库的安全性管理:SQLServer2008访问控制,数据库权限管理,数据库角色管理等。

本课题的目的是使企业采购信息管理清晰化,透明化,便于操作,易于管理。通过功能模块的优化组合实现不同的管理细节,使管理过程实现最大程度的自动化与信息化,并能自动对人工操作环节进行复查,使企业采购管理系统出错率降至最低。在传统的企业采购信息管理中,各种管理工作往往是很复杂烦琐的。企业采购信息管理的特点是信息处理量比较大,所管理的种类比较繁多,而且由于消费、缴费等单据发生量特别大,关联信息多,查询和统计的方式不尽相同。在管理过程中经常会出现信息的重复传递,因此企业采购信息管理必须实现计算机化处理。我们系统开发的总体任务是实现企业采购信息管理的系统化、规范化、自动化、信息化与智能化,从而达到提高企业采购信息管理效率的目的。

1.3研究方法及设计思路

1.3.1研究方法

企业采购信息管理是信息行业业务流程过程中十分重要且必备的环节之一,在信息行业业务流程当中起着承上启下的作用,其重要性不言而喻。但是,目前许多信息行业在具体的业务流程处理过程中仍然使用手工操作的方式来实施,不仅费时、费力,效率低下,而且无法达到理想的效果。针对上述问题,采用软件工程的开发原理,依据软件流程过程规范,按照需求分析、概要设计、详细设计、程序编码、测试、软件应用、软件维护等过程开发了一个企业采购管理系统。采用JSP作为开发技术,结合SQLServer2008数据库,数据库设计遵循3范式,解决了企业采购管理系统中存在的数据安全性、数据一致性以及系统运行速度等问题。

1.3.2设计思路

(1)系统应符合企业采购信息管理的规定,满足信息行业相关人员日常使用的需要,并达到操作过程中的直观,方便,实用,安全等要求;

(2)系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充,维护;

(3)系统应具备数据库维护功能,及时根据用户需求进行数据的添加、删除、修改、备份等操作;

(4)尽量采用现有软件环境及先进的管理系统开发方案,从而达到充分利用现有资源,提高系统开发水平和应用效果的目的。

1.4.相关技术简介

1.4.1JSP技术简介

JSP(JavaServerPages)是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。它是在传统的网页HTML文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(.jsp)。用JSP开发的Web应用是跨平台的,即能在Linux下运行,也能在其他操作系统上运行。JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。JSP与JavaServlet一样,是在服务器端执行的,通常返回该客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。

JSP主要优点如下:

(1)一次编写,到处运行。在这一点上Java比PHP更出色,除了系统之外,代码不用做任何更改。

(2)系统的多平台支持。基本上可以在所有平台上的任意环境中开发,在任意环境中进行系统部署,在任意环境中扩展。相比JSP/PHP的局限性是显而易见的。

(3)强大的可伸缩性。从只有一个小的war文件就可以运行Servlet/JSP,到由多台服务器进行集群和负载均衡,到多台Application进行事务处理,消息处理,一台服务器到无数台服务器,Java显示了一个巨大的生命力。

(4)多样化和功能强大的开发工具支持。这一点与JSP很像,Java已经有了许多非常优秀的开发工具,而且许多可以免费得到,并且其中许多已经可以顺利的运行于多种平台之下。

1.4.2Struts框架

Struts是一个为开发基于模型(Model)-视图(View)-控制器(Controller)模式的应用框架的开源框架,是利用JavaServlet和JSP构建Web应用的一项非常有用的技术。事件是指从客户端页面(浏览器)由用户操作触发的事件,Struts使用Action来接受浏览器表单提交的事件,这里使用了Command模式,每个继承Action的子类都必须实现一个方法execute。在struts中,实际是一个表单form对应一个Action(或DispatchAction),换一句话说:在Struts中实际是一个表单只能对应一个事件,struts这种事件方式成为applicationevent,applicationevent和componentevent相比是一个粗粒度的事件。Struts重要的表单对象ActionForm是一种对象,它代表了一种应用,这个对象中至少包含几个字段,这些字段是Jsp页面表单中的input字段,因为一个表单对应一个事件,所以,当我们需要将时间粒度细化到表单中这些字段时,也就是说,一个字段对应一个事件时,单纯使用struts就不太可能,当然通过结合JavaScript也是可以转弯实现的。Struts是一个基于SunJ2EE平台的MVC框架,主要采用Servlet和JSP技术来实现的。



Struts框架可分为以下四个部分,其中三个就和MVC模式紧密相关:

(1)模型(Model),本质上来说在Struts中Model是一个Action类,开发者通过其实现业务逻辑,同时用户请求通过控制器(Controller)向Action的转发过程是基于由Struts-config.xml文件描述的配置信息的。

(2)视图(View),View是由与控制器Servlet配合工作的一整套JSP定制标签库构成,利用他们我们可以快速建立应用系统的界面。

(3)控制器(Controller),本质上是一个Servlet,将客户端请求转发到相应的Action类。

(4)XML文件解析的工具包,Struts是用XML来描述如何自动产生一些JAVABean的属性的,此外Struts还利用XML来描述国际化应用中的用户提示信息,这样一来就实现了应用系统的多种语言支持。

页面模板技术采用Apache组织的Tiles技术,可实现灵活的页面模板功能。

1.4.3Hibernate数据访问框架

数据持久层采用Hibernate开源框架,它对JDBC进行了非常轻量级的对象封装,可以使程序员可以使用对象编程思维来操纵数据库。Hibernate是Java平台上的一种全功能的、开发源代码的ORMapping框架,支持java的JDO规范,它可以支持当前所有的主流关系型数据库和对象型数据库产品以及XML文件等数据源。与JDO不同,Hibernate完全着眼于关系数据库的OR映射,并且包括比大多数商业产品更多的功能。大多数EJBCMPCMR解决方案使用程序代码产生持续性程序代码,而JDO使用字节码修饰;与之相反,Hibernate使用反射和执行时字节码产生,使它对于使用者几乎是透明的。

利用此框架可以以面向对象的方式来操作数据,可以容易的实现在各个应用数据库产品之间的移植,而不需要修改系统的大部分代码,同时也能很方便地实现同一个应用程序访问多个数据库的功能。利用此框架不但可以提高开发速度,而且可以使系统的可维护性、可移植性、可重用性提高。

1.4.4B/S模式分析

C/S模式主要由客户应用程序(Client)、服务器管理程序(Server)和中间件(middleware)三个部件组成。客户应用程序是系统中用户与数据进行交互的部件。服务器程序负责有效地管理系统资源,如管理一个信息数据库,其主要工作是当多个客户并发地请求服务器上的相同资源时,对这些资源进行最优化管理。中间件负责联结客户应用程序与服务器管理程序,协同完成一个作业,以满足用户查询管理数据的要求。

B/S模式是一种以Web技术为基础的新型的MIS系统平台模式。把传统C/S模式中的服务器部分分解为一个数据服务器与一个或多个应用服务器(Web服务器),从而构成一个三层结构的客户服务器体系。

第一层客户机是用户与整个系统的接口。客户的应用程序精简到一个通用的浏览器软件,如Netscape?Navigator,微软公司的IE等。浏览器将HTML代码转化成图文并茂的网页。网页还具备一定的交互功能,允许用户在网页提供的申请表上输入信息提交给后台,并提出处理请求。这个后台就是第二层的Web服务器。

第二层Web服务器将启动相应的进程来响应这一请求,并动态生成一串HTML代码,其中嵌入处理的结果,返回给客户机的浏览器。如果客户机提交的请求包括数据的存取,Web服务器还需与数据库服务器协同完成这一处理工作。第三层数据库服务器的任务类似于C/S模式,负责协调不同的Web服务器发出的SQ请求,管理数据库。

B/S模式首先简化了客户端。它无需象C/S模式那样在不同的客户机上安装不同的客户应用程序,而只需安装通用的浏览器软件。这样不但可以节省客户机的硬盘空间与内存,而且使安装过程更加简便、网络结构更加灵活。假设一个企业的决策层要开一个讨论库存问题的企业采购,他们只需从企业采购室的计算机上直接通过浏览器查询数据,然后显示给大家看就可以了。甚至与会者还可以把笔记本电脑联上企业采购室的网络插口,自己来查询相关的数据。其次,它简化了系统的开发和维护。系统的开发者无须再为不同级别的用户设计开发不同的客户应用程序了,只需把所有的功能都实现在Web服务器上,并就不同的功能为各个组别的用户设置权限就可以了。各个用户通过HTTP请求在权限范围内调用Web服务器上不同处理程序,从而完成对数据的查询或修改。当形势变化时,它无须再为每一个现有的客户应用程序升级,而只需对Web服务器上的服务处理程序进行修订。这样不但可以提高公司的运作效率,还省去了维护时协调工作的不少麻烦。如果一个公司有上千台客户机,并且分布在不同的地点,那么便于维护将会显得更加重要。

再次,它使用户的操作变得更简单。对于C/S模式,客户应用程序有自己特定的规格,使用者无需接受专门培训。而采用B/S模式时,客户端只是一个简单易用的浏览器软件。无论是决策层还是操作层的人员都无需培训,就可以直接使用。B/S模式的这种特性,还使?MIS系统维护的限制因素更少。

最后,B/S特别适用于网上信息发布,使得传统的MIS的功能有所扩展。这是C/S所无法实现的。而这种新增的网上信息发布功能恰是现代企业所需的。这使得企业的大部分书面文件可以被电子文件取代,从而提高了企业的工作效率,使企业行政手续简化,节省人力物力。

鉴于B/S相对于C/S的先进性,B/S逐渐成为一种流行的MIS系统平台。各软件公司纷纷推出自己的Internet方案,基于Web的财务系统、基于Web的ERP。一些企业已经领先一步开始使用它,并且收到了一定的成效。B/S模式的新颖与流行,和在某些方面相对于C/S的巨大改进,使B/S成了MIS系统平台的首选。本系统也采用B/S结构开发。

1.5系统开发步骤

一般说来,管理信息系统的建立与应用可以划分成总体规划、系统开发和系统运行三个阶段,其中系统开发阶段还可进一步分为系统分析、系统设计和系统实施等工作环节。上述各个阶段排列成一个严格的线性开发序列,在每个工作阶段均产生完整的技术文档作为下一阶段工作的指导和依据,每一阶段都应对文档进行评审,确信该阶段工作已完成并达到要求后才能进入下一阶段,同时在以后的工作中不能轻易改变前面经过评审的成果。上述开发方式的主要优点是便于开发工作的组织和管理,并且可大大降低管理信息系统开发的复杂性。国内外许多系统开发的实例都证明这是一种行之有效的开发方式。

国外曾有人对一些软件项目开发各阶段的工作量进行统计结果表明,程序编写在开发工作中只占很小比例,而调试工作却占整个开发工作量的一半左右,因此“系统开发就是编程”的习惯说法显然是片面的。在建立管理信息系统的三个阶段中,总体规划和系统开发阶段的工作量约占整个工作量的2/3,而运行、维护阶段要占1/3,这说明一个管理信息系统开发后,仍应十分重视它的维护工作,以便使系统不断完善并充分发挥其作用。

第二章需求分析及可行性分析

2.1需求分析

伴随着信息行业的蓬勃发展和人们办公自动化意识的增强,企业采购管理部门的工作也越来越繁重,原来的企业采购管理系统已经不能完全满足相关人员使用的需要。为了协助信息行业开展企业采购管理工作,提高工作效率,充分利用信息行业的现有资源,开发更好的企业采购管理系统势在必行。

企业采购管理系统是将IT技术用于企业采购信息的管理,它能够收集与存储信息,提供更新与检索的接口;协助信息行业开展企业采购管理工作,提高工作效率。

企业采购管理系统采用B/S结构、结合网络数据库开发技术来设计本系统。开发语言采用JAVA,数据库使用SQLServer2008数据库。完成以下基本功能:

本系统是一个独立的系统,用来解决企业采购信息的管理问题。采用JSP技术构建了一个有效而且实用的企业采购信息管理平台,目的是为高效地完成对企业采购信息的管理。

企业采购管理系统具有标准企业采购管理系统所具有的现实中完整的企业采购管理步骤,完全的虚拟现实实现。真正实现节约资源、提高效率、业务处理的同时真正实现企业采购管理系统的功能作用。

2.1.2运行需求分析

硬件系统环境:Core5600、1GMB(RAM)、120GB(HD)。系统运行时对数据的保密性要求不高对一般的数据不要求进行加密。此外,对其它软件几乎没有依赖性,程序健壮性较好

2.1.3其他需求分析

系统的性能要求通常指系统需要的存储容量以及后援存储,重新启动和安全性,运行效率等方面的考虑。本系统要有较好的可维护性、可靠性、可理解性、效率。要易于用户理解和操作。可维护性包括了可读性、可测试性等含义。可靠性通常包括正确性和健壮性。开发过程中,在各种矛盾的目标之间作权衡,并在一定的限制的条件下(经费、时间、可用的软、硬件资源等),使上述各方面最大限度的得到满足。

2.2可行性分析

2.2.1经济可行性

经济可行性研究是对组织的经济现状和投资能力进行分析,对系统建设运行和维护费用进行估算,对系统建成后可能取得的社会和经济效益进行估计。由于本系统是作为毕业设计由自己开发的,在经济上的投入甚微,系统建成之后将为今后企业采购信息管理提供很大的方便,估算新系统的开发费用和今后的运行、维护费用,估计新系统将获得的效益,并将费用与效益进行比较,看是否有利。开发、运行和维护费用主要包括:

购买和安装企业采购的费用:计算机硬件、系统软件、机房、电源、空调等;软件开发费用:若由实习单位的技术人员开发,则该项费用可以计入下面的人员费用一项;人员费用:系统开发人员、操作人员和维护人员的工资、培训费用等;消耗品费用:系统开发所用材料、系统正常运行所用消耗品,例如水、电费,打印纸、软盘、色带等开支。所有开支都不大,所以经济上是可行的。

2.2.2技术可行性

技术可行性要考虑现有的技术条件是否能够顺利完成开发工作,软硬件配置是否满足开发的需求等。企业采购管理系统用的是JSP开发语言,调试相对简单,当前的计算机硬件配置也完全能满足开发的需求,因此在技术上是绝对可行的。软件方面:由于目前B/S模式软件相对发展成熟,Eclipse已发行多个版本,渐趋完善,故软件的开发平台成熟可行,它们速度快、容量大、可靠性能高、价格低,完全能满足系统的需求。

2.2.3运行可行性

对新系统运行后给现行系统带来的影响(包括组织机构、管理方式、工作环境等)和后果进行估计和评价。同时还应考虑现有管理人员的培训、补充,分析在给定时间里能否完成预定的系统开发任务等。

运行可行性是对组织结构的影响,现有人员和机构以及环境对系统的适应性及人员培训补充计划的可行性。当前我国信息化技术已经相当普及,各类操作人员水平都有相当的高度,所以在运行上是可行性的。

本系统的开发,是典型的Mis开发,主要是对数据的处理,包括数据的收集,数据的变换,及数据的各种形式的输出。采用流行的JSP+SQLServer2008体系,已无技术上的问题。

2.2.4时间可行性

从时间上看,在四个月的时间里学习相关知识,并开发企业采购信息管理系统,时间上是有点紧,但是不是不可能实现,通过四个多月的努力功能应该基本实现。

2.2.5法律可行性

①所有技术资料都为合法。

②开发过程中不存在知识产权问题。

③未抄袭任何已存在的企业采购信息管理系统,不存在侵犯版权问题。

④开发过程中未涉及任何法律责任。

综上所述,本系统的开发从技术上、从经济上、从法律上都是完全可靠的。



























第三章系统分析与设计

3.1系统实现目标

采购是公司生产产品及维护正常运作而必须消耗的物品及必须配置的设施的购入活动的总称,是公司成本控制的重点。无论是公司管理者还是财务部门,对采购工作存在的风险都有着非常强的敏感性,这不仅因为采购是直接影响生产成本的主要因素,而是因为采购有着很高的认为欺诈的可能。在日趋完善的现代经营管理模式中,公司管理当局越来越注重财务管理和财务运作的有效性。

合理的采购管理具有很重要的意义:

材料采购成本在企业经营中占很大比重,且在很多行业有上升趋势。

降低原材料成本是增加利润的基本途径。

建立和实施制度化的采购管理程序,这是采购管理工作有效进行的根本保证,有法必依,违法必究,这是制度能切实贯彻执行的保证。只有制度化了,才能在公司中用法制,而不是人治。采购管理系统是为了实现企业的长远发展目标而实施的一个系统工程,也是一个企业能否取得经济效益的关键它能够为企业的发展提供科学的管理功能,减少管理费用。利用计算机的数据库技术,使得企业的采购、库存和销售能够有利的结合起来,避免和克服人工管理信息时,劳动量大,计算和统计的不准确等种种缺陷和弊端,使企业的管理规范化和自动化,从而对采购管理提供更加科学、准确的数据,实现了采购管理的系统化、规范化和自动化。通过使用采购管理系统能够降低材料采购成本在企业经营中所占的比例,能够提高企业的利润。

企业为满足生产所需和提高生产效率,将开发企业采购管理系统。

系统实现目标:易于操作,有良好的互动性,能为员工的工作带来便易。开发出来的系统还必须是安全性高,扩展性强。能在日后不断升级优化。

3.2系统设计

3.2.1系统设计

该系统采用B/S体系结构,在客户机上并不安装客户端,而是使用网络浏览器,这样节省一大部分开发、维护和升级报销。本系统不仅要求功能完善,而且还要界面友好,因此,对于一个成功的系统设计,功能模块的设计是关键。

本系统是一个独立的系统,用来解决企业采购信息的管理问题。采用JSP技术构建了一个有效而且实用的企业采购信息管理平台,目的是为高效地完成对企业采购信息的管理。经过对课题的深入分析,采购系统需实现以下功能模块:

各个模块实现的功能如下:

用户登录

对用户输入的用户名和密码进行匹配,只有合法的用户可以登录成功,进入主界面,进行操作。是系统安全性的第一层保护层。

供应商管理

灵活管理供货商,及时添加及修改供货商信息,为采购计划的制定提供保障。

材料管理

对材料进行管理,管理材料种类及库存,及时了解材料的库存信息,有助于做出正确的采购选择。

订单管理

系统设计了多种订单。不同权限的操作员只能对其拥有权限操作的订单进行操作。

信息查询

根据关键字快速检索信息。

3.3数据库设计

3.3.1数据库概述

数据库设计就是针对应用需求和环境,建立合理的数据库模式和存储结构,保证数据的高效存取,并满足应用的任务处理要求。数据库设计是应用系统建设的核心技术,是数据库应用领域的主要研究课题。

数据库是数据管理的最新技术。十多年来数据库管理系统已从专用的应用程序发展成为通用的系统软件。由于数据库具有数据结构化,最低冗余度,较高的程序与数据独立性,易于扩充,易于编制应用程序等优点,较大的信息系统都是建立在数据库设计之上的。因此不仅大型计算机及中小型计算机,甚至微型机都配有数据库管理系统。

设计数据库必须遵循一定的规则,在关系型数据库中,这种规则就是范式,范式是符合某一种级别的关系模式的集合。一般人们设计数据库遵循第三范式。即:数据库表中不包含已在其他表中包含的非主关键字信息。采用范式减少了数据冗余,节约了存储空间,同时加快了增、删、改的速度。

本系统是用SQLServer2008作为系统数据库。SQLServer是由微软公司研制和发布的分布式关系型数据库管理系统,可以支持企业、部门以及个人等各种用户完成信息系统、电子商务、决策支持、商业智能等工作。SQLServer2008系统只要由4个主要部分组成。这四个部分被称为4个服务,这些服务分别是数据库引擎、分析服务、报表服务和集成服务。这些服务之间相互存在和相互应用。SQLServer2008在易用性、可用性、可管理性、可编程性、动态开发、运行性能等方面有突出的优点。SQLServer2008还增强了审查,使你可以审查你的数据的操作,从而提高了遵从性和安全性。审查不只包括对数据修改的所有信息,还包括关于什么时候对数据进行读取的信息。SQLServer2008具有像服务器中加强的审查的配置和管理这样的功能,这使得公司可以满足各种规范需求。SQLServer2008还可以定义每一个数据库的审查规范,所以审查配置可以为每一个数据库作单独的制定。为指定对象作审查配置使审查的执行性能更好,配置的灵活性也更高。提供了稀疏列,这个功能使NULL数据不占物理空间,从而提供了一个非常有效的管理数据库中的空数据的方法。例如,稀疏列使得一般包含极多要存储在一个SQLServer2008数据库中的空值的对象模型不会占用很大的空间。稀疏列还允许管理员创建1024列以上的表。

3.3.2数据库实现

本系统一共设计五张表,分别是t_order,t_price,t_supplier,t_user,t_product.

t_order表存放订单,t_price表存放付款单,t_supplier表存放供应商,t_user表存放用户信息,t_product存放材料信息。

t_order(id,ordername,productid,supplierid,num,status,numb,price,allprice,username);

t_price(id,pricename,productid,supplierid,price,status,username,remark,inputdate);

t_supplier(id,suppliername,phone,adrr,mun,username,web,email,remark);

t_user(id,username,password,realname,power,);

t_product(id,productname,num,inputdate,counts,remark);

3.4系统体系结构

在系统功能分析的基础上,系统功能模块图如下图3-1所示:













系统有四个主要功能,分别是用户登录,基础信息管理,订单管理,采购查询。其中基础信息管理可以对用户信息,材料信息,供应商信息及订单信息进行管理。订单管理功能对订单进行管理,整个系统中,会有7种状态的订单。采购查询,是系统为用户提供的便捷查询方式,根据关键字,即可快速检索出需要查询的信息。

























3.5系统流程图

系统流程图如图3-2所示:















































用户输入用户名及密码,系统会进行匹配查询,如果在数据库中,有匹配的用户信息,则可以登录。且系统有4种权限的用户,分别是管理员,审批员,采购员及仓库管理员,不同权限的用户,有不同的操作权限。









采购流程如图3-3所示:









































采购员创建采购单后,提交审批。审批成功后,则开始采购,审批不成功,则重新创建采购单或修改订单,重新提交审批。













退货流程如图3-4所示:















































仓库管理员对入库的物品进行质量检验,对质量不合格的物品申请退货,并提交退货单等待审批。审批成功的退货单,进行退货,审批不成功则重新创建退货单或者修改退货单。对于质量合格的物品,直接确认收货。



3.6系统用例图

管理员用例图如图3-5所示:





采购员用例图如图3-6所示:





审批员用例图如图3-7所示:







仓库管理员用例图如图3-8所示:









第四章系统实现

4.1.系统实现

4.1.1登录模块

对于一个完整的企业采购管理系统,不仅要求功能强大、操作简单,还要有良好的设计风格和另人爽目的界面。登录界面对于整个系统来说是非常重要的,因为它设置了进入本系统的用户和口令,防止非法用户进入系统,破坏系统安全和所保存的数据,只有合法的管理员在输入正确的密码后方可进入系统,否则将提示密码或用户名输入错误,并询问用户是否重新输入。这样就对使用者有了限制,增加了系统的安全性和保密性,便于控制和管理,有利于系统的维护。

登陆界面如图4-1所示:



当用户没有输入用户名时,系统会弹出这样的提示框,如图4-2所示:





当用户没有输入密码时,系统会弹出这样的提示框,如图4-3所示:





当用户名或密码不正确时,会提示信息错误,请重新填写,如图4-4所示:





登录界面代码实现:

publicclassLoginActionextendsBaseAction{

privateLoginServicesloginServices;

privateIntegerid;

privateStringusername;

privateStringpassword;

privateStringrealname;

publicStringcheckUser()throwsException{

if(!(StringUtils.isEmpty(username)||StringUtils.isEmpty(password))){

TUseruser=loginServices.checkUser(username,password);

if(user!=null){

setSessionAttribute("user",user);

returnSUCCESS;

}

setRequestAttribute("error","error");

}

returnERROR;

}

publicStringupdateUser()throwsException{

TUseruser=newTUser();

user.setId(id);

user.setPassword(password);

user.setUsername(username);

user.setRealname(realname);

loginServices.updateUser(user);

setSessionAttribute("user",user);

return"update";

}

}

}



functioncommit(){

if(form1.username.value==""){

alert("请您输入用户名!");

form1.username.focus();

returnfalse;

}

if(form1.password.value==""){

alert("请您输入密码!");

form1.password.focus();

returnfalse;

}

returntrue;

}

登录界面设计代码:







  



4.1.2系统主界面

当使用管理员身份登录的主界面,如图4-5所示:



图4-5管理员主界面

当用户身份为管理员时,则拥有系统的最高权限,可以创建四种权限的用户身份。分别是管理员,采购员,审批员及仓库管理员。

当使用普通用户登录时主界面,如图4-6所示:



普通用户是和管理员相对的用户身份,包括采购员,仓库管理员,审批人员三种,由管理员进行创建。每种身份有对应的操作权限。并且不能越权操作。

采购员:创建原始采购单,提交采购申请,对审批通过的采购订单进行采购。

审批人员:对提交的采购订单及退货单进行审批;

仓库管理员:对到达货物进行质量检验,产品合格则确认收货,产品不合格,则创建退货单,等待审批。



4.1.3用户操作

使用管理员身份登录时,可以查看用户的信息,并对用户进行增、删、改、查操作:

当使用管理员身份时,可以对用户信息进行查看,如图4-7所示:

















当使用管理员身份登录时,可以创建不同权限的用户,如图4-8所示:





当使用管理员的身份登录时,可以修改用户的信息(但是用户创建之后,用户名是不允许进行修改的),如图4-9所示:





用户管理代码实现:

publicclassUserActionextendsBaseAction{

添加:

publicStringaddUser()throwsException{

TUseruser=newTUser();

user.setPassword(password);

user.setPower(power);

user.setRealname(realname);

user.setUsername(username);

userServices.addUser(user);

return"addUser";

}

publicStringpreupdateUser()throwsException{

TUseruser=userServices.getUser(id);

setRequestAttribute("user",user);

return"preupdateUser";

}

修改:

publicStringupdateUser()throwsException{

TUseruser=userServices.getUser(id);

user.setPassword(password);

user.setRealname(realname);

user.setPower(power);

userServices.updateUser(user);

return"updateUser";

}

删除:

publicStringdelUser()throwsException{

userServices.delUser(id);

return"delUser";

}

}

}



4.1.4供应商管理

供应商管理模块是本系统中一个基础的部分,在本模块中包括对供应商信息的增删改查功能,确保资料的安全。增加了系统的安全性和保密性,便于控制和管理。及时的更新供应商信息,可以帮助企业做正确的采购策略。

查询供应商信息,如图4-10所示:





添加供应商信息,这里要求要将所有供应商的信息添加完全,详细的展示供应商信息,是企业能够全面了解供应商信息,更好的制定采购计划,如图4-11所示:













修改供应商信息,可以对供应商信息进行及时的更新,如图4-12所示:







供应商模块关键代码实现:

publicclassSupplierActionextendsBaseAction{

添加:

publicStringaddSupplier()throwsException{

TSuppliersupplier=newTSupplier();

supplier.setAdrr(adrr);

supplier.setPhone(phone);

supplier.setSuppliername(suppliername);

supplier.setEmail(email);

supplier.setNum(num);

supplier.setRemark(remark);

supplier.setUsername(username);

supplier.setWeb(web);

supplierServices.addSupplier(supplier);

return"addSupplier";

}

publicStringpreupdateSupplier()throwsException{

TSuppliersupplier=supplierServices.getSupplier(id);

setRequestAttribute("supplier",supplier);

return"preupdateSupplier";

}

修改:

publicStringupdateSupplier()throwsException{

TSuppliersupplier=supplierServices.getSupplier(id);

supplier.setAdrr(adrr);

supplier.setPhone(phone);

supplier.setSuppliername(suppliername);

supplier.setEmail(email);

supplier.setNum(num);

supplier.setRemark(remark);

supplier.setUsername(username);

supplier.setWeb(web);

supplierServices.updateSupplier(supplier);

return"updateSupplier";

}

删除:

publicStringdelSupplier()throwsException{

supplierServices.delSupplier(id);

return"delSupplier";

}

publicSupplierServicesgetSupplierServices(){

returnsupplierServices;

}

publicvoidsetSupplierServices(SupplierServicessupplierServices){

this.supplierServices=supplierServices;

}

4.1.5材料信息管理

本模块主要实现材料信息的增加、删除、修改、浏览等操作。将以前采购过的材料、将要进行采购的材料以及正在考虑采购的材料信息录入系统,便于企业查询和管理。如下图所示:

材料信息查询,如图4-13所示:



材料信息添加,需要添加材料的名称、编号、出厂日期、数量、以及备注信息,要求必须添加完整。提供重置按钮,点击后,可以重写填写,如图4-14所示:



对材料信息进行修改,及时更新材料信息,保证所有的信息都是最新状态,如图4-15所示:





材料模块关键代码实现:

publicclassProductActionextendsBaseAction{

添加:

publicStringaddProduct()throwsException{

TProductproduct=newTProduct();

product.setProductname(productname);

product.setInputdate(inputdate);

product.setNum(num);

product.setCounts(counts);

product.setRemark(remark);



productServices.addProduct(product);

return"addProduct";

}

publicStringpreupdateProduct()throwsException{

TProductproduct=productServices.getProduct(id);

setRequestAttribute("product",product);

return"preupdateProduct";

}

修改:

publicStringupdateProduct()throwsException{

TProductproduct=productServices.getProduct(id);

product.setProductname(productname);

product.setInputdate(inputdate);

product.setNum(num);

product.setCounts(counts);

product.setRemark(remark);

productServices.updateProduct(product);

return"updateProduct";

}

删除:

publicStringdelProduct()throwsException{

productServices.delProduct(id);

return"delProduct";

}

publicProductServicesgetProductServices(){

returnproductServices;

}

publicvoidsetProductServices(ProductServicesproductServices){

this.productServices=productServices;

}

4.1.6订单信息管理

本模块主要实现对订单进行操作。系统中共设计了多种状态的订单。分别是新建采购单,审批中的采购单,审批成功的采购单,审批失败的采购单,新建退货单,审批中的退货单,审批成功的退货单,审批失败的退换单,已完成订单。新建的如下图所示:

已完成订单信息查询:

当采购员采购完成之后,由仓库管理员进行质量检验,物品质量合格之后,由采购员确认收货,订单会变为完成状态。





已完成订单,如图4-16所示:





采购员专区:

采购员根据采购计划创建采购单,等待审批人员进行审批,如图4-17所示:







审批员专区:由审批员对采购单及退货单进行审批,审批员可以将订单置为两种状态,审批成功和审批失败,且一定要填写审批理由,如图4-18所示:





仓库管理:

仓库管理员对采购员采购的物品进行质量检验,如果合格则确认收货,如果不合格则申请退货,等待审批人员进行审批,如图4-19所示:



快捷预览区域:

该区域只提供对订单的预览,不提供操作。包括未完成订单,已完成订单,未付款单,退货单。

未完成订单,包括待付款单,审批失败订单,未审批订单:

未完成订单如图4-20所示:





未付款订单,采购完成的订单,等待仓库管理员对物品质量进行检验:

待付款订单如图4-21所示:





退货单,仓库管理员对物品进行质量检验,不合格的产品进行退货申请,由审批人员进行审批,通过审批后的退货单进行退货,完成退货后。退货单可在快捷预览区域的退货单中进行查看。

退货单如图4-22所示:





订单模块关键代码实现:

publicclassOrderActionextendsBaseAction{

为采购员获取订单数据:

publicStringpurchaseOrder()throwsException{

PageInfopageInfo0=queryOrderByStatus("(''0'',''3'')");

PageInfopageInfo2=queryOrderByStatus("(''2'')");

setRequestAttribute("pageinfo0",pageInfo0);

setRequestAttribute("pageinfo2",pageInfo2);

setRequestAttribute("searchname",this.searchname);

return"purchaseOrder";

}

为审批员获得订单:

publicStringapproveListOrder()throwsException{

PageInfopageInfo0=queryOrderByStatus("(''1'')");

PageInfopageInfo2=queryOrderByStatus("(''6'')");

setRequestAttribute("pageinfo0",pageInfo0);

setRequestAttribute("pageinfo2",pageInfo2);

setRequestAttribute("searchname",this.searchname);

return"approveListOrder";

}

publicStringstoreListOrder()throwsException{

StringBuffercond=newStringBuffer();

if(null!=searchname&&""!=searchname.trim()){

cond.append("anda.ordernamelike''%"+searchname.trim()+"%''");

}

if(null!=getRequestParameter("flag")&&""!=getRequestParameter("flag")){

setSessionAttribute("flag",getRequestParameter("flag"));

}

if(null!=getSessionAttribute("flag")&&""!=(String)getSessionAttribute("flag")){

cond.append("anda.status=''"+(String)getSessionAttribute("flag")+"''");

}

intcurpage=Integer.parseInt(this.getCurrentpage(ServletActionContext.getRequest()));

intpageunit=Integer.parseInt(this.getPageunit(ServletActionContext.getRequest(),"querypageunit"));

Stringurl="order_storeListOrder?a=a";

PageInfopageInfo=this.orderServices.queryOrder(curpage,

pageunit,ServletActionContext.getRequest(),url,cond.toString());

setRequestAttribute("pageinfo",pageInfo);

setRequestAttribute("searchname",this.searchname);

return"storeListOrder";

}

publicStringaddOrderForPurchase(){

try{

TOrderorder=newTOrder();

order.setNum(num);

order.setOrdername(ordername);

order.setStatus("0");

TProductproduct=productServices.getProduct(productid);

order.setTProduct(product);

TSuppliersupplier=supplierServices.getSupplier(supplierid);

order.setTSupplier(supplier);

order.setNumb(numb);

order.setPrice(price);

order.setRemark(remark);

order.setAllprice(allprice);

order.setUsername(username);

orderServices.addOrder(order);

}catch(RuntimeExceptione){

e.printStackTrace();

}

return"addOrderForPurchase";

}

publicStringupdateOrderForPurchase(){

try{

TOrderorder=this.getOrderServices().getOrder(id);

order.setNum(num);

order.setOrdername(ordername);

TProductproduct=productServices.getProduct(productid);

order.setTProduct(product);

TSuppliersupplier=supplierServices.getSupplier(supplierid);

order.setTSupplier(supplier);

order.setNumb(numb);

order.setPrice(price);

order.setRemark(remark);

order.setAllprice(allprice);

order.setUsername(username);

this.getOrderServices().updateOrder(order);



}catch(RuntimeExceptione){

e.printStackTrace();

}

return"updateOrderForPurchase";

}

publicStringapproveOrder()throwsException{

TOrderorder=this.getOrderServices().getOrder(id);

order.setStatus("1");

this.getOrderServices().updateOrder(order);

return"approveOrder";

}

采购申请:

publicStringapplyOrder()throwsException{



TOrderorder=this.getOrderServices().getOrder(id);

order.setStatus("1");

this.getOrderServices().updateOrder(order);

return"applyOrder";

}

采购:

publicStringbuyOrder()throwsException{



TOrderorder=this.getOrderServices().getOrder(id);

order.setStatus("4");

this.getOrderServices().updateOrder(order);

return"buyOrder";

}

合格检查:

publicStringTestOrder()throwsException{



TOrderorder=this.getOrderServices().getOrder(id);

order.setStatus("5");

this.getOrderServices().updateOrder(order);

return"TestOrder";

}

退货检查:

publicStringreturnOrder()throwsException{



TOrderorder=this.getOrderServices().getOrder(id);

order.setStatus("6");

this.getOrderServices().updateOrder(order);

return"returnOrder";

}

审批:

publicStringapproveOrderForApproveList()throwsException{



TOrderorder=this.getOrderServices().getOrder(id);

order.setRemark(remark);

order.setStatus(status);

this.getOrderServices().updateOrder(order);

return"approveOrderForApproveList";

}

}

}

4.1.7信息查询

该功能提供对信息的快速查询,分别针对用户信息,供应商信息,材料信息,订单信息设计了不同的关键词检索,提高检索效率:

用户信息查询,根据账号进行查询,如图4-23所示:





publicStringqueryUser()throwsException{

if(getSessionAttribute("querypageunit")==null){

setSessionAttribute("querypageunit",this.pageunit);

}

StringBuffercond=newStringBuffer();

if(null!=searchname&&""!=searchname.trim()){

cond.append("anda.usernamelike''%"+searchname.trim()+"%''");

}

//cond.append("anda.power=1");

intcurpage=Integer.parseInt(this.getCurrentpage(ServletActionContext.getRequest()));

intpageunit=Integer.parseInt(this.getPageunit(ServletActionContext.getRequest(),"querypageunit"));



Stringurl="user_queryUser?a=a";



PageInfopageInfo=this.userServices.queryUser(curpage,

pageunit,ServletActionContext.getRequest(),url,cond.toString());

setRequestAttribute("pageinfo",pageInfo);

setRequestAttribute("searchname",this.searchname);

return"queryUser";

}



供应商信息查询,根据名称进行查询,如图4-24所示:





供应商信息查询关键代码实现:

publicStringquerySupplier()throwsException{

if(getSessionAttribute("querypageunit")==null){

setSessionAttribute("querypageunit",this.pageunit);

}

StringBuffercond=newStringBuffer();

if(null!=searchname&&""!=searchname.trim()){

cond.append("anda.suppliernamelike''%"+searchname.trim()+"%''");

}

intcurpage=Integer.parseInt(this.getCurrentpage(ServletActionContext.getRequest()));

intpageunit=Integer.parseInt(this.getPageunit(ServletActionContext.getRequest(),"querypageunit"));

Stringurl="supplier_querySupplier?a=a";

PageInfopageInfo=this.supplierServices.querySupplier(curpage,

pageunit,ServletActionContext.getRequest(),url,cond.toString());

setRequestAttribute("pageinfo",pageInfo);

setRequestAttribute("searchname",this.searchname);

return"querySupplier";

}

材料信息查询,根据材料名称进行查询,如图4-25所示:





材料查询代码实现:

publicStringqueryProduct()throwsException{

if(getSessionAttribute("querypageunit")==null){

setSessionAttribute("querypageunit",this.pageunit);

}

StringBuffercond=newStringBuffer();

if(null!=searchname&&""!=searchname.trim()){

cond.append("anda.productnamelike''%"+searchname.trim()+"%''");}

intcurpage=Integer.parseInt(this.getCurrentpage(ServletActionContext.getRequest()));

intpageunit=Integer.parseInt(this.getPageunit(ServletActionContext.getRequest(),"querypageunit"));

Stringurl="product_queryProduct?a=a";

PageInfopageInfo=this.productServices.queryProduct(curpage,

pageunit,ServletActionContext.getRequest(),url,cond.toString());

setRequestAttribute("pageinfo",pageInfo);

setRequestAttribute("searchname",this.searchname);

return"queryProduct";}

订单信息查询,根据订单名称进行查询,如图4-26所示:







publicStringqueryOrder()throwsException{

if(getSessionAttribute("querypageunit")==null){

setSessionAttribute("querypageunit",this.pageunit);

}

StringBuffercond=newStringBuffer();

if(null!=searchname&&""!=searchname.trim()){

cond.append("anda.ordernamelike''%"+searchname.trim()+"%''");

}

if(null!=getRequestParameter("flag")&&""!=getRequestParameter("flag")){

setSessionAttribute("flag",getRequestParameter("flag"));

}

if(null!=getSessionAttribute("flag")&&""!=(String)getSessionAttribute("flag")){

cond.append("anda.status=''"+(String)getSessionAttribute("flag")+"''");

}

intcurpage=Integer.parseInt(this.getCurrentpage(ServletActionContext.getRequest()));

intpageunit=Integer.parseInt(this.getPageunit(ServletActionContext.getRequest(),"querypageunit"));

Stringurl="order_queryOrder?a=a";

PageInfopageInfo=this.orderServices.queryOrder(curpage,

pageunit,ServletActionContext.getRequest(),url,cond.toString());

setRequestAttribute("pageinfo",pageInfo);

setRequestAttribute("searchname",this.searchname);

return"queryOrder";

}

























第五章系统测试

5.1系统调试

5.1.1程序调试

在设计系统的过程中,存在一些错误是必然的。对于语句的语法错误,在程序运行时自动提示,并请求立即纠正,因此,这类错误比较容易发现和纠正。但另一类错误是在程序执行时由于不正确的操作或对某些数据的计算公式的逻辑错误导致的错误结果。这类错误隐蔽性强,有时会出现,有时又不出现,因此,对这一类动态发生的错误的排查是耗时费力的。

5.2程序测试

5.2.1测试的重要性及目的

(1)测试的重要性

对于软件来讲,不论采用什么技术和什么方法,软件中仍然会有错。采用新的语言、先进的开发方式、完善的开发过程,可以减少错误的引入,但是不可能完全杜绝软件中的错误,这些引入的错误需要测试来找出,软件中的错误密度也需要测试来进行估计。测试是所有工程学科的基本组成单元,是软件开发的重要部分。自有程序设计的那天起测试就一直伴随着。统计表明,在典型的软件开发项目中,软件测试工作量往往占软件开发总工作量的40%以上。而在软件开发的总成本中,用在测试上的开销要占30%到50%。如果把维护阶段也考虑在内,讨论整个软件生存期时,测试的成本比例也许会有所降低,但实际上维护工作相当于二次开发,乃至多次开发,其中必定还包含有许多测试工作。

在实践中,软件测试的困难常常使人望而却步或敷衍了事,这是由于对测试仍然存在一些不正确的看法和错误的态度,这包括:

①认为测试工作不如设计和编码那样容易取得进展难以给测试人员某种成就感;

②以发现软件错误为目标的测试是非建设性的,甚至是破坏性的,测试中发现错位是对责任者工作的一种否定;

③测试工作枯燥无味,不能引起人们的兴趣;

④测试工作是艰苦而细致的工作;

⑤对自己编写的程序盲目自信,在发现错误后,顾虑别人对自己的开发能力的看法。

这些观点对软件测试工作是极为不利的,必须澄清认识、端正态度,才可能提高软件产品的质量。

(2)测试的目的

如果测试的目的是为了尽可能多地找出错误,那么测试就应该直接针对软件比较复杂的部分或是以前出错比较多的位置。

①软件测试是为了发现错误而执行程序的过程;

②测试是为了证明程序有错,而不是证明程序无错误;

③一个好的测试用例是在于它能发现至今未发现的错误;

④一个成功的测试是发现了至今未发现的错误的测试。

这种观点可以提醒人们测试要以查找错误为中心,而不是为了演示软件的正确功能。但是仅凭字面意思理解这一观点可能会产生误导,认为发现错误是软件测试的唯一目,查找不出错误的测试就是没有价值的,事实并非如此。

首先,测试并不仅仅是为了要找出错误。通过分析错误产生的原因和错误的分布特征,可以帮助项目管理者发现当前所采用的软件过程的缺陷,以便改进。同时,这种分析也能帮助我们设计出有针对性地检测方法,改善测试的有效性。其次,没有发现错误的测试也是有价值的,完整的测试是评定测试质量的一种方法。

5.2.2测试的步骤

与开发过程类似,测试过程也必须分步骤进行,每个步骤在逻辑上是前一个步骤的继续。大型软件系统通常由若干个子系统组成,每个子系统又由若干个模块组成。因此,大型软件系统的测试基本上由下述几个步骤组成:

(1)模块测试在这个测试步骤中所发现的往往是编码和详细设计的错误。

(2)系统测试在这个测试步骤中发现的往往是软件设计中的错误,也可能发现需求说明中的错误。

(3)验收测试在这个测试步骤中发现的往往是系统需求说明书中的错误。

5.2.3测试的主要内容

为了保证测试的质量,将测试过程分成几个阶段,即:代码审查、单元测试、集成测试、确认测试和系统测试。

(1)单元测试

单元测试集中在检查软件设计的最小单位—模块上,通过测试发现实现该模块的实际功能与定义该模块的功能说明不符合的情况,以及编码的错误。

(2)集成测试

集成测试是将模块按照设计要求组装起来同时进行测试,主要目标是发现与接口有关的问题。如一个模块与另一个模块可能有由于疏忽的问题而造成有害影响;把子功能组合起来可能不产生预期的主功能;个别看起来是可以接受的误差可能积累到不能接受的程度;全程数据结构可能有错误等。

(3)确认测试

确认测试的目的是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是确认测试的任务,即软件的功能和性能如同用户所合理期待的那样。

(4)系统测试

软件开发完成以后,最终还要与系统中其他部分配套运行,进行系统测试。包括恢复测试、安全测试、强度测试和性能测试等。

单独对系统的测试主要从以下几方面入手:

①功能测试:测试是否满足开发要求,是否提供设计所描述的功能,是否用户的需求都得到满足。功能测试是系统测试最常用和必须的测试,通常还会以正式的软件说明书为测试标准。

②强度测试及性能测试:测试系统能力最高实际限度,即软件在一些超负荷情况下功能实现的情况。

③安全测试:验证安装在系统内的保护机构确实能够对系统进行保护,使之不受各种非常的干扰。针对本系统主要是对权限系统的测试和对无效数据、错数据、和非法数据干扰的能力的测试。

(1)测试案例的内容

周期:测试时间域。

层次:测试的层面。

类型:测试的分类。

系统:测试何系统。

分系统:测试何分系统。

模块:测试何模块。

平台:测试的环境。

描述:对测试问题说明与叙述。

目的:测试的目标与期望。

此外,还包括测试文档号、测试设置、输入条件、测试结果和期望结果。

(2)测试案例与脚本

1)测试案例与脚本设计主要包括以下内容:

检查集成测试策略

制定测试数据目的和性能目标

找出关键测试条件

检查已有的在线测试脚本

输入或抓取在线测试脚本

检查已有的用于测试的数据

生成测试数据

检查重要的数据

执行测试数据和测试脚本













































2)本系统测试案例如下:











































































只有系统的测试工作在用户的协助下,不断的修改,才能达到完善的预期目标。本企业采购信息管理系统系统经过初步测试,基本上达到目标。



结束语

几个月来忙碌紧张而又有条不紊的毕业设计,使我有机会对本专业的基本理论、专业知识和基本技术有了更深入的了解和体会,使我在四年中所学到的知识得到了系统的复习和升华,真正达到了学以致用。

管理信息系统是一门融管理科学、信息科学、系统科学、计算机科学与现代通信技术为一体的一门综合性学科。它是运用系统的方法以计算机和现代通信技术为基本信息处理手段和工具的,能为管理决策提供信息服务的人—机系统.它可以实现数据处理功能、预测功能、计划功能、控制功能和辅助决策功能。管理信息系统的开发是一项复杂的系统工程,必须严格的按照系统规划、系统分析、系统设计、系统实施、系统运行与评价的开发步骤来进行。

在系统开发之前,必须了解该系统的特点、适用范围以及使用者需要一个什么样的系统,以此作为基础为开发系统准确定位,然后对使用者所需实现的功能进行分析总结,根据使用者的实际要求来给系统设计一个初步方案。系统的开发不仅是要实现对数据处理的及时与正确,而且要考虑系统是否具有控制功能,及时将数据反馈给操作者,以进行监测和协调,保证系统的正常运行;也要考虑是否具有预测功能,运用一定的数学方法利用历史的数据对未来进行预测的工作。

在设计的过程中,我掌握了很多JSP的编程知识,并对这种成熟并广泛应用的技术进行了深入的学习。设计的过程也是一个再学习的过程,在遇到问题的时候我尽量自己想办法解决,这在很大程度上激发了我们的自学能力;在没有办法解决的情况下,认真的向老师请教,从老师那里我学到了很多的知识,老师对我的指导起到了画龙点睛的作用。

以往我们曾经有过多次设计的体会,但只是设计一个模块或一个小系统,而这一次毕业设计是综合所学的管理和计算机的知识来设计一个适合运行管理的企业采购信息管理系统。要想设计使用户满意,就需要我们付出更多的努力。我在设计中经常出现一些问题不知该如何解决,在此时许多同学给予了我帮助。在设计的过程中增加了于实际接触的机会,不仅培养了我的自学和编程能力,让我在即将离开学校进入社会之前有了一定的资本,提高了我与人沟通的能力。

在我的程序设计过程中,我充分的体会到了“实践出真知”这一点,书本上的知识是不够的,只有把理论与实践相结合才能够真正的学到知识。一个管理信息系统的设计,不可能一步到位,还需要不断的完善和补充。同时,系统中还存在许多问题,有待在日后的使用中发现和解决。编程前的深思熟虑是减少程序调试工作量的重要方法,只有进行充分考虑,才会减少调试过程中的工作量。虽然在开始写程序之前我们做了多的准备工作,但在真正的写程序时仍然发现许多问题,有些问题是分析时的疏漏,有些则是如果不做无论如何也想不到的。所以我需要在日后进行更多的经验积累。

毕业设计是我人生一笔宝贵的财富。我会把它当做人生的成功基石,日后不断的进行努力,提高自己,逐步走向成功。







参考文献

[1]孙卫琴,李洪成.《Tomcat与JavaWeb开发技术详解》.电子工业出版社,2010年6月:1-205

[2]BruceEckel.《Java编程思想》.机械工业出版社,2003年10月:1-378

[3]FLANAGAN.《Java技术手册》.中国电力出版社,2012年6月:1-465

[4]杜轩华袁方《Web开发技术》.上海大学出版社,2005年7月:1-300

[5]LEEANNEPHILLIPS.《巧学活用HTML4》.电子工业出版社,2004年8月:1-319

[6]任振华《数据库系统原理》.光明日报出版社,2010年:30-475

[7]萨师煊,王珊.《数据库系统概论》.高等教育出版社,2008年2月:3-460

[8]Brown等.《JSP编程指南(第二版)》.电子工业出版社,2013年3月:1-268

[9]清宏计算机工作室.《JSP编程技巧》.机械工业出版社,2009年5月:1-410

[10]赛奎春.《JSP工程应用与项目实践》.机械工业出版社,2012年8月:23-294

[11]冯博琴等《面向对象分析与设计》.机械工业出版社,2005年8月:40-100

[12]张海藩《软件工程导论》.清华大学出版社,2009年9月:45-90









































外文原文

Java?Server?Programming:Principles?and?Technologies?

By?Subrahmanyam?Allamaraju,?Ph.D.

1.Summary?

Building?and?managing?server-side?enterprise?applications?has?always?been?a?challenge.?Over?the?last?two?decades,?the?role?and?importance?of?server-side?applications?has?increased.?The?twenty-first?century?economy?dictates?that?ecommerce?and?other?enterprise?applications?

are?transparent,?networked,?adaptable,?and?service-oriented.?These?demands?have?significantl-y?altered?the?nature?of?applications.?As?enterprises?migrate?from?closed?and?isolated?applications?to?more?transparent,?networked,?and?service-oriented?applications?to?enable?electronic?business?transactions,?server-side?technologies?occupy?a?more?prominent?place.?Despite?the?disparity?of?applications?that?exist?in?any?enterprise,?server-side?applications?are?what?power?twenty-first?century?enterprises!?

The?purpose?of?this?article?is?two-fold.?Firstly,?this?article?attempts?to?highlight?the?tecnical?needs?for?server-side?applications,?and?thereby?establish?a?set?of?programming?models.?Sc-ondly,?based?on?these?programming?models,?this?article?introduces?the?reader?to?the?Java?2,?E-nterprise?Edition?(J2EE).?

If?you?are?a?beginner?to?server-side?programming,?or?the?J2EE,?this?article?will?help?you?gain?an?overall?perspective?of?what?this?technology?is?about.?If?you?are?familiar?with?one?or?more?J2EE?technologies,?this?article?will?provide?the?basic?principles?behind?server-side?programming,?and?help?you?relate?these?principles?to?specific?J2EE?technologies.?

Introduction

Building?and?managing?server-side?enterprise?applications1?has?always?been?a?challenge.?Over?the?last?two?decades,?the?role?and?importance?of?server-side?applications?has?increased.?The?twenty-first?century?economy?dictates?that?ecommerce?and?other?enterprise?applications?are?transparent,?networked,?adaptable,?and?service?oriented.?These?demands?have?significant-ly?altered?the?nature?of?applications.?As?enterprises?migrate?from?closed?and?isolated?applications?to?more?transparent,?networked,?and?service-oriented?applications?to?enable?electronic?business?transactions,?server-side?technologies?become?more?prominent.?Despite?the?disparity?of?applications?that?exist?in?any?enterprise,?server-side?applications?are?the?ones?that?power?twenty-first?century?enterprises.?

The?history?of?server-side?applications?dates?back?to?the?mainframe?era,?an?era?during?which?only?mainframes?roared?across?enterprises.?They?were?centralized?in?nature,?with?all?the?computing—from?user?interfaces,?to?complex?business?process?execution,?to?transactions—performed?centrally.?The?subsequent?introduction?of?minis,?desktops,?and?relational?databases?fueled?a?variety?of?client-server?style?applications.?This?contributed?to?a?shift?in?the?way?applications?could?be?built,?leading?to?various?architectural?styles,?such?as?two-,?three-,?and?multi-tier?architectures.?Of?all?the?styles,?database-centric?client-server?architecture?was?one?of?the?most?widely?adapted.?Other?forms?of?client-server?applications?include?applications?developed?using?remoteprocedure?calls?(RPC),?distributed?component?technologies,?such?as?Common?Object?.

Request?Broker?Architecture?(CORBA),?and?Distributed?Component?Object?Model?(DCOM),?etc.?Just?as?these?technologies?and?architectures?were?diverse,?so?too?were?the?nature?of?clients?for?such?applications.?The?most?commonly?used?client?types?for?these?applications?were?desktop?based?(i.e.,?those?developed?using?Visual?Basic?or?other?similar?languages).?Other?types?of?clients?included?other?applications?(viz.,?as?in?enterprise?application?integration)?and?even?Web?servers.?

Subsequently,?what?we?see?today?are?Internet-enabled?server-side?applications.?The?underlying?technologies?for?building?Internet-enabled?server-side?applications?have?evolved?significantly?and?are?more?mature?and?less?complex?to?deal?with,?as?you?will?see?later?in?this?article.?Apart?from?providing?more?flexible?programming?models,?today’s?server-side?technologies?are?infrastructure?intensive.?

2.What?is?server-side?programming?

The?terms?server?and?server-side?programming?are?very?commonly?used.?But?what?is?a?

server??Generally?speaking,?a?server?is?an?application?hosted?on?a?machine?that?provides?some?services?to?the?other?applications?(clients)?requesting?the?services.?As?is?obvious?from?the?definition,?a?server?typically?caters?to?several?clients,?often?concurrently.?The?services?offered?by?a?server?application?can?be?very?diverse—?ranging?from?data,?and?other?information,?management?to?the?execution?of?specialized?business?logic.?Although?several?types?of?server?applications?are?possible,?you?can?quickly?recognize?the?following?two?kinds?of?servers:?

1.?Commercial?Database?Servers?(or?Database?Management?Systems):?Servers?that?manage?data,?which?come?from?vendors,?such?as?Oracle,?Sybase,?and?Microsoft.?Client?applications?use?standard?APIs,?such?as?Open?Data?Base?Connectivity?(ODBC)?or?Java?Data?Base?Connectivity?(JDBC),?in?combination?with?SQL?(Structured?Query?Language)?to?access/manipulate?the?data.?In?addition?to?these?standard?APIs,?you?may?use?vendor-specific?client?access?APIs?to?communicate?with?the?database?server.?These?servers?are?responsible?for?consistently?managing?data?such?that?multiple?clients?can?manipulate?the?data?without?loss?of?consistency.?

2.?Web?Servers:?The?other?easily?recognizable?types?of?servers?are?Web?servers.?A?Web?server?hosts?content,?such?as?HTML?files.?Clients?(Web?browsers)?access?this?content?by?submitting?requests?using?Hyper?Text?Transfer?Protocol?(HTTP).?In?its?basic?mode,?a?Web?server?maps?a?client?request?to?a?file?in?the?file?system,?and?then?sends?the?content?of?the?file?to?the?client?making?the?request.?Similar?to?database?servers,?Web?servers?can?deal?with?concurrent?requests—often?several?thousands.?Because?we?are?accustomed?to?working?with?these?types?of?servers,?we?often?tend?to?overlook?the?fact?that?they?are?server-side?applications,?albeit?standardized.?However,?when?I?use?the?term?server-side?programming,?I?do?not?mean?developing?such?databases?or?Web?servers.?Such?applications?were?commodified?years?ago.?These?general-purpose?server-side?applications?provide?standard,?predefined?functionality.?In?the?case?of?server-side?programming,?we?are?more?interested?in?developing?specialpurpose?applications?to?implement?specific?business-use?cases.Why?is?it?important?or?relevant?to?consider?server-side?applications??Why?is?it?necessary?to?build?applications?that?can?provide?services?to?several?client?applications??Following?are?some?common?scenarios?that?illustrate?the?need?for?server-side?applications:

1.?Execute?some?logic?available?with?a?different?application.?

This?is?one?of?the?reasons?that?prompted?development?of?early?distributed?technologies,?such?as?the?RPC.17?Consider?that?you?are?developing?an?application?implementing?certain?new?business-use?cases.?Suppose?that?there?is?some?business?logic?already?implemented?in?a?different?application.?In?cases?where?such?functionality?is?available?as?separate/isolated?class?or?function?libraries,?you?might?consider?reusing?the?same?code?in?the?new?application.?But,?what?if?such?logic?(and?code)?depends?heavily?on?some?data?being?managed?by?the?existing?application??In?such?a?case,?the?class/function?library?cannot?be?reused?as?these?class/function?libraries?may?fail?to?execute?without?the?availability?of?such?data.?Alternatively,?what?if?such?code?is?dependent?on?several?other?parts?of?the?existing?application,?making?it?difficult?to?reuse?the?code?in?the?new?application??One?possible?solution?to?deal?with?this?is?by?executing?this?logic?in?the?existing?application;?that?is,?instead?of?reusing?the?code?from?the?existing?application,?the?new?application?can?send?a?request?(with?any?required?data)?to?the?existing?application?to?execute?this?logic?and?obtain?any?results

2.?Access?information/data?maintained?by?another?application.?This?is?yet?another?scenario?that?mandates?server-side?applications?and?clients.?Database?servers?and?other?applications?maintain?information?in?a?persistent?storage?fall?under?this?category;?however,?database?servers,?such?as?relational?database?management?systems,?typically?manage?raw?data?(rows?of?data?in?various?tables).?Such?data?may?or?may?not?be?directly?usable?(in?the?business?sense)?by?other?applications?that?rely?on?the?data.?For?instance,?consider?a?database?holding?various?accounts?of?all?customers?in?a?bank.?A?common?requirement?in?such?systems?is?to?consolidate?all?the?accounts?of?a?given?customer?and?present?a?summarized?view?of?all?accounts.?Depending?on?that?customer’s?account?types,?the?process?of?generating?the?summarized?view?may?involve?performing?some?complex?calculations?including?evaluating?some?business?rules.

Now?consider?several?applications?within?the?bank?performing?other?banking?tasks?some?of?which?require?a?summarized?view?of?all?accounts?of?a?customer.?For?instance,?an?application?responsible?for?calculating?monthly?account?charges?may?require?the?value?of?the?consolidated?account?balance.?When?there?are?several?such?applications?that?require?this?data,?it?is?appropriate?to?let?one?of?the?applications?handle?this?calculation?for?all?other?applications.

3.?Integrate?applications.?In?any?given?enterprise,?it?is?not?uncommon?to?find?several?applications?developed?over?years?that?are?used?for?executing?different?business?tasks.?You?may?even?find?that?such?stand-alone?applications?are?maintained?by?different?departments?of?enterprises?and?developed?using?different?programming?languages?and?technologies.?To?some?extent,?such?applications?were?a?result?of?the?drive?to?decentralize?businesses?from?mainframe-based?applications.?However,?as?we?discussed?earlier,?one?of?the?requirements?encountered?by?almost?all?enterprises?today?is?the?ability?to?internetwork?such?applications?so?that?business?workflows?can?be?established?across?the?enterprise.

To?elaborate?further,?let?us?take?the?case?of?a?traditional?retail?business?collecting?orders?for?products?via?a?call?center,?surface?mail,?etc.?Let?us?assume?that?an?order-entry?application?is?used?to?record?all?orders?(in?a?database)?captured?via?these?channels.?Let?us?also?assume?that?the?company?has?developed?an?in-house?order-fulfillment?application,?which?takes?the?orders?recorded?in?the?database?and?conducts?whatever?tasks?are?need?to?fulfill?each?order.?These?two?applications?are?stovepiped?because?each?of?these?applications?addresses?specific?business?tasks?in?a?decoupled?manner?without?any?knowledge?of?the?overall?business?flow.?In?this?case,?the?overall?business?flow?is?to?receive?(and?enter)?orders,?and?then?to?fulfill?each?of?the?orders.?Such?stovepiped?applications?cannot,?individually,?implement?the?end-to-end?business?flow.?In?order?to?implement?this,?you?need?to?integrate?the?applications?such?that?the?order-entry?application?can?automatically?trigger?the?fulfillment?application,?directly?or?indirectly.?This?is?the?enterprise?application?integration18?problem,?but?there?are?several?ways?to?achieve?such?integration.?One?way?is?to?make?the?order-entry?application?invoke?(or?notify)?the?fulfillment?application?directly?after?an?order?has?been?captured.?The?fulfillment?application?can?then?start?the?fulfillment?activities?thereby?streamlining?a?business?flow?across?these?applications.

2.Synchronous?Request-Response?Model

The?fundamental?idea?behind?this?model?is?that?it?allows?client?applications?to?invoke?methods/functions?executing?on?remote?applications.?Technologies,?such?as?CORBA,?Java?Remote?Method?Invocation?(RMI),?and?Enterprise?JavaBeans?(EJB)?follow?this?model.?The?following?features?characterize?the?synchronous?request-response?model?approach:?

1.?The?contract?between?clients?and?servers?is?interface?based.?The?interface?between?client?and?server?is?the?remote?interface.?It?specifies?the?operations/methods?that?clients?can?invoke?on?servers.?

2.?The?communication?between?the?client?and?the?server?is?synchronous.?This?is?no?different?from?local?method?calls.?Upon?invoking?a?method,?the?client?thread?waits?until?the?server?responds.?This?also?implies?that?the?server?should?be?up?and?running?for?the?client?to?invoke?methods?on?the?server.?

3.?The?communication?is?connectionful.?The?application?contract?can?maintain?various?requests?and?responses?between?the?client?and?the?server.?

These?two?features?narrow?the?line?between?invoking?a?method?on?a?local?object?and?invoking?a?method?on?a?remote?object.

3.Basic?Requirements

What?are?the?technical?requirements?for?implementing?such?an?approach??Before?we?can?identify?the?technical?requirements,?let?us?study?this?approach?in?more?detail.?The?following?Figure?4?shows?as?application?(client)?invoking?a?method?in?a?different?process.?In?object-oriented?languages,?such?as?Java,?methods?exist?on?interfaces?or?classes.?Therefore,?in?a?Java?environment,?this?approach?involves?a?client?invoking?a?method?on?an?object?that?exists?in?a?different?process?(possibly?on?a?different?machine).

4.Java?RMI

Let?us?now?illustrate?how?to?develop?client?and?server?objects,?and?generate?proxy?and?skeleton?classes?with?Java?RMI.?

Java?RMI?is?the?CORBA?alternative?in?a?pure?Java?environment.?Java?RMI?defines?a?framework?for?specifying?remote?interfaces,?which?is?specified?in?the?java.rmi?package.?The?J2SE?also?includes?the?runtime?support?for?remote?objects?and?clientserver?communication.?

You?can?specify?remote?interfaces?by?making?your?interface?extend?the?java.rmi.Remote?interface?(this?indicates?the?Java?runtime?that?it?is?a?remote?interface)?as?follows:

public?interface?Process?extends?java.rmi.Remote?{?

public?void?process(String?arg)?throws?java.rmi.RemoteExcetion;?}

This?code?snippet?defines?a?remote?interface?with?one?method.?The?exception?clause?is?required?to?denote?that?this?method?can?throw?communication-related?exceptions.?

The?next?step?is?to?implement?a?class?that?implements?the?remote?interface.?This?is?the?server?object.?

public?class?ProcessImpl?extends?UnicastRemoteServer?implements?Process?{?

public?ProcessImpl()?{?super();?}?

public?void?process(String?arg)?throws?java.rmi.RemoteExcetion?{?

//?Implement?the?method?here?}?}

Once?you?have?the?remote?interface,?the?next?step?is?to?use?the?rmic?compiler?on?the?implementation?class?to?generate?the?proxy?and?skeleton?classes.?You?will?find?this?compiler?under?the?J2SE?distribution.?This?compiler?has?options?to?create?source?filesfor?the?proxy?and?skeleton?classes.Other?technologies,?such?as?CORBA?or?EJB,?use?similar?approaches?to?specify?remote?interfaces?and?generate?proxies?and?skeleton.?

Although?proxies?and?skeletons?eliminate?the?need?for?network-level?programming,?the?following?two?questions?should?be?considered:?

1.?How?does?the?skeleton?maintain?instances?of?object?B??Should?the?server?application?create?an?instance?initially,?for?each?request,?or?should?it?share?one?instance?for?all?requests??What?are?the?threading/concurrency?implications?of?any?strategy??

2.?Location?transparency:?How?do?you?indicate?the?location?of?the?server?to?the?proxy?object??Can?you?predetermine?this?and?force?the?proxy?to?invoke?a?specific?implementation?of?the?remote?interface?available?at?a?given?network?location??If?so,?the?client?application?would?be?dependent?on?the?location?of?the?server.?But,?is?it?possible?to?achieve?location?transparency?5.Instance?Management

Once?the?remote?interface,?and?its?implementation?are?available,?the?next?question?is?how?to?make?instances?of?the?implementation?class?available?in?a?runtime?(process).?Creating?a?new?instance?of?an?implementation?object?is?not?adequate?to?make?this?implementation?available?via?a?remote?interface.?In?order?for?the?server?implementation?object?to?be?available?and?be?able?to?process?requests?coming?from?client?applications?over?the?network,?the?following?additional?steps?are?required:?

1.?The?process?hosting?the?instance?should?be?reachable?via?network.?Typically,?this?boils?down?to?a?server?socket?listening?for?requests?over?the?network?(i.e.,?the?server?process?should?have?the?necessary?infrastructure?to?do?so).?

2.?The?server?process?should?allocate?a?thread?for?processing?each?incoming?request.?Servers?are?generally?required?to?be?multi-threaded.?

3.?The?server?process?may?host?implementations?of?several?remote?interfaces.?Depending?on?some?of?the?information?contained?in?the?incoming?network?request,?the?server?process?should?be?capable?of?identifying?the?correct?implementation?object.?For?instance,?the?name?of?the?interface?could?specify?the?implementation?object?for?the?server.?In?this?case,?the?server?should?have?knowledge?of?which?class?implements?which?remote?interface.?

4.?Once?the?server?identifies?the?correct?interface,?it?should?invoke?the?associated?skeleton?class.?This?class?can?unmarshall?the?request?parameters?and?invoke?the?appropriate?method?for?the?implementation?class.?

In?the?above?list,?the?task?of?creating?instances?depends?on?whether?the?clientserver?communication?is?required?to?be?stateful?or?stateless.?Address?this?question?when?you?expect?more?than?one?client?to?invoke?methods?on?a?remote?object.?The?main?difference?between?stateful?and?stateless?communication?is?whether?the?remote?instance?can?maintain?and?rely?on?instance?variable?between?multiple?method?calls?from?a?client.?For?instance,?consider?that?client?A?is?invoking?methods?on?a?remote?object?B.?Let’s?also?assume?that?the?remote?interface?has?several?methods.?The?client?may?invoke?these?methods?one?after?the?other.?While?implementing?a?method,?the?remote?object?may?store?data?in?its?instance?variables.?For?instance,?it?may?store?some?calculation?results?in?an?instance?variable.?If?subsequent?methods?on?this?object?depend?on?the?value?stored?in?the?instance?variable,?the?communication?is?stateful;?that?is,?the?server?should?make?sure?that?the?same?instance?is?being?used?for?all?requests?from?a?given?client.?This?also?means?that,?while?an?instance?is?serving?a?client,?the?server?should?not?use?the?same?instance?for?other?client?requests.?One?important?ramification?of?statefulness?is?that?the?server?will?maintain?a?separate?instance?for?each?client.?In?systems?that?have?a?very?large?number?of?clients,?statefulness?may?affect?performance.?

On?the?other?hand,?stateless?communication?does?not?require?the?same?instance?for?a?given?client?(i.e.,?invoking?methods).?In?this?case,?the?server?may?be?able?to?use?ten?objects?for?these?ten?clients.?As?a?result,?stateless?communication?is?more?efficient?as?it?converses?memory?on?the?server?side.?

A?general?practice?is?to?implement?remote?objects?using?the?stateless?approach.?Technologies,?such?as?RMI,?CORBA,?and?COM/DCOM?provide?for?stateless?remote?objects?alone.?On?the?other?hand,?the?EJB?technology?allows?for?stateful?server-side?objects,?too.?We?shall?discuss?more?about?this?later.?Figure?10?summarizes?the?instance?management.



































中文翻译

Java服务器程序设计:原理和技术

作者:Subrahmanyam?Allamaraju?

版权所有?2001年Subrahmanyam?Allamaraju?保留所有权利?

出版MightyWords公司?2550沃尔什大街?

美国加州圣克拉拉,95051?书号0-7173-0642-9

1.综述

建立和管理服务器端企业应用一直是挑战。在过去的二十年中,作用和服务器端的重要性应用有所增加。二十一世纪的经济决定了电子商务和其他企业应用是透明的,网络化,适应性强,服务至上。这些要求已大大改变了应用程序的性质。随着企业的迁移从封闭和孤立的应用程序更加透明,网络化,面向服务的应用,使电子业务交易,服务器端技术占据更加突出的位置。尽管在任何的应用程序的企业存在差距,服务器端应用程序是什么??电力二十一世纪的企业!??

本文的目的有两个方面。首先,本文试图以突出服务器端应用的技术需求,从而建立一套编程模型。其次,根据这些编程模型,本文介绍了到Java?2企业版(J2EE)的读者。如果你是一个服务器端编程初学者,或J2EE,本文将帮助你获得一个什么样这项技术是对整体的观点。如果你是??与一个或多个J2EE技术的熟悉,本文将提供基本的后面的服务器端编程的原则,并帮助您联系这些原则特定的J2EE技术。

2.简介

建立和管理服务器端企业应用一直是?挑战。在过去的二十年中,作用和服务器端的重要性应用有所增加。二十一世纪的经济决定了电子商务和其他企业应用是透明的,网络化,适应性强,服务为本。这些要求已大大改变了应用程序的性质。随着企业的迁移从封闭和孤立的应用程序更加透明,网络化,面向服务的应用,使电子业务??交易,服务器端技术变得更加突出。尽管差距在任何的应用程序的企业的生存,服务器端应用程序是那些电力二十一世纪的企业。对于服务器端应用程序的历史可以追溯到大型机时代,一个时代?在此期间只大型机吼道跨企业。他们被集中在自然,所有的计算,从用户界面,到复杂的业务流程执行中,把交易,集中执行。此后推出的迷你合约,台式机,和关系数据库这一事件引起了客户的各种应用服务器风格。这有助于建立一个可以应用的方式转变,导致各建筑风格,如两,三年,多层次架构。在所有的样式,数据库为中心的客户机服务器体系结构是最广泛适应之一。其他客户机服务器应用形式包括:应用开发使用remoteprocedure??调用(RPC),分布式组件技术,如通用对象,请求代理架构(CORBA)和分布式组件对象模型?(DCOM)的,等等,正如这些技术和体系结构是多种多样的,因此也被为这类客户申请的性质。最常用的客户类型?这些应用程序是基于桌面(即那些使用Visual?Basic或开发其他类似的语言)。其他类型的客户包括其他应用程序(即,如企业应用集成),甚至Web服务器。??随后,我们今天看到的是互联网功能的服务器端的应用。该建设互联网基础技术功能的服务器端应用程序进化显着,而且更成熟,不太复杂的处理,你会后面看到这篇文章。除了提供更灵活的编程模型,当今的服务器端技术是基础设施密集。

3.什么是服务器端的编程?

术语服务器和服务器端编程是非常普遍的。但什么是服务器?一般来说,服务器是一个应用程序的机器上托管?提供一些服务,(客户)要求的其他应用程序的服务。正如明显的自定义,服务器通常迎合了几个客户,往往同时进行。由服务器应用程序提供的服务可以是非常多样,??从数据和其他信息,管理到专门的执行业务逻辑。尽管服务器应用程序可能有几种类型,你可以快速识别的服务器以下两种:??

1.商业数据库服务器(或数据库管理系统):服务器管理数据,如Oracle,SYBASE的是从厂商要来,?微软。客户端应用,如开放数据库标准的API,连接(ODBC)或Java数据库连接(JDBC),结合与SQL(结构化查询语言)来访问/操纵的数据。此外这些标准的API,你可以使用供应商特定的客户端访问API与数据库服务器通信。这些服务器负责坚持管理数据,使得多个客户端可以操作数据没有一致性的损失。??

2.Web服务器:其他容易辨认类型的服务器是Web服务器。Web服务器主机的内容,如HTML文件。客户端(Web浏览器)访问本内容提交请求使用超文本传输协议(HTTP)。在其基本模式下,Web服务器映射一个客户端请求中的一个文件系统的文件,然后发送到客户端的请求文件的内容作出。类似数据库服务器,Web服务器可以处理并发请求,往往数千名。因为我们习惯使用这些类型的服务器的工作,我们常常忽视了这个事实,他们虽然标准化的服务器端应用程序。然而,当我使用这个词的服务器端编程,我不是指发展这样的数据库或Web服务器。这样的应用程序进行商品化年前。这些通用服务器端应用提供标准的,预定义的功能。在对服务器端编程的情况下,我们更感兴趣的specialpurpose发展应用程序实现具体的业务用例。?

为什么是很重要的或相关的考虑服务器端的应用程序?为什么要构建应用程序,可以提供服务的几个客户端应用程序?下面是一些说明服务器端需要共同方案应用:??

1.执行一些逻辑,用不同的申请。这是一原因促使分布式技术发展的早期,如RPC.17想想看,你正在开发一些新的应用程序实施业务用例。假定有一些业务逻辑已经实施在不同的应用程序。在这种情况下,可作为功能单独的/隔离类或函数库,你可以考虑重用相同在新的应用程序代码。但是,如果这种逻辑(和代码)在很大程度上取决于一些数据被管理的现有的应用程序?在这种情况下,类/函数库不能被重用,因为这些类/函数库,可能无法执行没有这些数据的可用性。另外,如果这样的代码依赖于现有的应用程序若干其它地区,因此很难重用在新的应用程序代码?一种可能的解决办法来处理,这是由在现有执行此应用程序逻辑,这就是,而不是重用代码从现有的应用程序,新的应用程序可以发送一个请求(与任何??所需的数据),以现有的应用程序来执行这个逻辑,并取得任何的结果。?

2.获取信息的另一个应用程序维护/数据。这又是一个场景,任务服务器端应用程序和客户端。数据库服务器和其他应用程序保持在一本属于持久存储信息范畴;但是,数据库服务器,如关系数据库管理系统,通常管理的原始数据(数据行各表)。这些数据可能会或可能不会直接使用(在商业意义上)的其他应用程序依靠这些数据。例如,考虑一个数据库持有的所有各个账户客户在一家银行。在这种系统的共同要求,是巩固所有给定客户的帐户并提交所有帐户总结的看法。根据该客户的帐户类型,产生过程总结观点可能涉及一些复杂的计算,包括表演?评估一些业务规则。现在考虑在其他银行的银行执行多个应用程序其中一些任务需要概括了客户所有账户的看法。对于例如,一个应用程序负责计算每月账户费可需要综合帐目收支平衡的价值。当有几个这样的应用程序需要此数据,它是适当的,让其中一个应用程序处理这对所有其他应用程序的计算。?

3.整合应用。在任何特定的企业,是不难发现几个经过多年开发的应用程序可用于执行不同的业务使用任务。你甚至可能发现这种独立的应用程序维护??企业不同部门和不同的编程开发利用语言和技术。从某种程度上说,这种应用是一种结果的开车从分散基于大型机的应用程序的需求。然而,由于我们前面讨论的要求之一,几乎所有的企业所遇到的今天是互联网络的能力,这样的应用,使业务工作流程可以建立整个企业。为了进一步说明,让我们以传统的零售商业案例?收集通过呼叫中心,平邮等产品的订单,让我们假设?,一个订单输入应用程序是用来记录所有的订单(在一个数据库)抓获通过这些渠道。我们还假设该公司已经开发了一个内部为了实现的应用程序,它发生在数据库中记录的命令,进行任何任务需要完成每一张订单。这两个应用程序stovepiped因为这些应用程序的每个地址的特定业务任务一个没有任何业务流程的整体知识脱钩的方式。在这情况下,整体业务流程接收(和输入)命令,然后履行每个订单。这种stovepiped应用程序无法单独地,实施最终的端到端业务流程。为了实现这一点,你需要整合应用,例如,订单输入应用程序可以自动触发实现应用程序,直接或间接的影响。这是企业应用integration18问题,但有几种方法来实现这种一体化。一方法是使订单输入应用程序调用(或通知)的实现申请后,直接的命令已抓获。实现应用程序的然后可以启动一个业务流程,从而简化整个履约活动这些应用程序。

4.同步请求响应模型

这种模式背后的基本思想是,它允许客户端应用程序调用方法/功能上执行远程应用程序。技术,如CORBA,Java远程方法调用(RMI)和企业JavaBeans(EJB)的跟进这模型。??

以下功能特点的同步请求响应模型方法:??

1.客户端和服务器之间的合同是基于接口。该接口客户端和服务器之间的远程接口。它指定操作/方法,客户端可以调用服务器上。??

2.之间的客户端和服务器之间的通信是同步的。这是没有本地方法调用不同的。当调用一个方法,客户端线程等待,直到服务器响应。这也意味着该服务器应和??运行客户端来调用服务器方法。??

3.通信是connectionful。应用程序可以维护合同各种请求和响应之间的客户端和服务器。这两个特点拉近方法调用本地对象的行和调用远程对象的方法。??基本要求什么是实施这种做法的技术要求?在我们可以识别的技术要求,让我们更详细地研究这种方法。该下面的图4显示了作为应用程序(客户端)调用在一个不同的方法过程。在面向对象的语言,如Java,接口或方法存在类。因此,在Java环境中,这种方法涉及到一个客户端调用对一个对象,在不同的过程中存在的方法(可能在不同的机器上)。

5.Java?RMI

现在让我们说明如何开发客户端和服务器对象,并生成代理和与Java的RMI骨架类。?

Java?RMI的是一个纯Java环境CORBA的选择。?Java?RMI的定义用于指定远程接口框架,它是在特定的java.rmi包。?J2SE的还包括用于远程对象和运行时支持clientserver沟通。您可以指定让您的远程接口扩展接口java.rmi.Remote接口(这表明了Java运行时,它是一个远程接口)如下:?

public?interface?Process?extends?java.rmi.Remote?{?

public?void?process(String?arg)?throws?java.rmi.RemoteExcetion;?}?

此代码片段定义了一个方法的远程接口。唯一的例外子句是必需来表示,这种方法可以抛出通信相关例外。接下来的一步是实现一个类,实现了远程接口。这是服务器对象。?

public?class?ProcessImpl?extends?UnicastRemoteServer?implements?Process?{?

public?ProcessImpl()?{?super();?}?

public?void?process(String?arg)?throws?java.rmi.RemoteExcetion?{?

//?Implement?the?method?here?}?}?

一旦你的远程接口,下一步是使用rmic编译器上实现类生成代理和skeleton类。你会发现这编译器下的J2SE分布。此编译器选项来创建源文件为代理和骨架类。其他技术如CORBA或EJB,使用类似的方法来指定和远程接口生成代理和骨架。虽然代理和骨骼消除了网络层次的需要编程,以下两个问题应予以考虑:??

1.如何保持骨骼对象B的实例?如果服务器应用程序创建一个实例开始,对于每个请求,还是应该共享一个例如对所有的要求?什么是线程的任何/并发影响策略???

2.位置透明:你如何显示服务器的位置的??代理对象?你能预先确定这一点,迫使代理来调用特定实施远程接口可在一个给定的网络位置?如果因此,客户端应用程序将在服务器的位置而定。但是,是有可能实现了位置透明性??

6.实例管理

一旦远程接口,其实现的情况下,接下来的问题是如何让实现类在运行时(进程)可用实例。创建一个执行对象的新实例不足以使这个通过实施远程接口。在服务器的命令实施对象可用,并且能够处理请求来自网络客户端应用程序,下面的附加步骤是必需的:??

1.申办的过程实例应该可以通过网络访问。通常情况下,这可以归结为一个服务器套接字通过网络(即监听请求的服务器进程应该有必要的基础设施,这样做)。?

2.服务器进程应分配一个线程来处理每请求。服务器通常需要是多线程的。?

?3.服务器进程可承办多个远程接口的实现。对一些信息的不同包含在传入的网络请求,服务器进程应该是能够识别的正确实施对象。例如,该接口的名称可以指定执行对象服务器。在这种情况下,服务器应该有知识,即类实现该远程接口。?

4.一旦服务器识别正确的接口,它应该调用相关骨架类。这个类可以和解组请求参数,并调用适当的方法的实现类。在上面的列表,创建实例的任务,取决于是否clientserver通讯须有状态或无状态的。解决这一问题当你希望多个客户端来调用远程对象的方法。有状态和无状态之间沟通的主要区别在于是否??远程实例可以维持,靠的实例变量之间的多个方法从客户端调用。例如,考虑一个是客户端上调用一个方法远程对象B让我们也假设远程接口有几种方法。该客户端可以调用这些后,其他的方法之一。在实施方法,远程对象可以存储在它的实例变量的数据。例如,它可以存储在一个实例变量的一些计算结果。如果这个对象后续方法依赖于实例变量中存储的值,通讯状态,这,服务器应该确保相同的实例将被用于为所有请求从一个给定的客户端。这也意味着,当一个实例正在服刑的客户端,服务器不应该使用其他客户端请求相同的实例。其中一个重要??有状态衍生物的是,服务器将保持每个单独的实例客户端。在系统的客户有非常大的数字,有状态可能会影响性能。另一方面,无国籍沟通并不需要同样的实例一个给定的客户端(即,调用方法)。在这种情况下,服务器可能能够使用十对象为这十个客户。因此,无国籍的沟通更为有效,因为它交谈在服务器端的内存。一个一般的做法是使用无状态的方法实现远程对象。技术如RMI,CORBA和COM?/?DCOM技术,提供远程无状态单独的对象。在另一方面,有状态的EJB技术使服务器端对象了。我们将讨论这个更详细说明。



土地档案管理











摘要

研究土地档案管理关系即为实现一个土地档案管理系统。土地档案管理系统是将现有的历史纸质档案资料进行数字化加工处理,建成标准化的网络基础资料数据库,同时建成一套基于计算机网络应用的档案管理软件系统。不仅要在技术上符合国家关于档案信息化建设的有关要求,在标准化程度上符合国土行业档案管理规范的专业性要求,而且还要能够与当前现有其他业务信息管理系统进行整合,在档案和业务数据间建立互换和抽取机制,达到信息的顺利交换,便于信息的一致性获取,减少重复劳动工作量。

本文对系统进行了可行性研究、需求分析、前台界面的设计、后台数据库建设以及系统测试等相关工作。基于三层架构的思想,前台使用jsp技术,后台使用了Oracle11g平台,主要使用Hibernate的设计模式访问数据库,采用B/S架构,实现此土地档案管理系统。

关键词:纸质档案;数字化;三层架构



目录

摘要 i

Abstract ii

1绪论 1

1.1可行性研究编写目的 1

1.2项目背景 1

1.3土地管理现状 1

1.4土地档案管理研究方向 2

1.5项目目标 2

1.6项目设计原则 3

1.6.1实用性原则 3

1.6.2经济性原则 3

1.6.3合法性原则 3

2相关技术介绍 4

2.1三层架构的选择 4

2.2编程语言的选择 5

2.3主要技术、框架的选择 6

2.4数据库的选择 7

2.5技术选择方向 7

3需求分析 9

3.1编写目的 9

3.2系统需求分析简述 9

3.3系统需求分析详细描述 9

3.3.1用户管理模块 9

3.3.2文件查找模块 9

3.3.3文件添加模块 9

3.3.4文件修改模块 10

3.3.5文件删除模块 10

4总体设计 11

4.1系统功能模块结构设计 11

4.2数据库设计 11

5详细设计 14

5.1登陆模块设计 14

5.2注册模块设计 14

5.3文件查询模块设计 14

5.4文件添加模块设计 15

5.5文件修改模块设计 15

5.6文件删除模块设计 15

6系统实现 16

6.1用户相关 16

6.1.1登陆界面 16

6.1.2注册页面 17

6.2档案相关 19

6.2.1档案列举 19

6.2.2档案查询 22

6.2.3档案修改 24

6.2.4档案删除 26

6.2.5档案添加 27

6.2.6报表功能 30

6.3Service层的实现 30

6.3.1Service层实现介绍 30

6.3.2Service层实现的相关代码 31

6.4持久层的实现 32

6.4.1持久层功能实现的介绍 32

6.4.2持久层实现的代码 32

7测试 34

7.1测试目的 34

7.2测试原则 34

7.3测试内容 34

7.4测试过程 35

7.4.1登录模块 35

7.4.2查询模块 35

7.5测试结果 36

7.5.1功能性 36

7.5.2易用性 36

结论 37

参考文献 39

致谢 40

外文原文 41

外文翻译 47







1绪论

1.1可行性研究编写目的

可行性研究的目的是为了对问题进行研究,以最小的代价在最短的时间内确定问题是否可解。

经过对此项目进行详细调查研究,初拟系统实验报告,对软件开发中将要面临的问题及解决方案进行初涉设计及合理安排。明确开发风险极其所带来的经济效益以及为工作带来的便利性。本报告合身后,交软件经理审查。

1.2项目背景

随着国土大面积调查工作的全面展开和城镇地籍管理工作得以日趋细化,各种野外调查数据,不同比例尺图件资料急剧增加。特别是城市建设的空前发展以及土地有偿使用法规的实施,使得地籍变更日益频繁、地籍信息量也越来越大,对城镇地籍管理提出了更高的要求。面对如此数量巨大、来源多样、变更频繁的信息,传统的管理方法已经愈来愈不能满足现代化土地管理的需要。此外,国民经济的迅猛发展,迫切要求各级国土部门为国家提供准确的数量、质量和土地利用现状等信息。因此,应用现代先进的科学技术和手段,建立科学的土地管理体系,为合理利用土地资源,进行土地规划、整治、开发利用、税收等提供有关基础资料和科学依据,土地管理信息系统的建立势在必行。

现有土地档案大部分还是传统的纸质档案,电子档案极少,随着城市大规模旧城区改造以及城中村改造的面积扩大,一些不适应城市发展的建筑物已经消失,土地档案部门作为城市建设的见证人,社会发展的记录者,有责任、有义务将城市建设发展的历史真实的记录下来。[2]

从本质上来讲,建立土地管理信息就是用现代化的技术来获取、分析、处理、管理和利用土地信息,就是要依靠计算机技术和现代化科学理论及数学模型的应用,如地理信息系统、遥感学、计算机科学(包括互联网技术……)等对土地信息进行管理。其中,土地管理的许多业务工作,如,动态监测、建设用地管理、土地监察、地价评估都必须建立在地籍、土地详查系统的基础之上,或者说与其有着千丝万缕的联系。因此,土地信息系统的核心问题是建立地籍管理信息系统和土地详查系统,这是土地管理各项业务工作的基础,必须先行。

1.3土地管理现状

当前社会逐步向信息化社会演变,及时、全面、系统、准确地获取信息是做好各项工作的前提。档案利用者对档案信息的要求也是如此。档案管理工作者如果继续沿用低效率的传统手工管理模式,必将在社会发展的大趋势面前没有立足的空间。随着计算机的应用,电子档案大量地出现,但与之相适应的管理缺乏经验。电子档案本身具有信息与载体的可分离性、信息传递的网络化、信息存储的高容量及信息的易修改等特点。国土资源档案的管理工作者更应跟上形势,努力适应对电子档案的管理。

随着档案法规的逐步完善,依法治档的社会环境不断好转,档案管理工作正面临难得的发展机遇。土地档案对依法管地、合理开发用地、解决土地纠纷、农村土地承包、制定土地利用总体规划及缴纳土地租金、征缴国有土地使用税等很多方面都起到了很重要的作用。随着新的土地管理法的正式实施以来,土地资源管理制度和方式均发生了重大的变化,耕地保护、土地用途管制、国土资源执法、矿产管理等管理职能都得到了增强,基本农田保护、土地开发整理、用地报批、征地实施等各项具体工作都有了新的政策、法规、程序,由此形成的土地资源档案数量不断增多。如何开发和利用这部分内容丰富的土地资源档案成为档案管理工作的一大难题。

土地资源档案管理工作的发展,对土地资源档案管理工作者的素质提出了更高的要求。新技术的应用使土地资源档案管理工作者有了施展才能的广阔空间,但同时也对土地资源档案管理工作者的素质提出了更高的要求。新时期的土地资源档案管理工作者,除了要求具有档案管理本专业的知识外,还要求具有计算机、外语、管理学等基础知识,尤其是要求具有土地资源管理基础业务知识。

1.4土地档案管理研究方向

一、加强基础业务建设。按照各地土地档案管理目标认定的各项业务建设要求,扎扎实实地抓好基础业务建设。在国土资源管理工作中,档案的形成要规范化、档案的整理要系统化、档案的保护要科学化、档案的管理要现代化。另一方面要积极探索对电子档案管理的新办法,把电子档案的形成、积累、归档、保管和提供利用等各环节纳入到档案管理的范围,并纳入档案管理部门的监督管理之中。

二、加强信息系统建设。随着办公自动化的普及,要加快档案信息电子化建设进程,充分利用计算机存储、网络、计算的功能,加快档案信息系统建设。建议建立电子影像档案数据库,实现对电子影像档案的管理和维护,同时使其具备和地籍管理系统之间的数据借口,通过土地登记申请材料的扫描,在完成土地登记后,可以直接生成地籍电子影像档案,同时形成纸质和电子两套档案数据。

三、积极采用现代化科学技术,全面提高档案管理的现代化水平。在抓好档案基础工作的前提下,要着重提高档案管理的科技含量。国土资源档案管理工作者要主动开发或引进先进的管理软件,努力学习国内外先进的技术和经验,及时配置不断更新档案现代化管理所必须的计算机、扫描仪、光盘刻录机等现代化办公设备,充分利用现代化技术,探索对国土资源档案进行扫描、光盘存储管理等新的办法。在建设新的办公楼时要科学设计、规划国土资源档案管理库房,有条件的要采用库房安全的自动化监控、库房温湿度的自动控制等先进技术。

四、加强档案法制的学习和宣传,推进依法治档工作。要利用多种形式,加大对《档案法》等档案法规的学习和宣传。对领导和干部职工的宣传要有针对性、注重实效;在档案管理工作中要强调依法治档,把依法治档工作真正落实到档案工作的各个环节。

1.5项目目标

建立地、市、县级的土地信息系统,开发以土地登记为核心的地籍信息系统,以土地利用现状调查为核心的土地资源信息系统,为以服务社会为目标的地、市、县级数字国土信息系统奠定基础,从而实现土地管理工作的计算机化,实现土地管理信息的共享;提高土地管理的质量、效率和水平,更好地为上级领导和有关部门提供准确快速的土地信息查询服务、为土地使用者提供快捷的、全面的服务,为各级政府部门和有关机构的土地管理和决策提供技术支持。

1.6项目设计原则

1.6.1实用性原则

当前土地档案管理还是主要停留在流传千年的传统纸质档案管理,这样的落后的管理方式对档案的存储、查阅等相关工作带来了极大的不便。尤其是是这样信息化全面发展的时期,旧的落后的系统已经逐步显现其缺陷。在一线二线城市,信息化相关工作还好,但是再往下级就回归纸质时代。这样就呈现出了工作效率的分化。全面的信息化会让土地档案管理方面的工作带来极大便利。

1.6.2经济性原则

建立合适的土地档案管理系统,提供了全面的功能,,数据处理方式灵活且满足需求,减少了人力物力的过度投入。同时基于web开发的系统,能够自主对系统进行修改,也节省了运营成本。

1.6.3合法性原则

由于在中国对于版权的保护相关法律并不完善,所以某些软件使用盗版软件并不会带来太大影响,且能减少支出。但是政府机关的软件都是受到国家监管的,所以软件正版化这部分的投入不可少,否则后期版权纠纷带来的影响可能会很大。此外,所有资料都由提出放保管,合同制定确定违约责任。



2相关技术介绍

2.1三层架构的选择

MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。

模型-视图-控制器(MVC)是XeroxPARC在二十世纪八十年代为编程语言Smalltalk-80发明的一种软件设计模式,已被广泛使用。后来被推荐为Oracle旗下Sun公司JavaEE平台的设计模式,并且受到越来越多的使用ColdFusion和PHP的开发者的欢迎。模型-视图-控制器模式是一个有用的工具箱,它有很多好处,但也有一些缺点。

MVC模式同时提供了对HTML、CSS和JavaScript的完全控制。

Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。

View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。

Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

MVC分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。

MVC分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。MVC的层次结构如图2-1所示。



图2-1MVC层次图

2.2编程语言的选择

与传统程序不同,Sun公司在推出Java之际就将其作为一种开放的技术。全球数以万计的Java开发公司被要求所设计的Java软件必须相互兼容。“Java语言靠群体的力量而非公司的力量”是Sun公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。

Sun公司对Java编程语言的解释是:Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。

Java平台是基于Java语言的平台。这样的平台非常流行。因此微软公司推出了与之竞争的.NET平台以及模仿Java的C#语言。

Java是功能完善的通用程序设计语言,可以用来开发可靠的、要求严格的应用程序。

选择JAVA主要是因为其8大优势:

1.Java是目前使用最为广泛的网络编程语言之一。它具有简单,面向对象,稳定,与平台无关,解释型,多线程,动态等特点。

2.简单Java语言简单是指这门语言既易学有好用。不要将简单误解为这门语言很干瘪。你可能很赞同这样的观点英语要比阿了伯语言容易学。但这并不意味着英语就不能表达丰富的内容和深刻的思想,许多文学若贝尔奖的作品都是英文写的。如果你学习过C++语言,你会感觉Java很眼熟,因为Java中许多基本语句的语法和C++一样,像常用的循环语句,控制语句等和C++几乎一样,但不要误解为Java是C++的增强版,Java和C++是两种完全不同的语言,他们各有各的优势,将会长期并存下去,Java语言和C++语言已成为软件开发者应当掌握的语言。如果从语言的简单性方面看,Java要比C++简单,C++中许多容易混淆的概念,或者被Java弃之不用了,或者以一种更清楚更容易理解的方式实现,例如,Java不再有指针的概念。

3.面向对象基于对象的编程更符合人的思维模式,使人们更容易编写程序。在实际生活中,我们每时每刻都与对象在打交道。我们用的钢笔,骑的自行车,乘的公共汽车等。而我们经常见到的卡车,公共汽车,轿车等都会涉及以下几个重要的物理量可乘载的人数,运行速度,发动机的功率,耗油量,自重,轮子数目等。另外,还有几个重要的功能加速功能,减速功能,刹车,转弯功能等。我们也可以把这些功能称作是他们具有的方法,而物理量是它们的状态描述。仅仅用物理量或功能不能很好的描述它们。在现实生活中,我们用这些共有的属性和功能给出一个概念机动车类。一个具体的轿车就是机动车类的一个实例对象.Java语言与其它面向对象语言一样,引入了类的概念,类是用来创建对象的模板,它包含被创建的对象的状态描述和方法的定义。

4.与平台无关与平台无关是Java语言最大的优势。其它语言编写的程序面临的一个主要问题是操作系统的变化,处理器升级以及核心系统资源的变化,都可能导致程序出现错误或无法运行。Java的虚拟机成功地解决了这个问题,Java编写的程序可以在任何安装了Java虚拟机JVM的计算机上正确的运行,Sun公司实现了自己的目标“一次写成,处处运行”。

5.解释型我们知道C,C++等语言,都是只能对特定的CPU芯片进行编译,生成机器代码,该代码的运行就和特定的CUP有关。例如,在C语言中,我们都碰到过类似下面的问题int型变量的值是10,那么下面代码的输出结果是什么呢printf(“%d,%d”,x,x=x+1)如果上述语句的计算顺序是从左到右,结果是10,11但是,有些机器会从右到左计算,那么结果就是11,11.Java不像C++,它不针对特定的CPU芯片进行编译,而是把程序编译为称做字节码的一个“中间代码”。字节码是很接近机器码的文件,可以在提供了Java虚拟机JVM的任何系统上被解释执行。Java被设计成为解释执行的程序,即翻译一句,执行一句,不产生整个的机器代码程序。翻译过程如果不出现错误,就一直进行到完毕,否则将在错误处停止执行。同一个程序,如果是解释执行的,那么它的运行速度通常比编译为可执行的机器代码的运行速度慢一些。但是,对Java来说,二者的差别不太大,Java的字节码经过仔细设计,很容易便能使用JIT即时编译方式编译技术将字节码直接转化成高性能的本地机器码,Sun公司在Java2发行版中提供了这样一个字节码编译器——JIT(JustInTime),它是Java虚拟机的一部分。Java运行系统在提供JIT的同时仍具有平台独立性,因而“高效且跨平台”对Java来说不再矛盾。如果把Java的程序比做“汉语”的话,字节码就相当于“世界语”,世界语不和具体的“国家”关,只要这个“国家”提供了“翻译”,就可以再快速地把世界语翻译成本地语言。

6.多线程Java的特点之一就是内置对多线程的支持。多线程允许同时完成多个任务。实际上多线程使人产生多个任务在同时执行的错觉,因为,目前的计算机的处理器在同一时刻只能执行一个线程,但处理器可以在不同的线程之间快速地切换,由于处理器速度非常快,远远超过了人接收信息的速度,所以给人的感觉好象多个任务在同时执行。C++没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序的设计。

7.安全当你准备从网络上下载一个程序时,你最大的担心是程序中含有恶意的代码,比如试图读取或删除本地机上的一些重要文件,甚至该程序是一个病毒程序等。当你使用支持Java的浏览器时,你可以放心地运行Java的小应用程序JavaApplet,不必担心病毒的感染和恶意的企图,Java小应用程序将限制在Java运行环境中,不允许它访问计算机的其它部分。

8.动态Java程序的基本组成单元就是类,有些类是自己编写的,有一些是从类库中引入的,而类又是运行时动态装载的,这就使得Java可以在分布环境中动态地维护程序及类库,而不像C++那样,每当其类库升级之后,相应的程序都必须重新修改,编译。

2.3主要技术、框架的选择

首先,Hibernate是数据持久层的一个轻量级框架。主要有以下优点:

1.使用简介的hql语句(Hibernatequerylanguage)。可以不使用传统的insert,update等sql语句。比如insert一个对象,原来的做法是:insertinto表名称alue(值1,值2,值3,……),而现在的做法是:save(对象)。

2.使用or映射。对象到关系数据库之间的映射。是从对象的角度操作数据库,再次体现了面向对象思想。原来的实体抽取方法:首先有了表,然后表映射实体对象。而现在Hibernate做法是:直接由对象映射到表。

3.没有侵入性,移植性比较好。什么是没有侵入性?就是Hibernate采用了pojo对象。所谓的pojo对象就是没有继承Hibernate类或实现Hibernate接口。这样的话,此类就是一个普通的java类,所以移植性比较好。

4.支持透明持久化。透明是针对上层而言的。三层架构的理念是上层对下层的依赖,只是依赖接口不依赖具体实现。而Hibernate中的透明是指对业务逻辑层提供了一个接口session,而其他的都封装隐藏。持久化是指把内存中的数据存放到磁盘上的文件中。

2.4数据库的选择

ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如SilverStream就是基于数据库的一种中间件。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只要在一种机型上学习了ORACLE知识,便能在各种类型的机器上使用它。

Oracle数据库最新版本为OracleDatabase12c。Oracle数据库12c引入了一个新的多承租方架构,使用该架构可轻松部署和管理数据库云。此外,一些创新特性可最大限度地提高资源使用率和灵活性,如OracleMultitenant可快速整合多个数据库,而AutomaticDataOptimization和HeatMap能以更高的密度压缩数据和对数据分层。这些独一无二的技术进步再加上在可用性、安全性和大数据支持方面的主要增强,使得Oracle数据库12c成为私有云和公有云部署的理想平台。

选择ORACLE,是因为其具备一下优势:

处理速度快,非常快。 2、安全级别高。支持快闪以及完美的恢复,即使硬件坏了也可以恢复到故障发前的1s。 3、几台数据库做负载数据库,可以做到30s以内故障转移。 4、网格控制,以及数据仓库方面也非常强大。

2.5技术选择方向

在日常的实际数据库操作中,因为数据库架设在服务器上,而服务器的处理能力远优于客户端的处理能力,所以更多地把逻辑放在服务端将成为趋势,而存储过程就是其中一个常用的项目。

存储过程(StoredProcedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

在大型数据库系统中,存储过程和触发器具有很重要的作用。无论是存储过程还是触发器,都是SQL语句和流程控制语句的集合。就本质而言,触发器也是一种存储过程。存储过程在运算时生成执行方式,所以,以后对其再运行时其执行速度很快。SQLServer2005不仅提供了用户自定义存储过程的功能,而且也提供了许多可作为工具使用的系统存储过程。

同样,触发器也是很重要的对象。

触发器是一种特殊类型的存储过程,它不同于我们前面介绍过的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。当对某一表进行诸如Update、Insert、Delete这些操作时,SQLServer就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合由这些SQL语句所定义的规则。

触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。除此之外,触发器还有其它许多不同的功能:

(1)强化约束(Enforcerestriction)

触发器能够实现比CHECK语句更为复杂的约束。

(2)跟踪变化Auditingchanges

触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的指定更新和变化。

(3)级联运行(Cascadedoperation)。

触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。例如,某个表上的触发器中包含有对另外一个表的数据操作(如删除,更新,插入)而该操作又导致该表上触发器被触发。

(4)存储过程的调用(Storedprocedureinvocation)。

为了响应数据库更新,触发器可以调用一个或多个存储过程,甚至可以通过外部过程的调用而在DBMS(数据库管理系统)本身之外进行操作。

由此可见,触发器可以解决高级形式的业务规则或复杂行为限制以及实现定制记录等一些方面的问题。例如,触发器能够找出某一表在数据修改前后状态发生的差异,并根据这种差异执行一定的处理。此外一个表的同一类型(Insert、Update、Delete)的多个触发器能够对同一种数据操作采取多种不同的处理。

总体而言,触发器性能通常比较低。当运行触发器时,系统处理的大部分时间花费在参照其它表的这一处理上,因为这些表既不在内存中也不在数据库设备上,而删除表和插入表总是位于内存中。可见触发器所参照的其它表的位置决定了操作要花费的时间长短。





3需求分析

3.1编写目的

本土地项目管理系统在可行性研究的基础上,是为了进一步明确土地项目管理系统的软件需求,以便安排项目规划和进度,组织软件开发和测试,撰写本文档。

本文档供项目经理、设计人员、开发人员参考。

3.2系统需求分析简述

土地档案管理系统是一个复杂庞大的系统,整体需求是要通过信息化的手段完成传统档案管理工作向新技术手段的迁移。考虑到土地档案管理工作的保密性,对此系统应当按照用户级别进行授权,以及对系统的安全性进行一系列的设计。在具体功能上,要实现的有用户的管理、档案的管理、系统的维护等功能。

但是,这样的一个庞大系统,并不是以一人之力可为之的。所以现在从庞大的需求中抽离出出最基础最核心的对档案的增删改查,以及其它部分以实现。

3.3系统需求分析详细描述

3.3.1用户管理模块

若要使用该系统,需注册用户登录系统才可以使用。

用户管理模块主要包括登录和注册两个部分,只是简单的实现其功能,对权限分配等暂无需求。

注册模块实现用户注册功能。

登陆模块实现用户登录功能。

3.3.2文件查找模块

文件查找模块,是要根据文件号进行文件的查找。

3.3.3文件添加模块

在需要向系统中添加文件的时候,通过该模块手工录入文件各项详细信息,完成对文件的录入。

3.3.4文件修改模块

根据文件号查找到文件,在能看到该文件信息的情况下,进行文件信息的修改操作,修改完成后进行储存。

3.3.5文件删除模块

通过文件号查找到文件,然后进行文件的删除操作。

4总体设计

本系统是采用B/S体系的三层结构,使用java编程语言,应用Hibernate开发模式。三层结构即Model层、View层和Service层的分离,层次分明的设计结构让整个系统显得层次分明,在实现和后期维护等方面将带来极大的方便。

总体来说,对于土地档案管理系统主要是实现用户管理方面即用户的登录和注册功能,以及对于文件档案的管理工作,即对文件档案的增删改查工作。在实现这些基本功能的基础上,在实现一些其他的功能,诸如页面的导航显示。

4.1系统功能模块结构设计

本系统主要分为两大功能模块,即用户管理模块和档案管理模块,这两个模块下又细分为多个子模块,本系统的功能模块结构如图4-1所示。



图4-1系统总体功能框架图

4.2数据库设计

表结构设计:

all_categories表是所有档案文件表父表信息,本表结构如图4-2所示。



图4-2档案父表设计图



user表是用户表信息,本表结构如图4-3所示。



图4-3用户表设计图



files表是土地登记表信息,本表结构如图4-4所示。



图4-4档案表设计图



all_categories表是土地类别相关的表,可用于后期的档案归属方面工作的管理,本表的结构如图4-5所示。



图4-5土地类别表设计图



土地档案管理系统的数据库存放应与传统的存档方式相似,有两种方案的选择:第一种是只有一个父表,也只有一个子表,父表中存放各层父结点,以本表自联结的方式可查询,而子表中存放所有最底层目录的文件,通过主外键的方式关联;第二种是每级目录都建一张表,多张表将文档的层次关系明确表示出来。

鉴于本设计是将该系统的部分功能实现出来,在数据量不够大的情况下选择第二种设计方式,以更直观的展现数据。而实际中将所有数据放在一个Model中的方式更加高效。



5详细设计

5.1登陆模块设计

Login.java

接受登录页面传送来的用户登录信息,对输入信息访问数据库判定是否允许登陆,允许则调到主页面,否则跳转回之前的登录页面。

UserServerImpl.java

继承IUserServer接口,实现login()方法,开启数据库事务,调用dao层方法,实现登录功能。

UserDaoImpl.java

继承IUserDao接口,通过对数据库的直接操作,将数据传输给上层,完成登录功能。



5.2注册模块设计

Register.java

接受注册页面所传送来的用户注册信息,对输入的信息传给server层进行逻辑处理。

UserServerImpl.java

继承IUserServer接口,实现register()方法,开启数据库事务,调用dao层方法,实现注册功能。

UserDaoImpl.java

继承IUserDao接口,通过对数据库的直接操作,将数据传输给上层,完成注册功能。

5.3文件查询模块设计

FindFiles.java

接受查询页面传来的土地号数据,以土地号信息为依据,调用server层的方法进行处理。

FileServerImpl.java

继承IFileServer接口,实现getAllFiles()方法,开启数据库事务,调用dao层方法,实现按土地号查询功能。在接收到dao层传回的数据后将数据传给页面显示。

UserDaoImpl.java

继承IFileDao接口,通过对数据库的直接操作,将数据传输给上层,完成查询功能。

5.4文件添加模块设计

AddFiles.java

接受添加页面传来的土地文件信息,调用server层的方法进行处理。

FileServerImpl.java

继承IFileServer接口,实现addFile()方法,开启数据库事务,调用dao层方法,先验证数据库是否有相同信息,在没有的情况下向数据库中添加数据。并返回显示添加成功后的数据库中存储的信息。

UserDaoImpl.java

继承IFileDao接口,通过对数据库的直接操作,执行对数据库的增加操作,完成添加新文件功能。

5.5文件修改模块设计

UpdateFiles.java

接受修改页面传来的土地文件信息,调用server层的方法进行处理。

FileServerImpl.java

继承IFileServer接口,实现addFiles1()方法,开启数据库事务,先验证对象是否为空,在非空的条件下,调用dao层的方法。并返回显示修改成功后的数据库中存储的信息。

UserDaoImpl.java

继承IFileDao接口,通过对数据库的直接操作,把新数据覆盖原始数据,完成修改文件的功能。

5.6文件删除模块设计

DelFiles.java

接受删除文件的请求,调用server层的方法进行处理。

FileServerImpl.java

继承IFileServer接口,实现delFiles()方法,开启数据库事务,先验证对象是否为空,在非空的条件下,调用dao层的方法。并返回显示删除的结果。

UserDaoImpl.java

继承IFileDao接口,通过对数据库的直接操作,把数据删除。

6系统实现

6.1用户相关

6.1.1登陆界面

登录功能介绍:

上面的截图为登录页面的一部分,通过该页面实现登录过程。当使用者有一个用户的时候,可以通过其已拥有的用户名和密码来进行登录,只有在用户名和密码都正确的时候才可以成功登陆。如果没有本系统的账户时,可以通过注册功能注册一个用户,然后通过注册完成的用户登录本系统。

系统登陆界面如图6-1所示。



图6-1登陆界面



登录功能核心代码:

Login.java

packagecom.ex.web;

importjava.io.IOException;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importjavax.servlet.http.HttpSession;

importcom.ex.bean.Users;

importcom.ex.common.BeanFactory;

importcom.ex.common.exception.UserServiceException;

importcom.ex.service.imp.UserServiceImpl;

publicclassLoginextendsHttpServlet{

privatestaticfinallongserialVersionUID=1L;

privateUserServiceImplservice=(UserServiceImpl)BeanFactory.getBean("userService");

publicLogin(){

super();

}

protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

Stringname=request.getParameter("username");

Stringpassword=request.getParameter("password");

try{

Usersusers=service.login(name,password);

HttpSessionsession=request.getSession();

session.setAttribute("users",users);

request.getRequestDispatcher("/host.jsp").forward(request,response);

}catch(UserServiceExceptione){

e.printStackTrace();

request.setAttribute("message","alert(''用户名或密码错误,请重新输入!'')");

request.getRequestDispatcher("/login.jsp").forward(request,response);

}

}

protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

doGet(request,response);

}

}

6.1.2注册页面

注册功能介绍:

当某人要使用本系统的时候,需要有一个账户来进行登录,登陆之后才可以进行系统的操作。当没有账户时,可以快捷的通过登录页面的注册链接进入系统的注册页面,输入一个任意的符合规则的用户名和密码,以及一些其他的个人信息。当填写完信息之后想要对已填写的信息进行重新编辑,可以点重置按钮清空已填写的信息,然后可以重新录入你个人的注册信息。注册成功后则会成功跳转到登录页面使用新注册的账户进行登录。

用户注册页面如图6-2所示。



图6-2注册页面





注册功能核心代码:

Register.java

packagecom.ex.web;

importjava.io.IOException;

importjava.util.List;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importorg.hibernate.Session;

importcom.ex.bean.Files;

importcom.ex.bean.Users;

importcom.ex.common.HibernateSessionFactory;

importcom.ex.common.exception.UserServiceException;

importcom.ex.dao.imp.UserDaoImpl;

importcom.ex.service.imp.UserServiceImpl;



publicclassRegisterextendsHttpServlet{

privatestaticfinallongserialVersionUID=1L;

privateUserServiceImplservice=newUserServiceImpl();

protectedvoiddoGet(HttpServletRequestrequest,

HttpServletResponseresponse)throwsServletException,IOException{

request.setCharacterEncoding("UTF-8");

Stringname=request.getParameter("name");

Stringpassword=request.getParameter("password");

Stringemail=request.getParameter("email");

Stringzip=request.getParameter("zip");

Stringaddress=request.getParameter("address");

Stringphonenumber=request.getParameter("phonenumber");

//System.out.println(name+address+telephone);

Sessionsession=HibernateSessionFactory.getSession();

Listlist=session.createQuery("fromUsers").list();



Usersusers=newUsers();

users.setId(list.size()+1);

users.setAddress(address);

users.setEmail(email);

users.setPassword(password);

users.setName(name);

users.setZip(zip);

users.setPhoneNumber(phonenumber);

try{

service.register(users);

request.getRequestDispatcher("/login.jsp").forward(request,

response);

}catch(UserServiceExceptione){

request.getRequestDispatcher("/register.jsp").forward(request,

response);

e.printStackTrace();

}

}

protectedvoiddoPost(HttpServletRequestrequest,

HttpServletResponseresponse)throwsServletException,IOException{

doGet(request,response);

}

}

6.2档案相关

6.2.1档案列举

代码列举功能的介绍:

在左侧的导航树中点击想要查询的文件档案分类的模块,进入其功能的详细显示页面。在这个页面上将直接显示本分类下所有文件的基本信息,通过对于本页面显示的文件档案的简要信息,了解其基本信息之后可以进行后续操作。比如要进行档案的查询时需要先知道其土地号,通过土地号来进行土地档案的查询。

档案列表页面如图6-3所示。





图6-3档案列表



档案列举功能核心代码:

java.sql.ConnectionsqlCon;

java.sql.StatementsqlStmt;

java.sql.ResultSetsqlRst;

java.lang.StringstrCon;

java.lang.StringstrSQL;

intintPageSize;

intintRowCount;

intintPageCount;

intintPage;

java.lang.StringstrPage;

inti;

intPageSize=5;

strPage=request.getParameter("page");

if(strPage==null){

intPage=1;

}

else{

intPage=java.lang.Integer.parseInt(strPage);

if(intPage<1)intPage=1;

}

java.sql.DriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());

strCon="jdbc:oracle:thin:@localhost:1521:orcl";

sqlCon=java.sql.DriverManager.getConnection(strCon,"dsg","dsg");

sqlStmt=sqlCon.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);

strSQL="selectgnum,squre,type,usedfor,people,locationfromfiles";

sqlRst=sqlStmt.executeQuery(strSQL);

sqlRst.last();

intRowCount=sqlRst.getRow();

intPageCount=(intRowCount+intPageSize-1)/intPageSize;

if(intPage>intPageCount)intPage=intPageCount;

%>







档案分页显示







土地号面积(单位:平方米)土地类型土地用途拥有者地址


第<%=intPage%>页  共<%=intPageCount%>页  <%if(intPage">下一页<%}%>  <%if(intPage>1){%>">上一页<%}%>





<%sqlRst.close();

sqlStmt.close();

sqlCon.close();%>

6.2.2档案查询

土地档案查询功能的介绍:

一般情况下要进行土地档案查询的时候,都要先知道土地号的。在已经知道土地号的情况下,输入要查询的土地档案的土地号,如果该土地档案在系统中存在,则会显示其具体的土地档案信息。若是不存在的话,则不会显示任何信息。在查询的结果的页面有修改和删除的相关功能的按钮,对于已经查询到的文件档案信息要进行修改或者删除的操作是可以通过其按钮进行操作。

先对土地档案进行查询操作,通过查询页面输入要查询的档案的土地号,进行查询,档案查询页面如图6-4所示。



图6-4档案查询



在输入要查询的土地号之后,进入档案的查询结果页面查看其具体信息,查询结果如图6-5所示。

图6-5档案查询结果



档案查询功能核心代码:

Findfiles.java

packagecom.ex.web;

importjava.io.IOException;

importjava.io.PrintWriter;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importjavax.servlet.http.HttpSession;

importorg.apache.catalina.startup.SetAllPropertiesRule;

importcom.ex.bean.Files;

importcom.ex.common.exception.UserServiceException;

importcom.ex.service.imp.FileServiceImpl;



publicclassFindFilesextendsHttpServlet{

privatestaticfinallongserialVersionUID=1L;

privateFileServiceImplservice=newFileServiceImpl();

protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

StringgNum=request.getParameter("tudi");

Filesfiles=newFiles();

files.setGnum(gNum);

try{

Filesfiles2=service.getAllFiles(files);

request.setAttribute("files",files2);

request.getRequestDispatcher("/queryrs.jsp").forward(request,response);

}catch(Exceptione){

e.printStackTrace();

request.setAttribute("message1","alert(''文件不存在'')");

request.getRequestDispatcher("/query.jsp").forward(request,response);

}

}

publicFindFiles(){

}

protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

doGet(request,response);

}

}

6.2.3档案修改

档案修改功能的介绍:

在文件档案查询的页面完成档案的查询之后,点击修改,会将查到的档案的所有信息传到页面的修改页面,然后在其本来的信息的基础上进行修改,只需要在原有的基础上进行自己想进行的修改,修改完成之后提交,通过档案土地号在查询页面中进行查询,则可看到其修改后的信息。

档案修改页面如图6-6所示。





图6-6档案修改



档案修改功能核心代码:

UpdateFiles.java

packagecom.ex.web;

importjava.io.IOException;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importcom.ex.bean.Files;

importcom.ex.common.exception.UserServiceException;

importcom.ex.service.imp.FileServiceImpl;

publicclassUpdateFilesextendsHttpServlet{

privatestaticfinallongserialVersionUID=1L;

privateFileServiceImplservice=newFileServiceImpl();

protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

request.setCharacterEncoding("UTF-8");

Stringpid=request.getParameter("flh");

Stringgnum=request.getParameter("tdh");

Stringsqure=request.getParameter("mj");

Stringtype=request.getParameter("lx");

Stringusedfor=request.getParameter("tdyt");

Stringpeople=request.getParameter("yyz");

Stringlocation=request.getParameter("wz");

Stringwhenuse=request.getParameter("kssysj");

Stringremark=request.getParameter("bz");

Stringcontent=request.getParameter("nr");



Filesfiles=newFiles();

files.setPid(pid);

files.setGnum(gnum);

files.setSqure(squre);

files.setType(type);

files.setUsedfor(usedfor);

files.setPeople(people);

files.setLocation(location);

files.setWhenuse(whenuse);

files.setRemark(remark);

files.setContent(content);

try{

service.addFiles(files);

request.getRequestDispatcher("/query.jsp").forward(request,response);



}catch(UserServiceExceptione){

// request.getRequestDispatcher("/register.jsp").forward(request,response);

e.printStackTrace();

}

}

protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

doGet(request,response);

}

}

6.2.4档案删除

档案删除功能介绍:

在查询到要查询的档案信息之后,通过其页面下方的删除按钮,完成是否删除的提示框确认之后,可完成对文件档案的删除。在查询页面对刚才删除的档案进行查询,删除成功后将不会显示刚才的文件信息。

档案删除页面如图6-7所示。



图6-7档案删除



档案删除功能核心代码:

DelFiles.java

packagecom.ex.web;

importjava.io.IOException;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importjavax.servlet.http.HttpSession;

importorg.apache.catalina.startup.SetAllPropertiesRule;

importcom.ex.bean.Files;

importcom.ex.common.exception.UserServiceException;

importcom.ex.service.imp.FileServiceImpl;



publicclassDelFilesextendsHttpServlet{

privatestaticfinallongserialVersionUID=1L;

privateFileServiceImplservice=newFileServiceImpl();

protectedvoiddoGet(HttpServletRequestrequest,

HttpServletResponseresponse)throwsServletException,IOException{

StringgNum=request.getParameter("tdh");

Filesfiles=newFiles();

files.setGnum(gNum);

Filesfiles2=service.getAllFiles(files);

if(!files2.equals(null)){

try{

service.delFiles(files2);

request.getRequestDispatcher("/query.jsp").forward(request,

response);

}catch(Exceptione){

e.printStackTrace();

}

}else

request.getRequestDispatcher("/queryrs.jsp").forward(request,

response);;

}

protectedvoiddoPost(HttpServletRequestrequest,

HttpServletResponseresponse)throwsServletException,IOException{

doGet(request,response);

}

}

6.2.5档案添加

档案添加功能的介绍:

如果要进行档案的添加,点击档案的添加按钮,进入档案添加页面,通过输入要添加的档案信息,可以完成对档案的添加。其中的分类号是档案所属类的序号,每一类的档案拥有同一个序号。其中分类号、土地号和面积是非空的,因为每个土地信息这三个方面的信息是必不可少的。

档案添加页面如图6-8所示。

图6-8档案添加



档案添加功能核心代码:

AddFiles.java

packagecom.ex.web;

importjava.io.IOException;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importcom.ex.bean.Files;

importcom.ex.common.exception.UserServiceException;

importcom.ex.service.imp.FileServiceImpl;



publicclassAddFilesextendsHttpServlet{

privatestaticfinallongserialVersionUID=1L;

privateFileServiceImplservice=newFileServiceImpl();

protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

request.setCharacterEncoding("UTF-8");

Stringpid=request.getParameter("flh");

Stringgnum=request.getParameter("tdh");

Stringsqure=request.getParameter("mj");

Stringtype=request.getParameter("lx");

Stringusedfor=request.getParameter("tdyt");

Stringpeople=request.getParameter("yyz");

Stringlocation=request.getParameter("wz");

Stringwhenuse=request.getParameter("kssysj");

Stringremark=request.getParameter("bz");

Stringcontent=request.getParameter("nr");



Filesfiles=newFiles();

files.setGnum(gnum);

Filesfiles2=service.getAllFiles(files);

if(files2.equals(null)){

files.setPid(pid);

files.setSqure(squre);

files.setType(type);

files.setUsedfor(usedfor);

files.setPeople(people);

files.setLocation(location);

files.setWhenuse(whenuse);

files.setRemark(remark);

files.setContent(content);

try{

service.addFiles1(files);

request.getRequestDispatcher("/queryrs.jsp").forward(request,response);



}catch(UserServiceExceptione){

// request.getRequestDispatcher("/register.jsp").forward(request,response);

e.printStackTrace();

}

}

else{

files2.setPid(pid);

files2.setSqure(squre);

files2.setType(type);

files2.setUsedfor(usedfor);

files2.setPeople(people);

files2.setLocation(location);

files2.setWhenuse(whenuse);

files2.setRemark(remark);

files2.setContent(content);

try{

service.addFiles1(files2);

request.setAttribute("files",files2);

request.getRequestDispatcher("/queryrs.jsp").forward(request,response);

}catch(UserServiceExceptione){

// request.getRequestDispatcher("/register.jsp").forward(request,response);

e.printStackTrace();

}

}

}

protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

doGet(request,response);

}

}

6.2.6报表功能

在数据库中的数据存放表只占到很小的一部分,而大多数的业务处理应用到的是视图,以下是其中统计同一个人在不同地区土地面积的报表,只有不少于2块土地的人才会出现在记录中。

报表结果如图6-9所示。



图6-9报表图

以下是该视图的设计代码:

createorreplaceviewbaobiaoas

selectpeople,sum(decode(location,''山西省太原市小店区'',squre,null))asxd,

sum(decode(location,''山西省太原市迎泽区'',squre,null))asyz,

sum(decode(location,''山西省太原市晋源区'',squre,null))asjy

fromfiles

groupbypeople

havingcount(people)>1;

6.3Service层的实现

6.3.1Service层实现介绍

下面介绍的文件处理相关的Service层。这一层的方法是由Servlet调用的。就拿文件处理相关的FileServiceImpl.java来说,通过判断Servlet中调用的方法,然后执行调用持久层的方法,来实现与数据库的交互。而与数据库的交互的的持久层方法并不是在这里实现的。

6.3.2Service层实现的相关代码

FileServiceImpl.java

packagecom.ex.service.imp;

importjava.util.Map;

importjavax.servlet.http.HttpSession;

importcom.ex.bean.Files;

importcom.ex.bean.Users;

importcom.ex.common.exception.UserServiceException;

importcom.ex.common.transaction.HibernateTransaction;

importcom.ex.dao.imp.UserDaoImpl;

importcom.ex.dao.imp.FileDaoImpl;

importcom.ex.service.iFileServer;

publicclassFileServiceImplimplementsiFileServer{

privateFileDaoImpldao=newFileDaoImpl();

publicFilesgetAllFiles(Filesfiles){

HibernateTransactionht=newHibernateTransaction();

ht.beginTransaction();

Filesfiles2=newFiles();

try{

files2=dao.findFilesByGnum(files.getGnum());

}catch(Exceptione){

e.printStackTrace();

}

returnfiles2;

}

publicvoidaddFiles(Filesfiles)throwsUserServiceException{

HibernateTransactionht=newHibernateTransaction();

ht.beginTransaction();

try{

Filesfiles2=dao.findFilesByGnum(files.getGnum());

if(files2!=null){

thrownewUserServiceException("已经存在");

}

dao.saveOrupdateFiles(files);

ht.commit();

}catch(Exceptione){

ht.rollback();

e.printStackTrace();

thrownewUserServiceException("失败");

}

}

publicvoidaddFiles1(Filesfiles)throwsUserServiceException{

HibernateTransactionht=newHibernateTransaction();

ht.beginTransaction();

try{

Filesfiles2=dao.findFilesByGnum(files.getGnum());

dao.saveOrupdateFiles1(files);

ht.commit();

}catch(Exceptione){

ht.rollback();

e.printStackTrace();

thrownewUserServiceException("失败");

}

}

publicvoiddelFiles(Filesfiles)throwsUserServiceException{

HibernateTransactionht=newHibernateTransaction();

ht.beginTransaction();

try{

Filesfiles2=dao.findFilesByGnum(files.getGnum());

dao.deleteFiles(files2);

ht.commit();

}catch(Exceptione){

ht.rollback();

e.printStackTrace();

thrownewUserServiceException("失败");

}

}

}

6.4持久层的实现

6.4.1持久层功能实现的介绍

持久层则是实现数据的持久化,完成数据在数据库中的增删改查还是要靠这一层的方法。这里是直接调用底层的方法,并没有自己专门去实现这些方法,这些方法就可以由service来调用最终实现数据的持久化。下面的的代码是文件档案相关的数据持久代码。

6.4.2持久层实现的代码

packagecom.ex.dao.imp;

importjava.util.HashMap;

importjava.util.List;

importjava.util.Map;

importorg.hibernate.Session;

importcom.ex.bean.Files;

importcom.ex.bean.Users;

importcom.ex.common.HibernateSessionFactory;

importcom.ex.dao.IFileDao;

publicclassFileDaoImplimplementsIFileDao{

publicvoidsaveOrupdateFiles(Filesfiles)throwsException{

Sessionsession=HibernateSessionFactory.getSession();

session.save(files);

}

publicvoidsaveOrupdateFiles1(Filesfiles)throwsException{

Sessionsession=HibernateSessionFactory.getSession();

session.update(files);

}

publicvoiddeleteFiles(Filesfiles)throwsException{

Sessionsession=HibernateSessionFactory.getSession();

session.delete(files);

}

publicFilesfindFilesByGnum(StringgNum)throwsException{

Sessionsession=HibernateSessionFactory.getSession();

Listlist=session.createQuery("fromFileswheregNum=?")

.setString(0,gNum).list();

if(list.size()!=0){

return(Files)list.get(0);

}else{

returnnull;

}

}

}

7测试

7.1测试目的

在开发大型软件的漫长过程中,面对极其错综复杂的问题,人的主观认识不可能完全符合客观事实,与工程密切相关的各类人员之间的通信和配合也不可能完美无缺。因此,在软件生命周期的每个阶段都不可避免的会产生差错。尤其对于土地档案系统这类政府职能机关所用的工程软件,必须尽量减少错误,以免造成严重的损失。测试时为了发现程序中的错误而执行程序的过程。测试的目的就是在软件投入生产性运行之前,尽可能多的发现软件中的错误。目前软件测试仍然是保证廉质量的关键步骤,他是对软件说明设计和编码的最后复审,也是必不可少的关键步骤。

7.2测试原则

一,测试应该尽早进行,最好在需求阶段就开始介入,因为最严重的错误不外乎是系统不能满足用户的需求。

二,程序员应该避免检查自己的程序,软件测试应该由第三方来负责。

三,设计测试用例时应考虑到合法的输入和不合法的输入以及各种边界条件,特殊情况下要制造极端状态和意外状态,如网络异常中断、电源断电等。

四,应该充分注意测试中的群集现象。

五,对错误结果要进行一个确认过程。一般由A测试出来的错误,一定要由B来确认。严重的错误可以召开评审会议进行讨论和分析,对测试结果要进行严格地确认,是否真的存在这个问题以及严重程度等。

六,制定严格的测试计划。一定要制定测试计划,并且要有指导性。测试时间安排尽量宽松,不要希望在极短的时间内完成也有一个高水平的测试。

7.3测试内容

软件测试主要工作内容是验证(verification)和确认(validation),下面分别给出其概念:

验证(verification)是保证软件正确地实现了一些特定功能的一系列活动,即保证软件以正确的方式来做了这个事件(Doitright)

1.确定软件生存周期中的一个给定阶段的产品是否达到前阶段确立的需求的过程。

2.程序正确性的形式证明,即采用形式理论证明程序符合设计规约规定的过程。

3.评审、审查、测试、检查、审计等各类活动,或对某些项处理、服务或文件等是否和规定的需求相一致进行判断和提出报告。

确认(validation)是一系列的活动和过程,目的是想证实在一个给定的外部环境中软件的逻辑正确性。即保证软件做了你所期望的事情。(Dotherightthing)

1.静态确认,不在计算机上实际执行程序,通过人工或程序分析来证明软件的正确性。

2.动态确认,通过执行程序做分析,测试程序的动态行为,以证实软件是否存在问题。

软件测试的对象不仅仅是程序测试,软件测试应该包括整个软件开发期间各个阶段所产生的文档,如需求规格说明、概要设计文档、详细设计文档,当然软件测试的主要对象还是源程序。

7.4测试过程

7.4.1登录模块

登陆模块的等价类划分如表7-1所示。

表7-1登录等价类划分

输入 有效等价类 无效等价类 用户名 (1)长度在0~10之间的varchar2型 (2)长度小于0或大于10 密码 (3)长度在0~16之间的varchar2型 (4)长度小于0或大于16

登陆模块为等价类设计测试用例如表7-2所示。

表7-2登录测试用例

测试数据 期望结果 覆盖用例 用户名:dhc

密码:dhc 输入正确 (1)(3) 用户名:1236547896541236547896541236547896

密码:1234 长度大于50 (2) 用户名:qy

密码:12365478965412365478965412365478 长度大于50 (4) 7.4.2查询模块

查询模块的等价类划分如表7-3所示。



表7-3查询等价类

输入 有效等价类 无效等价类 查询的内容 (1)长度在0~15之间的varchar型 (2)长度小于0或大于15 查询模块为等价类设计测试用例如表7-4所示。

表7-4查询测试用例

测试数据 期望结果 覆盖用例 土地号:10000001 输入正确 (1) 土地号:124124124124124124124 输入错误 (2) 7.5测试结果

7.5.1功能性

现在的系统基本实现了登陆、注册和文件档案的管理,但是对于权限先关的设计使得功能上有所缺陷

7.5.2易用性

增删改查的操作比较方便。

登陆界面还算可以,但是其他的页面还比较简单。

输入的内容缺乏解释性注释。

结论

土地档案系统作为将传统的纸质化档案管理方式进行数字化电子化的一项工程,将人类历史上的传承千年的档案管理工作进行数字化的封装,将土地档案管理工作进行了优化,在档案的查询、修改、删除等方面带来了极大的便利。

作为典型的档案管理系统,本土地档案管理系统实现了基本的登录、注册、档案查询、档案修改、档案增添、档案删除的经典功能,而正式使用的土地档案管理系统无外乎就是这些核心的功能在做多种优化以及个性化的功能而实现的。当然,从目前所实现的功能来说,当然不得以支撑正式的土地档案管理工作的日常实现,在日常的土地档案管理工作中,结合其实际当然少不了对于权限的设置,比如在各级地方的土地档案查阅权限是不尽相同的;再如现在的GPS定位系统的结合,使得在土地勘查工作的结果能够直接进入土地档案管理系统之中,为土地将两份工作有机地结合起来,简化了工作流程,节省了人力物力;又如土地档案的存储并不是简单地通过前台的页面直接录入系统,而是要经过层层的审核,在审核无误之后才能成功存入系统。但是,复杂的工作带来极大的工作量,以及现在的技能水平还无法达到这一层次的水平,所以现在实现其核心功能,以为以后的设计打下夯实的基础。

对于整个系统来说,页面的设计并不是难点,但是想要做成让人赏心悦目的效果还是简单的,鉴于时间有限,在登录页面做出较多效果,其他页面进行略微调整。而对于系统的逻辑结构,基于MVC模式的开发并且使用Hibernate将系统的层次性以及代码的层次性清晰地呈现了出来,在开发过程中只是略微体现其好处,只是感觉代码的结构很漂亮。待到系统基本实现的时候,对系统进行细节性的调整的,很快地就找到了相应的代码方位,而且在修改的过程当中,应为逻辑的层层分离,不会因为一点点的东西带来大的问题,这就是提高可读性带来的好处。

当然,作为一个档案管理系统,当然上不了对数据的处理,简单地来说就是包括增删改查。之前完成过的设计使用的是SQLSERVER或者MYSQL这样商业化程度低或者小型的数据库,而这次有机会接触并实际操作商业化程度高的大型数据库Oracle,对数据库也有了更加深刻的认识。

通过对于Oracle的实际操作以及实际应用,已经把初始认为的只是用来存放数据的一个东西得到了改变。它并不仅仅是一个存放数据的东西,当然存放数据是其核心功能。数据库编程,能为程序带来意想不到的效果。

就拿当前完成的土地档案系统来说,也只是简单的实现了利用Oracle来存放档案信息,仅仅是放进去而已。虽然数据库中已经建好了部分权限的相关的表,但是目前还没有启用。现在的主流的系统都是将数据持久层架设在Linux上的,鉴于Linux的特性,如果把数据处理的过程放在数据库中进行(比如一个Procedure),这样可以极大地减轻本地资源的消耗,而这看似简单的实现不仅仅减少了服务端的资源浪费,还使得客户端的资源得到极大的施放,毕竟现在使用相关软件的终端并不是配置很高的终端,所以需要这样的优化来为系统的使用带来更大的便利。

而作为这样的一个系统,土地档案管理系统在使用的过程中避免不了升级优化或者开发新系统。这样就无可避免的要进行数据迁移相关的工作。对于数据迁移工作来说,其复杂程度是和之前系统的设计的好坏成正比的。合理的、意义明确的系统,将为后期工作带来极大的便利,而随意而为之的系统将为后来的工作带来极大的隐患。比如,表名是随便起的,这样在实施迁移的时候就会使得很难去对应数据,使得更多的时间是去跟业务人员做不必的交流,会是整个项目的跨度加长,并不利于其开发。

还有在开发出的系统中,由于逻辑或者未知的原因,往往造成数据出错或者丢失之类的情况。而数据实施相关的工作又能解决很多开发遗留的的问题或者突发性问题。所以,对于这个土地档案管理系统,可以将部分的精力置于数据库的设计上,可以把部分的逻辑处理放在数据库中,只要在代码中调用这样的存储过程,这样既减少了代码开发人员的工作,又使得系统得以优化。

对于传统的土地档案管理工作有一定的了解,知道其在实际操作中在很大的仓库进行调阅是一个很繁杂的工作,而且经常因为工作人员的原因而无法及时查阅,造成的很大的不便。而当前电子化的土地档案管理系统虽说在也在用,但是目前只限于一线城市、二线城市,而对于更低行政等级的,却是更需要这样的系统,但是却没有得到普及,因为低行政等级的才是最直接接触的到基本土地档案的单位。而且现在的很多类似系统功能设计的非常的完善,但是80%的功能在实际应用中并不能狗被使用到。所以,一个功能更简单更适合实际应用的、操作起来更简单的系统才是真正需要的。所以朝着这个方向进行开发才是正确的方向,只有实用的的才是需要的,并不是说它的功能有多么全面有多么好就真真正正的时候好的。

参考文献

[1]陈天培.建立动态化土地档案实现土地信息合理流转[J].河南农业.2011(11)

[2]李淑琴,陈秀梅.浅析土地档案信息资源开发与利用[J].内蒙古科技与经济.2011(09)

[3]张玲玲.深入体验JavaWeb项目开发[M].清华大学出版社2011.(07)

[4]韩义亭,张成宇.SSH架构及其在Web开发中的应用[J].网络安全技术与应用.2007(10)

[5]张玉华,段德亮.第二次土地调查省级数据库方案探讨[J].地理空间信息.2009(S1)

[6]张洪斌.例解JAVAWEB开发技术精髓[M].清华大学出版社.2008(10)

[7]EricArmstrong.TheJavaWebservicestutorial[M].Beijing:HigherEducationPress.2003.

[8]BruceEckel.ThinkinginJava[M].PrenticeHall.2006(02)

[9]CraigWalls,RyanVreidenBach.SpringInAction[M].ManningPublication.2006

[10]JoshuaBloch.EffectiveJava[M].Piscataway,N.J:IEEEPress.2009





外文原文

AutomatedDigitalArchiveforLandRegistrationandRecords

Abstract-LandmanagementisanimportantissueforBangladesh,wherethelandregistrationprocessisamajorbarriertotheeconomicgrowthofthecountry.TechnologyandITcangreatlyfacilitatethecreationofaproperlandmanagementsystem.Thispaperfocusesonvariousissuesandproblemsrelatedtothecurrentsystemoflandmanagement.ItoffersanalternativemanagementsystemusingITfeaturesandshowsacomparisonbetweentheexistingsystemandtheproposedsystem.ItisshownthatadigitizedlandmanagementsysteminBangladeshcanbring

positiveoutcomesintheentireprocessbyminimizinghassle,expenditure,time,andstaffdishonesty.

IndexTerms-Land,Records,Bangladesh,Automated

I.INTRODUCTION

LanddominatesthelifeofalmosteverypersoninBangladesh,particularlyinruralareas.Aproperrecordingoflandrights,alongwiththeneedforasoundlandmanagementsystemisimportantforalargelyagrarianeconomyunderheavypopulationpressure.Theexistinglandmanagementsystemisveryineffectiveandcumbersomeatbest.Thegovernmentalsystemoflandtradingisverytimeconsumingandproblematic.Takingtheadvantageofthisintricatesystem,asectionofpersonnelaregrabbingthepropertiesoftheweak.Asaresult,thenumberoflawsuits,illegalpossessions,strife,scuffles,andothercrimesareincreasingdaybyday.Thepresentsuperannuatedlandmanagementsystemisresponsibletoagreatextentforthedeterioratinglawandordersituationofthecountry.

II.PRESENTSYSTEM

ThedirectorateofLandRecordsandSurveys(DLRS)isentrustedwiththeresponsibilityofcarryingoutcadastralsurveysandpreparationandmaintenanceofRecordOfRights(ROR)inrespectofeveryparceloflandinthecountry.Withthepassageoftime,theorganizationalstructureoftheDirectoratechangedconsiderablytomeetnewrequirements.Therearetwopartsinthepreparationoftherecordofrights.Thefirstpartistodrawarevisedmouzamapshowingchangesinlocation,areaandcharacteristicsofland.ThesecondpartistopreparetheKhatian(cadastre)includingtheownership,areaandcharacterofland.Thesetwopartstogetherarecalledrecordofrights.Thephasesfollowedinthesurveyandpreparationofrecordofrightsaretraversesurvey,plottoplotsurvey,Kistwar(demarcationofboundary),Khanapuri(preliminaryrecordwriting),Bujharat(localexplanation),attestation,draftpublication,hearingofobjections,appeal,finalJunch(checking),printingandpublicationofKhatian.

A.LandSaleRegistration

OnefundamentalaspectoflandregistrationinBangladeshisthatitismerelytherecordofanisolatedtransaction.Itonlyshowsthataparticulartransactiontookplacebutitdoesnotestablishwhetherthepartiesarelegallyentitledtoenterintosuchatransaction.Inotherwordsregistrationtakesplacewithoutanycriticalexaminationofrelevantrecords.ThiskindofregistrationofdeedsinBangladeshhasbeeninforcesincetheRegistrationActof1908.Theamountoftaxleviedontheimmovablepropertytransferredis10percentofthetotalvalueoftheproperty.Whenthebuyerandthesellerofaparceloflandcometoanagreementonthetransferofland,adeedispreparedonthestampofrequiredvaluewiththehelpofadeedwriter,andthenitispresentedbeforetheSub-Registrarforregisteringitandforputtingtheofficialsealonit.BoththebuyerandthesellerhavetoappearbeforetheSub-Registrarwhotakescognizanceofthelandtransferandputshissignaturewiththeofficialseal.Theregistereddeediscopiedintherelevantvolume.Ittakesabout9-12monthstogettheregistereddeed.Thedeedpreparedbythedeedwritescontainsalotofunnecessarywordsandsentence,whichcouldbeavoided.AtpresentthelandrecordskeptintheTehsilofficearenotcheckedtofindoutwhethertheselleristherealownerofthelandornot,orifanyotherpersonshavegotanyinterestintheplotoflandinquestion.Thereareinstancesoffalseregistrationinbothurbanandruralareas.Theincidenceoffalseregistrationismuchhigherinurbanareas.Aplotoflandmaybesoldtodifferentpeopleleadingtodecades-longLitigation.

B.LandMutationProcess

Therearetwowaysamutationprocesscanstart,namely

?Mutationaccordingtolandtransfer(LT)

?Mutationinresponsetoapplication

Whenevertheownershipofanylandischangedbecauseofasaleorinanyotherwayandthischangeofownershipisregistered,theSub-Register,undertheTransferofPropertyActandRegistrationActisrequiredtosendalandtransfernoticetotheThanaLandOffice.OnreceiptoftheLTnoticetheAC(Land)startsacaseforupdatingtherecordofrights.Theupdatingofrecordofrightsisalsodoneduringthesettlementoperation.Whenthereisnosettlementoperation,thisisdonebytheAC(Land)/ThanaRevenueOfficerundersection143oftheEastBengalStateAcquisitionandTendencyAct,1950onreceiptofanapplicationfromthetenants.Incaseofmutationthroughinheritance,aftergettinginformationofdeathoftenant,theTehsildarmaysendanoticetotheincumbent.Theparty/incumbentmayalsoapplyformutationindicatingtheirshareaccordingtothelawofinheritance(generallythesuccessor-in-interestappliesformutationofholdings).InBangladesh,mutationduetothebothinheritanceandsalearecommon.In1994,themonthlyaveragenumberofmutationcasesfiledinPartI(mutationduetoinheritance)was23,893andinPartIItypesofmutationwas46,828.Inthesameyear,themonthlyaveragenumberofmutationcasesdisposedofinPartIIandPartIwere21,496and16,778respectively,andoverallaveragemonthlydisposalineachmonthwas8,554andthecumulativefigureswereincreasingeveryyear.

III.PROPOSEDSYSTEM

TheproposedITimplementedlandmanagementsystemwillbeespeciallybeneficialformakinginitiativesinEgovernanceasthesamedataandrecordscanthenbesharedacrossanumberofgovernmentdepartments.Thiswillnotonlyresultinreductionofcostsforlandrecordaccessbutalsofacilitateeasierinformationdistributionanddissemination.Thesoftwaretobeimplementedwillprovideallthegraphicaldisplay,queryandeditcapabilitiesofanyconventionalGISsoftwareandalsohasarobustmoduleforDataEntryandDataMaintenance.Thenoteworthyaspectsofthesoftwarewillbethesecurityfeatures,which,willbeconceptualizedtocatertotheveryhighsecurityneedsoflandrecordsTransactions.

A.DetailedMapping

Informationontheareaandlocationoflandcanbecollectedthroughfourdifferentapproaches:

i)GroundSurvey,

ii)Aerial/SatellitePhotography,

iii)GPSbaseddatacollectionsystemand

iv)Existinginformationoflandsinthelandoffices.

Bangladeshiswellsuitedforcadastralmappingbyverticalairphotographictechniques.Itsprimaryadvantageisitsflatnessandairvisibilityofplotboundaries.Ascaleof1:12,000willbesufficientenoughinmostareas.Themainstepsinaerialsurveywillconsistof:

i)takingofphotographs,

ii)rectification(1:12,000scale),

iii)correctioninsite,

iv)providingasurveynumber,

v)areacalculation,

vi)preparationofdraftKhasra,

vii)preparationofmapwithinternaldetails,

viii)publicreviewofdraftKhasraandmap

ix)andthefinalpublication.

Usingaerialphotographymethodswillhavethreemain

advantages:

First,contrarytotheprevailingnotionsitwillbelesscostlyandwillhavelessman-managementproblemstodealwith.Second,itwillcutdownthetimetakenforconventionalcadastralsettlementoperationsofabouttenyearsbyatleastthreeyears.Andfinallyitwillitwillyieldmuchmoreaccurateresults.However,thismethodwillrequiresubstantialinitialinvestmentintermsofpurchaseofequipmentandaircraftandtrainingofofficials.

B.CreatingEffectiveDatabase

Intheexistingprocedure,thelandrecordsstoredintheTehsilofficearenotcheckedtofindoutwhethertheselleristherealownerofthelandornot.Retrievalofanyinformationisverydifficultwhichraisesaquestiontothepurposethevolumesofregisterswillserve.Computerizationofregistrationrecordswouldthereforemakethejobmuchsimplerandfacilitateeasyretrievalofregistrationrecords.Thenewsystemwillhandleallthemanualactivitiesoflandrecordsandtaxusingcomputerizeddatabasesystem.Itwillhavedatabasewithasimplerformatwiththenecessaryinformationfortheconveyanceoftheproperty.Thedatabasewillcontaininformationsuchasnamesandoccupationsofbothbuyerandseller,withtheirpresentandpermanentaddresses,theparticularsoftheland(lotnumber,JLnumber,nameofmouza),themodebywhichthesellerbecametheowneroftheplot(i.e.purchase,inheritance,etc.),theclassificationofland,areaofland,boundarydemarcating,thevalueatwhichthelandisbeingtransferred,taxetc.Incaseofpropertyinheritancethebuyerfieldwillbereplacedbypresentownerandthesellerfieldwillbereplacedbypreviousowner.Theeffectivenessobjectivenessofthedatabasewillinclude:

i)Ensuringthatthestoreddatacanbeusedforavarietyofapplicationslike:recordkeeping,landregistration,mutation,propertytaxandcapitalgaincollectionandresolvingdispute.

ii)Maintainingdatathatarebothaccurateandconsistentandavoidingdataredundancy.

iii)Ensuringpurposefulinformationretrievalsystemsothatallthedatarequiredforcurrentandfutureapplicationswillbereadilyavailable.

iv)Ensuringefficientupgradingsystemetc.

C.DatabaseOrganization(LogicalandPhysicalViews)

Thedatabaseistobesharedbymanyusers.Usersatdifferentlevelswillhavedifferentuserschema.Examiningtherequiredviewsanoveralllogicalmodelofthedatabasewillbedeveloped.Finallythelogicalmodelofthedatabasewillbetransformedintoacorrespondingphysicaldatabasedesign.Thephysicaldesignwill

involvefundamentalinformationonhowdatawillbestoredandrelatedaswellashowtheywillbeaccessed.Thefigurebellowshowshowtheuserreportsanduserschemawillberelatedtothelogicalmodelandphysicaldesign.

D.FeaturesoftheProposedSystem

TheLandInformationManagementSystemssoftwarewillbeanintegratedsystemwhereintheuserwillbeprovidedwiththefacilitytonavigateandperformalloperationsfromDataEntrytoDataValidationtoRecordsDisplaythroughonesingleInterface.ThemainmodulesavailableintheLIMSwillbeasfollows:

DataEntryModule:TheDataEntryModulewillhaveinterfacestoenterdataoftheregistersthataremaintainedforrevenuepurposes.Facilitytoviewandtakeprintsforeachandeveryregisterwillbeprovidedalongwiththeoptiontoviewandlistthecontentsoftheregisters.

SecurityModule

Consideringtheconfidentialandsensitivenatureofthelandrecords,theissueofsecurityistobegiventhehighestprioritywhiledesigningthesoftware.TheimportantfeaturesoftheSecuritySetupwillbe:Restricteduseraccesstorecordswhereinonlyauthorizedlandfunctionarieshavepermissiontoeditrecordsinthedatabase.

Digitalsignatureforauthentication;Allrelevantemployeeswillhavetheoptiontoencrypttheirdigitalsignaturesinthedocumentthattheywillhandle.

Aseparatemodulefortrackingeachandeverytransactionthattakesplaceinthedatabasealongwiththenameoftheuserresponsibleforsuchaction.

Backupfacilitytohelpinregenerationofpastrecordsincaseofaccidentalordeliberatedeletion.Thesecurityofthesoftwarealongwiththeentiresystemwillbemaintainedatthreeseparatelevels:

LogicalLevel:

Thesystemwillpermittheuserwithcorrectpasswordsorauthorizationcodestoenterthesystemoraparticularpartofthedatabase.Therewillbeatleastthreedifferentlevelofsecurityaccess:

1)Level1:Employedpersonnelatthesupremelevelwillbeallowedtoviewallthestoredlandrecords.Theywillbeallowedtoadddeleteandeditlandrecordsrelatedtobuying,sellingandmutationofland.Theywillalsobeallowedtoviewthetaxationrecordsonacertainpieceofland.

2)Level2:Employeesatthesecondlevelwillbeallowedtoview,addandedittheexistingdata,i.e.theywillbeabletostorelandsellandmutationrecords.However,todeleteanylandrecordfromthedatabase,theywillrequirespecialpermissionsortheywillhavetohandoverthewordtothelevel1user.

3)Level3:Thedatabasewillhavealimitedportionoftheeachentryas“readonlytoall”.Anyoneinterestedtoviewthebuyingandsellingrecordsonanypieceoflandwillbeabletodosobypayingcertaingovernmentfees.

外文翻译

土地登记和记录的自动化数字化归档

摘要-土地管理是孟加拉国的一个重要问题,是土地登记过程对一国经济增长的主要障碍。而技术可以大大促进土地管理制度合理的创新。本文对当前土地管理系统相关的各种问题进行了分析。它提供了一种替代管理系统的功能,以及进行现有的系统和该系统的比较。结果表明,对于孟加拉国当前使用的数字化土地管理系统可以使其有积极的结果,在整个过程中最大限度地减少问题,费用,时间,和员工的不诚实。

关键字-土地,记录,孟加拉国,自动化

一、引言

土地在孟加拉国每个人的生活中几乎占主导地位,特别是在农村地区。一个适当的土地记录的系统急需出现,随着土地管理制度的需要的不断增大,是沉重的人口压力下的主要措施。现行土地管理制度是非常无效的和繁琐的,也不是最好的。土地交易在政府体制中是非常耗时的和有问题的。利用这种复杂的系统,一部分人员抓弱者的把柄,这样的结果就是,诉讼案件的数量,非法财物,冲突,和其他犯罪的逐日增加。目前废弃的土地管理系统在很大程度上反映这个国家的治安状况的不断恶化。

二、目前的系统

土地记录和调查局(DLRs)委托开展的地籍调查和记录的设备制备及其维修责任(ROR)在该国的每一块地受到尊重。随着时间的推移,董事会的组织结构发生了很大变化,用以满足新的要求。对于人权记录的制备有两个部分:第一部分是画一个修订地图以显示位置的变化、土地面积和特性。第二部分是准备地籍信息包括所有权,土地面积和特征。这两个部分一起被称为记录的权利。这个阶段之后,记录的权利制备调包括划线测量,地块的调查,划分边界,初步记录,当地的解释,认证,草案发布,听到异议,上诉,最终检查,印刷出版。

A.买卖土地登记

在孟加拉的土地登记的一个基本的方面是,它仅仅是一个孤立的交易记录。那只能说明一个特定的交易发生,但不能确定是否当事人依法享有并完成这样一个交易。换句话说,登记却并没有发生任何关键性的相关记录。这种契约登记在孟加拉国已自1908年登记法颁布就已经生效。税法对不动产转让征收的税费金额为房产价值的百分之十。当买方和卖方的一块土地来完成土地转让协议,契约上随着契约撰写者的帮助所需而进行准备,然后提出注册登记和加盖公章。无论是买方和卖方必须出现在子登记上,负责土地转让的人要进行认定和进行签字,加盖公章。注册契约、凭据应当进行相应的复制存档。它需要大约9-12个月获得注册契据。用行动写制备的行为包含了很多不必要的词语和句子,但这是可以避免的。目前土地记录保存在地区,并不检查所以无法发现卖方是否是土地真正的所有者,或任何其他的问题出现在这个土地契约中。在城市和农村地区常常有虚假注册的实例。虚长达几十年长的诉讼。

B.土地变更过程

有两种方法,一种变更的过程就可以开始,即

?根据土地转让(LT)

?针对土地应用

每当任何土地所有权有变化时,因出售或以任何其他方式,这种所有权变更登记,分登记,物权行为与登记行为下的转移必须向一地的办公室发出土地出让公告。对LT接收通知的方式开始于一种用于更新记录的情况下记录的权利。权利的更新也是在结算操作期间完成。当没有结算操作,这是由土地税务官员在东孟加拉颁布的的状态采集和趋势法143条款下,从1950年开始对从租户接到申请进行等级变更。在这种变更是通过继承得到的情况下,承租人死亡的信息后,可能会对现任上级发送一个通知。现任也可申请变更表明其份额,这是根据继承法(一般在利益继承人申请变更控股)。在孟加拉国,由于遗传变更是常见的转让方式。在1994年平均每月变更的案件排在第一位(由于继承遗产而变更的)为23893,排在第二位的变更为46828例。在同一年,在每月平均变更的统计下,排在第一位的和第二位的为21496和16778,而每月整体平均处理水平为每个月8554,累积数字也是逐年增加。

三、提出的系统

现在所提出的要实现的土地管理系统将使该项目在电子政务方面为相同的数据和记录可以在多个政府部门共享,这样的处理方式特别有益。这不仅会导致土地记录访问成本的降低,而且使信息的发布和传播更加方便。该软件将提供所需要的图形显示,具有查询和编辑任何传统的GIS软件的能力,还具有强大的数据录入和数据维护模块。该软件值得注意的方面是安全的特点。它的理念,将满足非常高的安全需求,实现土地记录的变更。

A.详细的映射

在面积和位置的土地信息可以通过四种不同的方法收集:

1.地面调查,

2.航空/卫星摄影,

3.GPS为基础的数据采集系统

4.现有信息的土地在土地办公室。

孟加拉国是适合地籍测绘垂直空中摄影技术的的地方。它的主要优势在于它的平整度和小区边界空气能见度。一个规模1:12000将大部分地区是足够的。在航空测量的主要步骤包括:

1.拍照,

2.整流(1:12000比例),

3.在现场校正,

4.提供了一个调查数,

5.面积计算,

6.草案的制备,

7.地图的内部细节的制备,

8.汇票和地图公共审查,

9.合成最终出版。

采用航空摄影的方法将有三个主要的优势:

首先,先进的理念就不会那么昂贵,会有更少的人需要对管理问题进行处理。第二,它将削减了传统地籍结算业务时间的花费,有三年到十年。最终它将产生更精确的结果。然而,这种方法需要对设备和培训的人员进行大量的初始投资。

B.创建有效的数据库

对于现有的程序,土地记录存储在不同的区域,而这样并不检查,且无法发现卖方是否是真正的土地所有者。任何信息检索是非常困难的,提出了一个问题的目的寄存器的数量将执行服务。登记记录电子化会使工作更简单和便于登记记录而易于检索。新系统将处理所有的土地和税务档案,使用计算机数据库系统更体现活力。它将为该系统传送必要的信息,一个格式简单的数据库。数据库中包含的信息如买方和卖方的姓名和职业,他们目前的永久地址,土地的资料(包括批号,编号,名称)的存储形式,卖方成为小区业主(即购买,继承等),土地分类,土地面积,边界划定,有价值的土地被转移,在财产继承的买方现场将由现在的主人和卖方现场更换的情况下支付税费等将由以前的主人所取代。数据库的有效性目标包括:

1.确保所存储的数据可以被用于各种应用,如:备案,土地登记,变更,物业税和资本得利,征收,解决纠纷。

2.被认为都是正确的,一致的和避免数据冗余。

3.确保有目的的信息检索系统,使所有的数据为当前和未来的应用要求实现。

4.保证能够有效地提升系统性能等。

C.数据库组织(逻辑和物理视图)

数据库是由多个用户共享。处在不同级别的用户有不同的用户模式。将开发并检查所需的视图的数据库的整体逻辑模型。最后,对于数据库的逻辑模型,将转化为相应的物理数据库,完成物理设计。

基本信息包括如何将数据的存储和关联,以及它们将如何被访问。以及用户如何报告和用户模式怎样将相关的逻辑模型和物理设计进行关联。

D.特征

土地信息管理系统软件将是一个集成的系统,其中用户将提供设施,导航和执行从数据输入到数据验证的记录,以及显示一个界面上的所有操作。LIMS提供主要模块如下:

数据录入模块:数据录入模块将不得不进入,保持收到数据的目的寄存器的数据接口。设备将为每个寄存器提供与选择视图和列表,将寄存器的内容打印。

安全模块:考虑到土地记录的机密性,软件的安全问题是最高优先权而设计。安全设置的重要特征是:限制用户访问,其中只有授权的人员有权限编辑数据库中的记录。

数字认证签名,所有相关的员工将有权选择加密数字签名的文件,他们会处理的。

每一笔土地交易发生在这样的模块中,是单独用户权限的模块。

备份设备来帮助存储过去的记录,使得不再发生意外或故意删除。而整个系统软件的安全性将保持在三个单独的水平:

该系统将允许用户用正确的密码或授权密码进入系统或数据库的一个特定部分。将有至少三种不同的安全级别的访问:

1)1级:在最高水平的人员将被允许查看所有保存的土地记录。他们将被允许添加、删除和修改土地记录,以及相关的购买,销售和变更的土地。他们也将被允许查看某一块土地的税务记录。

2)2级:在第二级的员工将被允许查看,添加和编辑现有的数据,它们将能够存储土地出售和变更的记录。然而,从数据库中删除任何土地记录,他们将需要特殊的权限,或者他们将不得向1级用户申请权限。

3)3级:数据库的每个条目的部分为“只读”。要查看任何一个土地的购买和销售,任何一块土地记录,需要通过向政府部门支付一定的费用来实现查阅。



























东北大学硕士学位论文



2







东北大学硕士学位论文





















































































中北大学2014届毕业设计说明书







第Ⅰ页共Ⅲ页















第Ⅰ页共Ⅲ页





















































经理



百货中心供应链数据库



1.



2.合作公司管理



3.采购订单管理



4.库存管理



5.销售管理



6.经营统计



人事部员工



百货中心供应链数据库



1.人事管理



2.经营统计



采购部员工



百货中心供应链数据库



1.合作公司管理



2.采购订单管理



3.经营统计



物资部员工



百货中心供应链数据库



1.库存管理



2.经营统计



销售部员工



百货中心供应链数据库



1.销售管理



2.经营统计



F3



员工



P1



P2



F4



F2



F1



员工信息



D1



供应链管理系统



登录系统



F1



F6



供应链管理系统





P2



F13



F14



F11



F12



F9



F10



F7



F8



F5



F4.1



F4.6



F4.5



F4.4



F4.3



F4.2



D1



员工信息处理



P2.1



经营情况统计



P2.6



D2



D3



D4



D5



采购信息处理



P2.3



合作公司信息处理



P2.2



库存信息处理



P2.4



销售信息处理



P2.5







合作公司信息



采购信息



库存信息



销售信息



F15



销售信息



D3



F16



采购信息



D5



F17



库存信息



D5



登录系统



人事管理



合作公司管理





采购订单管理



库存管理



销售管理



经营统计



销售单ID



合作公司名



负责人



电话



地址



库存ID



销售信息



状态



员工



提交



订单



合作



合作公司



接受



出/入库



库存信息



销售



员工ID



用户名



密码



真实姓名



性别



年龄



入职日期



合作公司ID



订单ID



商品名



数量



运输方式



状态



员工ID



数量



价格



员工ID



库存ID



商品名



数量



位置



价格



合作公司ID



Internet上的用户



Internet



系统服务器



系统后台数据库

















网站资源系统



查询结果



网站访问者



管理员



系统维护



浏览查询



发布信息



电子政务工会网站



用户端



管理端



首页



表格下载



政务公开



便民电话



留言板



领导信箱





系统属性



网站公告



信息管理



留言管理



模型



视图1



视图2



控制器



事件



改变



改变



改变



更新



更新



获得数据



获得数据



Java应用



Hibernate



HQL语句





数据库



SQL语句



XML

映射

文件



用户管理



资产管理



资产维护



系统管理



增加

删除用户



用户

信息维护







资产信息



删除资产信息



资产

借出



资产

归还



资产信息

查询



删除维修信息



添加维修信息



维修

信息查询



用户密码修改



系统退出



员工管理



增加员工信息





修改员工信息





删除员工信息





报表



打印报表





固定资产管理系统



错误信息



系统主界面



系统登录界面



系统管理



输入操作员及密码





数据库



检查



密码错误



密码正确



功能界面



功能处理





开始



自动生成编号



输入数据



是否合法



写入数据库



结束



开始



选择需要修改记录



输入数据



是否合法



写入数据库



结束



开始



选择需要删除记录



是否删除



更新数据库



用户名



密码



查看



合同管理





合同收款提醒



合同统计



合同查询



修改密码





添加管理员





修改用户名





删除管理员





操作



系统维护



管理员



信息















软件学院



软件工程







名称:真实姓名



别名:realname



描述:教师注册时需要输入自己的真实姓名,需与体检表中的名字统一。



定义:真实姓名=[{字}2|{字}3|{字}4]



位置:用户注册界面



名称:电话



别名:phone



描述:教师注册时需要输入自己的联系方式。



定义:电话={0···9}11



位置:用户注册界面



名称:邮箱



别名:email



描述:教师注册时需要输入自己的邮箱。



定义:邮箱=[a···z|0···9|A···Z]+@+([a···z|0···9|A···Z]



位置:用户注册界面









通过实体关系映射O-R

Mapping由数据库得来的对象



数据访问对象与持久化

对象

交互



业务逻辑实现层



MVC架构的控制层





控制业务逻辑层与表现出的交互



用户界面负责业务数据的收集和显示



存放数据



DAO

DataAccess

Object



Service层

(业务逻辑层)



Hibernate

持久层



视图层(JSP)



Web层(Struts)



数据库服务(Oracle)



WEB服务器(webServer)





数据用服务器





PC



网站前台功能





















健康日志











体检







疾病预测评估











网站后台功能



管理教师信息







管理健康信息





管理体检

信息





管理员







环境安全



物理安全



网络安全



主机系统安全人员管理安全

操作安全规则安全策略



判断性别



[No]











[Yes]



判断年龄



判断年龄



10.4体重+600



8.6体重+830



14.6体重+450



13.4体重+490



11.5体重+830



15.2体重+680



企业采购管理系统



用户登录



用户信息管理



基础信息管理



采购查询



材料基础信息



订单信息管理



查询供应商信息



查询材料

信息



订单管理



供应商信息



查询用户信息



查询订单信息



图3-1系统体系结构



开始



输入用户名、密码



密码正确?



N



Y



进入主控模块



选择操作方式



退出系统



停止



Y



图3-2主控流程图



开始



创建采购单



N



审批



Y



采购



退出系统



停止



图3-3采购流程



开始



Y



检验物品



N



创建退货单



N



审批



确认收货



Y



退货



退出系统



停止



图3-4退货流程



图3-5管理员用例图



图3-6采购员用例图



图3-7审批员用例图



图3-8仓库管理员用例图



图4-1登录界面



图4-2错误登录页面1



图4-3错误登录页面2



图4-4错误登录界面3



图4-6普通用户主界面



图4-7用户信息



图4-8创建用户



图4-9修改用户信息



图4-10查询供应商信息



图4-11添加供应商



图4-12修改供应商信息



图4-13查询材料信息



图4-14修改材料信息



图4-15修改材料信息



图4-16已完成订单



图4-17采购专区



图4-18审批专区



图4-19仓库管理专区



图4-20未完成订单



图4-21待付款订单



图4-22退货单



图4-23用户信息查询



图4-24供应商信息查询



图4-25材料信息查询



图4-26订单信息查询



方法:功能模块测试方法

目的:测试录入功能的正确性

预期结果:有出错警告

过程:在用户管理中,没有选择任何选项,直接提交

输入:无输入

测试结果:无法保存,有出错警告

比较:与预期结果相当

结论:正确



方法:功能模块测试方法

目的:测试录入功能的正确性

预期结果:有出错警告

过程:在提交信息中,不输入任何数据,直接提交

输入:无输入

测试结果:无法保存,有出错警告

比较:与预期结果相当

结论:正确



方法:功能模块测试方法

目的:测试录入功能的正确性

预期结果:有出错警告

过程:在系统操作中,不输入任何信息,直接提交

输入:无输入

测试结果:无法保存,有出错警告

比较:与预期结果相当

结论:正确



表5-1测试用例描述





1



1



1



1



1



1



135



136



1



2



176



0



1



1



340



1







献花(0)
+1
(本文系芝宝鉴赏原创)
类似文章 更多
发表评论: