项目报告

土地档案管理关系

研究土地档案管理关系即为实现一个土地档案管理系统。土地档案管理系统是将现有的历史纸质档案资料进行数字化加工处理,建成标准化的网络基础资料数据库,同时建成一套基于计算机网络应用的档案管理软件系统。不仅要在技术上符合国家关于档案信息化建设的有关要求,在标准化程度上符合国土行业档案管理规范的专业性要求,而且还要能够与当前现有其他业务信息管理系统进行整合,在档案和业务数据间建立互换和抽取机制,达到信息的顺利交换,便于信息的一致性获取,减少重复劳动工作量。

本文对系统进行了可行性研究、需求分析、前台界面的设计、后台数据库建设以及系统测试等相关工作。基于三层架构的思想,前台使用jsp技术,后台使用了Oracle 11g平台,主要使用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.3  Service层的实现........................................................................ 30

6.3.1  Service层实现介绍................................................................. 30

6.3.2  Service层实现的相关代码..................................................... 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)是Xerox PARC在二十世纪八十年代为编程语言Smalltalk-80发明的一种软件设计模式,已被广泛使用。后来被推荐为Oracle旗下Sun公司Java EE平台的设计模式,并且受到越来越多的使用ColdFusion和PHP的开发者的欢迎。模型-视图-控制器模式是一个有用的工具箱,它有很多好处,但也有一些缺点。

MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。

Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。

View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。

Controller(控制器)是应用程序中处理用户交互的部分。
  通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。

MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。MVC的层次结构如图2-1所示。

图2-1 MVC层次图

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 公司在 Java 2发行版中提供了这样一个字节码编译器——JIT(Just In Time),它是Java虚拟机的一部分。Java运行系统在提供JIT的同时仍具有平台独立性,因而“高效且跨平台”对Java来说不再矛盾。如果把 Java 的程序比做“汉语”的话,字节码就相当于“世界语”,世界语不和具体的“国家”关,只要这个“国家”提供了“翻译”,就可以再快速地把世界语翻译成本地语言。

6.多线程 Java 的特点之一就是内置对多线程的支持。多线程允许同时完成多个任务。实际上多线程使人产生多个任务在同时执行的错觉,因为,目前的计算机的处理器在同一时刻只能执行一个线程,但处理器可以在不同的线程之间快速地切换,由于处理器速度非常快,远远超过了人接收信息的速度,所以给人的感觉好象多个任务在同时执行。C++没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序的设计。

7.安全 当你准备从网络上下载一个程序时,你最大的担心是程序中含有恶意的代码,比如试图读取或删除本地机上的一些重要文件,甚至该程序是一个病毒程序等。当你使用支持Java的浏览器时,你可以放心地运行Java的小应用程序 Java Applet ,不必担心病毒的感染和恶意的企图,Java小应用程序将限制在 Java运行环境中,不允许它访问计算机的其它部分。

8.动态 Java 程序的基本组成单元就是类,有些类是自己编写的,有一些是从类库中引入的,而类又是运行时动态装载的,这就使得 Java 可以在分布环境中动态地维护程序及类库,而不像 C++那样,每当其类库升级之后,相应的程序都必须重新修改,编译。

2.3  主要技术、框架的选择

首先,Hibernate是数据持久层的一个轻量级框架。主要有以下优点:

1.使用简介的hql语句(Hibernate query language)。可以不使用传统的insert,update等sql语句。比如insert一个对象,原来的做法是:insert into 表名称 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数据库最新版本为Oracle Database 12c。Oracle数据库12c 引入了一个新的多承租方架构,使用该架构可轻松部署和管理数据库云。此外,一些创新特性可最大限度地提高资源使用率和灵活性,如Oracle Multitenant可快速整合多个数据库,而Automatic Data Optimization和Heat Map能以更高的密度压缩数据和对数据分层。这些独一无二的技术进步再加上在可用性、安全性和大数据支持方面的主要增强,使得Oracle数据库12c 成为私有云和公有云部署的理想平台。

选择ORACLE,是因为其具备一下优势:

  1. 处理速度快,非常快。
           2、安全级别高。支持快闪以及完美的恢复,即使硬件坏了 也可以恢复到故障发前的1s。
           3、几台数据库做负载数据库,可以做到30s以内故障转移。
           4、网格控制,以及数据仓库方面也非常强大。

