房产信息管理.docx
《房产信息管理.docx》由会员分享,可在线阅读,更多相关《房产信息管理.docx(26页珍藏版)》请在冰豆网上搜索。
房产信息管理
目 录
1.设计内容1
2.概要设计5
3.详细设计6
4.程序源码15
5.程序运行与调试20
6.总结20
7.参考文献21
1.设计内容
房产信息管理:
可实现添加、浏览、修改、删除、查询的功能。
数据流图如图1-1:
用户
图1-1房产信息管理数据流图
数据字典:
名称:
房屋信息
别名:
描述:
要销售的房屋的基本信息
定义:
房屋信息=房号+地址+户型+房龄+楼层+面积+价格+类型
位置:
房屋信息库
名称:
顾客信息
别名:
描述:
要购买房屋的顾客的基本信息
定义:
顾客信息=身份证号+电话号码+性别+年龄+籍贯
位置:
顾客信息库
名称:
房屋数量
别名:
描述:
总的房屋一已售房屋数量
定义:
房屋数量=6{数字}6
位置:
房屋信息库
名称:
房产商信息
别名:
描述:
销售房屋的房产商的基本信息
定义:
房产商信息=姓名+性别+年龄+职称+电话号码
位置:
售货商品库
ER图:
(1)由概念设计模型得房产商ER图:
姓名
电话号码
(2)由概念模型设计得顾客ER图:
籍贯
性别
年龄
身份证号
电话号码
顾客
(3)由概念模型设计得房屋ER图:
价格
房号
面积
地址
房龄
户型
房屋
是否已售
类型
楼层
(4)由概念模型设计得总体ER图:
电话
购买
房号
地址
价格
户型
房屋
面积
楼层
协商
类型
房龄
电话
2.概要设计
为实现如何完成商品进销系统,首先将此系统规划为两个模块,进货系统与销售系统,两个模块仅存在数据间的耦合,而模块内部的各功能分别为了实现进货记录和销售记录,因而存在着功能上的内聚,所以该系统满足高内聚低耦合的要求,符合开发可行性。
进货系统主要完成记录进货信息,包括进货来源、货物名称、进货数量、进货单价、进货时间、总交易额、进货负责人、对方负责人。
将这些信息存贮到进货数据库中,并打印出来存放到商店档案中。
销售系统主要完成销售记录,包括货物名称、售出单价、售出数量、交易时间、交易总金额、进货负责人、买方负责人、获利合计,将此信息存入销售数据库中,并打印出放入商场档案中。
为消费者打印出消费清单,包括出售货物名称、出售单价、数量、时间、销售负责人。
存储系统主要完成货物安置位置和货物数量库存记录,当货物进入仓库时记录下所在仓库位子,和现有改货的数量;当商品销售或,记录下当前的新的库存量。
系统层次图为:
图2-1系统层次图
3.详细设计
在这一部分要求对程序功能进行细化,确定算法的主要流程(如程序流程图),再进行编程(Coding)。
在编程过程中注意程序结构的清晰性,避免出现很多明显的程序逻辑错误和语法错误,提高后面程序调试效率。
同时,对存在数据(库)设计的需要提供数据(库)设计说明书。
房产信息程序流程图:
3.1添加模块
添加模块主要是为了对房产进行添加新信息。
在本函数中,首先定义了一些字符串CString,将相应编辑框中的数据放到字符串中(例如:
GetDlgItem(IDC_EDIT1)->GetWindowText(s0);),再定义字符数组的长度w,然后用strcpy(a,b)函数将字符串里的数据复制到相应的字符数组中。
以二进制读方式打开文件(f.open("jin.txt",ios:
:
in|ios:
:
binary)),用for(i=0;i当循环结束后,关闭文件。
如果房源号没有重复,则再以二进制写方式打开1x1.txt文件(f.open("lxl.txt",ios:
:
out|ios:
:
binary)),将添加的信息写入其中,最后关闭文件。
具体实现流程图如图3-1所示。
图3-1添加模块流程图
3.2浏览模块
浏览模块主要是浏览查找后的信息和系统所有的全部信息。
在浏览模块中,首先要确定一个要显示的信息,先以二进制读方式打开文件,用for(inti=0;i具体的实现如图3-2所示。
图3-2浏览模块流程图
3.3修改模块
修改模块主要是对房产信息的修改,便于及时更新信息。
在修改模块中,首先定义一些字符串,将修改后的编辑框中的数据放到字符串中(例如:
GetDlgItem(IDC_EDIT1)->GetWindowText(n1);),再用strcpy()函数将字符串内的数据复制给对应的字符数组。
以二进制写方式打开jin.txt文件,然后用for(inti=0;i具体的实现过程如图3-3所示。
图3-3修改模块流程图
3.4删除模块
删除模块主要是用来删除系统中的一个房产对象的所有信息的。
在删除模块中,采用了数组中的数向前移一位的方法,打开jin.txt文件后,用for(inti=0;i与删除单链表中的元素相似。
具体的实现如图3-4所示。
图3-4删除模块流程图
3.5查询模块
查询模块主要是为了方便用户按照不同的查找方式对信息进行查找并在浏览框中输出。
在本函数中,首先选择一个的查找方式(精确查找和按范围查找)。
精确查找时,输入关键字,用for(i=0;i如果不在查找的范围内,便对下一个对象进行判断。
判断结束后,关闭文件。
按范围查找时,与精确查找的不同之处就在于,在选择要查询的范围后,先用if语句选择正确的查询范围,再用for(i=0;i在程序中。
定义了一个布尔变量bool,并附初值(bool=true),当在文件中查询到满足条件的信息时,改变布尔变量的值(bool=false),for循环结束后,用if语句对布尔变量进行判断(bool=true?
),如果bool=true,说明没有查询到满足条件的信息,便输出“没有要查询的信息”,如果bool=false,则跳出if判断语句。
最后关闭文件。
具体实现流程图,精确查询的如图6所示,按(面积或价格)范围查询的如图3-5和3-6所示。
图3-5精确查询模块流程图
图3-6按范围查询模块流程图
3.6文件保存模块
文件保存模块主要是在添加,修改,删除,查询时,保存变动后的房产信息,起到更新信息的作用。
在文件保存模块中,先以二进制读方式打开jin.txt文件,用for(i=0;i再以二进制写方式打开1x1.txt文件,将先前读出的满足条件的信息写入文件中,关闭文件,保存成功。
具体的实现如图3-7所示。
图3-7
房产信息的数据库设计:
表3-1房产商(DEALER)表
列名
含义
长度
类型
NULL
DEFAULT
Phone
电话号码
11
Char()
no
no
Name
姓名
8
Char()
no
no
Sex
性别
2
Char()
no
no
Age
年龄
2
Char()
no
no
Holder
职称
8
Char()
no
no
表3-2顾客(CUSTOMER)表:
列名
含义
长度
类型
NULL
DEFAULT
Name
姓名
8
Char()
no
no
Sex
性别
2
Char()
no
no
Age
Phone
Nativeplace
IDnumber
年龄
电话号码
籍贯
身份证号
2
11
30
20
Char()
Char()
Char()
Char()
no
no
no
no
no
no
no
no
表3-3房屋(HOUSE)表:
列名
含义
长度
类型
NULL
DEFAULI
Number
房屋号
8
Char()
no
no
Address
地址
16
Char()
no
no
Type
户型
16
Char()
no
no
Floor
楼层
16
Char()
no
no
Age
房龄
8
Char()
no
no
Price
价格
8
Float()
no
no
Area
面积
8
Float()
no
no
4.程序源码
主要模块源代码清单:
(1)添加模块
voidCadd:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData();
CStrings0,s1,s4,s5,s2,s3,s6,s7;
CStringnum,dizhi,huxing,fangling,louceng,mianji,jiage,leixing;
GetDlgItem(IDC_EDIT1)->GetWindowText(s0);
GetDlgItem(IDC_EDIT2)->GetWindowText(s1);
GetDlgItem(IDC_EDIT3)->GetWindowText(s2);
GetDlgItem(IDC_EDIT4)->GetWindowText(s3);
GetDlgItem(IDC_EDIT5)->GetWindowText(s4);
GetDlgItem(IDC_EDIT6)->GetWindowText(s5);
GetDlgItem(IDC_EDIT7)->GetWindowText(s6);
strcpy(ci[w].num,s0);
strcpy(ci[w].dizhi,s1);
strcpy(ci[w].huxing,s2);
strcpy(ci[w].fangling,s3);
strcpy(ci[w].louceng,s4);
ci[w].mianji=(int)atof(s5);
ci[w].jiage=(int)atof(s6);
intindex;
index=((CComboBox*)GetDlgItem(IDC_COMBO2))->GetCurSel();
((CComboBox*)GetDlgItem(IDC_COMBO2))->GetLBText(index,s7);
strcpy(ci[w].leixing,s7);
fstreamf;
f.open("jin.txt",ios:
:
in|ios:
:
binary);
for(inti=0;if.read((char*)&ci[i],sizeof(ci[i]));
if(ci[i].num==s0){
MessageBox("不可重复房源号!
");
Cadd:
:
OnOK();
}
}
f.close();
f.open("lxl.txt",ios:
:
out|ios:
:
binary);
f.write((char*)&ci[w],sizeof(ci[w]));
f.close();
w++;
UpdateData(FALSE);
Cadd:
:
OnOK();
}
(2)浏览模块
voidCall:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
Call:
:
OnOK();
}
BOOLCall:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//TODO:
Addextrainitializationhere
fstreamf;
CStringnum,dizhi,huxing,fangling,louceng,mianji,jiage,leixing;
f.open("jin.txt",ios:
:
in|ios:
:
binary);
for(inti=0;if.read((char*)&ci[i],sizeof(ci[i]));
num=ci[i].num;
dizhi=ci[i].dizhi;
huxing=ci[i].huxing;
fangling=ci[i].fangling;
louceng=ci[i].louceng;
mianji.Format("%i",ci[i].mianji);
jiage.Format("%i",ci[i].jiage);
leixing=ci[i].leixing;
m_show.AddString(num+""+dizhi+""+huxing+""+fangling+""+louceng+""+mianji+""+jiage+""+leixing);
}
f.close();
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
//EXCEPTION:
OCXPropertyPagesshouldreturnFALSE
}
voidCchaxun:
:
OnButton5()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
Calla;
a.DoModal();
}
(3)修改模块
voidCxs:
:
OnButton2()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData();
CStringn1,n2,n3,n4,n5,n6,n7,n8;
GetDlgItem(IDC_EDIT1)->GetWindowText(n1);
GetDlgItem(IDC_EDIT2)->GetWindowText(n2);
GetDlgItem(IDC_EDIT3)->GetWindowText(n3);
GetDlgItem(IDC_EDIT4)->GetWindowText(n4);
GetDlgItem(IDC_EDIT5)->GetWindowText(n5);
GetDlgItem(IDC_EDIT6)->GetWindowText(n6);
GetDlgItem(IDC_EDIT7)->GetWindowText(n7);
GetDlgItem(IDC_EDIT9)->GetWindowText(n8);
strcpy(ci[shuzu[cursel]].num,n1);
strcpy(ci[shuzu[cursel]].dizhi,n2);
strcpy(ci[shuzu[cursel]].huxing,n3);
strcpy(ci[shuzu[cursel]].fangling,n4);
strcpy(ci[shuzu[cursel]].louceng,n5);
ci[shuzu[cursel]].mianji=(int)atof(n6);
ci[shuzu[cursel]].jiage=(int)atof(n7);
strcpy(ci[shuzu[cursel]].leixing,n8);
fstreamf;
f.open("jin.txt",ios:
:
out|ios:
:
binary);
for(inti=0;if.write((char*)&ci[i],sizeof(ci[i]));
f.close();
UpdateData(FALSE);
Cxs:
:
OnOK();
}
(4)删除模块
voidCxs:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData();
for(intk=shuzu[cursel];kci[k]=ci[k+1];
w--;
fstreamf;
f.open("jin.txt",ios:
:
out|ios:
:
binary);
for(inti=0;if.write((char*)&ci[i],sizeof(ci[i]));
f.close();
UpdateData(FALSE);
Cxs:
:
OnOK();
}
(5)查询模块
①按户型和楼层查询
voidCchaxun:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData();
u=0;
boola=true;
for(intj=0;j<15;j++){m_show.DeleteString(0);}
fstreamf;
CStringnum,dizhi,huxing,fangling,louceng,mianji,jiage,leixing,s;
GetDlgItem(IDC_EDIT1)->GetWindowText(s);
f.open("jin.txt",ios:
:
in|ios:
:
binary);
for(inti=0;if.read((char*)&ci[i],sizeof(ci[i]));
if((ci[i].huxing==s)||(ci[i].louceng==s)){
shuzu[u]=i;
a=false;
u++;
num=ci[i].num;
dizhi=ci[i].dizhi;
huxing=ci[i].huxing;
fangling=ci[i].fangling;
louceng=ci[i].louceng;
mianji.Format("%i",ci[i].mianji);
jiage.Format("%i",ci[i].jiage);
leixing=ci[i].leixing;
m_show.AddString(num+""+dizhi+""+huxing+""+fangling+""+louceng+""+mianji+""+jiage+""+leixing);
}
}
if(a)
MessageBox("没有所要查询的信息","错误");
//MessageBox("没有所要查询的信息","错误");
f.close();
UpdateData(FALSE);
}
②按面积范围查询
voidCchaxun:
:
OnButton2()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData();
u=0;
inta,b;
CStringr;
intindex;
index=((CComboBox*)GetDlgItem(IDC_COMBO2))->GetCurSel();
((CComboBox*)GetDlgItem(IDC_COMBO2))->GetLBText(index,r);
if(r=="10~~~20"){a=10;b=20;}
if(r=="20~~~30"){a=20;b=30;}
if(r=="30~~~40"){a=30;b=40;}
for(intj=0;j<15;j++){m_show.DeleteString(0);}
fstreamf;
CStringnum,dizhi,huxing,fangling,louceng,mianji,jiage,leixing,s;
GetDlgItem(IDC_EDIT1)->GetWindowText(s);
f.open("jin.txt",ios:
:
in|ios:
:
binary);
for(inti=0;if.read((char*)&ci[i],sizeof(ci[i]));
if((ci[i].mianji>=a)&&(ci[i].mianji<=b)){
shuzu[u]=i;
u++;
num=ci[i].num;
dizhi=ci[i].dizhi;
huxing=ci[i].huxing;
fangling=ci[i].fangling;
louceng=ci[i].louceng;
mianji.Format("%i",ci[i].mianji);
jiage.Format("%i",ci[i].jiage);
leixing=ci[i].leixing;
m_show.AddString(num+""+dizhi+""+huxing+""+fangling+""+louceng+""+mianji+""+jiage+""+leixing);
}
}
f.close();
UpdateData(FALSE);
}
③按价格范围查询
voidCchaxun:
:
OnButton3()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData();
u=0;
inta,b;
CStringr;
intindex;
index=((CComboBox*)GetDlgItem(IDC_COMBO5))->GetCurSel();
((CComboBox*)GetDlgItem(IDC_COMBO5))->GetLBText(index,r);
if(r=="0~~~~~1万"){a=0;b=10000;}
if(r=="1万~~~~10万"){a=10000;b=100000;}
if(r=="10万~~~20万"){a=100000;b=200000;}
if(r=="20万~~~30万"){a=200000;b=300000;}
if(r=="30万~~~40万"){a=300000;b=400000;}
for(intj