基于Jsp和Oracle开发的土地档案管理系统

基于Jsp和Oracle开发的土地档案管理系统 摘 要 研究土地档案管理关系即为实现一个土地档案管理系统,土地档案管理系统是将现有的历史纸质档案资料进行数字化加工处理

本文包含相关资料包-----> 点击直达获取<-------

基于Jsp和Oracle开发的土地档案管理系统

摘 要

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

本文对系统进行了可行性研究、需求分析、前台界面的设计、后台数据库建设以及系统测试等相关工作。基于三层架构的思想,前台使用jsp技术,后台使用了Oracle 11g平台,主要使用Hibernate的设计模式访问数据库,采用B/S架构,实现此土地档案管理系统。

关键词 :纸质档案;数字化;三层架构

Abstract

Land records management system is the existing historical archives data digital processing, built the network database standardization, also built a set based on the archival management software system using computer network. Not only to meet the relevant requirements of the state on the construction of archival information in technology, meet the professional requirements management to standardize land industry archives in the degree of standardization, but also can be integrated with the existing other business information management system, in the archives and business data to establish exchange and extraction mechanism, to smooth exchange of information, consistency is the acquisition of information, reduce duplication workload.

This paper has carried on the system feasibility study, demand analysis, interface design, database construction and system testing and other related work. Three layer architecture based on the idea, the use of JSP technology, the background using the Oracle 11g platform, design mode to access the database using Hibernate, using B/S architecture, the land records management system.

Key words : The paper archives; digital; three layer architecture.

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.2 编程语言的选择

与传统程序不同,Sun 公司在推出 Java 之际就将其作为一种开放的技术。全球数以万计的 Java 开发公司被要求所设计的 Java软件必须相互兼容。“Java 语言靠群体的力量而非公司的力量”是Sun公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。

Sun 公司对 Java 编程语言的解释是:Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。

Java 平台是基于 Java 语言的平台。这样的平台非常流行。因此微软公司推出了与之竞争的.NET平台以及模仿Java的C#语言。

Java是功能完善的通用程序设计语言,可以用来开发可靠的、要求严格的应用程序。

选择JAVA主要是因为其8大优势:

  • Java是目前使用最为广泛的网络编程语言之一 :它具有简单,面向对象,稳定,与平台无关,解释型,多线程,动态等特点

  • 简单 Java 语言简单是指这门语言既易学有好用 :不要将简单误解为这门语言很干瘪。你可能很赞同这样的观点 英语要比阿了伯语言容易学。但这并不意味着英语就不能表达丰富的内容和深刻的思想,许多文学若贝尔奖的作品都是英文写的。如果你学习过 C++语言,你会感觉 Java很眼熟,因为 Java中许多基本语句的语法和 C++一样,像常用的循环语句,控制语句等和 C++几乎一样,但不要误解为 Java 是 C++的增强版,Java 和 C++是两种完全不同的语言,他们各有各的优势,将会长期并存下去,Java 语言和 C++语言已成为软件开发者应当掌握的语言。如果从语言的简单性方面看,Java要比 C++简单,C++中许多容易混淆的概念,或者被Java弃之不用了,或者以一种更清楚更容易理解的方式实现,例如,Java不再有指针的概念

  • 面向对象 基于对象的编程更符合人的思维模式,使人们更容易编写程序 :在实际生活中,我们每时每刻都与对象在打交道。我们用的钢笔,骑的自行车,乘的公共汽车等。而我们经常见到的卡车,公共汽车,轿车等都会涉及以下几个重要的物理量 可乘载的人数,运行速度,发动机的功率,耗油量,自重,轮子数目等。另外,还有几个重要的功能 加速功能,减速功能,刹车,转弯功能等。我们也可以把这些功能称作是他们具有的方法,而物理量是它们的状态描述。仅仅用物理量或功能不能很好的描述它们。在现实生活中,我们用这些共有的属性和功能给出一个概念 机动车类。一个具体的轿车就是机动车类的一个实例 对象 .Java 语言与其它面向对象语言一样,引入了类的概念,类是用来创建对象的模板,它包含被创建的对象的状态描述和方法的定义

  • 与平台无关 :与平台无关是 Java 语言最大的优势。其它语言编写的程序面临的一个主要问题是 操作系统的变化,处理器升级以及核心系统资源的变化,都可能导致程序出现错误或无法运行。Java的虚拟机成功地解决了这个问题,Java编写的程序可以在任何安装了 Java虚拟机 JVM 的计算机上正确的运行,Sun公司实现了自己的目标 “一次写成,处处运行”

  • 解释型 :我们知道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 的程序比做“汉语”的话,字节码就相当于“世界语”,世界语不和具体的“国家”关,只要这个“国家”提供了“翻译”,就可以再快速地把世界语翻译成本地语言

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

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

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