2.5  技术选择方向

在日常的实际数据库操作中,因为数据库架设在服务器上,而服务器的处理能力远优于客户端的处理能力,所以更多地把逻辑放在服务端将成为趋势,而存储过程就是其中一个常用的项目。

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

在大型数据库系统中,存储过程和触发器具有很重要的作用。无论是存储过程还是触发器,都是SQL 语句和流程控制语句的集合。就本质而言,触发器也是一种存储过程。存储过程在运算时生成执行方式,所以,以后对其再运行时其执行速度很快。SQL Server 2005 不仅提供了用户自定义存储过程的功能,而且也提供了许多可作为工具使用的系统存储过程。

同样,触发器也是很重要的对象。

触发器是一种特殊类型的存储过程,它不同于我们前面介绍过的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。当对某一表进行诸如Update、 Insert、 Delete 这些操作时,SQL Server 就会自动执行触发器所定义的SQL 语句,从而确保对数据的处理必须符合由这些SQL 语句所定义的规则。

触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。除此之外,触发器还有其它许多不同的功能:

(1) 强化约束(Enforce restriction)

触发器能够实现比CHECK 语句更为复杂的约束。

(2) 跟踪变化Auditing changes

触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的指定更新和变化。

(3) 级联运行(Cascaded operation)。

触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。例如,某个表上的触发器中包含有对另外一个表的数据操作(如删除,更新,插入)而该操作又导致该表上触发器被触发。

(4) 存储过程的调用(Stored procedure invocation)。

为了响应数据库更新,触发器可以调用一个或多个存储过程,甚至可以通过外部过程的调用而在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

package com.ex.web;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import com.ex.bean.Users;

import com.ex.common.BeanFactory;

import com.ex.common.exception.UserServiceException;

import com.ex.service.imp.UserServiceImpl;

public class Login extends HttpServlet {

private static final long serialVersionUID = 1L;

private  UserServiceImpl  service = (UserServiceImpl)BeanFactory.getBean("userService");

public Login() {

super();

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String name = request.getParameter("username");

String password = request.getParameter("password");

try {

Users users = service.login(name, password);

HttpSession session = request.getSession();

session.setAttribute("users", users);

request.getRequestDispatcher("/host.jsp").forward(request, response);

} catch (UserServiceException e) {

e.printStackTrace();

request.setAttribute("message", "<script laguage='JavaScript'> alert('用户名或密码错误,请重新输入!') </script>");

request.getRequestDispatcher("/login.jsp").forward(request, response);

}

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);

}

}

6.1.2  注册页面

注册功能介绍:

当某人要使用本系统的时候,需要有一个账户来进行登录,登陆之后才可以进行系统的操作。当没有账户时,可以快捷的通过登录页面的注册链接进入系统的注册页面,输入一个任意的符合规则的用户名和密码,以及一些其他的个人信息。当填写完信息之后想要对已填写的信息进行重新编辑,可以点重置按钮清空已填写的信息,然后可以重新录入你个人的注册信息。注册成功后则会成功跳转到登录页面使用新注册的账户进行登录。

用户注册页面如图6-2所示。

图6-2注册页面

注册功能核心代码:

Register.java

package com.ex.web;

import java.io.IOException;

import java.util.List;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.hibernate.Session;

import com.ex.bean.Files;

import com.ex.bean.Users;

import com.ex.common.HibernateSessionFactory;

import com.ex.common.exception.UserServiceException;

import com.ex.dao.imp.UserDaoImpl;

import com.ex.service.imp.UserServiceImpl;

public class Register extends HttpServlet {

private static final long serialVersionUID = 1L;

private UserServiceImpl service = new UserServiceImpl();

protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

request.setCharacterEncoding("UTF-8");

String name = request.getParameter("name");

String password = request.getParameter("password");

String email = request.getParameter("email");

String zip = request.getParameter("zip");

String address = request.getParameter("address");

String phonenumber = request.getParameter("phonenumber");

// System.out.println(name + address + telephone);

Session session = HibernateSessionFactory.getSession();

List list = session.createQuery("from Users").list();

Users users = new Users();

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 (UserServiceException e) {

request.getRequestDispatcher("/register.jsp").forward(request,

response);

e.printStackTrace();

}

}

protected void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);

}

}

6.2  档案相关

6.2.1  档案列举

