分类号:TP315 U D C:D10621-408-(2007) 6032 -0
密 级:公 开 编 号:2003211030
学位论文
基于JSP的房产中介系统的设计与实现
摘要
计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。随着科学技术的不断提高,计算机网络日渐成熟,其强大的功能已为人们深刻认识,而基于计算机网络的网络信息系统的实现也是大家所期待的。而基于B/S模式的房产中介系统的实现必然是大势所趋。
本文结合目前中国城市房产管理的实际情况和现阶段房屋产业的供求关系对房产中介系统进行了需求分析,并以此进行了系统功能设计和数据库设计。系统阐述了建立房产信息系统的方法和技术实施。本系统是为了给广大用户提供一个良好的平台而研发的房产中介系统。系统采用JSP+ SQL+TOMCAT以B/S模式开发。系统主要实现了新房及二手房信息的发布,用户需求信息的发布、以及给用户提供一个房产信息的查询功能、和用户权限管理功能、房屋信息管理功能、留言反馈功能以及用户给各个新房供应信息评价功能。
关键字:JSP;SQL;房产中介;留言
The Design and Realization of Real Estate Agency System Based on JSP
Abstract
Information manager system based on computer and communications technology is in a period of vigorous development. As science and technology continue to improve, computer network is increasingly mature, and its powerful functions have been understood by many people profoundly. Network information system based on the computer network is our expectation.
This thesis analyzes the function needs of the system according to China's current urban real estate status and the relationship between supply and demand of real estate, then designs system function modules and database. This thesis describes realization methods and technologies of the real estate information system. The system is intended to provide customers with an excellent platform. This system is developed by JSP, SQL and TOMCAT with B/S mode. This system mainly realizes information publication of new houses and second-hand houses, information publication of user demands, providing user with a real estate information query, user privilege management functions, housing information management functions, Online message feedback function and function of user evaluation of every new house information.
Key words:JSP; SQL; real estate agency; online message
目 录
论文共27页
1引 言11引 言1
1.1课题背景11
1.2系统的研究意义11
1.3课题研究方法22
2系统开发技术介绍22系统开发技术介绍2
2.1系统开发语言22
2.1.1开发语言---HTML2---HTML2---HTML2
2.1.2开发语言---JavaScript2---JavaScript2---JavaScript2
2.1.3开发语言---JSP2---JSP2---JSP2
2.2开发软件Dreamweaver 功能的简介33
2.3运行环境33
3系统总体设计33系统总体设计3
3.1系统前台模块分析33
3.1.1前台功能模块具体分析33
3.1.2用户前台模块图44
3.2管理员后台模块55
3.2.1模块图55
3.2.2后台功能模块分析55
3.3系统E-R图55
3.4系统数据流程图66
3.5系统数据库结构及关系图66
4系统实现1010系统实现10
4.1前台用户功能模块的实现1010
4.1.1用户注册1111
4.1.2用户登录1212
4.1.3个人资料修改1313
4.1.4房屋信息管理1414
4.1.5用户房屋信息发布1616
4.1.6查看房屋信息及新房评分1818
4.1.7高级搜索1919
4.1.8用户留言2121
4.2后台管理模块分析2121
4.2.1用户资料管理2222
4.2.2二手房信息管理2323
4.2.3新房信息发布与管理2424
4.2.4留言信息管理2525
结 论2525
参考文献2525
致 谢2626
声 明2727
JSP(Java Server Pages)是用于Web应用服务的一种编程技术。JSP采用在静态的HTML中嵌入动态的JAVA语言混合编码的方式,使网页开发人员能够比容易地建立起功能强大,有弹性的头脑柜台内容。
JSP技术的优点:
JSP在J2EE多层体系结构中有着重要的作用。如图2-1J2EE多层体系结构图
图2-1 J2EE多层体系结构图
在服务器端,为了使JSP页面能够正常运行,我们需要Web服务器处理Web页面请求;需要JAVA运行环境来支撑对于JSP或Servlet的编译和运行;还需要JSP和Servlet容器来解析JSP页面和Servlet请求。由于SUN公司将JAVA 技术公开作为一种开发的标准,所以业界提供了非常多的服务器选择,包括IBM的WebSphere,BEA的 WebLogic,SUN的 iPlanet以及开源的Tomcat和JRUN等。
JDK( Java Development Kit)是由SUN公司开发JAVA开发工具包,它提供了JAVA程序(包括JSP)的开发和允许环境。Tomcat则是一个符合J2EE规范的一个WEB应用服务器。本次系统设计也就用TOMCAT来当后台服务器。
如图3-1所示:
说明:只有用户成功注册后方可登录系统进行用户权限内的操作。在前台功能模块中,主要包括了:
说明:只有具有管理员权限的管理员在登录系统后才能对系统的各个模块信息进行管理。在后台功能模块中包括了:
列名 | 数据类型 | 长度 | 备注 |
---|---|---|---|
Name | varchar | 20 | 主键/登录名 |
Pwd | varchar | 20 | 密码 |
Phone | varchar | 12 | 主键/联系电话 |
varchar | 20 | 邮箱 | |
Type | varchar | 24 | 身份 |
出租房屋信息表rent 表结构如表3-2所示:
表3-2 rent表
列名 | 数据类型 | 长度 | 备注 |
---|---|---|---|
Id | Int | 4 | 主键/标识位 |
Didian | varchar | 50 | 地点 |
Area | varchar | 50 | 地区 |
Taoxing | varchar | 30 | 套型 |
Leixing | varchar | 16 | 房屋类型 |
Fangxing | varchar | 50 | 房型 |
Mianji | Float | 8 | 面积 |
Price | varchar | 20 | 底价 |
Price1 | varchar | 20 | 顶价 |
Phone | varchar | 20 | 主键/联系电话 |
Name | varchar | 20 | 主键/发布人名 |
Time | Datetime | 8 | 发布时间 |
出售房屋信息表sale结构如下表3-3所示:
表3-3 sale表
列名 | 数据类型 | 长度 | 备注 |
---|---|---|---|
Id | Int | 4 | 主键/标识位 |
Didian | varchar | 50 | 地点 |
Area | varchar | 50 | 地区 |
Taoxing | varchar | 30 | 套型 |
Leixing | varchar | 16 | 房屋类型 |
Fangxing | varchar | 50 | 房型 |
Mianji | Float | 8 | 面积 |
Price | varchar | 20 | 底价 |
Price1 | varchar | 20 | 顶价 |
Phone | varchar | 20 | 主键/联系电话 |
Name | varchar | 20 | 主键/发布人名 |
Time | Datetime | 8 | 发布时间 |
求购房屋信息表sale2如3-4表所示:
表3-4 sale2表
列名 | 数据类型 | 长度 | 备注 |
---|---|---|---|
Id | Int | 4 | 主键/标识位 |
Area | varchar | 50 | 地区 |
Taoxing | varchar | 50 | 套型 |
Leixing | varchar | 30 | 房屋类型 |
Fangxing | varchar | 16 | 房型 |
Mianji | Float | 50 | 面积 |
Price | varchar | 20 | 底价 |
Price1 | varchar | 20 | 顶价 |
Phone | varchar | 20 | 主键/联系电话 |
Name | varchar | 20 | 主键/发布人名 |
Time | Datetime | 8 | 发布时间 |
房屋求租信息表 sale3 表如表3-5所示:
表3-5 sale3表
列名 | 数据类型 | 长度 | 备注 |
---|---|---|---|
Id | Int | 4 | 主键/标识位 |
Area | Varchar | 50 | 地区 |
Taoxing | varchar | 50 | 套型 |
Leixing | varchar | 50 | 房屋类型 |
Fangxing | varchar | 50 | 房型 |
Mianji | Float | 8 | 面积 |
Price | varchar | 50 | 底价 |
Price1 | varchar | 20 | 顶价 |
Phone | varchar | 20 | 主键/联系电话 |
Name | varchar | 50 | 主键/发布人名 |
Time | Datetime | 8 | 发布时间 |
留言信息表Liuyan 如表3-6所示:
表3-6 留言信息表
列名 | 数据类型 | 长度 | 备注 |
---|---|---|---|
Name | varchar | 20 | 名字 |
Zhuti | varchar | 50 | 主题 |
Content | varchar | 300 | 内容 |
time | Datetime | 8 | 时间 |
新房信息表 sale4 结构如表3-7 所示:
表3-7 sale4 表
列名 | 数据类型 | 长度 | 备注 |
---|---|---|---|
Id | Int | 4 | 主键/标识位 |
Name | varchar | 50 | 小区名字 |
Didian | varchar | 50 | 地点 |
Area | varchar | 50 | 地区 |
Taoxing | varchar | 50 | 套型 |
Fangxing | varchar | 50 | 房型 |
Mianji | Float | 8 | 面积 |
Price | varchar | 50 | 价格 |
Jieshao | varchar | 150 | 房屋介绍 |
Phone | varchar | 50 | 主键/联系电话 |
wan | varchar | 50 | 是否卖完 |
Zushou | varchar | 50 | 出租/出售 |
Time | Datetime | 8 | 发布时间 |
Pingfen | varchar | 50 | 评分 |
此关系图体现了数据库中各表之间的具体关系。它的作用体现在当主键发生变化时对应的外键随之变化。从而实现了级联更新和级联删除的功能。
图3-5 数据库关系图
主界面如图4-1所示。
图4-1 系统主界面
在设计系统之前首先把后面要用到的数据库连接和分页显示的代码分别用代码单独表示出来。在后面的实现中只需要用JSP的<@ include file=”….” > 调用即可。这样就使得代码没有大量的重复性,也可以方便用户只修改这两个文件而省略大量相同代码的修改。使的代码的可读性更高。数据库连接用到的代码如下conn.jsp 所示:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<%Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:dd","sa","sa");
Statement stmt = con.createStatement();%>
分页显示要用到的两个文件是 conn1.jsp和fenye.jsp如下所示:
Conn1.jsp:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<%Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:dd","sa","sa");
Statement stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); %>
Fenye.jsp:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<% int intpagesize=2; //一页显示的记录数
int introwcount; //记录总数
int intpagecount; //总页数
int intpage; //待显示的页码
String strpage=request.getParameter("page");
if(strpage==null){ //表明没有page这一个参数,此时显示第一页数据
intpage=1; }
else {intpage=Integer.parseInt(strpage); //将字符串转换为整型
if(intpage<1) intpage=1; }%>
注册。注册界面如下图4-2所示。
图4-2 注册界面
注册代码:
<%@ include file="conn.jsp"%>
<%String a1=request.getParameter("name");
String a2=request.getParameter("pwd");
String a3=request.getParameter("phone");
String a4=request.getParameter("mail");
String a5="用户";
-----------汉字处理问题(略)----------
String aa="";
if(a1.equals(aa)||a2.equals(aa)||a3.equals(aa)||a4.equals(aa))
{out.println("资料没有填写完整");}
else{ session.putValue("username", a1);
ResultSet rs=stmt.executeQuery("select phone,name from zhuce where name='"+a1+"'and phone='"+a3+"'" );
if(rs.next())
{out.println("你输入的信息已经存在");}
Else {String condition=
"INSERT INTO zhuce VALUES"+"('"+a1+"','"+a2+"','"+a3+"','"+a4+"','"+a5+"')";
stmt.executeUpdate(condition);
out.println("恭喜你注册成功! 现在返回主页面登录系统!"); } }%>
在这里要控制的是注册的类型必须是用户,不能让注册的权限为管理员。而且控制了注册信息不能与数据库中的数据一致。
分模块。
图4-3用户主界面
用户在这里可以修改自己的个人资料。界面如图4-4所示
图4-4修改个人资料
在修改个人信息的editgeren.jsp文件中主要代码如下所示;
<%@ include file="conn.jsp"%>
这是你个人注册的信息,请核对显示的信息与你的基本情况是否一致!若要改动,请重新输入你的基本信息!
在程序中用到了javascript实现的isnumeric()函数来判断输入的是否为数字。当输入非数字时,就无法进行下一步的输入操作,系统将提示用户请输入数字字符。从而完善了系统的输入逻辑。
当用户按下“修改”按钮时就执行修改部分文件。其主要代码为:
<%@ include file="conn.jsp"%>
String aa="";
if(name.equals(aa)||pwd.equals(aa)||phone.equals(aa)||mail.equals(aa))
{out.println("修改项目不能为空 ");}
else
{ String num=(String)session.getValue("num");
String username=(String)session.getValue("username");
Sql="update zhuce set name='"+name+"',pwd='"+pwd+"',phone='"+phone+"',mail='"+mail+"' where name='"+username+"'and phone='"+num+"'";
stmt.executeUpdate();
ResultSet rs=stmt.executeQuery("select * from zhuce where name='"+name+"'and phone='"+phone+"'");
rs.next();
session.removeAttribute("username");
session.setAttribute("username",name);
session.removeAttribute("num");
session.setAttribute("num",phone);
系统用了JSP的内置对象session对象经过一次转换就实现了页面参数的交换传递从而实现了循环修改个人信息的功能。
第一页<%} %> <%if(intpage>1){ %>
面效果如图4-5所示
图4-5房屋管理
当需要修改时,用户就可以单击更新,系统将出现一个更新的页面如图4-6所示:
图4-6房屋更新
由于数据库关系图的设定,决定了只有在zhuce表中更新或删除主键时其它表中与之对应的外键才能级联更新或删除 ;所以在这里用户不能更新联系方式这个关键字。
图4-7 房屋信息发布
当用户提交房屋信息后,房屋信息就会写入数据库并返回给用户看是否需要修改刚刚发布的房屋信息。主要代码如下:
<%@ include file="conn.jsp"%>
<%-------------浏览端各个关键字的获取略--------
String a7=(String)session.getAttribute("num");
String a6=request.getParameter("price1");
String a8=(String)session.getAttribute("username");
String bb="";
if(aa.equals(bb)||a8==null||a5.equals(bb)||a6.equals(bb)||a7==null||a4.equals(bb))
{out.println("你还没有注册或者资料不完整");}
else if (a1==null||a3==null)
{out.println("你还没有注册或者资料不完整");}
else
{int ff = Integer.parseInt(a5);
int ss= Integer.parseInt(a6);
if (ff>ss) { out.print("价格输入不对"); }
else
{---------汉字处理问题(略)
Date dd=new Date();
String time=dd.toLocaleString();
session.putValue("time",time); %>
<%
String condition=
"INSERT NTO ale ALUES"+"('"+aa+"','"+a0+"','"+a1+"','"+a2+"','"+a3+"','"+a4+"','"+a5+"','"+a6+"','"+a7+"','"+a8+"','"+time+"')";
stmt.executeUpdate(condition);
ResultSet rs=stmt.executeQuery("select * from sale where time='"+time+"'");
rs.next();
String uid=rs.getString("id"); session.setAttribute("id",uid);
response.sendRedirect("sale1.jsp");}}
%>
图4-8查看房屋信息
由于是全部查询所以查询二手房信息和用户需求信息的核心代码都是相似的,只是在查询数据库时用的数据库表不一样而已。故其它查询代码略。
新房查询后的效果图如4-9所示:
图4-9查看新房信息及评分
当用户给某一新房信息评价时进入评分界面如图4-10所示:
图4-10评分界面
评分主要代码为;
<%@ include file=”conn.jsp”%>
<%String pingfen=request.getParameter("pingfen");
String uid=(String)session.getAttribute("id");
ResultSet r=st.executeQuery("select * from sale4 where id='"+uid+"'");
r.next();String pf=r.getString("pingfen");
if (pf==null||pf=="")
{ String condition= "update sale4 set pingfen='"+pingfen+"' where id='"+uid +"'";
st.executeUpdate(condition); }
else
{ float a= Float.parseFloat(pingfen);
float b =Float.parseFloat(pf); float pfen=(a+b)/2;
String condition= "update sale4 set pingfen='"+pfen+"' where id='"+uid +"'";
st.executeUpdate(condition); }
界面如图4-11所示
图4-11高级搜索界面
主要代码如下;
<%----------浏览器端关键字代码略---------------
String aa="";
if(a0==null||a2==null||a7==null)
{out.println("必须选择查询关键字");}
else {-----汉字处理代码略--------
if (a2.compareTo("二手房")==0)
{ String sql="select * from "+a0+" where ( fangxing='"+a2+"' or leixing='"+a3+"'or area='"+a1+"' or taoxing='"+a7+"')or (price>='"+a5+"'and price1<='"+a6+"')or(mianji>='"+a4+"')";
ResultSet rs=st.executeQuery(sql); %>
----------------显示表头部分代码和前面的方法一样所以略------------------------
<% while(rs.next()){ %>----------循环控制
--------------- 循环显示部分略--------------
<%}} else
{ String sql="select * from sale4 where fangxing='"+a3+"' or area='"+a1+"' or taoxing='"+a7+"'or price>='"+a5+"'or mianji>='"+a4+"'";
ResultSet rs=st.executeQuery(sql); %>
由于系统是面向所有已注册用户的,所以用户可以在系统留言模块中留言。从而达到了用户意见和建议的反馈功能,这使得系统管理员能更好的管理和完善系统功能。界面如4-12所示
图4-12留言显示界面
在这里用户可以看到刚刚发布的留言信息和所有用户给系统的留言。
以及留言薄信息的管理。功能主界面如图4-13所示:
图4-13 管理员主界面
用户资料管理
图4-14用户信息管理
在此管理员可以对用户信息进行管理:包括删除和添加用户。如图4-14所示。
主要程序代码如下:
<%@ include file="conn1.jsp"%><%@ include file="fenye.jsp"%>----------分页显示部分略
<%String username=(String)session.getValue("username");
String num=(String)session.getValue("num");
if (username==null) { out.println("请先登录"); }
else { ResultSet rs=st.executeQuery("select * from zhuce where type='用户'");
%>--------------控制必须先登录才能操作--------------
添加部分和注册功能一样(略)。删除部分:
<%String mail=request.getParameter("id");
stmt.executeUpdate("delete from zhuce where mail='"+mail+"'");
response.sendRedirect("guanliyonghu.jsp");%>
二手房信息管理
图4-15二手房管理
在用户对自己所发布的房屋信息进行管理时,主要是对出租、出售、求购以及求租信息的管理。管理员的信息管理主要表现在对信息的删除操作。界面表现如图4-15所示。
要对某个信息进行管理时,首先把信息用表格的形式显示出来再加以操作如
图4-16所示:
如图4-16所示出售信息的管理
对某一个房屋信息进行管理的主要代码为;
<%@ include file="conn1.jsp"%><%@ include file="fenye.jsp"%>
其中包含了分页显示功能。
<% String id=request.getParameter("id");
st.executeUpdate("delete from rent where id='"+id+"'");
response.sendRedirect("rentguanli.jsp"); %>
在这里是以房屋信息表的标识位id作为参数传递的。其它二手房信息的管理与出租房信息管理是相似的。
对后才能发布。发布信息界面如图4-17所示:
图4-17新房发布界面
新房信息的发布的实现方式和用户发布房屋信息的实现方式相似。在发布了信息后,可以看到刚刚发布的房屋信息,并且可以对其进行修改后再发布和删除。
界面如图4-18所示。
图4-18 新房信息修改
对于以前发布的新房信息,就可以通过新房信息管理这个功能来管理。管理界面如图4-19所示。显示部分代码和前面的显示部分相似(略):
图4-19新房信息管理
管理员就可以对其中每一条房屋信息进行修改和删除管理
删除功能代码为;
<%String id=request.getParameter("id");
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:dd","sa","sa");
Statement stmt=con.createStatement();
stmt.executeUpdate("delete from sale4 where id='"+id+"'");
response.sendRedirect("xinfangguanli.jsp");%>
同样,这两个功能都是用其ID标志位来进行参数传递。
作为管理员也应该有管理留言薄的权限。但在此系统中就表现在删除操作。
在这里用到了以内容为参数传递方式,在删除文件中就是以内容为关键字来删除留言。代码如下所示。
<%String content=request.getParameter("content");
stmt.executeUpdate("delete from liuyan where content='"+content+"'");
response.sendRedirect("deleteliuyan.jsp");%>
本文简要介绍了典型B/S体系结构的房产中介系统功能模块,重点讨论了系统开发工具、开发语言等关键技术以及系统的数据库建设,系统流程图和功能模块及其代码分析。这些过程的讨论和分析,让大家对系统的体系结构,功能模块等有了更深的了解。目前此系统基本可以实现网上中介功能,但系统仍然有一些不尽人意,而这些问题主要集中在系统的安全上,虽然系统已经通过相关的控制语句对登陆用户身份进行验证,但是在当今网络信息安全中,仅仅对用户身份验证是不够的,还需要对传送数据进行加密,防止数据传输过程中被篡改等攻击行为进行防御。因此在今后的工作里,这些功能的实现还需要更高的技术支持。在日常维护过程中,都需要进行严格的检测,以保证系统的服务质量。
[1] TODD COOK ,JSP从入门到精通[M].北京:电子工业出版社,2003。
[2] 金林樵.网络数据库技术及应用[M] .北京:机械工业出版社,2002。
[3] 李盛恩,王珊.数据库基础与应用[M] .北京:人民邮电出版社,2002。
[4] 吴以欣,陈小宁.JavaScript脚本程序设计[M] .北京:北京人民邮电出版社[M],2005。
[5] 郝玉龙.J2EE编程技术[M]. 北京: 清华大学出版社,2005。
[6] 金勇华. JVAV 网络高级编程[M]. 北京: 人民邮电出版社,2001。
[7] 张大治,王欢. JSP实用教程[M]. 北京: 清华大学出版社,2006。
本文是在盛志伟老师的热情关心和指导下完成的,他渊博的知识和严谨的治学作风使我受益匪浅,对顺利完成本课题起到了极大的作用。在此向他表示我最衷心的感谢!
感谢盛志伟老师在课题研究初期给予的帮助,在盛老师的帮助下课题才得以很好的展开,有了一个很好的开端!感谢在系统设计和实现过程中给予我帮助的老师和同学。
最后向在百忙之中评审本文的各位专家、老师表示衷心的感谢