1 房屋租赁系统设计
1.1 系统概述
1、主要需求说明 1、对功能的规定
本软件的基本功能点包括:
⑴租金的管理。用户可以查看每个房屋的租金交纳情况。对于到期未付租金的情况,可以自动产生警告。可以进行租金收取和租金查询等工作。
⑵合同管理:这里的合同指的是房屋租赁合同。可以产生新的租赁合同,也可以对已有合同数据进行浏览,也可以对合同信息进行查询。对到期的租赁合同可以进行终止、存档、续租等操作。另外,为了防止误操作,对已有的合同不提供删除操作。在查询合同时,可以提供多种方式的组合信息查询。
⑶房屋信息的管理:可以对房产数据进行浏览、修改、插入和删除等操作。另外,对普通用户,可以再查询到所需房屋后录入自己的联系方式,以便向公司人员预约面谈、签订合同等。
⑷信息统计:可以对本月租金、到期合同、履约金和当前空闲房屋等业务信息进行统计,并以表格的形式输出。
⑸用户管理和权限分级:系统的使用者根据其角色具有相应的权限,如管理员可以进行数据管理和合同管理,而一般的客户只能查看其本人的租赁信息,网站的浏览者则可以查询房源信息。
1.2 概要设计
本系统是一个网站,遵循网站设计的一般原则,主要分为前台界面和后台处理两大部分。本系统的各个模块所包含的网页文件如表 1-1所示。
表 1-1 模块和文件清单表
1
2
1.3 数据库设计
1.3.1 概念结构设计
经过分析,本系统中主要有以下几个实体:房屋、合同、租户、租金。根据业务逻辑可以初步看出:
房屋具有如下属性:房产证号、面积、所在地、朝向、月租金、出租状态; 合同具有如下属性:相关房源、签订时间、起止时间、终止时间、租户、合同内容、签订人、月租金;
租金具有如下属性:租户名、交纳时间、相关合同、交纳金额; 租户具有如下属性:用户名、身份证号码、性别、出生日期;
从业务逻辑还可以看出,在某个时间点上,一个房屋的出租状态只能是两种状态中的一个:已出租或者空闲。一个租赁合同只能和一个房源相关,在同一个时间点上一个房源也只能和一份合同相关,不允许“一屋多租”的状态出现,并且,一个房屋只能出租给一个人,但一个人可以同时租用多个房屋,只要其按时交纳租金。每一笔租金都对应一个唯一的交纳者(租户),以及唯一的一份合同,但一个租户可以交纳多笔租金。一份合同可以对应多笔租金。 1.3.2 逻辑结构设计
将概念结构设计中的各个实体转换成关系,即可得到表 1-2的结果。
表 1-2 实体及其对应的关系
3
1.3.3 数据字典
将关系转化成表,并根据实际情况增加适当的列名,可得到下面的数据字典。 ⑴house表对应”房屋”关系,最终的设计结果如表 1-3所示。
表 1-3 house表设计说明
4
⑵contact表对应”合同”关系,最终的设计结果如表 1-4 所示。
表 1-4 contact表设计说明
⑶rent表对应”租金”关系,最终的设计结果如表 1-5所示。
表 1-5 rent表设计说明
5
⑵contact表对应”合同”关系,最终的设计结果如表 1-4 所示。
表 1-4 contact表设计说明
⑶rent表对应”租金”关系,最终的设计结果如表 1-5所示。
表 1-5 rent表设计说明
备注:由于租金的金额和租户名已经保存在合同表中。为了减少数据冗余,这里根据“租金”关系对表的结构做了适当的调整。
⑷ user表对应”租户”关系,最终的设计结果如表 1-6所示。
表 1-6 user表设计说明
⑸根据设计需要,还要增加一个管理员信息表admin,如表 1-7所示.
表 1-7 admin表设计说明
⑹为了满足房屋预租的需要,还要设计一个预租信息表booking,如表 1-8所示。
表 1-8 booking表设计说明
2 房屋租赁系统详细设计及实现
2.1 网站主页
根据不同的用户,本网站提供了不同的入口。具体描述如下: 2.1.1 index.asp页面
index.asp为网站的默认主页,也是所有普通访问者(匿名用户或者已注册用户)进入网站的入口。文件设计成框架式风格,左边为导航菜单,右边为工作区,用于输入数据和显示结果。 核心代码如下:
2.1.2 user_left.asp页面
user_left.asp页面为普通访问者的导航菜单,主要页面元素为一个表格,各个功能菜单自占一个单元格,并对应一个超级链接,除“用户登录”外,所有超级链接的目标页面均为Mainframe。如表 2-1所示。
表 2-1 导航菜单设计说明
2.1.3 admin_index.asp页面
admin_index用于为管理员提供管理平台,用于对数据库进行维护。管理员必须在地址栏中输入admin_index页面地址才能看到本页面。本页面也采用框架式风格。左边为导航菜单,右边为工作区,用于输入数据和显示结果。 核心代码如下:
备注:只有当前用户的权限为管理员权限时,才允许查看admin_index页面。 2.1.4 admin_left.asp页面
admin_left.asp页面为管理员的导航菜单,主要页面元素为一个表格,各个功能菜单自占一个单元格,并对应一个超级链接,所有超级链接的目标页面均为Mainframe。如表 2-2所示。
表 2-2管理员菜单设计说明
2.2 用户登录模块
用户登录模块主要用于对为用户提供登录和退出功能,并对登录信息进行验证,在同一时刻,在同一个IE进程内,只允许一个用户访问本网站。 2.2.1 user_login.asp页面
user_login.asp页面为普通用户提供登录功能,其主要页面元素如表 2-3所示。
表 2-3 user_login.asp
页面的主要元素
在本页面中定义了一个表单检查函数FormCheck,其作用是在提交前检查数据是
否为空,如果为空则给出提示,不进行提交,这样设计的好处是减轻了服务器端的工作量。函数FormCheck的代码如下:
另外,为防止多个用户同时登录,在页面的开始部分要检查是否已有用户登录,代码如下:
if session(“username”) “” then
response.write ”您已经登录了,请先退出” response.end return true;
end if
%>
2.2.2 user_check.asp页面
user_check页面用于对传输进来的用户信息进行验证,主要步骤为: ⑴取得传进来的用户名和密码,并过滤掉空格
⑵根据用户名和密码构造查询user表的sql语句 ⑶连接数据库,并执行查询语句
⑷判断结果集是否非空,如果为空则说明输入错误。如果非空则设置对应的session变量
其核心代码如下所示:
dim sql,username,pwd
pwd=(trim(request("password")) username=trim(request("name"))
sql="select * from user where username='" & username & "' and password='" & pwd "'"
set rs = conn.Execute(sql) if not (rs.eof or err) then
session("username")=rs("username") session("userlevel")=1 response.redirect " index.asp"
else %>
%>
2.2.3 admin_login.asp页面
admin_login.asp页面为管理员提供登录功能,其主要页面元素与普通用户登录页面类似,这里不再赘述。
1、admin_check.asp页面
admin_check.asp页面用于检查管理员名称和密码是否匹配,流程与user_check页面类似,但是有三点改动:
⑴查询的数据表位admin
⑵查询成功后,存储用户权限等级的会话变量session(“userlevel”)的值为2,并自动跳转到管理员操作界面admin_index.asp。
2.3 用户注册模块
用户注册模块分为前台录入和后台处理两部分,详述如下: 2.3.1 user_register.asp页面
user_register.asp页面用于输入用户注册信息,其主要页面元素如表 2-4所示。
表 2-4 user_register.asp页面的主要元素
在提交注册信息之前,客户端要调用一个JavaScript函数FormCheck对输入信息检查,只有合法信息才继续提交。FormCheck的主要功能如下:
⑴检查元素usernumber、truename、username、pwd、email的值是否为空,如果有一个元素为空,则函数返回false并给出提示;
⑵检查身份证号码是否为18位。如果不符合要求则给出提示并返回false; ⑶检查电子邮件地址是否含有符号“@”,如果不符合要求则给出提示并返回false;
⑷经过以上既不检查后均无错误,则返回true。
另外,为防止多个用户同时登录,在页面的开始部分要检查是否已有用户登录,代码参见2.2节中的内容。 2.3.2 user_add.asp页面
user_add页面用于在数据库中真正的添加一个用户,主要步骤为: ⑴取得传进来的用户注册信息,并过滤掉空格。 ⑵连接数据库。
⑶构造一个与用户表user相关联的记录集rs。 ⑷在rs中新增一条空白记录。
⑸根据注册信息设置该空白记录的各个字段值。
⑹更新记录集rs。
对应的核心代码如下:
set rs=server.createobject("adodb.recordset")
rs.open "select * from user",conn,3,2 rs.addnew
rs(“usernumber”)= trim(request.Form ("usernumber"))
rs("username")= trim(request.Form ("username"))
rs("truename")= trim(request.Form("name"))
rs("telephone")= trim(request.Form("teplephone"))
rs("email")=trim(request.Form("email")) if request.Form("sex")=”M” then rs("sex)=”男” else rs("sex)=”女” end if rs.update
另外,为增强系统的稳定性,在页面的开始部分要检查是否已有用户登录,如果已有用户登录则不显示本页面。代码参见2.2节中的内容。
2.4 用户信息修改模块
用户信息修改模块分为前台显示和后台处理两部分,详述如下:
2.4.1 user_modify.asp页面
user_modify.asp页面为修改用户注册资料的前台页面。其主要流程为:
⑴根据会话变量session(“userlevel”)的值来检查当前用户是否为普通用户,如果session(“userlevel”)不等于1则结束。
⑵根据会话变量session(“username”)的值构造查询语句。
⑶连接数据库。
⑷执行查询语句,将查询结果放入记录集rs中
⑸取出rs记录中各个字段的值,并将他们设置为各界面元素的默认初值。
user_modify.asp页面的界面元素设计与user_register.asp页面类似,可参见表 2-4,但做了如下改动:
⑴表单的action属性值为“user_update.asp”
⑵没有“重写”按钮。
user_modify.asp的主要代码为:
set rs=server.createobject("adodb.recordset")
sql = "select * from user where username=" & session("username")
rs.open "select * from user where ",conn
%>
javascript函数formcheck的内容参见2.3节。
2.4.2 user_update.asp页面
user_update.asp页面用于更新当前用户的资料信息。其主要步骤为:
⑴根据会话变量session(“userlevel”)的值来检查当前用户是否为普通用户,如果session(“userlevel”)不等于1则结束。
⑵根据会话变量session(“username”)的值构造查询语句。
⑶连接数据库。
⑷构造记录集rs,并执行查询语句
⑸取得request对象中各表单元素的值,用他们来更新rs记录中的各个属性值 ⑹更新记录集rs
⑺更新会话变量session(“username”)的值为新的用户名。
user_update.asp的核心代码为:
set rs=server.createobject("adodb.recordset")
sql = "select * from user where username=" & session("username")
rs.open sql,conn,2,3
rs(“usernumber”)= trim(request.Form ("usernumber"))
rs("username")= trim(request.Form ("username"))
rs("truename")= trim(request.Form("name"))
rs("telephone")= trim(request.Form("teplephone"))
rs("email")=trim(request.Form("email"))
if request.Form("sex")=”M” then rs("sex)=”男” else rs("sex)=”女” end if rs.update
session(“username”)= trim(request.Form ("username"))
%>
2.5 房屋信息管理模块
房屋信息管理模块包括房屋信息数据的浏览、增加、修改、和删除等功能。只有管理员才能使用本模块。分述如下。
2.5.1 house_list.asp页面
house_list.asp页面用于显示所有的房源信息,并为每个房源信息增加一个修改和删除的链接。其主要流程是:
⑴链接数据库
⑵构造数据集rs
⑶构造查询语句sql
⑷在rs中执行查询语句sql
⑸循环取出rs中的每条记录,将记录的各个属性值显示在表格中。
⑹为每条记录增加一个“修改”链接,目标页面为house_modify,asp
⑺为每条记录增加一个“删除”链接,目标页面为house_edit,asp
house_list.asp的核心代码为:
set rs=Server.CreateObject("ADODB.Recordset")
sql="select * from house "
rs.open sql,conn,1,1
rs.pagesize=5 „设置每页的记录数
%>
if not (rs.eof and rs.bof) then
Page = cint(Request.querystring("Page"))
If Page
If Page > rs.PageCount Then Page = rs.PageCount
showpages rs,Page
%>
函数showpages用于分页显示房屋记录,其主要代码如下:
rs.AbsolutePage = Page
for i=0 to rs.pagesize-1 j=j+1 if j mod 2 =0 then bg="#ededed" else bg="#ffffff" end if %>
>
rs.movenext
If rs.EOF Then Exit For Next%>
房产证号 | 面积 | 朝向 | 租金 | 已出租 |
="> |
"> | "> |
">" onClick="javascript:return confirm('确实要删除该信息吗?')">删除 |
|
2.5.5 house_del.asp页面 house_del.asp页面用于删除在house_list页面中选中的房屋记录。其主要流程为: ⑴取得request对象中传进来的房产证号request.form(“number”); ⑵根据request.form(“number”)的值构造删除语句; ⑶连接数据库 ⑷执行删除语句 house_del.asp的核心代码为: sql=”delete from house where certification_number=” & trim(request.form(“number”)) conn.execute sql %> 2.6 房源查询模块 房源查询模块为普通用户提供了查询未出租房屋信息的界面,用户可以按地点、面积和租金查询所关心的房屋信息。房源查询模块包括两个页面:house_search.asp和house_search_list.asp页面。详述如下: 2.6.1 house_search.asp页面 house_search.asp页面为用户提供了查询界面,在这个页面里,用户可以输入查询条件,包括:房屋地点、租金,面积、朝向等。并且用户还可以选择关系运算符如大于、等于、小于等。house_search.asp页面的主要界面元素如表 2-6 所示。 表 2-6 house_search.asp页面的主要元素 在实际情况中,房屋的所在地一般就是城市的小区名,因为为了方便用户输入,要预先在数据库中过滤出所有的小区名,然后放到选择框中,减少了用户的输入量,核心代码如下: set rs=Server.CreateObject("ADODB.Recordset") sql="select distinct(address) from house” while not rs.eof %> > rs.movenext end while %> 2.6.2 house_search_list.asp页面 house_search_list.asp页面用于显示房源查询结果。其主要流程为: ⑴获得request对象中传进来的查询信息 ⑵根据查询信息构造查询语句 ⑶连接数据库 ⑷构造记录集 ⑸对记录集执行查询语句 ⑹将记录显示在客户端浏览器上 2.7 合同管理模块 合同管理模块只能由管理员使用,包括输入新合同、到期合同提醒、合同浏览、合同查询等功能。详述如下: 2.7.1 contact_register.asp页面 contact_register.asp页面用于输入一个新合同。其主要页面元素如表 2-7所示。 表 2-7 contact_add.asp页面的主要元素 2.7.2 contact_add.asp页面 contact_add.asp页面用于将新合同入库。其主要流程为: ⑴检查request对象中传入的各表单元素是否合法,主要包括: ①房产证号必须已经存在与house表中 ②用户名必须已经存在与user表中 ③开始日期不能早于合同的签订日期; ⑵连接数据库; ⑶构造与表contact相关的记录集rs。 ⑷在rs中新增一条空白记录。 ⑸用传入的表单元素的值设置记录的各个属性值; ⑹更新记录集rs ⑺在租金表rent中增加对应的租金记录,并自动设置好每笔租金的交付日期,并将交付状态设为否。 2.7.3 contact_list.asp页面 contact_list.asp页面用于浏览已有合同。其主要流程是: ⑴链接数据库 ⑵构造数据集rs ⑶构造查询语句sql访问contact表中的所有记录 ⑷在rs中执行查询语句sql ⑸循环取出rs中的每条记录,将记录的各个属性值显示在表格中。 2.7.4 contact_search.asp页面 contact_search.asp页面用于查询合同。在本页面中提供了多种方式的查询,如按签订日期查询,按租户名称查询,按租期查询,按租金查询等。为了减少页面数量,将这些查询统一在一个页面中,每种查询对应一个表单。contact_search.asp页面的主要元素如所示 表 2-8 contact_search.asp页面的主要元素 备注:本次开发对合同查询只做到了单个条件的查询,以后可考虑将这些条件组合起来,实现组合查询。 2.7.5 contact_search_list.asp页面 contact_search_list.asp页面用于输出合同查询的结果。其主要流程为: ⑴根据request对象中传入的表单元素值构造查询条件,oper元素的值决定了查询方式。 ⑵连接数据库 ⑶构造记录集rs ⑷执行查询语句,将结果放到rs中 ⑸依次取出rs中的每条记录,输出到表格中。 2.7.6 contact_in_term.asp页面 contact_in_term.asp页面用于显示所有将在本月底到期的合同。其主要流程为 ⑴连接数据库 ⑵取出表contact的所有记录,将结果放到记录集rs中 ⑶依次遍历rs中的每条记录,对记录的到期时间进行判断,如果到期时间的年份、月份和当前时间的年份、月份相同,则将记录输出到表格中。 2.7.7 contact_rent_list.asp页面 contact_rent_list.asp页面用于显示某个合同的租金交纳情况。其主要流程为: ⑴连接数据库 ⑵根据request对象传入的contact_number表单元素构造查询语句,以查询该合同相关的所有租金记录 ⑶执行查询语句,并将结果放到记录集rs中 ⑷依次遍历rs中的每条记录,将结果显示到表格中。 2.8 租金管理模块 租金管理模块主要对房屋的租金交纳情况进行浏览和管理。分为租金浏览和租金交纳两个部分,详述如下。 2.8.1 rent_list.asp页面 rent_list.asp页面用于显示所有的租金记录。主要流程是: ⑴连接数据库 ⑵查询表rent中的所有记录,将结果放到结果集rs中; ⑶依次遍历rs中的每条记录,将记录的属性值输出到表格中的对应位置 ⑷为每条交纳状态为“否”的记录增加一个”交纳”的链接,目标页面地址为 rent_deliver.asp;将记录编号作为查询字符串。 2.8.2 rent_deliver.asp页面 rent_deliver.asp页面用于实现租金交纳的功能,实现机制如下: ⑴连接数据库 ⑵根据传入的记录编号设置更新语句,将该记录的交纳状态设为“是”,并自动更新实际交纳时间。 ⑶ 执行更新语句; 2.9 留言管理模块 留言管理模块包括用户的留言录入和管理的留言浏览两个部分。详述如下: 2.9.1 message_board.asp页面 message_board.asp页面实现了用户的留言板功能。其页面设计如所示。 表 2-9 contact_search.asp页面的主要元素 在提交之前应进行检查,保证留言内容和联系方式以及姓名的内容不为空。 2.9.2 message_list.asp页面 message_list.asp页面由管理员使用,作用是查看所有用户的留言。其主要流程是: ⑴连接数据库 ⑵构造记录集rs ⑶执行查询语句取得表message的所有记录,将结果放到rs中 ⑷依次取出rs中的每条记录,输出到表格中。 2.10 统计模块 统计模块用于对本月租金、到期合同、履约金和当前空闲房屋等信息进行统计。为减少页面数量,将输出集成到一个页面文件count_info.asp中。在输出之前要执行相应的查询语句以取得统计信息: ⑴查询本月租金的流程为: ①设置一个计数器sum,初值为0 ②依次遍历表rent中的每条记录,如果记录的月份数和年份数与当前时间的年份数、月份数相等且记录的交纳状态为是,则更新计数器的值,将当前记录的租金加到计数器中。 ⑵查询到期合同总数的流程为: ①设置一个计数器sum,初值为0 ②依次遍历表contact中的每条记录,如果记录的终止时间的月份数和年份数与当前时间的年份数、月份数相等且记录的交纳状态为是,则将计数器加1。 ⑶统计履约金的流程比较简单,执行下面的查询语句即可: select sum(money) from rent where status = false ⑷统计空闲房屋数的sql语句为: select sum(*) from house where Isrenting = false。 在使用统计模块之前,应检查当前用户的权限等级,如果用户不是管理员,则不能查看本页面的内容。 3 测试和运行 3.1 搭建运行环境 3.1.1 IIS的安装与配置 本系统的开发环境为IIS5,其具体安装和配置步骤如下: ⑴如果系统中尚未安装IIS,则在“控制面板”中选择“添加/删除程序”,然后选择“添加/删除Windows组件”,选中其中的“Internet信息服务器(IIS)”,然后单击“下一步”,按照提示进行即可,如图 3-1所示。安装过程中可能需要某些安装文件,插入windows的安装光盘即可。 图 3-1 安装IIS ⑵在服务器上建立house文件夹,将所有项目文件都拷贝到此目录中。 ⑶在IIS管理器中新建一个Web站点,如图 3-2所示。 图 3-2 新建Web站点 ⑷在弹出的提示中,依次将站点的说明设为”House”,主目录为刚才建立的house目录,权限选择“脚本”,最后点“完成”即可。 3.1.2 数据库服务器的安装与配置 本系统的数据库服务器采用SQL Server 2000企业版。安装步骤从略,其配置过程如下: ⑴运行SQL Server的企业管理器 ⑵选择“数据库”节点,在右键菜单中选择“新建数据库”,如图 3-3所示 图 3-3 “新建数据库”菜单 35 ⑶数据库名为house.然后点确定。如图 3-4所示。 图 3-4 建立数据库 ⑷在数据库中建立相应的表,表的结构见1.3.3小节中的内容。 ⑸在“控制面板”的“管理工具”中选择“odbc数据源”,选择“系统dsn”标签,单击右边的“添加”按钮,如图 3-5所示。 36 图 3-5 添加系统数据源 ⑹在驱动程序中选择”SQL Server”,然后单击“下一步”。 ⑺设置数据源名称为“house”,服务器选择“local”,如图 3-6所示,然后单击“下一步”。 ⑻验证方式为NT验证,并去掉“连接SQL Server”的选中状态,如图 3-7所示 ⑼下面的步骤均不做改动,单击下一步即可。 ⑽最后单击”测试数据源“按钮,如果提示连接成功,就说明已配置正确。如、所示。 37 图 3-6 设置数据源名称 图 3-7 设置验证方式 38 图 3-8 测试数据源连接 图 3-9 连接测试结果 39 3.2 实际运行效果 3.2.1 网站主页 在浏览器的地址栏中输入网站地址如:http://192.168.1.42,效果如图 3-10所示 图 3-10 网站主页 3.2.2 用户注册 单击主页中的”用户注册”,此时出现图 3-11。 图 3-11 注册新用户 在里面输入新用户信息,然后单击“注册”按钮,效果分别如图 3-12、图 3-13所示。 图 3-12 填写用户信息 图 3-13 单击”注册”后的画面 再进入后台数据查看,可以看到记录已经被添加。 3.2.3 房源查询 单击主页中的“房源查询”,然后输入查询信息,可得到图 3-14、图 3-15的结果。 图 3-14 输入房源查询条件 图 3-15 房源查询结果 3.2.4 管理员登录 在地址栏输入admin_login.asp的页面地址,然后输入正确的管理员名称和密码,可以进入管理员操作页面admin_index.asp,分别如图 3-16、图 3-17所示。 图 3-16 管理员登录 图 3-17 管理员操作台 3.2.5 房源录入 在管理员操作台中单击“增加房源”,输入新房源信息,然后单击房源列表,结 果分别如图 3-18 、图 3-19 所示。 图 3-18 录入新房源信息 图 3-19 增加新房源之后的房源列表 3.2.6 合同录入 在管理员操作台中单击“新增合同”,输入新合同信息,然后单击“合同浏览”,结果分别如图 3-20、所示。 图 3-20 签订新合同 图 3-21 查看所有合同 3.2.7 合同查询 在管理员操作平台中单击“合同查询”,然后选择查询方式,输入查询数据,单击右边的“查询”按钮,结果分别如图 3-22、图 3-23 所示。 图 3-22 “合同查询“页面 图 3-23 显示“张三”签订的所有合同 3.2.8 到期合同查看 假设当前时间为2009年12月,那么单击”到期提醒”的结果如所示 图 3-24 查看本月到期的合同 |
1 房屋租赁系统设计
1.1 系统概述
1、主要需求说明 1、对功能的规定
本软件的基本功能点包括:
⑴租金的管理。用户可以查看每个房屋的租金交纳情况。对于到期未付租金的情况,可以自动产生警告。可以进行租金收取和租金查询等工作。
⑵合同管理:这里的合同指的是房屋租赁合同。可以产生新的租赁合同,也可以对已有合同数据进行浏览,也可以对合同信息进行查询。对到期的租赁合同可以进行终止、存档、续租等操作。另外,为了防止误操作,对已有的合同不提供删除操作。在查询合同时,可以提供多种方式的组合信息查询。
⑶房屋信息的管理:可以对房产数据进行浏览、修改、插入和删除等操作。另外,对普通用户,可以再查询到所需房屋后录入自己的联系方式,以便向公司人员预约面谈、签订合同等。
⑷信息统计:可以对本月租金、到期合同、履约金和当前空闲房屋等业务信息进行统计,并以表格的形式输出。
⑸用户管理和权限分级:系统的使用者根据其角色具有相应的权限,如管理员可以进行数据管理和合同管理,而一般的客户只能查看其本人的租赁信息,网站的浏览者则可以查询房源信息。
1.2 概要设计
本系统是一个网站,遵循网站设计的一般原则,主要分为前台界面和后台处理两大部分。本系统的各个模块所包含的网页文件如表 1-1所示。
表 1-1 模块和文件清单表
1
2
1.3 数据库设计
1.3.1 概念结构设计
经过分析,本系统中主要有以下几个实体:房屋、合同、租户、租金。根据业务逻辑可以初步看出:
房屋具有如下属性:房产证号、面积、所在地、朝向、月租金、出租状态; 合同具有如下属性:相关房源、签订时间、起止时间、终止时间、租户、合同内容、签订人、月租金;
租金具有如下属性:租户名、交纳时间、相关合同、交纳金额; 租户具有如下属性:用户名、身份证号码、性别、出生日期;
从业务逻辑还可以看出,在某个时间点上,一个房屋的出租状态只能是两种状态中的一个:已出租或者空闲。一个租赁合同只能和一个房源相关,在同一个时间点上一个房源也只能和一份合同相关,不允许“一屋多租”的状态出现,并且,一个房屋只能出租给一个人,但一个人可以同时租用多个房屋,只要其按时交纳租金。每一笔租金都对应一个唯一的交纳者(租户),以及唯一的一份合同,但一个租户可以交纳多笔租金。一份合同可以对应多笔租金。 1.3.2 逻辑结构设计
将概念结构设计中的各个实体转换成关系,即可得到表 1-2的结果。
表 1-2 实体及其对应的关系
3
1.3.3 数据字典
将关系转化成表,并根据实际情况增加适当的列名,可得到下面的数据字典。 ⑴house表对应”房屋”关系,最终的设计结果如表 1-3所示。
表 1-3 house表设计说明
4
⑵contact表对应”合同”关系,最终的设计结果如表 1-4 所示。
表 1-4 contact表设计说明
⑶rent表对应”租金”关系,最终的设计结果如表 1-5所示。
表 1-5 rent表设计说明
5
⑵contact表对应”合同”关系,最终的设计结果如表 1-4 所示。
表 1-4 contact表设计说明
⑶rent表对应”租金”关系,最终的设计结果如表 1-5所示。
表 1-5 rent表设计说明
备注:由于租金的金额和租户名已经保存在合同表中。为了减少数据冗余,这里根据“租金”关系对表的结构做了适当的调整。
⑷ user表对应”租户”关系,最终的设计结果如表 1-6所示。
表 1-6 user表设计说明
⑸根据设计需要,还要增加一个管理员信息表admin,如表 1-7所示.
表 1-7 admin表设计说明
⑹为了满足房屋预租的需要,还要设计一个预租信息表booking,如表 1-8所示。
表 1-8 booking表设计说明
2 房屋租赁系统详细设计及实现
2.1 网站主页
根据不同的用户,本网站提供了不同的入口。具体描述如下: 2.1.1 index.asp页面
index.asp为网站的默认主页,也是所有普通访问者(匿名用户或者已注册用户)进入网站的入口。文件设计成框架式风格,左边为导航菜单,右边为工作区,用于输入数据和显示结果。 核心代码如下:
2.1.2 user_left.asp页面
user_left.asp页面为普通访问者的导航菜单,主要页面元素为一个表格,各个功能菜单自占一个单元格,并对应一个超级链接,除“用户登录”外,所有超级链接的目标页面均为Mainframe。如表 2-1所示。
表 2-1 导航菜单设计说明
2.1.3 admin_index.asp页面
admin_index用于为管理员提供管理平台,用于对数据库进行维护。管理员必须在地址栏中输入admin_index页面地址才能看到本页面。本页面也采用框架式风格。左边为导航菜单,右边为工作区,用于输入数据和显示结果。 核心代码如下:
备注:只有当前用户的权限为管理员权限时,才允许查看admin_index页面。 2.1.4 admin_left.asp页面
admin_left.asp页面为管理员的导航菜单,主要页面元素为一个表格,各个功能菜单自占一个单元格,并对应一个超级链接,所有超级链接的目标页面均为Mainframe。如表 2-2所示。
表 2-2管理员菜单设计说明
2.2 用户登录模块
用户登录模块主要用于对为用户提供登录和退出功能,并对登录信息进行验证,在同一时刻,在同一个IE进程内,只允许一个用户访问本网站。 2.2.1 user_login.asp页面
user_login.asp页面为普通用户提供登录功能,其主要页面元素如表 2-3所示。
表 2-3 user_login.asp
页面的主要元素
在本页面中定义了一个表单检查函数FormCheck,其作用是在提交前检查数据是
否为空,如果为空则给出提示,不进行提交,这样设计的好处是减轻了服务器端的工作量。函数FormCheck的代码如下:
另外,为防止多个用户同时登录,在页面的开始部分要检查是否已有用户登录,代码如下:
if session(“username”) “” then
response.write ”您已经登录了,请先退出” response.end return true;
end if
%>
2.2.2 user_check.asp页面
user_check页面用于对传输进来的用户信息进行验证,主要步骤为: ⑴取得传进来的用户名和密码,并过滤掉空格
⑵根据用户名和密码构造查询user表的sql语句 ⑶连接数据库,并执行查询语句
⑷判断结果集是否非空,如果为空则说明输入错误。如果非空则设置对应的session变量
其核心代码如下所示:
dim sql,username,pwd
pwd=(trim(request("password")) username=trim(request("name"))
sql="select * from user where username='" & username & "' and password='" & pwd "'"
set rs = conn.Execute(sql) if not (rs.eof or err) then
session("username")=rs("username") session("userlevel")=1 response.redirect " index.asp"
else %>
%>
2.2.3 admin_login.asp页面
admin_login.asp页面为管理员提供登录功能,其主要页面元素与普通用户登录页面类似,这里不再赘述。
1、admin_check.asp页面
admin_check.asp页面用于检查管理员名称和密码是否匹配,流程与user_check页面类似,但是有三点改动:
⑴查询的数据表位admin
⑵查询成功后,存储用户权限等级的会话变量session(“userlevel”)的值为2,并自动跳转到管理员操作界面admin_index.asp。
2.3 用户注册模块
用户注册模块分为前台录入和后台处理两部分,详述如下: 2.3.1 user_register.asp页面
user_register.asp页面用于输入用户注册信息,其主要页面元素如表 2-4所示。
表 2-4 user_register.asp页面的主要元素
在提交注册信息之前,客户端要调用一个JavaScript函数FormCheck对输入信息检查,只有合法信息才继续提交。FormCheck的主要功能如下:
⑴检查元素usernumber、truename、username、pwd、email的值是否为空,如果有一个元素为空,则函数返回false并给出提示;
⑵检查身份证号码是否为18位。如果不符合要求则给出提示并返回false; ⑶检查电子邮件地址是否含有符号“@”,如果不符合要求则给出提示并返回false;
⑷经过以上既不检查后均无错误,则返回true。
另外,为防止多个用户同时登录,在页面的开始部分要检查是否已有用户登录,代码参见2.2节中的内容。 2.3.2 user_add.asp页面
user_add页面用于在数据库中真正的添加一个用户,主要步骤为: ⑴取得传进来的用户注册信息,并过滤掉空格。 ⑵连接数据库。
⑶构造一个与用户表user相关联的记录集rs。 ⑷在rs中新增一条空白记录。
⑸根据注册信息设置该空白记录的各个字段值。
⑹更新记录集rs。
对应的核心代码如下:
set rs=server.createobject("adodb.recordset")
rs.open "select * from user",conn,3,2 rs.addnew
rs(“usernumber”)= trim(request.Form ("usernumber"))
rs("username")= trim(request.Form ("username"))
rs("truename")= trim(request.Form("name"))
rs("telephone")= trim(request.Form("teplephone"))
rs("email")=trim(request.Form("email")) if request.Form("sex")=”M” then rs("sex)=”男” else rs("sex)=”女” end if rs.update
另外,为增强系统的稳定性,在页面的开始部分要检查是否已有用户登录,如果已有用户登录则不显示本页面。代码参见2.2节中的内容。
2.4 用户信息修改模块
用户信息修改模块分为前台显示和后台处理两部分,详述如下:
2.4.1 user_modify.asp页面
user_modify.asp页面为修改用户注册资料的前台页面。其主要流程为:
⑴根据会话变量session(“userlevel”)的值来检查当前用户是否为普通用户,如果session(“userlevel”)不等于1则结束。
⑵根据会话变量session(“username”)的值构造查询语句。
⑶连接数据库。
⑷执行查询语句,将查询结果放入记录集rs中
⑸取出rs记录中各个字段的值,并将他们设置为各界面元素的默认初值。
user_modify.asp页面的界面元素设计与user_register.asp页面类似,可参见表 2-4,但做了如下改动:
⑴表单的action属性值为“user_update.asp”
⑵没有“重写”按钮。
user_modify.asp的主要代码为:
set rs=server.createobject("adodb.recordset")
sql = "select * from user where username=" & session("username")
rs.open "select * from user where ",conn
%>
javascript函数formcheck的内容参见2.3节。
2.4.2 user_update.asp页面
user_update.asp页面用于更新当前用户的资料信息。其主要步骤为:
⑴根据会话变量session(“userlevel”)的值来检查当前用户是否为普通用户,如果session(“userlevel”)不等于1则结束。
⑵根据会话变量session(“username”)的值构造查询语句。
⑶连接数据库。
⑷构造记录集rs,并执行查询语句
⑸取得request对象中各表单元素的值,用他们来更新rs记录中的各个属性值 ⑹更新记录集rs
⑺更新会话变量session(“username”)的值为新的用户名。
user_update.asp的核心代码为:
set rs=server.createobject("adodb.recordset")
sql = "select * from user where username=" & session("username")
rs.open sql,conn,2,3
rs(“usernumber”)= trim(request.Form ("usernumber"))
rs("username")= trim(request.Form ("username"))
rs("truename")= trim(request.Form("name"))
rs("telephone")= trim(request.Form("teplephone"))
rs("email")=trim(request.Form("email"))
if request.Form("sex")=”M” then rs("sex)=”男” else rs("sex)=”女” end if rs.update
session(“username”)= trim(request.Form ("username"))
%>
2.5 房屋信息管理模块
房屋信息管理模块包括房屋信息数据的浏览、增加、修改、和删除等功能。只有管理员才能使用本模块。分述如下。
2.5.1 house_list.asp页面
house_list.asp页面用于显示所有的房源信息,并为每个房源信息增加一个修改和删除的链接。其主要流程是:
⑴链接数据库
⑵构造数据集rs
⑶构造查询语句sql
⑷在rs中执行查询语句sql
⑸循环取出rs中的每条记录,将记录的各个属性值显示在表格中。
⑹为每条记录增加一个“修改”链接,目标页面为house_modify,asp
⑺为每条记录增加一个“删除”链接,目标页面为house_edit,asp
house_list.asp的核心代码为:
set rs=Server.CreateObject("ADODB.Recordset")
sql="select * from house "
rs.open sql,conn,1,1
rs.pagesize=5 „设置每页的记录数
%>
if not (rs.eof and rs.bof) then
Page = cint(Request.querystring("Page"))
If Page
If Page > rs.PageCount Then Page = rs.PageCount
showpages rs,Page
%>
函数showpages用于分页显示房屋记录,其主要代码如下:
rs.AbsolutePage = Page
for i=0 to rs.pagesize-1 j=j+1 if j mod 2 =0 then bg="#ededed" else bg="#ffffff" end if %>
>
rs.movenext
If rs.EOF Then Exit For Next%>
房产证号 | 面积 | 朝向 | 租金 | 已出租 |
="> |
"> | "> |
">" onClick="javascript:return confirm('确实要删除该信息吗?')">删除 |
|
2.5.5 house_del.asp页面 house_del.asp页面用于删除在house_list页面中选中的房屋记录。其主要流程为: ⑴取得request对象中传进来的房产证号request.form(“number”); ⑵根据request.form(“number”)的值构造删除语句; ⑶连接数据库 ⑷执行删除语句 house_del.asp的核心代码为: sql=”delete from house where certification_number=” & trim(request.form(“number”)) conn.execute sql %> 2.6 房源查询模块 房源查询模块为普通用户提供了查询未出租房屋信息的界面,用户可以按地点、面积和租金查询所关心的房屋信息。房源查询模块包括两个页面:house_search.asp和house_search_list.asp页面。详述如下: 2.6.1 house_search.asp页面 house_search.asp页面为用户提供了查询界面,在这个页面里,用户可以输入查询条件,包括:房屋地点、租金,面积、朝向等。并且用户还可以选择关系运算符如大于、等于、小于等。house_search.asp页面的主要界面元素如表 2-6 所示。 表 2-6 house_search.asp页面的主要元素 在实际情况中,房屋的所在地一般就是城市的小区名,因为为了方便用户输入,要预先在数据库中过滤出所有的小区名,然后放到选择框中,减少了用户的输入量,核心代码如下: set rs=Server.CreateObject("ADODB.Recordset") sql="select distinct(address) from house” while not rs.eof %> > rs.movenext end while %> 2.6.2 house_search_list.asp页面 house_search_list.asp页面用于显示房源查询结果。其主要流程为: ⑴获得request对象中传进来的查询信息 ⑵根据查询信息构造查询语句 ⑶连接数据库 ⑷构造记录集 ⑸对记录集执行查询语句 ⑹将记录显示在客户端浏览器上 2.7 合同管理模块 合同管理模块只能由管理员使用,包括输入新合同、到期合同提醒、合同浏览、合同查询等功能。详述如下: 2.7.1 contact_register.asp页面 contact_register.asp页面用于输入一个新合同。其主要页面元素如表 2-7所示。 表 2-7 contact_add.asp页面的主要元素 2.7.2 contact_add.asp页面 contact_add.asp页面用于将新合同入库。其主要流程为: ⑴检查request对象中传入的各表单元素是否合法,主要包括: ①房产证号必须已经存在与house表中 ②用户名必须已经存在与user表中 ③开始日期不能早于合同的签订日期; ⑵连接数据库; ⑶构造与表contact相关的记录集rs。 ⑷在rs中新增一条空白记录。 ⑸用传入的表单元素的值设置记录的各个属性值; ⑹更新记录集rs ⑺在租金表rent中增加对应的租金记录,并自动设置好每笔租金的交付日期,并将交付状态设为否。 2.7.3 contact_list.asp页面 contact_list.asp页面用于浏览已有合同。其主要流程是: ⑴链接数据库 ⑵构造数据集rs ⑶构造查询语句sql访问contact表中的所有记录 ⑷在rs中执行查询语句sql ⑸循环取出rs中的每条记录,将记录的各个属性值显示在表格中。 2.7.4 contact_search.asp页面 contact_search.asp页面用于查询合同。在本页面中提供了多种方式的查询,如按签订日期查询,按租户名称查询,按租期查询,按租金查询等。为了减少页面数量,将这些查询统一在一个页面中,每种查询对应一个表单。contact_search.asp页面的主要元素如所示 表 2-8 contact_search.asp页面的主要元素 备注:本次开发对合同查询只做到了单个条件的查询,以后可考虑将这些条件组合起来,实现组合查询。 2.7.5 contact_search_list.asp页面 contact_search_list.asp页面用于输出合同查询的结果。其主要流程为: ⑴根据request对象中传入的表单元素值构造查询条件,oper元素的值决定了查询方式。 ⑵连接数据库 ⑶构造记录集rs ⑷执行查询语句,将结果放到rs中 ⑸依次取出rs中的每条记录,输出到表格中。 2.7.6 contact_in_term.asp页面 contact_in_term.asp页面用于显示所有将在本月底到期的合同。其主要流程为 ⑴连接数据库 ⑵取出表contact的所有记录,将结果放到记录集rs中 ⑶依次遍历rs中的每条记录,对记录的到期时间进行判断,如果到期时间的年份、月份和当前时间的年份、月份相同,则将记录输出到表格中。 2.7.7 contact_rent_list.asp页面 contact_rent_list.asp页面用于显示某个合同的租金交纳情况。其主要流程为: ⑴连接数据库 ⑵根据request对象传入的contact_number表单元素构造查询语句,以查询该合同相关的所有租金记录 ⑶执行查询语句,并将结果放到记录集rs中 ⑷依次遍历rs中的每条记录,将结果显示到表格中。 2.8 租金管理模块 租金管理模块主要对房屋的租金交纳情况进行浏览和管理。分为租金浏览和租金交纳两个部分,详述如下。 2.8.1 rent_list.asp页面 rent_list.asp页面用于显示所有的租金记录。主要流程是: ⑴连接数据库 ⑵查询表rent中的所有记录,将结果放到结果集rs中; ⑶依次遍历rs中的每条记录,将记录的属性值输出到表格中的对应位置 ⑷为每条交纳状态为“否”的记录增加一个”交纳”的链接,目标页面地址为 rent_deliver.asp;将记录编号作为查询字符串。 2.8.2 rent_deliver.asp页面 rent_deliver.asp页面用于实现租金交纳的功能,实现机制如下: ⑴连接数据库 ⑵根据传入的记录编号设置更新语句,将该记录的交纳状态设为“是”,并自动更新实际交纳时间。 ⑶ 执行更新语句; 2.9 留言管理模块 留言管理模块包括用户的留言录入和管理的留言浏览两个部分。详述如下: 2.9.1 message_board.asp页面 message_board.asp页面实现了用户的留言板功能。其页面设计如所示。 表 2-9 contact_search.asp页面的主要元素 在提交之前应进行检查,保证留言内容和联系方式以及姓名的内容不为空。 2.9.2 message_list.asp页面 message_list.asp页面由管理员使用,作用是查看所有用户的留言。其主要流程是: ⑴连接数据库 ⑵构造记录集rs ⑶执行查询语句取得表message的所有记录,将结果放到rs中 ⑷依次取出rs中的每条记录,输出到表格中。 2.10 统计模块 统计模块用于对本月租金、到期合同、履约金和当前空闲房屋等信息进行统计。为减少页面数量,将输出集成到一个页面文件count_info.asp中。在输出之前要执行相应的查询语句以取得统计信息: ⑴查询本月租金的流程为: ①设置一个计数器sum,初值为0 ②依次遍历表rent中的每条记录,如果记录的月份数和年份数与当前时间的年份数、月份数相等且记录的交纳状态为是,则更新计数器的值,将当前记录的租金加到计数器中。 ⑵查询到期合同总数的流程为: ①设置一个计数器sum,初值为0 ②依次遍历表contact中的每条记录,如果记录的终止时间的月份数和年份数与当前时间的年份数、月份数相等且记录的交纳状态为是,则将计数器加1。 ⑶统计履约金的流程比较简单,执行下面的查询语句即可: select sum(money) from rent where status = false ⑷统计空闲房屋数的sql语句为: select sum(*) from house where Isrenting = false。 在使用统计模块之前,应检查当前用户的权限等级,如果用户不是管理员,则不能查看本页面的内容。 3 测试和运行 3.1 搭建运行环境 3.1.1 IIS的安装与配置 本系统的开发环境为IIS5,其具体安装和配置步骤如下: ⑴如果系统中尚未安装IIS,则在“控制面板”中选择“添加/删除程序”,然后选择“添加/删除Windows组件”,选中其中的“Internet信息服务器(IIS)”,然后单击“下一步”,按照提示进行即可,如图 3-1所示。安装过程中可能需要某些安装文件,插入windows的安装光盘即可。 图 3-1 安装IIS ⑵在服务器上建立house文件夹,将所有项目文件都拷贝到此目录中。 ⑶在IIS管理器中新建一个Web站点,如图 3-2所示。 图 3-2 新建Web站点 ⑷在弹出的提示中,依次将站点的说明设为”House”,主目录为刚才建立的house目录,权限选择“脚本”,最后点“完成”即可。 3.1.2 数据库服务器的安装与配置 本系统的数据库服务器采用SQL Server 2000企业版。安装步骤从略,其配置过程如下: ⑴运行SQL Server的企业管理器 ⑵选择“数据库”节点,在右键菜单中选择“新建数据库”,如图 3-3所示 图 3-3 “新建数据库”菜单 35 ⑶数据库名为house.然后点确定。如图 3-4所示。 图 3-4 建立数据库 ⑷在数据库中建立相应的表,表的结构见1.3.3小节中的内容。 ⑸在“控制面板”的“管理工具”中选择“odbc数据源”,选择“系统dsn”标签,单击右边的“添加”按钮,如图 3-5所示。 36 图 3-5 添加系统数据源 ⑹在驱动程序中选择”SQL Server”,然后单击“下一步”。 ⑺设置数据源名称为“house”,服务器选择“local”,如图 3-6所示,然后单击“下一步”。 ⑻验证方式为NT验证,并去掉“连接SQL Server”的选中状态,如图 3-7所示 ⑼下面的步骤均不做改动,单击下一步即可。 ⑽最后单击”测试数据源“按钮,如果提示连接成功,就说明已配置正确。如、所示。 37 图 3-6 设置数据源名称 图 3-7 设置验证方式 38 图 3-8 测试数据源连接 图 3-9 连接测试结果 39 3.2 实际运行效果 3.2.1 网站主页 在浏览器的地址栏中输入网站地址如:http://192.168.1.42,效果如图 3-10所示 图 3-10 网站主页 3.2.2 用户注册 单击主页中的”用户注册”,此时出现图 3-11。 图 3-11 注册新用户 在里面输入新用户信息,然后单击“注册”按钮,效果分别如图 3-12、图 3-13所示。 图 3-12 填写用户信息 图 3-13 单击”注册”后的画面 再进入后台数据查看,可以看到记录已经被添加。 3.2.3 房源查询 单击主页中的“房源查询”,然后输入查询信息,可得到图 3-14、图 3-15的结果。 图 3-14 输入房源查询条件 图 3-15 房源查询结果 3.2.4 管理员登录 在地址栏输入admin_login.asp的页面地址,然后输入正确的管理员名称和密码,可以进入管理员操作页面admin_index.asp,分别如图 3-16、图 3-17所示。 图 3-16 管理员登录 图 3-17 管理员操作台 3.2.5 房源录入 在管理员操作台中单击“增加房源”,输入新房源信息,然后单击房源列表,结 果分别如图 3-18 、图 3-19 所示。 图 3-18 录入新房源信息 图 3-19 增加新房源之后的房源列表 3.2.6 合同录入 在管理员操作台中单击“新增合同”,输入新合同信息,然后单击“合同浏览”,结果分别如图 3-20、所示。 图 3-20 签订新合同 图 3-21 查看所有合同 3.2.7 合同查询 在管理员操作平台中单击“合同查询”,然后选择查询方式,输入查询数据,单击右边的“查询”按钮,结果分别如图 3-22、图 3-23 所示。 图 3-22 “合同查询“页面 图 3-23 显示“张三”签订的所有合同 3.2.8 到期合同查看 假设当前时间为2009年12月,那么单击”到期提醒”的结果如所示 图 3-24 查看本月到期的合同 |