实验报告
实验名称 房屋租赁管理系统开发
实验项目 使用Visual FoxPro数据库和程序设计知识设计应用系统
小组组长 刘立同 08级工程管理080122008017
同组组员 邢文秀 09海洋经济学 130132009022
赵丹 08工程管理 080122008036
赵红 08法学 110222008123
陈国富 08工程管理 080122008001
丁兆振 08工程管理 080122008004
指导老师 刘兰芳
报告日期 2010年6月24日星期四
报告成绩
1、系统概述
1.1任务要求
1.1.1设计题目
房屋租售管理系统
1.1.2设计目的
通过使用visual foxpro 6.0进行程序的编制,实现对房屋租售的计算机管理
1.1.3设计要求
①具有信息录入功能
·房屋信息录入的内容是:房屋编号、规格、地址、应收押金、月租金、过期扣款等内容
·客户信息录入的内容是:客户姓名、身份证号、联系方式、通讯地址、租房时间、交纳租金情况等
·注:为确保记录的完整性,其中关键字段内容必须全部入②具有信息存储功能
·能够存储房屋信息、客户信息、租赁与归还等重要信息
③具有浏览功能
·能够浏览房屋及客户的详细信息
·能够浏览每种档次房屋的收费情况
·能够浏览每位客户目前的租赁房屋情况
④具有查询功能
·能够按客户的编号或名称查询客户有关信息
·能够按房屋编号查询房屋有关信息
·能够按房屋规格查询房屋有关信息
⑤具有统计功能
·能够统计月/年收入情况
·能够统计并显示客户名单
·能够统计并显示租赁过期名单
⑥具有报表功能
·能够将各种统计结果通过打印机输出
·能够利用报表制作租赁证 并通过打印机输出
⑦具有数据维护功能
对已录入的各项数据可以由专门 人员进行删除和修改
1.2可行性分析
根据任务要求分析,此设计题目完全可以通过Vsual FoxPro6.0软件作为开发工具来制作完成,利用Visual FoxPro6.0软件制作一个数据库的应用管理系统,这个系统可以很好的实现任务要求中所提的各项功能指示。
该系统可以使目前的房屋租赁管理工作大为改观。目前,租赁管理工作人员在租赁房屋时,要经历登记、查找、统计等枯燥的手续,既繁琐又费时,许多记录不便长期保存。本设计将改变这种局面,利用计算机最为友好、最为方便的windows界面进入系统,并可以让管理员轻松自如的通过鼠标与键盘的简单敲击,来完成浏览、查询、租赁\停租、登记、信息的增删改及数据的统计等工作,真正实现管理自动化,大大提高工作效率。
2、系统设计
2.1设计思想
模块化设计
根据系统模块化设计方法,把整个系统划分为若干功能模块,某些模块有可以划分为多个子模块,某些子模块又可以划分为多个二级子模块,经过层层分解后,最后的子模块的功能便能十分明确和简单了。这样做,不仅展现了一个应用软件系统的整机性和层次性,而且通过屏幕对每个应用模块明确的提示,在这些提示下,用户可方便的进入系统的每一层进行操作,可以非常方便的使用这一数据库应用系统。
2.2系统总框架
本系统功能较强大,设计时采用了表单、程序、报表等多种visual foxpro 6.0所给的方法和手段,生成了数据库、库表、报表、程序及其他文件。同时,还使用了大量的图形和部分图标文件,使得该系统图文并茂,通俗易懂,便于操作。系统主要分为五大模块,这些模块又由若干子模块及二级子模块组成,最终形成一个结构紧凑、简洁,功能明确、完整的房屋租赁系统。
下图为系统结构总框架图。
2.3 主要界面
根据总框架图,本系统首先设计了开始界面(如图),在开始界面操作人员经过系统合法验证后,才能真正进入系统工作。系统的五大模块是通过主窗口 表单的分页选择来实现,操作人员通过选择不同的选项卡进入不同的模块,再通过你选项卡中的不同按钮进入到下一级子模块中,这些子模块又由不同的表单体现出来,这样经过一层或几层表单的调用,最终必然达到预期的目的。
1、开始界面
2、主窗口第一选项卡界面
3、主窗口第二选项卡界面
4、主窗口第三选项卡界面
5、主窗口第四选项卡界面
6、主窗口第五选项卡界面
3、数据库设计
3.1 数据库结构分析
3.1 .1:本系统设计一个数据库,名为:房屋租赁管理系统.dbc,在这个数据库中主要建立以下4个表:
①客户.dbf:存放客户有关信息
②房屋.dbf:存放房屋有关信息
③租赁.dbf:存放租赁与退租等有关信息
④密码.Dbf:存放密码等信息
在本数据库中,除以上4个主要表之外,还有一些临时表,它们的作用主要是存储一些临时使用的记录,这些记录是在程序运行过程中必不可少的内容,一旦程序运行完毕即可将其清除。
3.1.2 表的结构
客户.dbf
房屋.Dbf:
租赁.Dbf
密码.Dbf
4、界面设计
4.1
4.1.1设置表单过程代码
表单启动初始化(Init)过程代码:
set safe off && 设置重复文件覆盖时不显示提示信息
set date to ansi && 设置日期格式
set talk off && 关闭屏幕显示
public t && 设置公共变量t,并设其初始值为0
t=0 && 设置初始值为0
表单激化触发(Activate)过程代码:
if t=1
thisform.release && 释放本表单
do form 主窗口.scx &&打开“主窗口”表单
4.1.2 设置命令按钮组各按钮的过程代码:
“进入系统”按钮单击触发(click)过程代码: do form 密码.scx && 打开“密码”表单
“退出系统”按钮单击触发(click)过程代码:thisform.release && 释放此表单
4.2 密码界面
4.2.1 设计思路
系统在运行开始界面表单的时候,单击“进入系统”按钮后,系统首先提供的是输入密码界面。由操作人员输入密码后,系统进行判定。如果密码输入有误,系统将有“出错信息”提示,等待操作人员重新输入密码,直至输入正确为止。
打开“密码”表单的同时打开数据库中事先已建好的“密码”表,通过代码的执行,将文本框中输入的密码与“密码”表中的密码进行对照。
(1)表单启动调用(Load)过程代码:
sele 1
use 密码 &&在1号工作区打开数据库中的“密码表”
(2)表单启动,初始化(Init)过程代码:
thisform.text1.setfocus() &&光标聚集在密码输入框中
thisform.text1.passwordchar=”*” &&密码输入框中显示的字符用“*”加密
4.2.2 设置选项按钮组各按钮的过程代码:
(1)“确认”按钮click过程代码:
public m.密码 && 设置公共变量m.密码
sele 1 && 进入1号工作区
set exac on && 设置精密查询
loca for 密码=alltrim(thisform.text1.value)
&& 在已打开的密码表中查找密码字段与文本框填写内容相符合的记录
if found ()
m.密码=密码
t=1 && 公共变量t=1(此变量将传回开始界面表单,完成关闭当前所有表单,打开下一个表单工作)
thisform.release && 释放表单
else
thisform.text1.passwordchar=” ” && 将文本框passwordchar属性值改为“无”
thisform.text1.value=”密码错误”
a=inkey (1) && 显示1秒钟
thisform.text1.value=” ” &&将文本框清空
thisform.optiongroup1.value=0 &&“确认”按钮弹出来
thisform.text1.setfocus ( )
thisform.text1.passwordchar=”*”
t=1
endif
(2)“返回”按钮click过程代码:
thisform.release
4.3 主窗口界面
4.3.1 设计思路
通过使用一个分多个选项卡的页面,可以将系统的五大功模块非常清晰地展现出来,每个选项卡对应着一个功能模块,在每一个选项卡中添加多个命令按钮或命令/选项按钮组,以便进入功能模块的每个子模块。
4.3.2 准备工作
(1)表单的过程代码:
在表单中编写了启动调用和启动初始化两个过程代码,下面主要说明一下启动初始化过程代码:
set safe off &&设置重名文件覆盖不显示提示信息
set talk off &&关闭屏幕显示
(2)制作结束操作按钮
编写该命令按钮click过程代码
clear memory &&清空内存
thisform.release &&释放本表单
clear events &&清空所有事件
close all &&关闭所有表
通过点击这个命令按钮,将结束对系统的任何操作,完全退出该系统。
4.4数据的浏览
以“浏览客户记录”表单为例,说明实现此设计的步骤和方法。
4.4.1 准备工作
(1)表单的组成:“浏览客户记录”表单主要是由浏览区域构成
(2)表单的数据环境:选中表单单击鼠标右键,在快捷菜单中选中“数据环境”项,在打开的数据环境设计器中,再单击鼠标右键,在快捷菜单中选中“添加”项,通过“添加表或视图”对话框将“客户”表添加到数据环境中。
(3)表单过程代码:
1、表单启动调用(Load)过程代码:
sele 1
use 客户
2、表单启动初始化(Init)过程代码:
public.m.no1 &&设置公共变量后续查询工作而设置
m.no1=1
3、表单激活触发(Activate)过程代码:
go k &&指针指向k记录,k是查询后的返回值
thisform.refresh
4.4.2 建造浏览区域
(1)制作显示区域
打开本表单的数据环境,在数据环境中“客户”表的字段处按住鼠标左键拖进表单
(2)命令按钮组
1、“首行”按钮click过程代码:
if recount( ) >0 &&如果“客户”表记录大于0
go top
thisform.refresh
thisform.commandgroup1.command1.enabled=.f.
thisform.commandgroup2.command1.enabled=.f.
thisform.commandgroup3.command1.enabled=.t.
thisform.commandgroup4.command1.enabled=.t
endif
2、“上行”按钮click过程代码:
if recount ( )>0
skip -1
if bof ( )=.t.
go top
endif
thisform.refresh
if recount()=1
thisform.commandgroup1.command1.enabled=.f.
thisform.commandgroup1.command2.enabled=.f.
thisform.commandgroup1.command3.enabled=.t.
thisform.commandgroup1.command4.enabled=.t
else
thisform.commandgroup1.command1.enabled=.t
thisform.commandgroup1.command2.enabled=.t
thisform.commandgroup1.command3.enabled=.t
thisform.commandgroup1.command4.enabled=.t
endif
endif
3“下行”按钮click过程代码
t=1
if recount()>0
skip
if eof()
go bottom
t=recn()
endif
thisform.refresh
if recno()=t
thisform.commandgroup1.command1.enabled=.t
thisform.commandgroup1.command2.enabled=.t
thisform.commandgroup1.command3.enabled=.f
thisform.commandgroup1.command4.enabled=.f
else
thisform.commandgroup1.command1.enabled=.t
thisform.commandgroup1.command2.enabled=.t
thisform.commandgroup1.command3.enabled=.t
thisform.commandgroup1.command4.enabled=.t
endif
endif
4“末行”按钮click过程代码
If recount()>0
go bottom
thisform.refresh
thisform.commandgroup1.command1.enabled=.t
thisform.commandgroup1.command2.enabled=.t
thisform.commandgroup1.command3.enabled=.f
thisform.commandgroup1.command4.enabled=.f
endif
4.5 数据的查询
下面以客户信息查询为例
查询“确定”按钮click过程代码:
If thisform.optiongroup1.value=1
locate for alltrum(客户编号)=alltrim (thisform.text1.value)
if found()
m.no1=recno
thisform.release
else k=messagebox(“无此客户,请重新输入客户编号!”,0+48,“提示信息”)
if k=1
thisform.text1.setfocus
endif
endif
endif
4.6 房屋的租赁与退租
(1)在表单的数据环境中添加一个表:“租赁”表
(2)表单过程代码
1表单启动调用Load过程代码
close all
sele 1
use 租赁
repl预租月数with,退租with.f.
repl all 租赁with.t.for租赁日期<>{}
repl all 退租with.t.for退租日期<>{}
set clele on
clele for租赁日期and退租日期<>{}
thisform.refresh
go top
2表单启动初始化(init)过程代码
Publick gq
gq=0
set talk off
set date to ansi
set clele on
thisform.text1.value=k1
thisform.text2.value=0
thisform.text3.value=0
thisform.text4.value=0
set exac on
sele 1
if k1=space(6)or k1=””
set filt to
thisform.optiongroup1.value=1
thisform.text.value=space(6)
else
set filt to
gq=0
loca for 租赁日期<>{}and退租日期={}and租赁日期<date()and客户编号=alltrim(thisform.text1.value)
if found()
gq=1
endif
set filt to客户编号=alltrim(thisform.text1.value)and租赁日期={}
go top
thisform.grd租货.readonly=.t.
thisform.grd租货.column3.readonly=.f.
thisform.optiongroup1.value=4
thisform.optiongroup1.option5.enable=.t.
thisform.optiongroup1.option7.enable=.f.
endif
thisform.refresh
thisform.gra租赁.readonly=.t.
thisform.gra租赁.column3.readonly=.f.
thisform.label8.visible=.f.
thisform.lable9.visible=.f.
4.7 数据添加
以“给新客户注册”表单为例
①在表单制作前,利用UFP命令窗口输入命令,生成一个与客户表结构完全相同的临时表“khtemp”
②在表单的数据环境中加一个表“khtemp”
③表单启动调用load过程代码 表单初始化init过程代码
sele 1 thisform.command2.enable=.f.
set safe off thisform.command3.enable=.f.
use khtemp 表单激活触发active过程代码
zap if not empty (thisform.text客户姓名.Value)and not empty
sele 2 (thisform.text身份证号.value)and not empty (thisform.text
use 客户 联系方式.value )
thisform.command.enable=.t.
endif
④建造添加数据区域
此区域利用表单数据环境中的“khtemp”表生成。打开本表单的数据环境,在数据环境中“khtemp”表的字段外按住鼠标左键将其拖进表单,这就是需要建造的添加数据区域。
⑤写文本框的过程代码
·身份证号文本框有效值判断valid过程代码
if len(alltrim(this.value))<>15and len(alltrim(this.value))<>18
this.value=“身份证号错误“
a=inkey(1)
thisform.text身份证号.value=””
endif
·客户姓名 身份证号和联系方式三个文本框的变值触发(interactivechange )过程代码
if not empty (thisform.text客户姓名.Value)and not empty(thisform.text身份证号.value)and notempty (thisform.text联系方式.value )
thisform.command.enable=.t.
endif
·命令按钮代码
新用户注册click过程代码
thisform.command3.enable=.t.
thisform.command1.enable=.f.
thisform.text客户姓名.setfocus()
sele 2
k=recc()
sele 1
append blank
replace 客户编号 with right (“00000”+alltrim(str(k+1)),6)
thisform.reflesh
·保存click 过程代码
use in 1
sele 2
appe form khtemp
k=recc()
sele 1
use khtemp
set safe off
zap
appe blank
repl 客户编号 with right(“00000”+alltrim(str(k+1)),6)
thisform.refresh
thisform.command2.enable=.f. &&确定失效
thisform.command3.enable=.t. &&取消失效
·取消click 过程代码
k=thisform.text客户编号.value
dele
pack
appe blank
replace 客户编号 with k
thisform.reflesh
thisform.command2.enable=.f.
thisform.command.enable=.t.
4.8 数据统计
本系统有两部分统计内容
①汇总统计:主要是按月提供收入情况统计 2情况统计:列出客户名单求租赁过期人员名单
4.8..1 准备工作
(1)表单组成 表单主要有统计显示表格和统计打印按钮两部分组成
(2)在租赁表单数据环境中添加客户 表
(3)表单过程代码:启动调用load 过程代码
close all
sele 1
use 客户
set filt to 租赁
go top
4.8.2 制作统计显示表格
1利用数据环境中的客户表生成统计显示表格
2利用生成器选择需要显示的表字段
4.8.3 制作统计打印按钮
1根据数据库中的客户表,通过报表向导来完成租赁人员“zl“报表的制作
2打印按钮click过程代码
report form zl noconsole to printer
thisform.release
4.9 管理维护
本系统为管理人员设置了数据维护和系统维护两个部分。在数据维护中,主要设置了“修改客户数据库”和“修改房屋数据表”。在系统维护中主要设置了“修改个人密码”
下以“修改房屋数据表“为例
①在“修改房屋数据表“表单的数据环境中添加房屋表
②表单的过程代码
·表单启动调用代码
close all
sele 1
use 房屋
③制作修改内容显示表格
利用数据环境的“房屋”表生成修改内容显示表格。在数据环境中“房屋”的标题按住鼠标左键将其拖进表单,组成一个二维表方式多条显示表中记录内容的显示表格,如果要对“房屋”表中的内容进行修改,只需在此表格中操作即可。
设计经验及总结
首先,在设计之前一定要对所设计的系统有较为深刻的了解,对各种要求加以认真地分析,并给予分类,对分类进行功能模块化设计,画出系统流程图和结构图。这样在详细设计时可做到有条不紊地一步步地进行。
其次,要认真分析数据间的关系,想好要建多少表,表与表间的关系如何建立,画出实体间关系图。设计一开始就应建立自己的项目管理,在项目管理的基础上,在新建各种文件。如:数据库、数据库中的表、表单、报表及其他文件(包括图片及图标文件)。
第三,深入了解Visual FoxPro6.0中的命令、函数、属性、事件的特点。因为在程序设计过程中要大量地使用它们,如果使用得好,很复杂的功能将能很轻松地实现。
最后,在综合报告的实验与制作中,我组成员不仅对VFP有了更深层次的了解,还在合作过程中学会了相互学习、合作与信任。我们收获了成果也收获了朋友。这会对今后的学习与工作产生深远的影响。