目录
摘 要
Abstract
1 绪论
1.1 可行性研究编写目的
1.2 项目背景
1.3 土地管理现状
1.4 土地档案管理研究方向
1.5 项目目标
1.6 项目设计原则
1.6.1 实用性原则
1.6.2 经济性原则
1.6.3 合法性原则
2 相关技术介绍
2.1 三层架构的选择
2.2 编程语言的选择
2.3 主要技术、框架的选择
2.4 数据库的选择
2.5 技术选择方向
3 需求分析
3.1 编写目的
3.2 系统需求分析简述
3.3 系统需求分析详细描述
3.3.1 用户管理模块
3.3.2 文件查找模块
3.3.3 文件添加模块
3.3.4 文件修改模块
3.3.5 文件删除模块
4 总体设计
4.1 系统功能模块结构设计
4.2 数据库设计
5 详细设计
5.1 登陆模块设计
5.2 注册模块设计
5.3 文件查询模块设计
5.4 文件添加模块设计
5.5 文件修改模块设计
5.6 文件删除模块设计
6 系统实现
6.1 用户相关
6.1.1 登陆界面
6.1.2 注册页面
6.2 档案相关
6.2.1 档案列举
6.2.2 档案查询
6.2.3 档案修改
6.2.4 档案删除
6.2.5 档案添加
6.2.6 报表功能
6.3 Service层的实现
6.3.1 Service层实现介绍
6.3.2 Service层实现的相关代码
6.4 持久层的实现
6.4.1 持久层功能实现的介绍
6.4.2 持久层实现的代码
7 测试
7.1 测试目的
7.2 测试原则
7.3 测试内容
7.4 测试过程
7.4.1 登录模块
7.4.2 查询模块
7.5 测试结果
7.5.1 功能性
7.5.2 易用性
结 论
参考文献
致 谢
外文原文
外文翻译
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所示。
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;
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>档案分页显示</title>
</head>
<body>
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<th>土地号</th>
<th>面积(单位:平方米)</th>
<th>土地类型</th>
<th>土地用途</th>
<th>拥有者</th>
<th>地址</th>
</tr>
<% if(intPageCount>0){
sqlRst.absolute((intPage-1) * intPageSize + 1);
i = 0;
while(i<intPageSize && !sqlRst.isAfterLast()){ %>
<tr>
<td width="150" align="center"><%=sqlRst.getString(1)%></td>
<td width="150" align="center"><%=sqlRst.getString(2)%></td>
<td width="150" align="center"><%=sqlRst.getString(3)%></td>
<td width="150" align="center"><%=sqlRst.getString(4)%></td>
<td width="150" align="center"><%=sqlRst.getString(5)%></td>
<td width="150" align="center"><%=sqlRst.getString(6)%></td>
</tr>
<%
sqlRst.next();
i++;}}
%>
</table>
第<%=intPage%>页 共<%=intPageCount%>页 <%if(intPage<intPageCount){%><a href="sele.jsp?page=<%=intPage+1%>">下一页</a><%}%> <%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.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;
}
}
}
结 论
土地档案系统作为将传统的纸质化档案管理方式进行数字化电子化的一项工程,将人类历史上的传承千年的档案管理工作进行数字化的封装,将土地档案管理工作进行了优化,在档案的查询、修改、删除等方面带来了极大的便利。
作为典型的档案管理系统,本土地档案管理系统实现了基本的登录、注册、档案查询、档案修改、档案增添、档案删除的经典功能,而正式使用的土地档案管理系统无外乎就是这些核心的功能在做多种优化以及个性化的功能而实现的。当然,从目前所实现的功能来说,当然不得以支撑正式的土地档案管理工作的日常实现,在日常的土地档案管理工作中,结合其实际当然少不了对于权限的设置,比如在各级地方的土地档案查阅权限是不尽相同的;再如现在的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
致 谢
作者在设计(论文)期间都是在全面、具体指导下完成进行的。老师渊博的学识、敏锐的思维、民主而严谨的作风使学生受益非浅,并终生难忘。
感谢老师在毕业设计工作中给予的帮助。
感谢我的学友和朋友对我的关心和帮助。