2.3 主要技术、框架的选择

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

  • 使用简介的hql语句(Hibernate query language) :可以不使用传统的insert,update等sql语句。比如insert一个对象,原来的做法是:insert into 表名称 alue(值1,值2,值3,……),而现在的做法是:save(对象)

  • 使用or映射 :对象到关系数据库之间的映射。是从对象的角度操作数据库,再次体现了面向对象思想。原来的实体抽取方法:首先有了表,然后表映射实体对象。而现在Hibernate做法是:直接由对象映射到表

  • 没有侵入性,移植性比较好 :什么是没有侵入性?就是Hibernate采用了pojo对象。所谓的pojo对象就是没有继承Hibernate类或实现Hibernate接口。这样的话,此类就是一个普通的java类,所以移植性比较好

  • 支持透明持久化 :透明是针对上层而言的。三层架构的理念是上层对下层的依赖,只是依赖接口不依赖具体实现。而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,是因为其具备一下优势:

  • 处理速度快,非常快

  • 安全级别高。支持快闪以及完美的恢复,即使硬件坏了 也可以恢复到故障发前的1s

  • 几台数据库做负载数据库,可以做到30s以内故障转移

  • 网格控制,以及数据仓库方面也非常强大

2.5 技术选择方向

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

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

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

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

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

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

  • 强化约束(Enforce restriction) :触发器能够实现比CHECK 语句更为复杂的约束

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

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

  • 存储过程的调用(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.2 数据库设计

all_categories表 是所有档案文件表父表信息

user表 是用户表信息

files表 是土地登记表信息

all_categories表 是土地类别相关的表,可用于后期的档案归属方面工作的管理

土地档案管理系统的数据库存放应与传统的存档方式相似,有两种方案的选择:第一种是只有一个父表,也只有一个子表,父表中存放各层父结点,以本表自联结的方式可查询,而子表中存放所有最底层目录的文件,通过主外键的方式关联;第二种是每级目录都建一张表,多张表将文档的层次关系明确表示出来。

鉴于本设计是将该系统的部分功能实现出来,在数据量不够大的情况下选择第二种设计方式,以更直观的展现数据。而实际中将所有数据放在一个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 登陆界面

上面的截图为登录页面的一部分,通过该页面实现登录过程。当使用者有一个用户的时候,可以通过其已拥有的用户名和密码来进行登录,只有在用户名和密码都正确的时候才可以成功登陆。如果没有本系统的账户时,可以通过注册功能注册一个用户,然后通过注册完成的用户登录本系统。

登录功能核心代码 Login.java

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 注册页面

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

注册功能核心代码 Register.java

```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 档案列举

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

档案列举功能核心代码

```java 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; %>

档案分页显示 <% if(intPageCount>0){ sqlRst.absolute((intPage-1) * intPageSize + 1); i = 0; while(i <% sqlRst.next(); i++;}} %>
土地号 面积(单位:平方米) 土地类型 土地用途 拥有者 地址
<%=sqlRst.getString(1)%> <%=sqlRst.getString(2)%> <%=sqlRst.getString(3)%> <%=sqlRst.getString(4)%> <%=sqlRst.getString(5)%> <%=sqlRst.getString(6)%>
第<%=intPage%>页  共<%=intPageCount%>页  <%if(intPage 下一页 <%}%>  <%if(intPage>1){%> 上一页 <%}%>

<% sqlRst.close(); sqlStmt.close(); sqlCon.close(); %> ```

6.2.2 档案查询

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

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

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

档案查询功能核心代码 Findfiles.java

```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", " "); 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 档案修改

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

档案修改功能核心代码 UpdateFiles.java

```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 档案删除

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

档案删除功能核心代码 DelFiles.java

```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 档案添加

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

档案添加功能核心代码 AddFiles.java

```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块土地的人才会出现在记录中。

以下是该视图的设计代码

sql 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

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 持久层实现的代码

```java 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 nu

参考文献

  • 房地产产权信息登记系统的设计与实现(山东大学·谭毅佼)
  • 房地产产权信息登记系统的设计与实现(山东大学·谭毅佼)
  • 基于JSF的Web GIS设计与实现(昆明理工大学·刘波)
  • 基于决策树算法的个人纳税申报管理系统的设计与实现(吉林大学·王艺蒙)
  • 基于MVC架构的油田档案管理系统(电子科技大学·杨璐荧)
  • 基于工作流的土地管理信息系统设计与实现(复旦大学·余渊)
  • 基于JSP的国家体育总局信访系统的构建和实现(北京邮电大学·邱旭东)
  • 土地开发利用与交易管理系统的设计与实现(山东大学·韩海健)
  • 基于J2EE的房地产信息管理系统设计与实现(西安电子科技大学·李国林)
  • 基于MVC架构的油田档案管理系统(电子科技大学·杨璐荧)
  • 房地产产权信息登记系统的设计与实现(山东大学·谭毅佼)
  • 基于云计算模式的社会服务管理信息化平台项目设计与建设(吉林大学·杨刚)
  • 土地开发利用与交易管理系统的设计与实现(山东大学·韩海健)
  • 城市住房用地分割登记管理信息系统研究(东北大学·郭来德)
  • 土地开发利用与交易管理系统的设计与实现(山东大学·韩海健)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕设驿站 ,原文地址:https://m.bishedaima.com/yuanma/35217.html

相关推荐

  • 基于Java+JSP+Servlet的图书管理系统

    研究背景和当前研究现状: 随着信息技术的迅猛发展和互联网的普及,图书管理系统作为信息管理的重要工具,在图书馆,学校,企事业单位等各个领域得到了广泛应用,传统的图书管理方式已经无法满足日益增长的信息管理需求
    2024年05月07日
    9 1 1
  • 购物推荐网站

    这是一个🔥🔥基于SpringBoot框架的购物推荐网站设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    2 1 1
  • 基于Python制作的24点生成器

    基于 Python 制作的 24 点生成器 导语 看了下上周那篇推文,阅读量相对有些惨淡,看来大家都不太喜欢那个主题(说实话我也不喜欢),这周还是来点正常的吧
    2024年05月14日
    3 1 1
  • 基于SpringBoot框架的新闻稿件管理系统

    这是一套采用Java语言编写的新闻稿管理系统的源代码,基于流行的SpringBoot框架,我们利用了SpringBoot与Vue技术栈进行开发,支持Idea或Eclipse等集成开发环境
    2024年05月23日
    6 1 1
  • 二维非稳态热传导 膏体发动机之Python

    二维非稳态热传导 膏体发动机 一,划分网格: X 方向网格:20;Y 方向网格:20 材料 1:材料 2:材料 1=8:4:8 总网格数量:400 网格尺寸: 注意有界性条件:方程的各项系数大于 0 显式格式: 网格时 网格时 隐式格式: 有界性条件自动满足 C-N 格式: 二
    2024年05月14日
    1 1 1
  • 基于Python制作吃豆豆小游戏

    基于 Python 制作吃豆豆小游戏 导语 今天上 GitHub 发现 Python 制作小游戏系列文章的代码 repo 竟然有 500stars 了
    2024年05月14日
    4 1 1
  • 基于python制作一个打砖块小游戏

    基于 python 制作一个打砖块小游戏 导语 想起来好久没更这个系列的文章了,周末过来补一波好了,本期我们将利用 python 制作一个打砖块小游戏
    2024年05月14日
    1 1 1
  • 汽车资讯网站

    这是一个🔥🔥基于SpringBoot框架的汽车资讯网站设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    5 1 1
  • 基于JSP和Oracle实现的志愿服务银行系统

    基于JSP和Oracle实现的志愿服务银行系统 1,系统概述 1,1 系统背景 本次实习我们小组选择志愿服务银行网站的建设,志愿服务的行为是高尚的
    2024年05月14日
    43 1 8
  • 基于Java Web的智能二维码门禁管理系统

    基于 Java Web 的智能二维码门禁管理系统的设计与实现 摘要 我们身边的很多事物都已悄然接入互联网,由此本文提出基于 Java Web 和微信小程序的一套门禁系统的设计
    2024年05月14日
    5 1 1

发表回复

登录后才能评论