代码列举功能的介绍:

在左侧的导航树中点击想要查询的文件档案分类的模块,进入其功能的详细显示页面。在这个页面上将直接显示本分类下所有文件的基本信息,通过对于本页面显示的文件档案的简要信息,了解其基本信息之后可以进行后续操作。比如要进行档案的查询时需要先知道其土地号,通过土地号来进行土地档案的查询。

档案列表页面如图6-3所示。

图6-3档案列表

档案列举功能核心代码:

java.sql.Connection sqlCon;

java.sql.Statement sqlStmt;

java.sql.ResultSet sqlRst;

java.lang.String strCon;

java.lang.String strSQL;

int intPageSize;

int intRowCount;

int intPageCount;

int intPage;

java.lang.String strPage;

int i;

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(new oracle.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 = "select gnum,squre,type,usedfor,people,location from files";

sqlRst = sqlStmt.executeQuery(strSQL);

sqlRst.last();

intRowCount = sqlRst.getRow();

intPageCount = (intRowCount+intPageSize-1) / intPageSize;

if(intPage>intPageCount) intPage = intPageCount;

%>

"sele.jsp?page=<%=intPage+1%>">下一页</a><%}%>&nbsp;&nbsp;<%if(intPage>1){%><a href="sele.jsp?page=<%=intPage-1%>">上一页</a><%}%>

</body>

</html>

<% sqlRst.close();

sqlStmt.close();

sqlCon.close(); %>

6.2.2  档案查询

土地档案查询功能的介绍:

一般情况下要进行土地档案查询的时候,都要先知道土地号的。在已经知道土地号的情况下,输入要查询的土地档案的土地号,如果该土地档案在系统中存在,则会显示其具体的土地档案信息。若是不存在的话,则不会显示任何信息。在查询的结果的页面有修改和删除的相关功能的按钮,对于已经查询到的文件档案信息要进行修改或者删除的操作是可以通过其按钮进行操作。

先对土地档案进行查询操作,通过查询页面输入要查询的档案的土地号,进行查询,档案查询页面如图6-4所示。

图6-4档案查询

在输入要查询的土地号之后,进入档案的查询结果页面查看其具体信息,查询结果如图6-5所示。

图6-5档案查询结果

档案查询功能核心代码:

Findfiles.java

package com.ex.web;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import org.apache.catalina.startup.SetAllPropertiesRule;

import com.ex.bean.Files;

import com.ex.common.exception.UserServiceException;

import com.ex.service.imp.FileServiceImpl;

public class FindFiles extends HttpServlet {

private static final long serialVersionUID = 1L;

private FileServiceImpl service = new FileServiceImpl();

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String gNum = request.getParameter("tudi");

Files files = new Files();

files.setGnum(gNum);

try{

Files files2= service.getAllFiles(files);

request.setAttribute("files", files2);

request.getRequestDispatcher("/queryrs.jsp").forward(request, response);

}catch(Exception e){

e.printStackTrace();

request.setAttribute("message1", "<script laguage='JavaScript'> alert('文件不存在') </script>");

request.getRequestDispatcher("/query.jsp").forward(request, response);

}

}

public FindFiles() {

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request,response);

}

}

6.2.3  档案修改

档案修改功能的介绍:

在文件档案查询的页面完成档案的查询之后,点击修改,会将查到的档案的所有信息传到页面的修改页面,然后在其本来的信息的基础上进行修改,只需要在原有的基础上进行自己想进行的修改,修改完成之后提交,通过档案土地号在查询页面中进行查询,则可看到其修改后的信息。

档案修改页面如图6-6所示。

图6-6档案修改

档案修改功能核心代码:

UpdateFiles.java

package com.ex.web;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.ex.bean.Files;

import com.ex.common.exception.UserServiceException;

import com.ex.service.imp.FileServiceImpl;

public class UpdateFiles extends HttpServlet {

private static final long serialVersionUID = 1L;

private FileServiceImpl service = new FileServiceImpl();

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

request.setCharacterEncoding("UTF-8");

String pid = request.getParameter("flh");

String gnum = request.getParameter("tdh");

String squre = request.getParameter("mj");

String type = request.getParameter("lx");

String usedfor = request.getParameter("tdyt");

String people = request.getParameter("yyz");

String location = request.getParameter("wz");

String whenuse = request.getParameter("kssysj");

String remark = request.getParameter("bz");

String content = request.getParameter("nr");

Files files = new Files();

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(UserServiceException e){

//                   request.getRequestDispatcher("/register.jsp").forward(request, response);

e.printStackTrace();

}

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request,response);

}

}

