资源描述
第 31 页 共 31页
房屋租赁管理系统设计
目 录
摘 要 2
Abstract 2
一 前言 3
1选题背景 3
2工具选择 3
二 系统总体设计 4
1体系结构 4
2功能结构设计 4
3系统数据库设计 5
4窗体结构 6
三 各模块设计 7
1数据控件模块 7
2用户登录模块 7
3主窗体设计 9
4房产管理模块设计 10
5合同管理模块设计 12
6 租金管理模块设计 21
7信息统计模块设计 24
8系统维护模块设计 26
四 经验总结 29
1开发步骤 29
2开发心得 29
致谢 30
参考文献 30
房屋租赁管理系统设计
摘 要
Delphi是一个极为优秀的快速开发工具,在开发数据库方面的功能极为强大。
房屋租赁管理系统就是在delphi平台下开发的。
本文共六个小节,二、三小节是主要内容,主要介绍了房屋租赁管理系统软件的开发过程:系统总体设计和各模块详细设计。详细介绍了系统的总体结构,各个模块的功能、流程、实现、及其所用到的主要控件和函数。其中对应一些简单的流程限于篇幅没有给出,对于重要的组件和函数作了详细介绍。
Abstract
Delphi is very outstanding and fast in the development software, and it's extremely strong and big in the development database , The Manage system of leasing houses is developed in under delphi.
This text is totally made of six parts, The second and third parts is main parts ,they primarily introduce the development process of the system software of the Manage system of leasing houses: Total design of the system and the detail design of each mold. the total construction、 using of each mold、process、realizing、main component and main function are mainly introduced. Some simple processes are not introduced because the limit of the text. on the other hand we introduced mainly some important components and some important functions .
一 前言
1选题背景
伴随着计算机的发展,软件已经称为电脑用户不可缺少的一部分,并且应用也越来越广泛,不论时是大型软件还是小型的,在各行各业中都得到了广泛的应用。在房产方面,不论是从设计还是到管理,都用到了计算机,用到了软件,通过研究发现,在管理上小型的租赁管理软件非常的灵活,非常的实用,并且对一般的用户来说,不用花费太多的金钱自己去买大型的软件,鉴于此开发小型软件还是很实用的,所以此次课程设计选择了开发一个小型软件:房屋租赁管理系统。
2工具选择
软件的开发平台种类很多,但是在开发效率和功能方面Delphi具有很大的优势,Delphi本身因简单易学、功能强大、编译速度快而在众多的软件开发工具中脱颖而出。现在广为流传的一句话说:“真正的程序员用C,聪明的程序员用Delphi”,鉴于Delphi强大的功能,此软件的开发平台选择了Delphi。
二 系统总体设计
1体系结构
房屋租赁管理系统采用C/S结构,前台采用Delphi开发平台,Delphi有着强大的界面开发平台,其开发主要应用了窗体与组件。在Windows环境中,人机交换主要在一些窗体和对话框中进行的,在Delphi中,窗体指的是窗口和对话框,进行可视化设计一般就是从窗体开始在窗体中完成的。
房屋租赁管理系统的后台应用了Delphi中的Database Desktop; Database Desktop(数据库桌面)可以创建、查看和修改数据表的结构,它为用户开发简单的数据库应用程序提供了方便,它在创建、修改、联结方面非常的简单。它可以嵌入Sql查询语句,从而查询非常的简单。
此次程序的开发中应用了BDE组件,将前后台联结到一起。BDE 即Borland Database Engine的缩写。BDE Administrator,它是数据库引擎管理工具。BDE组件和数据访问组件使数据库应用程序和数据库之间建立了联系,同时数据库应用程序还需要将这种联系提供给用户,让用户也能浏览和运算数据库,这就是数据库应用程序的用户接口。数据控制组件主要用于显示和编辑数据库表中的数据,因而也称为数据浏览组件,它为编程人员设计用户接口提供了极大的方便。
2功能结构设计
房屋租赁管理系统是一个关于房屋及其出租业务的管理信息系统,包括用户登录、房屋管理、合同管理、租金管理、统计和系统维护几个功能模块,其结构图如下
房屋租赁管理系统
用户登录模块
合同信息管理
房产管理模块
合同管理模块
租金管理模块
统计模块
系统维护模块
房产信息管理
租金查询
租金收取
合同信息查询
到期合同管理
本月租金统计
数据
恢复
履约金统计
到期合同
空闲房屋统计
数据备份
密码管理
各主要模块功能如下:
(1) 用户登录模块:用来确认用户输入的密码,以判断用户是否合法,合法用户才能进入系统。
(2) 房产管理模块:该模块用来更新和维护系统中的房产信息,主要实现对房产数据包括浏览、修改、插入和删除等的操作。
(3) 合同管理模块:合同即房屋租赁合同。该模块包括合同信息管理、到期合同处理和合同信息查询几个功能。其中合同信息管理具有产生新的租赁合同以及对已有合同数据的浏览等操作。其中合同信息管理具有自动警告到期以及提示其租金交情况的功能:合同信息查询能提供多种方式的组合信息查询。
(4) 租金管理模块:租金收取和租金查询。
(5) 统计模块:对本月租金、到期合同、履约金和当前空闲房屋的信息统计。
(6) 系统维护模块:数据备份、数据恢复、密码管理。
3系统数据库设计
对于一个大型的复杂的数据库系统,为描述和清理数据之间的关系采用E-R图,在此基础上通过归化的到关系模型,而房屋租赁系统较为简单,没有采用E-R图,其包含的实体、属性和关系如下:
房产:房屋号、坐落位置、面积、状态、租赁合同号
合同:合同号、租期、起租日期、到期日期、付款期限、月租金、租金总额、履约金、乙方单位、联系人、电话、手机、BB、备注。
租金:合同号、应收日期、应收金额、实收日期、实收金额、发票号
此系统具有三个数据表:房产数据表、合同数据表、租金数据表。
(1)房产数据表结构: house.dbf
Field name Type size dec
fangwuhao C 6
zuoluo C 30
mianji N 8 2
zhuangtai C 4
hetonghao C 6
(2)合同数据表结构: contract.dbf
Field name Type size dec
hetonghao N 6
zuqi N 2
qizuriqi C 8
daoqiriqi C 8
fukuanqixian C 4
yuezujin N 12 2
zujinzonge N 12 2
lvyuejin N 12 2
yijfang C 30
lianxiren C 8
dianhua C 20
shouji C 20
BB C 70
beizhu C 1
(3):租金数据表结构: rent.dbf
field type size dec
hetonghao N 6 0
yingshouriqi C 8
shishoujin N 12 2
shishouriqi C 8
shishoujin N 12 2
fapiaohao C 7
biaozhi C 1
房屋租赁管理工程
用户登录窗体
房产管理窗体
合同管理窗体
租金管理窗体
信息统计
系统维护窗体
主窗体
4窗体结构
三 各模块设计
1数据控件模块
在房屋租赁系统中有三个数据表:房产数据表house(house.dbf)、合同数据表contract(contract.dbf)和租金数据rent(rent.dbf)。在房产管理模块、合同管理和租金管理模块中用到了这三个表,为了使用方便,我们将要用到的数据表组件和数据源组件集中放在一个数据模块上,这样可以通过数据模块来统一管理这些数据组件。使用了数据模块后,访问位于其上的组件的组件的方法:数据模块名.组件对象。
数据库组件对象主要属性设置
组件对象名 属性 属性值
Hdatasource dataset Ftable
Rdatasource dataset Rtable
Cdatasource dataset Ctable
Htable databasename fangwugl
Tablename house.dbf
Rtable databasename fangwugl
Tablename rent.dbf
Ctable databasename fangwugl
Tablename contract.dbf
注:fangwugl是虚拟路径名
2用户登录模块
用户登录窗体运行是让用户输入密码,以确定用户是否合法,能否进入系统。其界面如下:
注:loginform 窗体组件的bordericons属性的子项bisystemmenu、biminimize和bimaxinmize均为false。这是为了让该窗体在运行时不显示系统图标,避免用户自行关闭该窗体,从而跳过用户权限检查。如图:
(1)用户登录此时最多为三次,如果密码仍不正确系统将关闭,为此在登录窗体初始化事件定义一变量, 程 序 如下:
procedure Tloginform.FormCreate(Sender: TObject);
begin
entertime:=0;
end;
(2)”确认按钮”流程如下
关闭窗口
程序结束
重新输入
变量设置
打开pwfile
读取密码到possword中
给出提示信息
输入次数超过三次
密码与原密码相同
外部文件config与变量pwfile 相连
yes
no
yes
no
(3)取消按钮功能实现代码如下:
procedure Tloginform.BitBtn2Click(Sender: TObject);
begin
close;
application.terminate;
3主窗体设计
界面如下:
主要实现功能:用户成功登录后,引导用户进入各模块。
主窗体是系统的控制中心,应用程序在运行时将首先显示主窗体。用户登录窗体的在
主窗体被激活前显示,以起到合法性检查的作用。
A定义变量 var havelogin :boolean;检查是否已经登录。
B:主窗体创建事件给havelogin付初值
procedure Tmainform.FormCreate(Sender: TObject);
begin
havelogin:=false;
end;
C:onactive事件的处理过程中显示用户登录窗体,程序代码如下
procedure Tmainform.FormActivate(Sender: TObject);
begin
if not havelogin then loginform.show;
end;
4房产管理模块设计
功能:房产管理窗体用来更新和维护系统中房产信息,主要实现对房产数据,包括浏览、修改、插入和删除等的操作。
(1)房产信息管理界面如下:
Tdbnavigator
Maindbgrid
房产信息管理中使用了许多具有数据感知(Data—Aware)功能的数据控制组件,如TDBEdit组件,他们通过数据源组件和数据表相连,能自动显示数据表中当前记录对应字段的数据值。数据导航组件TDBNzvigator用于实现数据导航和插入、删除等操作,通过它不需要变成就可以实现对数据库的常规操作,这是Delphi的特点和优势。
此程序简单,代码如下:
procedure Thouseform.BitBtn2Click(Sender: TObject);
begin
maindbgrid.readonly:=false;//设置maimdbgrid内容可被修改
end;
procedure Thouseform.FormShow(Sender: TObject);
begin
with datacontrls.hTable do
begin
open; //打开房屋数据表
end;
end;
5合同管理模块设计
功能:合同管理模块包括:合同信息管理、到期合同处理、合同信息查询和合同总表浏览
(1)合同信息管理
choicedhousecodede
choicehouse
emptuhousecode
在合同信息管理中使用了数据导航器组件TDBNavigator来浏览、添加、和删除合同数据表中的合同信息。
A:合同数据浏览
浏览合同数据是通过单击数据导航组件对象Dbnavigator的first、prior、next和last 四个按钮实现的,他们可以改变指向当前记录的指针。与数据库中字段相应的数据感知组件所显示的数据随之而变。
Prior
Next
First
Last
tlistbox组件对象choicehousecode用来显示当前合同所租用房屋的房屋号,由于一份合同可以租用多个房屋,即在一份合同中会包含多个房屋号,因而在阿合同数据表中就没有存放所租用房屋的信息,这些信息存放在房产数据表中,即房产数据表中的合同号字段存放租用租用该房屋的合同号,在浏览合同数据时,当前合同所租用房屋的房屋号需自己查讯得到。自定义过程addtochoicedhouse用于将当前合同所租用房屋的房屋号在choicehoudecode列表框中显示,程序流程如下:
choicedhousecode.clear
datacontrls.htable.open
datacontrls.HTable.First
not datacontrls.HTable.Eof ?
hetonghao=dbedit1.Text
choicedhousecode.Items.append(fangwuhao)
End
Yes
Yes
B:增加新合同:增加一份新的房屋租赁合同是通过单击数据导航器组件对象Dbnavigator的insert按钮实现的。单击insert按钮后将在和合同数据表的末尾产生一个新的合同记录,用户可在与该记录的各字段相连的数据控制组件对象中填入新合同的有关内容。
Insert
Post
Cancel
Delete
添加一份新的合同分以下步骤;
设置进入新合同状态addrecord=true
自动填入新合同号dbdit1=newrecordcontractno
自动填入起租日期dbedit5=caltodaydate
Choicehousecode.clear
Not eof ?
With htable do
状态<>’’
Emptyhousecode.items.append(房屋号)
Dbnavigator1.visiblebuttons:=[nbpost,nbcancel]
Yes
Yes
各步骤简介如下:
:设置进入新合同状态,var addrecord :Boolean;
初始化:procedure Tcontractform.FormShow(Sender: TObject);
begin
addrecord:=false;
end
用户单击数据导航器组件对象dbnavigator1的insert按钮,进入增加新合同状态:
addrecord:=true;
:自动生产新的合同号,在合同管理窗体的Onshow事件程序中算出当前新合同的合同号。此过程有单独定义newrecordcontractno,具体见源程序。
:自动填入起租日期。此过程有单独定义caltodaydate,具体见源程序。
:自动提示当前处于空闲状态的房屋号。
:关闭数据导航器组件对象Dbnavigator中除确认(post)和取消(cancel)按钮外的其他按钮。因为一份合同要么被确认要么被取消,进入增加新合同状态后只能通过确认或取消后才能离开,此时须关闭数据导航器组件对象Dbnavigator除(post)和取消(cancel)按钮外的其他按钮,以防止用户单击其他按钮中断新合同的生成。
C:确认新合同:在增加新合同中,完成新合同的填写后单击数据导航器组件对象Dbnavigator中post按钮表示确认此分新合同。此时须完成以下步骤:
:检查新合同中必填写的项是否已经填写完。流程如下:
Var success:boolean;
Success:=true
存在某必填项空?
Success=false
显示提示信息
Yes
:在房产数据表中修改所租用房屋信息。流程如下:
Choicedhousecode.item.count>0 and dbedit4,text<>’’
With thuose do
For I:=0 to choicedhousecode.item.count-1 do
Locate(‘房屋号’,choicedhousecode.items[i],[])
edit
合同号=dbedit1.text
状态=出租
Post
yes
:在租金数据表中生产按照此份新合同应交租金的记录项。
新合同在确认时,需要在租金表中自动增加按照合同内容客户应交租金的金额和时间的记录项,记录项条数为新合同中按付款期限应交租金的次数。流程如下:
Times,per,year,month,i:integer;(times 租期,per 付款期限)
Startime ,day,temps:string; sum :double
Temps:=dbcombobox3.text 分别为“按月”“按季”“按半年”
“按年”则per依次赋值“1”“3”“6”“12”
Starttime:=起租日期;
Year=起租年份、month=起租月份、day=起租日分
初始化sum=0
在renttable中填入应收日期,应收金额
For I:=0 to (times div per)-1 do
Year,month,day,重新赋值
在合同表中填入到期日期和租金总额
:数据导航器组件对象Dbnavigator恢复原样
:结束增加新合同状态。
D:取消新合同 进入增加新合同状态后,单击数据导航器组件对象dbnavigator的cancel按钮表示放弃此分新合同。此时要结束增加新合同状态将数据导航器组件对象Dbnavigtor恢复原样。程序如下:if addrecord then
Begin
Addrecord:=false;
Dbnavigator1.visiblebuttons:=[nbfirst,nbprior,nbnext,nblase,nbinsert,nbdelete,nbpost,nbcancel];
End;
E:删除合同
删除是通过单击数据导航器组件对象Dbnavigator的Delete按钮实现的。合同被删除后,该合同在数据库中的数据将全部被删除。流程如下:
For i:=0 to choicedhousecode.items.count-1 do
Locate(‘编号’),choicedhousecode,items[i],[])
edit
状态和合同号置空
post
(2)到期合同处理
到期合同处理主要有两个工能:到期合同处理(正常终止合同)和异常终止合同处理。
注释:(1)到期合同:指合同的到期日期已到。判断到期合同的方法是:一是否是有效合同,二是是否已到期。
(2)异常终止是指虽没到期但由于某中原因合同不能继续执行,需要被终止。
界面如下:
Tablesheet2
主要步骤:
A:初始化合同数据,即将符合要求的合同号列入已到期合同combobox和将所有有效合同列入异常停止合同combobox中。此事件在tablesheet2的onshow事件中实现。
今日日期赋值给today
With ctable do
While not eof
If “到期日期”=’’and “标志”=”2”捡起加入到异常终止合同框中
If “到期日期”=’’and “标志”=”2”and “到期日期”<today 将其加入到 已到期合同框中
B:选择需要处理的合同号
:计算到期合同的组租金交数据
应付租金总额就是该合同中签订的租金总额,就是合同数据表中该合同的租金总额字段的值:实付租金总额为租金数据表中该合同所以纪录项实付金额的累加值。
Sum=0
将用户选中的合同号赋值给contractnum
定位:datacontrls.ctable.locate(‘合同号’,contractnum, [])
将‘租金总额‘赋值给应收租金额
累加每次所付的“实收金额“赋值给实收租金总额
C:计算异常终止合同的租金交情况;此流程与上述类似;
D:终止合同,此流流程简单,简要介绍如下:
:用户浏览了所须终止的合同交情况后,如果决定马上终止该合同,就单击终止按钮。为了作为历史数据备案,合同终止后我们并不将其从数据库中删除,只是将其状态改变为无效。终止合同的操作能容容如下:
a:将合同状态改为无效,即合同表中该合同的标志子段的值改为2。
b: 释放改合同租用的所有房屋,即在房产数据表中将该合同租用房屋的状态字段改为0,合同号字段改为空。同时为了作为历史数据保存,将该合同的房屋号放在合同数据表中的备注字段中。
c:在租金数据表中将该合同所有租金交情况记录改为无效,即标志字段的值改为2。
(3)合同信息查询
:合同信息查讯的主界面如下
应用按钮以Radio按钮方式提供了三种查询:按合同号查询、按组主名查询和按租用单位查询。
A:“按合同号查询”事件:将所有有效的合同加入到合同号combobox中,标志num=1
Num=1:用以标注第一各按钮
Mlabel.caption:=’合同号’:提示信息
With ctable do
将所有的合同号加入到combobox中
流程如下:
B:“按租主名查询”事件: 将所有有效合同的租主加入到合同号combobox中,标志num=2。流程与上擂同。
C:“按租用单位查询”事件:将所有的有效合同的乙方单位加入到combobox中,标志num=3
流程与上擂同。
D:“查询”事件:
1:按合同号查询
2按租主名查询
3按租用单位查询
Case num
(4)合同总表浏览
Maindbgrid
其设置很简单只需对maindbgrid作属性设置即可。
6 租金管理模块设计
租金管理窗体包括租金收取和租金查询两个功能。
(1)租金收取的界面如下
contractnum
Mustdate
A:初始化合同数据:应用程序进入租金收取界面时自动填入今日日期,并将所有有效的合同号自动填入到contractnum中以供用户选择,这个事件发生在租金收取界面的Onshow事件中。
流程如下:
Contractnum.clear
填入今日日期
With datacontrls do
Yes:标志<>2?
not eof ?
Yes:将此合同号加入到contractnum中
初始化各感知组件不可用
B:选中合同号租金收取时,首先在Contractnum组合框的下拉列表中选中对应的合同号,应用程序将租金数据表中该合同的所有记录项的应收日期字段的值自动加入到Mustdate组合框中,供用户房屋租用者此次交租金的应收日期。这时在Contractnum组合框的onchange事件中实现的。此程序简单,不作概述
C:选中应收日期
用户在mustdate组合框中选中房屋租用者此次交租金的应收日期后,应用程序在租金数据表中定位这条记录,dbedit2中将显示应收金额字段的值,将金日日期填在实收日期项dbedit1中,这是在mustdate组合框的onchange事件中实现的。此程序简单,不作概述。
此外令各感知组件可用。
D:填入实收金额
用户在实收金额dbedit3中填入房屋租用者此次实际交得租金额。由于dbedit3是对应用租金数据表得实收金额字段得数据感知组件,它会自动将填入得值加入到数据库中。
(2)按合同号租金查询
按合同号租金查询页面得界面如下图:
contactCode
A;按合同号租金查询页面的onshow件的能是将租金数据表所获有记录得合同号字段得值以不重复得形式填入到contractcode组合框中以供用户选择。流程如下:
Temp,backup:string
Temp=’’;
With rtable do
Not eof ?
Back<>temp??
Backup=合同号
Contractcode.item.append(backup)
Temp=backup
Yes
Yes
用户在contractcode组合框的下拉列表中选中所要查询的合同号后,该合同的所有租金收取记录将在dbgrid中显示。
(3)按发票号租金查询:
按发票号租金查询与按合同号租金查询类似,只要少作改动即可。
7信息统计模块设计
(1)信息统计窗体对本月租金、已到期合同、履约金和空闲房屋进行统计其窗体解如下:
主要步骤如下
得到今日日期date(year+month)
按钮选择
选中本月租金信息统计:应用sql查询where 应收日期l
展开阅读全文