|
目录
------百货中心供应链管理
------电子政务信息管理
------固定资产信息管理
------合同信息管理
------健康信息管理
------商品供应信息管理
------土地档案信息管理
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;
}
经营统计模块关键代码
publicList |
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;
%>
档案分页显示
土地号 |
面积(单位:平方米) |
土地类型 |
土地用途 |
拥有者 |
地址 |
---|
<%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++;}}
%>
|
第<%=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
|