6.2.4  档案删除

档案删除功能介绍:

在查询到要查询的档案信息之后,通过其页面下方的删除按钮,完成是否删除的提示框确认之后,可完成对文件档案的删除。在查询页面对刚才删除的档案进行查询,删除成功后将不会显示刚才的文件信息。

档案删除页面如图6-7所示。

图6-7档案删除

档案删除功能核心代码:

DelFiles.java

package com.ex.web;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import org.apache.catalina.startup.SetAllPropertiesRule;

import com.ex.bean.Files;

import com.ex.common.exception.UserServiceException;

import com.ex.service.imp.FileServiceImpl;

public class DelFiles extends HttpServlet {

private static final long serialVersionUID = 1L;

private FileServiceImpl service = new FileServiceImpl();

protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

String gNum = request.getParameter("tdh");

Files files = new Files();

files.setGnum(gNum);

Files files2 = service.getAllFiles(files);

if (!files2.equals(null)) {

try {

service.delFiles(files2);

request.getRequestDispatcher("/query.jsp").forward(request,

response);

} catch (Exception e) {

e.printStackTrace();

}

} else

request.getRequestDispatcher("/queryrs.jsp").forward(request,

response);;

}

protected void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);

}

}

6.2.5  档案添加

档案添加功能的介绍:

如果要进行档案的添加,点击档案的添加按钮,进入档案添加页面,通过输入要添加的档案信息,可以完成对档案的添加。其中的分类号是档案所属类的序号,每一类的档案拥有同一个序号。其中分类号、土地号和面积是非空的,因为每个土地信息这三个方面的信息是必不可少的。

档案添加页面如图6-8所示。

图6-8档案添加

档案添加功能核心代码:

AddFiles.java

package com.ex.web;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.ex.bean.Files;

import com.ex.common.exception.UserServiceException;

import com.ex.service.imp.FileServiceImpl;

public class AddFiles extends HttpServlet {

private static final long serialVersionUID = 1L;

private FileServiceImpl service = new FileServiceImpl();

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

request.setCharacterEncoding("UTF-8");

String pid = request.getParameter("flh");

String gnum = request.getParameter("tdh");

String squre = request.getParameter("mj");

String type = request.getParameter("lx");

String usedfor = request.getParameter("tdyt");

String people = request.getParameter("yyz");

String location = request.getParameter("wz");

String whenuse = request.getParameter("kssysj");

String remark = request.getParameter("bz");

String content = request.getParameter("nr");

Files files = new Files();

files.setGnum(gnum);

Files files2= 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(UserServiceException e){

//                   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(UserServiceException e){

//                          request.getRequestDispatcher("/register.jsp").forward(request, response);

e.printStackTrace();

}

}

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request,response);

}

}

6.2.6  报表功能

在数据库中的数据存放表只占到很小的一部分,而大多数的业务处理应用到的是视图,以下是其中统计同一个人在不同地区土地面积的报表,只有不少于2块土地的人才会出现在记录中。

报表结果如图6-9所示。

图6-9 报表图

以下是该视图的设计代码:

create or replace view baobiao as

select people,sum(decode(location,'山西省太原市小店区',squre,null)) as xd,

sum(decode(location,'山西省太原市迎泽区',squre,null)) as yz,

sum(decode(location,'山西省太原市晋源区',squre,null)) as jy

from files

group by people

having count(people)>1;

6.3  Service层的实现

6.3.1  Service层实现介绍

下面介绍的文件处理相关的Service层。这一层的方法是由Servlet调用的。就拿文件处理相关的FileServiceImpl.java来说,通过判断Servlet中调用的方法,然后执行调用持久层的方法,来实现与数据库的交互。而与数据库的交互的的持久层方法并不是在这里实现的。

6.3.2  Service层实现的相关代码

FileServiceImpl.java

package com.ex.service.imp;

import java.util.Map;

import javax.servlet.http.HttpSession;

import com.ex.bean.Files;

import com.ex.bean.Users;

import com.ex.common.exception.UserServiceException;

