资源描述
陕西理工学院结业设计
衡宇出租系统的设计与实现
【摘要】衡宇出租系统是集租房信息公布、浏览、查询、治理为一体的应用型软件。系统开发任务主要包罗数据库的设计与维护、应用步伐的开发两个方面。对付前者要求创建起的数据库具有完整性和一致性,而对付后者则要求步伐界面友好、功效完备等特点。它可以实现普通用户公布租房信息及浏览系统其他用户的租房信息、系统治理员对系统的所有租房信息、用户信息、及系统的一些底子信息进行有效治理。衡宇出租系统将使得足不出户的租房模式在社会中快速的流行起来。
【要害词】JSP;Servlet;DAO;Jdbc;B/S模式
Design and Implementation of Apartment Agency
System for Rental
Yue Ting
(Grade 06, Class 2, Major of Computer Science and Technology, Shaanxi University of Technology, Hanzhong 723000, Shaanxi)
Instructor: LI Jun
Abstract: Apartment Agency system is a applied software, it has release the rent information, such as browse, query. The development of the system includes database design and maintenance, and the development of application. To the former, requests for the establishment of the database have the characters of integrity and consistency, while the latter requires for the friendly interface, complete functions and so on. It not olny allows ordinary users to publish rental information and view the rental information of other users in the system, but also realizes system administrator of the system, has an effective management of all the rental information, user information, and some basic information of the system.The model of rent on the internet will be popular in society quickly by the apartment agency system .
Keywords: JSP; Servlet; DAO; Jdbc; B/S mode
目 录
1可行性研究 1
系统开发的目的和意义 1
开发东西选择 1
1.3 技能可行性 1
2开发东西宁静台 2
开发平台和技能 2
使用的数据库 2
2.3 Java步伐与MYSQL数据库的连接 2
3软件需求阐发 3
软件的设计目标 3
设计目标 3
根本要求 3
数据字典 3
数据结构 3
3.3 系统流程图 4
4 软件总体设计 6
系统条理图 6
数据库设计 6
5 软件实现 8
普通用户登录 8
用户主操纵界面 8
变动密码 9
浏览衡宇信息 9
公布衡宇信息 9
条件查询其他用户衡宇信息 10
5.1.6 租房信息留言板 11
治理员身份登录 12
用户治理 13
处置惩罚逾期的租房信息 13
5.2.3 条件查询租房信息 14
5.2.4 区县信息治理 14
街道信息治理 14
衡宇类型治理 15
6系统运行测试 16
运行情况 16
软件测试概述 16
本系统软件测试要领 16
测试及操纵历程 16
系统主界面 16
登录 17
用户操纵界面 18
治理员操纵界面 19
总 结 22
致 谢 23
参考文献 24
科技外文文献 25
1可行性研究
系统开发的目的和意义
目前社会的衡宇出租类网站越来越多,但由于商业因素的影响,该类型网站附加了太多的商业元素,并且操纵界面也愈加庞大化,而用户需要的仅仅是轻便的操纵界面以及相关的租房信息。本网站的设计目的是简化用户间的租房信息交换,满足消费者只要通过互联网就可以足不出户的购置自己喜欢的衡宇,改变传统商业生意业务,在互联网上进行生意业务,实现网上购置衡宇。为了实现上述目的,我对网上衡宇治理网站有了深一步的了解,从而满足客户的要求,让他们可以随时找到自己想要购置的衡宇。
系统接纳JSP+MYSQL作为开发东西,TOMCAT6.0作为公布与运行东西。系统具体使用的开发情况是Myeclipse6.0,Myeclipse6.0 是一款专业的软件开发东西,用于对步伐代码、Web页和Web应用步伐进行高设计、编码和开发,整个生产历程可以自动化,增强开发的事情效率。无论用户是喜欢可视化的网页开发情况照旧喜欢手写代码,它都能提供有用的东西,使用户拥有越发完美的Web体验。
1.3 技能可行性
系统将接纳当前流行的B/S架构和Internet网络技能,其可以突破使用地区的局限性,使整个校园网甚至Internet上的用户都可访问本系统。因而就可在多地区、任意时间段以差异身份来访问本系统中的数据,可以大大增强系统数据共享的能力。另外接纳流行和尺度的网络技能也会极大地提高系统的可移植性。该系统所用到的要害技能,如B/S架构、JSP动态网页技能等也都有着很高的成熟性和很好的可靠性。
2开发东西宁静台
2.1开发平台和技能
。
由于MySql数据库是免费的数据库,并且其性能也很不错,所以本系统接纳MySql5.0。
Java步伐与MYSQL数据库的连接
访问数据库时,需要创建应用步伐与数据库之间的连接。
使用Connection东西创建连接
Connection东西用于创建应用步伐与数据库之间的连接。使用Connection东西可以确定以何种方法连接数据库、设置查询条件以及查抄整个处置惩罚历程产生的错误。
创建和封闭连接东西:
private String DRIVER=”com.mysql.jdbc.Driver”;
private String URL=” jdbc:mysql://localhost:3306/housetolet”;
private String USER=” root”;
private String PWD=” root”;
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
System.out.println("数据库加载失败!");
e.printStackTrace();
}
Connection conn= DriverManager.getConnection(URL, USER, PWD);
3软件需求阐发
3.1软件的设计目标
设计目标
⑴ 系统应创建友好的界面,即要操纵简朴、直观、灵活,又要易于学习掌握。这个系统的目的:产生方便用户对租房信息的治理及浏览,系统治理员易于对租房信息查询、对用户治理及系统底子信息的维护。如果操纵庞大,就失去了推广代价,因为这个系统是面向没有盘算机使用底子的普通用户。
⑵ 系统在用户注册输入用户名时,就能判断该用户所要使用的用户名是否可用的功效,以资助用户改正错误。
⑶ 系统在确定用户名和密码后,应具有自动连接数据库的功效。
⑷ 在正确连接数据库,查询到用户相应的信息后,应在界面显示相关的信息。
⑸ 系统具有良好的宁静性。系统应遵循有关信息宁静尺度,具有切实可行的宁静掩护和保密步伐。
3.1.2根本要求
⑴ 实用性
软件设计开发的最终目的都是应用。《衡宇出租系统》对想要买房的用户来说,将会是非常实用的应用软件, 它也将会是系统治理员很好的管家, 因为它操纵起来简朴、方便。
⑵ 技能性
本软件开发情况是在Windows XP的开发平台上,利用Jsp作前台信息展示页面,JavaBean作为模型数据东西,Servlet作为整个应用步伐的办事器端的控制器来担当用户的请求并给请求返反响应的结果页面,MySql作背景数据库开发。本软件要求必须凭据软件工程开发的历程按步进行。要求页面友好、清晰、美观、简朴易学,切合人机对话的需要。
⑶ 目标功效
将衡宇信息的浏览及公布终端在网上实现,用户可以在网上填写和浏览衡宇信息。以改变传统的通过中介商获取信息的方法,节省名贵的人力财力和时间。
3.2数据字典
数据结构
(1) 用户信息
数据结构名:user,寄义:主要存放用户的根本信息、权限等。如表3-1:
表3-2 用户信息数据结构
数据项 数据类型 长度 说明
userid int 11 用户id
username varchar2 50 用户姓名
userpass varchar2 15 用户密码
lastlogintime datetime 最近登岸时间
lastloginip varchar2 15 最近登岸ip
isadmin tinyint 3 是否治理员
(2) 衡宇信息
数据结构名:house,寄义:存放出租衡宇的根本信息。如表3-2:
表3-3 衡宇信息数据结构
数据项 数据类型 长度 说明
houseid int 11 衡宇id
title varchar2 100 衡宇标题
countyid int 11 所属区县
streetid int 11 所属街道
cash double 租金
pattern varchar2 10 衡宇户型
typeid int 11 衡宇类型
userid int 11 所属用户
picpath varchar2 100 图片名称
housemess text 租房信息
createdate datatime 创建时间
scannums int 11 用户浏览数
enddate datetime 信息截止日
username varchar2 50 联系人
phone varchar2 20 联系电话
(3)留言信息表
数据结构名:comments,寄义:存放用户留言信息。如表3-3:
表3-4 留言信息数据结构
数据项 数据类型 长度 说明
commentsid int 11 留言id
comments varchar2 255 留言内容
userid int 11 所属用户
houseid int 11 所属衡宇
commenttime datetime 留言时间
(4)区县信息表
数据结构名:county,寄义:存放区县根本信息。如表3-4示:
表3-5 区县信息数据结构
数据项 数据类型 长度 说明
countyid int 11 区县id
countyname varchar2 30 区县名称
(5)街道信息表
数据结构名:street,寄义:存放街道根本信息。如表3-4示:
表3-6 街道信息数据结构
数据项 数据类型 长度 说明
streetid int 11 街道id
streetname varchar2 30 街道名称
countyid int 11 所属区县
(6)衡宇类型信息表
数据结构名:type,寄义:存放衡宇类型信息。如表3-4示:
表3-7 衡宇类型信息数据结构
数据项 数据类型 长度 说明
typeid int 11 类型id
typename varchar2 30 类型名称
3.3 系统流程图
系统要求登录的人为普通用户、治理员。下面将列出系统的整体流程:
图3-2 系统流程图
4 软件总体设计
4.1系统条理图
本系统接纳条理方框图来表现系统的总体结构图,该图随着结构的精细化,对数据结构也描绘得越来越详细,这种模式非常适合于需求阐发阶段的需要。系统阐发员从对顶层信息的分类开始,沿图中每条路径重复细化,直到确定了数据结构的全部细节时为止。
以下是本系统的总体结构图(图4-1所示)
图4-1 系统总体结构图
4.3数据库设计
⑴ 需求阐发
本系统需要实现的总体流程就是用户可以公布租房信息和查询、浏览其他用户公布的租房信息,治理员可以检察所有用户的租房信息,并且能够治理所有用户及该系统的所有底子信息。因此本数据库涉及的实体有用户信息,衡宇信息,留言信息,区县信息,街道信息,衡宇类型信息等几个实体。
⑵ 观点结构设计
观点结构设计是整个数据库设计的要害,它通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的观点模型。
本设计中包罗几个E-R模型如图4-2,图4-3,图4-4,图4-5,图4-6,图4-7所示:
图4-2用户信息E-R图
图4-3租房信息E-R图
图4-4留言信息E-R图 图4-5区县信息E-R图
图4-6街道信息E-R图 图4-7衡宇类型信息E-R图
⑷ 数据库物理设计
数据库物理设计是为逻辑数据模型选取一个最适合应用情况的物理结构(包罗存储结构和存取要领)。
数据库物理阶段所要设计的表和数据字典中数据结构的表一样,这里将不再赘述。
5 软件实现
系统主要面向的用户群体包罗治理员和用户。其中治理员与用户两部门的主要区别仅在于他们的权限的差异,好比治理员可以检察系统中的所有衡宇信息、注册用户、底子信息,并对其具有删除、修改等等,而普通用户是不具备这些权限,所以,在设计的历程中将用户群体分做两大部门,一部门是普通用户,一部门是治理员。
5.1普通用户登录
用户在使用该软件时均需要登录后才可使用,登录时会提示输入用户名及用户密码。用户名具有唯一性,用户自己不可变动。
在登录时,权限都是事先设置好的,学生登录时候,在主界面上默认为“普通用户登录”,系统则会自动判断出来其为2级用户,然后赋予其相应的权限。治理员登录时候,在主界面上选择“治理员登录”,系统会自动判断出来其为1级用户,然后赋予其相应的权限。
实现本功效的主要代码:
if(null==request.getSession().getAttribute("user")){
request.setAttribute("msg", "对不起!你还没有登岸,请先登岸!");
request.getRequestDispatcher("ToLogin").forward(request, response);
}else{
CountyDAO countydao=DAOFactory.getCountyDAO();
List<County> countyList=countydao.getAll();
String results="";
for(County c:countyList){
List<Street> streetList=c.getStreetList();
results+="streetList["+c.getCountyId()+"]=['";
int length=streetList.size();
if(length>0){
for(int i=0;i<length;i++){
results=results+streetList.get(i).getStreetName()+"','";
}
int end=results.lastIndexOf("','");
results=results.substring(0, end);
}
results=results+"'];";
}
TypeDAO typedao=DAOFactory.getTypeDAO();
List<Type> typeList=typedao.getAll();
request.setAttribute("countyList", countyList);
request.setAttribute("typeList", typeList);
request.setAttribute("results", results);
request.getRequestDispatcher("user/login.jsp").forward(request, response);
5.1.1用户主操纵界面
用户登录后,系统会显示出该用户能够使用的操纵界面。并且显示出当前登岸用户的用户名。
实现本功效的主要代码:
if(null==request.getSession().getAttribute("user")){
request.setAttribute("msg", "对不起!你还没有登岸,请先登岸!");
request.getRequestDispatcher("ToLogin").forward(request, response);
}else{
String curPage=request.getParameter("curPage");
if(null==curPage||"".equals(curPage)){
curPage="1";
}
Page page=new Page();
page.setCurPage(Integer. parseInt (curPage));
page=housedao.getAllHouses(page);
request.setAttribute("page", page);
request.setAttribute("method", "list");
request.getRequestDispatcher("admin/admin_main.jsp").forward(request, response);
}
变动密码
出于宁静考虑,用户登录后,可随时变动密码,以免帐号被别人偷取,进行非法操纵,扰乱本系统,也影响用户正常使用。同时也发起用户经常变动小我私家密码。
实现本功效的主要代码:
String pass1=request.getParameter("pass1").trim();
String pass2=request.getParameter("pass2").trim();
String pass3=request.getParameter("pass3").trim();
HttpSession session=request.getSession();
User user=(User)session.getAttribute("user");
if(pass1.equals(user.getUserPass())){
request.setAttribute("pass", pass1);
if(!pass2.equals(pass3)){
request.setAttribute("msg", "新密码两次的输入不一致!"); request.getRequestDispatcher("../user/update_pass.jsp").forward(requ est, response);
}else{
Pattern pattern=Ppile("^[0-9a-zA-Z]{3,6}$");
if(!pattern.matcher(pass2).matches()){
request.setAttribute("msg", "用户名只能为字母,数字组成且 其长度为3到6位!");
request.getRequestDispatcher("../user/update_pass.jsp").forward(requ est, response);
}else{
userdao. updatePass (user.getUserId(), pass2);
request.setAttribute("msg", "密码修改乐成!");
request.getRequestDispatcher("../HandleHouse?method=toqueryself"). forward(request, response);
}
}
}else{
request.setAttribute("msg", "您输入的原始密码不正确,不能修改密 码!");
request.getRequestDispatcher("../user/update_pass.jsp").forward(requ est, response);
5.1.3浏览衡宇信息
当用户用鼠标点击某条衡宇信息的标题时,显示该衡宇信息的详细信息。
实现本功效的主要代码:
int houseId=Integer.parseInt(request.getParameter("houseId"));
House house=housedao.findHouse(houseId);
String pattern=house.getPattern();
String[] t=pattern.split(",");
house.setShi(t[0]);
ng(t[1]);
CommentsDAO commentsdao=DAOFactory.getCommentsDAO();
int commentsNums=commentsdao.getCommentsNumsByHouseId(houseId);
request.setAttribute("house", house);
request.setAttribute("commentsNums",commentsNums);
request.getRequestDispatcher("user/detail.jsp").forward(request, response);
5.1.4公布衡宇信息
用户通过衡宇信息填写表单,认证填写好详细信息后,提交到背景处置惩罚、添加进数据库。
实现本功效的主要代码如下:
if(null==request. getSession ().getAttribute("user")){
request.setAttribute("msg", "对不起!你还没有登岸,请先登岸!");
request.getRequestDispatcher("ToLogin").forward(request, response);
}else{
SmartUpload su=null;
Request req=null;
//初始化smartupload东西,并结构其自己的request东西
try {
su = new SmartUpload();
su.initialize(this.getServletConfig(),request,response);
req = su.getRequest();
su.upload();
} catch (SmartUploadException e1) {
e1.printStackTrace();
}
//通过其request东西获取表单值
String title=req.getParameter("title");
int countyId=Integer.parseInt(req.getParameter("qxid"));
StreetDAO streetdao=DAOFactory.getStreetDAO();
int streetId=streetdao.getStreetIdByName(req.getParameter("jdid"));
double cash=Double.parseDouble(req.getParameter("zj"));
String pattern=req.getParameter("shi")+","+req.getParameter("ting");
int type=Integer.parseInt(req.getParameter("fwlx"));
String phone=req.getParameter("telephone");
String userName=req.getParameter("lxr");
String createDate=HandleDate.getCurDate();
String endDate=HandleDate.getEndDate(Integer.parseInt(req.getParameter("date");
String houseMess=req.getParameter("fwxx");
String picPath=new Date().getTime()+"";
//对上传的图片做处置惩罚
String ext="";
Files files=su.getFiles();
File file=files.getFile(0);
ext=file.getFileExt().toLowerCase();
try {
ervletContext().getRealPath("/")+"userpic");
if(!dir.exists()){
dir.mkdirs();
}
file.saveAs("/userpic/"+picPath+"."+ext,su.SAVE_VIRTUAL);
} catch (SmartUploadException e) {
e.printStackTrace();
}
//结构要添加的house东西
HttpSession session=request. getSession ();
User user=(User)session.getAttribute("user");
House house=new House();
house.setTitle(title);
house.setCountyId(countyId);
house.setStreetId(streetId);
house.setCash(cash);
house.setPattern(pattern);
house.setTypeId(type);
house.setPhone(phone);
house.setUserName(userName);
house.setCreateDate(createDate);
house.setEndDate(endDate);
house.setUserId(user.getUserId());
house.setHouseMess(houseMess);
house.setPicPath(picPath+"."+ext);
housedao.addHouse(house);
response.sendRedirect("HandleHouse?method=listself");
5.1.5条件查询其他用户衡宇信息
用户选择好各个条件后,背景凭据用户请求查屋信息(不选条件默认查询所有)。
实现本功效的主要代码:
String curPage=request.getParameter("curPage");
if(null==curPage||"".equals(curPage)){
curPage="1";
}
int countyId=Integer.parseInt(request.getParameter("qxid"));
String streetName=request.getParameter("jdid");
StreetDAO streedao=DAOFactory.getStreetDAO();
int streetId= streedao.getStreetIdByName(streetName);
String cash=request.getParameter("zj");
String cash1=request.getParameter("zj1");
int shi=Integer.parseInt(request.getParameter("shi"));
int ting=Integer.parseInt(request.getParameter("ting"));
t(request.getParameter("fwlx"));
int date=Integer.parseInt(request.getParameter("date"));
String condition="";
//区县
if(countyId!=0){
condition+=" and countyid="+countyId;
}
//街道
if(streetId!=0){
condition+=" and streetid="+streetId;
}
//房价
if(!"".equals(cash)&&!"".equals(cash1)){
condition+=" and cash between "+cash+" and "+cash1;
}else if(!"".equals(cash)&&"".equals(cash1)){
condition+=" and cash>="+cash;
}else if("".equals(cash)&&!"".equals(cash1)){
conditi
展开阅读全文