import com.ex.common.transaction.HibernateTransaction;

import com.ex.dao.imp.UserDaoImpl;

import com.ex.dao.imp.FileDaoImpl;

import com.ex.service.iFileServer;

public class FileServiceImpl implements iFileServer{

private FileDaoImpl dao = new FileDaoImpl();

public Files  getAllFiles(Files files){

HibernateTransaction ht = new HibernateTransaction();

ht.beginTransaction();

Files files2 =new Files();

try {

files2 = dao.findFilesByGnum(files.getGnum());

} catch (Exception e) {

e.printStackTrace();

}

return files2;

}

public void addFiles(Files files) throws UserServiceException {

HibernateTransaction ht = new HibernateTransaction();

ht.beginTransaction();

try {

Files files2 = dao.findFilesByGnum(files.getGnum());

if (files2 != null) {

throw new UserServiceException("已经存在");

}

dao.saveOrupdateFiles(files);

ht.commit();

} catch (Exception e) {

ht.rollback();

e.printStackTrace();

throw new UserServiceException("失败");

}

}

public void addFiles1(Files files) throws UserServiceException {

HibernateTransaction ht = new HibernateTransaction();

ht.beginTransaction();

try {

Files files2 = dao.findFilesByGnum(files.getGnum());

dao.saveOrupdateFiles1(files);

ht.commit();

} catch (Exception e) {

ht.rollback();

e.printStackTrace();

throw new UserServiceException("失败");

}

}

public void delFiles(Files files) throws UserServiceException {

HibernateTransaction ht = new HibernateTransaction();

ht.beginTransaction();

try {

Files files2 = dao.findFilesByGnum(files.getGnum());

dao.deleteFiles(files2);

ht.commit();

} catch (Exception e) {

ht.rollback();

e.printStackTrace();

throw new UserServiceException("失败");

}

}

}

6.4  持久层的实现

6.4.1  持久层功能实现的介绍

持久层则是实现数据的持久化,完成数据在数据库中的增删改查还是要靠这一层的方法。这里是直接调用底层的方法,并没有自己专门去实现这些方法,这些方法就可以由service来调用最终实现数据的持久化。下面的的代码是文件档案相关的数据持久代码。

6.4.2  持久层实现的代码

package com.ex.dao.imp;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.hibernate.Session;

import com.ex.bean.Files;

import com.ex.bean.Users;

import com.ex.common.HibernateSessionFactory;

import com.ex.dao.IFileDao;

public class FileDaoImpl implements IFileDao{

public void saveOrupdateFiles(Files files) throws Exception {

Session session = HibernateSessionFactory.getSession();

session.save(files);

}

public void saveOrupdateFiles1(Files files) throws Exception {

Session session = HibernateSessionFactory.getSession();

session.update(files);

}

public void deleteFiles(Files files) throws Exception {

Session session = HibernateSessionFactory.getSession();

session.delete(files);

}

public Files findFilesByGnum(String gNum) throws Exception {

Session session = HibernateSessionFactory.getSession();

List list = session.createQuery("from Files where gNum= ?")

.setString(0, gNum).list();

if (list.size() != 0) {

return (Files) list.get(0);

} else {

return null;

}

}

}

7  测试

7.1  测试目的

在开发大型软件的漫长过程中,面对极其错综复杂的问题,人的主观认识不可能完全符合客观事实,与工程密切相关的各类人员之间的通信和配合也不可能完美无缺。因此,在软件生命周期的每个阶段都不可避免的会产生差错。尤其对于土地档案系统这类政府职能机关所用的工程软件,必须尽量减少错误,以免造成严重的损失。测试时为了发现程序中的错误而执行程序的过程。测试的目的就是在软件投入生产性运行之前,尽可能多的发现软件中的错误。目前软件测试仍然是保证廉质量的关键步骤,他是对软件说明设计和编码的最后复审,也是必不可少的关键步骤。

7.2  测试原则

一,测试应该尽早进行,最好在需求阶段就开始介入,因为最严重的错误不外乎是系统不能满足用户的需求。

二,程序员应该避免检查自己的程序,软件测试应该由第三方来负责。

三,设计测试用例时应考虑到合法的输入和不合法的输入以及各种边界条件,特殊情况下要制造极端状态和意外状态,如网络异常中断、电源断电等。

四,应该充分注意测试中的群集现象。

五,对错误结果要进行一个确认过程。一般由A测试出来的错误,一定要由B来确认。严重的错误可以召开评审会议进行讨论和分析,对测试结果要进行严格地确认,是否真的存在这个问题以及严重程度等。

六,制定严格的测试计划。一定要制定测试计划,并且要有指导性。测试时间安排尽量宽松,不要希望在极短的时间内完成也有一个高水平的测试。

7.3  测试内容

软件测试主要工作内容是验证(verification)和确认(validation),下面分别给出其概念:

验证(verification)是保证软件正确地实现了一些特定功能的一系列活动, 即保证软件以正确的方式来做了这个事件(Do it right)

1.确定软件生存周期中的一个给定阶段的产品是否达到前阶段确立的需求的过程。

2.程序正确性的形式证明,即采用形式理论证明程序符合设计规约规定的过程。

3.评审、审查、测试、检查、审计等各类活动,或对某些项处理、服务或文件等是否和规定的需求相一致进行判断和提出报告。

确认(validation)是一系列的活动和过程,目的是想证实在一个给定的外部环境中软件的逻辑正确性。即保证软件做了你所期望的事情。(Do the right thing)

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将系统的层次性以及代码的层次性清晰地呈现了出来,在开发过程中只是略微体现其好处,只是感觉代码的结构很漂亮。待到系统基本实现的时候,对系统进行细节性的调整的,很快地就找到了相应的代码方位,而且在修改的过程当中,应为逻辑的层层分离,不会因为一点点的东西带来大的问题,这就是提高可读性带来的好处。

当然,作为一个档案管理系统,当然上不了对数据的处理,简单地来说就是包括增删改查。之前完成过的设计使用的是SQL SERVER或者MYSQL这样商业化程度低或者小型的数据库,而这次有机会接触并实际操作商业化程度高的大型数据库Oracle,对数据库也有了更加深刻的认识。

通过对于Oracle的实际操作以及实际应用,已经把初始认为的只是用来存放数据的一个东西得到了改变。它并不仅仅是一个存放数据的东西,当然存放数据是其核心功能。数据库编程,能为程序带来意想不到的效果。

就拿当前完成的土地档案系统来说,也只是简单的实现了利用Oracle来存放档案信息,仅仅是放进去而已。虽然数据库中已经建好了部分权限的相关的表,但是目前还没有启用。现在的主流的系统都是将数据持久层架设在Linux上的,鉴于Linux的特性,如果把数据处理的过程放在数据库中进行(比如一个Procedure),这样可以极大地减轻本地资源的消耗,而这看似简单的实现不仅仅减少了服务端的资源浪费,还使得客户端的资源得到极大的施放,毕竟现在使用相关软件的终端并不是配置很高的终端,所以需要这样的优化来为系统的使用带来更大的便利。

而作为这样的一个系统,土地档案管理系统在使用的过程中避免不了升级优化或者开发新系统。这样就无可避免的要进行数据迁移相关的工作。对于数据迁移工作来说,其复杂程度是和之前系统的设计的好坏成正比的。合理的、意义明确的系统,将为后期工作带来极大的便利,而随意而为之的系统将为后来的工作带来极大的隐患。比如,表名是随便起的,这样在实施迁移的时候就会使得很难去对应数据,使得更多的时间是去跟业务人员做不必的交流,会是整个项目的跨度加长,并不利于其开发。

还有在开发出的系统中,由于逻辑或者未知的原因,往往造成数据出错或者丢失之类的情况。而数据实施相关的工作又能解决很多开发遗留的的问题或者突发性问题。所以,对于这个土地档案管理系统,可以将部分的精力置于数据库的设计上,可以把部分的逻辑处理放在数据库中,只要在代码中调用这样的存储过程,这样既减少了代码开发人员的工作,又使得系统得以优化。

对于传统的土地档案管理工作有一定的了解,知道其在实际操作中在很大的仓库进行调阅是一个很繁杂的工作,而且经常因为工作人员的原因而无法及时查阅,造成的很大的不便。而当前电子化的土地档案管理系统虽说在也在用,但是目前只限于一线城市、二线城市,而对于更低行政等级的,却是更需要这样的系统,但是却没有得到普及,因为低行政等级的才是最直接接触的到基本土地档案的单位。而且现在的很多类似系统功能设计的非常的完善,但是80%的功能在实际应用中并不能狗被使用到。所以,一个功能更简单更适合实际应用的、操作起来更简单的系统才是真正需要的。所以朝着这个方向进行开发才是正确的方向,只有实用的的才是需要的,并不是说它的功能有多么全面有多么好就真真正正的时候好的。

参考文献

[1]   陈天培. 建立动态化土地档案 实现土地信息合理流转[J]. 河南农业. 2011(11)

[2]   李淑琴,陈秀梅. 浅析土地档案信息资源开发与利用[J]. 内蒙古科技与经济. 2011(09)

[3]   张玲玲 .深入体验Java Web项目开发[M].清华大学出版社2011.(07)

[4]   韩义亭,张成宇. SSH架构及其在Web开发中的应用[J]. 网络安全技术与应用. 2007(10)

[5]   张玉华,段德亮. 第二次土地调查省级数据库方案探讨[J]. 地理空间信息. 2009(S1)

[6]   张洪斌.例解JAVA WEB开发技术精髓[M].清华大学出版社.2008(10)

[7]   Eric Armstrong .The Java Web services tutorial [M].Beijing : Higher Education Press.2003.

[8]   Bruce Eckel.Thinking in Java[M].Prentice Hall.2006(02)

[9]   Craig Walls,Ryan VreidenBach.Spring In Action[M].Manning Publication.2006

[10]  Joshua Bloch.Effective Java[M].Piscataway,N.J:IEEE Press.2009

土地登记和记录的自动化数字化归档

摘要-土地管理是孟加拉国的一个重要问题,是土地登记过程对一国经济增长的主要障碍。而技术可以大大促进土地管理制度合理的创新。本文对当前土地管理系统相关的各种问题进行了分析。它提供了一种替代管理系统的功能,以及进行现有的系统和该系统的比较。结果表明,对于孟加拉国当前使用的数字化土地管理系统可以使其有积极的结果,在整个过程中最大限度地减少问题,费用,时间,和员工的不诚实。

关键字-土地,记录,孟加拉国,自动化

一、引言

土地在孟加拉国每个人的生活中几乎占主导地位,特别是在农村地区。一个适当的土地记录的系统急需出现,随着土地管理制度的需要的不断增大,是沉重的人口压力下的主要措施。现行土地管理制度是非常无效的和繁琐的,也不是最好的。土地交易在政府体制中是非常耗时的和有问题的。利用这种复杂的系统,一部分人员抓弱者的把柄,这样的结果就是,诉讼案件的数量,非法财物,冲突,和其他犯罪的逐日增加。目前废弃的土地管理系统在很大程度上反映这个国家的治安状况的不断恶化。

二、目前的系统

土地记录和调查局(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级:数据库的每个条目的部分为“只读”。要查看任何一个土地的购买和销售,任何一块土地记录,需要通过向政府部门支付一定的费用来实现查阅。

参考资料:

基于java的土地档案管理系统毕业设计(项目报告+答辩PPT+源代码+数据 库+部署视频)https://download.csdn.net/download/dwf1354046363/87813619

Java毕业设计174例,包含部署视频_易小侠的博客-CSDN博客https://cv2022.blog.csdn.net/article/details/124463185?spm=1001.2014.3001.5502

基于java的土地档案管理系统设计与实现(项目报告+答辩PPT+源代码+数据库+部署视频)相关推荐

  1. 基于jsp的记账管理系统设计与实现(项目报告+答辩PPT+源代码+数据库+部署视频)

    项目报告 基于Jsp的记账管理系统 近年来由于生活节奏的加快,好像每个人都被很多难以启齿的问题困惑,然而关于随意消费是大多数人头疼的问题,没有任何计划和筹备的情况下随意消费,导致现实生活中我们所称为的 ...

  2. 基于java的宠物管理系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)

    基于JAVA的宠物网站的设计与实现 本系统是采用Java技术来构建的一个基于Web技术的B/S结构的宠物网站,该网站建立在Spring和Struts2框架之上,前台使用JSP作为开发语言,后台使用My ...

  3. 基于java的连连看游戏系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)

    项目说明报告 基于Java的连连看游戏设计与实现 连连看是一种消除类益智游戏,核心要求是在规定的时间内,消除游戏界面中选中的两张相同的图案,直至完全消除所有图案.这款游戏操作简单(只需单击鼠标左键操作 ...

  4. 基于java的出租车计价器系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)

    项目报告 出租车计价器设计与实现 在我国,出租车行业是八十年代初兴起的一项新兴行业,随着出租车的产生,计价器也就应运而生.但当时在全国没有一家企业能够生产,因而那个时期的计价器是由台湾引进.台湾是计价 ...

  5. 基于java的俄罗斯方块游戏系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)

    基于Java的俄罗斯方块游戏的设计与实现 俄罗斯方块是一款风靡全球,从一开始到现在都一直经久不衰的电脑.手机.掌上游戏机产品,是一款游戏规则简单,但又不缺乏乐趣的简单经典小游戏,上手容易,适用范围广泛 ...

  6. [计算机毕设]基于java的酒店管理系统系统设计与实现(项目报告+答辩PPT+源代码+数据库)

    项目报告 酒店管理系统的设计与实现 摘 要 中国经济近几年来取得蓬勃飞速发展,使得人民生活水平的要求和生活的质量有了很高的要求.因此人们对外出旅游和就餐的需求也越来越大.同时,随着我国科技水平的兴起和 ...

  7. [计算机毕设]基于java的项目管理平台系统设计与实现(项目报告+答辩PPT+源代码+数据库)

    项目报告 基于Java EE平台项目管理系统的设计与实现 随着社会信息化的发展,很多的社会管理问题也一并出现了根本性变化,项目公司的报表及文件管理也发生了变化,以前的管理是一个分布式的信息,然后围绕中 ...

  8. [计算机毕设]基于java的连连看游戏系统设计与实现(项目报告+答辩PPT+源代码+数据库)

    项目说明报告 基于Java的连连看游戏设计与实现 连连看是一种消除类益智游戏,核心要求是在规定的时间内,消除游戏界面中选中的两张相同的图案,直至完全消除所有图案.这款游戏操作简单(只需单击鼠标左键操作 ...

  9. 基于java的校园二手平台系统毕业设计(项目报告+答辩PPT+源代码+数据库+截图+部署视频)

    以下是一个基于Java的校园二手平台系统的毕业设计建议: 1. 系统概述: 校园二手平台系统是一个用于学生之间进行二手物品交易的应用程序.通过该系统,学生可以方便地发布和浏览二手物品的信息,并进行交流 ...

最新文章

  1. 用maven创建Spring MVC项目
  2. Matlab GUI 设计(3):edit、slider、table数据同步
  3. windows安装anaconda_[计算机科学工具系列] Anaconda和conda
  4. 让用户故事真的像故事那样
  5. C++反转字符串的算法(附完整源码)
  6. 【拔刀吧少年】之条件语句
  7. [转]自然语言处理中的Attention Model:是什么及为什么
  8. MySql应用原理分析系列文章目录
  9. 使TextView里面的文字滚动起来
  10. postgresql 加载参数文件
  11. 拓端tecdat|R语言:逻辑回归ROC曲线对角线分析过程及结果
  12. [2018.10.31 T2] 电梯
  13. KeyCue Mac 快捷键辅助工具
  14. html 判断undefined,JS中 “is not defined” 如何判断defined,defined和undefined 的区别
  15. win10如何删除输入法_顽固输入法exe文件无法删除,一招教你如何删除,原来这么简单...
  16. LC5454.统计全1子矩阵(矩阵统计)
  17. 生物智能与AI——关乎创造、关乎理解(上) 1
  18. docker的privileged 与 k8s的privileged 设置方式
  19. 入侵服务器挖矿和诈骗事件频发 | 零时科技区块链安全周报
  20. 如何在SATA驱动装WinPE

热门文章

  1. 微信公众号h5游戏核销流程
  2. Navicat for Oracle 11.2.11 64位 简体中文破解版
  3. 阀门定位器调节阀的特点及校验步骤
  4. 驾校考试秘笈 不用看书就能通过!! 暂时不考也先留着 别等着急的时候没处找去!!!速记方法!...
  5. 车机CAN总线模拟器的自制
  6. 鉴别器 discriminator
  7. 统一信用代码n开头_加工中心代码小数点问题 斜杠作用 GOTO意思
  8. 唯品会api_sign与mars_cid逆向分析
  9. August, 24(R)
  10. 教你把视频、文案、音频素材合并出新视频