小区物业管理系统.docx
《小区物业管理系统.docx》由会员分享,可在线阅读,更多相关《小区物业管理系统.docx(20页珍藏版)》请在冰豆网上搜索。
![小区物业管理系统.docx](https://file1.bdocx.com/fileroot1/2022-11/30/f4fa0b35-3321-47e2-9552-efc3d6467895/f4fa0b35-3321-47e2-9552-efc3d64678951.gif)
小区物业管理系统
《小区物业管理系统》
程序设计基础课程设计报告
目录
一.编程目的:
2
二.设计要求:
2
三.各函数功能说明:
2
四.流程图:
13
五.总结:
14
参考书目:
15
1.程序题目要求:
1.1.课程设计目的:
用C++语言对小区物业管理系统进行程序编程,并且通过以前的学习及查看相关资料,按着题目要求编写程序,进一步加强对编程的训练,使得自己掌握知识要点,将其书本知识转化为实际应用当中。
1.2课程设计题目:
小区物业管理系统
1.3.课程设计题目描述和要求:
1)、有工作界面(菜单或按钮方式)
2)、以住户为主,录入房号,户主名,用水量(单位方),用电量(单位度),物业费(交否),入主日期等字段;所录入的数据(至少包括6条)存入一个文本文件中;能根据情况调出数据.
3)、具有按房号排序功能.
4)、能有插入功能,并按房号排序.
5)、具有删除记录功能.
6)、当某一住户买水或买电后,其相应用水量,用电量字段应增加;交物野费后应改变其相应字段的值.
7)、具有查询功能
(1)按房号,户主名进行用水量和用电量的查询.
(2)按物业费交否查询住户情况,当未交的,可报警提示.
8)、统计出每栋楼房的入主情况(即空房多少).
9)、能在屏幕上输出所有客户的信息.
2.课程设计报告内容:
2.1:
程序的简单介绍
整个程序采用类与链表相结合的编程方法一共完成了8个功能,全体用了一个类,一个友元成员函数和一个主函数。
在每次运行完成时,要退出黑屏才能保存所输入的数据。
再根据输入的数据,来确定功能的执行。
在类classZhuhu中设有11个成员函数(例如:
voidinput_message(),voidgongneng()等等,这几个函数主要是输入输出和执行功能的用途)和一个友元函数(fringdvoidduidiao_base(Zhuhu&p1,Zhuhu&p2),此函数是用于后面的排序功能函数)的声明,类外进行定义。
在主函数中除了普通函数外(例如:
voidzhixing(Zhuhu*head);对各函数施行执行功能),还建立了文件(ifstreamopen_count_file(“count.txt”,ios:
:
binary)把数据库里的count找出来
ifstreaminfile("zhuhu.txt",ios:
:
binary)建立与数据库的联系流,使用二进制打开文件.),它们的打开和退出关系着数据库的数据的输入与保存。
2.2:
源程序:
#include
#include
#include
#include
usingnamespacestd;
classZhuhu
{
public:
voidinput_message();//输入信息函数声明
voidshow_message();//展示函数声明声明
voidwrite_num();
voidgongneng();
intget_num();
doubleget_water();
doubleget_elec();
stringget_name();//获取姓名声明
doubleget_wuye();
Zhuhu*next;
friendvoidduidiao_base(Zhuhu&p1,Zhuhu&p2);
private:
intnum;//编号
charname[20];//户主
doublewater;
doubleelec;
doublewuye;
intyear;//年
intmon;//月
intday;//日
};
voidZhuhu:
:
input_message()//输入信息函数(采用先判断后定值的方法)
{
cout<<"房号:
";
cin>>num;
cout<<"户主:
";
cin>>name;
cout<<"请输入用水量:
"<cin>>water;
cout<<"请输入用电量:
"<cin>>elec;
cout<<"请输入物业费:
"<cin>>wuye;
inte,g,f,h=0;//找到年,月,日三个替身
cout<<"入住时间"<cout<<"年:
";
cin>>e;//输入正确后,在再赋值
while(e<2006||e>2056)
{
cout<<"年份错误,请重新输入(2006-2056)"<";
cin>>e;
}
year=e;//输入正确后,在再赋值
if((year%4==0&&year%100!
=0)||(year%400==0))h=1;
cout<<"月:
";
cin>>g;
while(g<1||g>12)
{
cout<<"月份错误,请重新输入(1-12)"<";
cin>>g;
}
mon=g;//输入正确后,在再赋值
cout<<"日:
";
if(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12)
{cin>>f;
while(f<1||f>31)
{
cout<<"日子错误,请重新输入(1-31)"<";
cin>>f;
}
day=f;//输入正确后,在再赋值
}
if(mon==4||mon==6||mon==9||mon==11)
{cin>>f;
while(f<1||f>30)
{
cout<<"日子错误,请重新输入(1-30)"<";
cin>>f;
}
day=f;//输入正确后,在再赋值
}
if(h==0&&mon==2)//非闰年的二月
{
cin>>f;
while(f<1||f>28)
{
cout<<"日子错误,请重新输入(1-28)"<";
cin>>f;
}
day=f;//输入正确后,在再赋值
}
if(h==1&&mon==2)//闰年的二月
{cin>>f;
while(f<1||f>29)
{
cout<<"闰年,请重新输入(1-29)"<";
cin>>f;
}
day=f;//输入正确后,在再赋值
}
;}
voidZhuhu:
:
show_message()//展示会员基本信息
{
cout<<"房号:
"<cout<<"户主:
"<cout<<"用水量:
"<cout<<"用电量:
"<if(wuye>=0)
cout<<"物业费"<if(wuye<0)
cout<<"您的物业费预存了"<<-wuye<<"RMB"<cout<<"入住时间:
"<cout<<"----------------------------------------"<}
intZhuhu:
:
get_num()
{
returnnum;
}
voidZhuhu:
:
write_num()
{
cout<<"请输入房号:
"<cin>>num;
}
voidZhuhu:
:
gongneng()
{stringk;
doublea,b,c;
cout<<"[1]--买水"<cout<<"[2]--买电"<cout<<"[3]--交物业费"<cin>>k;
while(k!
="1"&&k!
="2"&&k!
="3")
{
cout<<"错误命令,重新输入:
";
cin>>k;
}
if(k=="1")
{cout<<"请输入买水量"<cin>>a;
water=water+a;
cout<<"您现在的水量是:
"<if(k=="2")
{cout<<"请输入买电量:
"<cin>>b;
elec=elec+b;
cout<<"您现在的电量是:
"<if(k=="3")
{cout<<"请输入缴纳的物业费金额:
"<cin>>c;
wuye=wuye-c;
if(wuye>0)
cout<<"您现在的物业费是:
"<if(wuye<0)cout<<"您现在的物业费预存了:
"<<-wuye<}
;}
doubleZhuhu:
:
get_water()
{returnwater;}
doubleZhuhu:
:
get_elec()
{returnelec;}
stringZhuhu:
:
get_name()
{returnname;}
doubleZhuhu:
:
get_wuye()
{returnwuye;}
voidduidiao_base(Zhuhu&p1,Zhuhu&p2)//交换基本信息函数(地址被抛弃)
{intt;
doubles;
chara[20];
t=p1.num;p1.num=p2.num;p2.num=t;
t=p1.year;p1.year=p2.year;p2.year=t;
t=p1.mon;p1.mon=p2.mon;p2.mon=t;
t=p1.day;p1.day=p2.day;p2.day=t;
s=p1.water;p1.water=p2.water;p2.water=s;
s=p1.elec;p1.elec=p2.elec;p2.elec=s;
s=p1.wuye;p1.wuye=p2.wuye;p2.wuye=s;
strcpy(a,p1.name);strcpy(p1.name,p2.name);strcpy(p2.name,a);
}
intcount;
intmain()//主函数
{
Zhuhu*head=NULL;
Zhuhu*p1,*p2;
p1=newZhuhu;
p2=p1;
inti;
ifstreamopen_count_file("count.txt",ios:
:
binary);//把数据库里的count找出来
//此时的count是上次操作后留下的
if(!
open_count_file)//测试是否成功打开文件
{
cerr<<"openerror!
"<abort();
}
open_count_file>>count;//取出值,并赋值给全局变量count
open_count_file.close();//取出后关闭文件
ifstreaminfile("zhuhu.txt",ios:
:
binary);//建立与数据库的联系流,使用二进制打开文件
//zhuhu.txt保存了所有客户的信息
if(!
infile)
{
cerr<<"openerror!
"<abort();
}
for(i=0;i{
infile.read((char*)p1,sizeof(Zhuhu));//运用二进制文件操作函数,方便快捷,不用重载
if(i==0)head=p1;
p2=newZhuhu;
if(i==count-1)p1->next=NULL;
else
{p1->next=p2;
p1=p2;}
;}
infile.close();//关闭文件,防止误操作
Zhuhu*jianli(Zhuhu*head);//建立数据库函数声明
voidshuchu(Zhuhu*head);
Zhuhu*charu(Zhuhu*head);
Zhuhu*shanchu(Zhuhu*head);
voidzhixing(Zhuhu*head);
voidchaxun(Zhuhu*head);//查询功能函数
voidtongji(Zhuhu*head);
voidpaixu(Zhuhu*head);
stringcon="1";
cout<<"※※※※※※欢迎进入小区物业管理系统※※※※※※※※"<cout<<"开发人:
秦国栋"<<"(07电子信息1班)"<if(count==0)
{cout<<"_______________________________________________________________"<cout<<"警告★★您的数据库是空的,请首先建立数据库!
!
!
!
★★"<cout<<"_______________________________________________________________"<while(con!
="0")//循环命令机制,这种比较方便,简单
{
cout<<"[1]--建立数据库"<cout<<"[2]--输出所有信息"<cout<<"[3]--添加住户"<cout<<"[4]--删除住户"<cout<<"[5]--收费功能"<cout<<"[6]--查询功能"<cout<<"[7]--统计空房"<cout<<"[8]--排序功能"<cout<<"[0]--退出系统,保存数据"<cout<<"***********我的命令是********:
-->";
cin>>con;
while(con!
="1"&&con!
="2"&&con!
="3"&&con!
="4"&&con!
="5"&&con!
="6"&&con!
="7"&&con!
="8"&&con!
="0")
{
cout<<"错误命令,重新输入:
";
cin>>con;
}
if(con=="1")
head=jianli(head);
if(con=="2")
shuchu(head);
if(con=="3")
head=charu(head);
if(con=="4")
head=shanchu(head);
if(con=="5")
zhixing(head);
if(con=="6")
chaxun(head);
if(con=="7")
tongji(head);
if(con=="8")
paixu(head);
cout<<"提示[*操作完毕请选择退出程序(选择命令[0]),否则您的数据将不能保存!
*]"<//务必退出程序,否则处理结果无法保存
};
p1=head;
ofstreamcountfile("count.txt",ios:
:
binary);
if(!
countfile)
{
cerr<<"openerror!
"<abort();
}
countfile<countfile.close();
ofstreamoutfile("zhuhu.txt",ios:
:
binary);
if(!
outfile)
{
cerr<<"openerror!
"<abort();
}
for(i=0;i{
outfile.write((char*)p1,sizeof(Zhuhu));
p1=p1->next;
}
outfile.close();
return0;
}
Zhuhu*jianli(Zhuhu*head)
{Zhuhu*p1,*p2;
if(count>0)//此时不允许录入数据,只能使用添加功能录入
{cout<<"警告!
!
您的数据库已经存在,若要重新建立,请清除zhuhu文件内容并使count文件归0"<cout<<"_____________________________________________________________________"<}
if(count==0)
{
p1=p2=newZhuhu;
head=p1;
intn;
cout<<"请输入需要建立的住户数:
"<cin>>n;
for(inti=0;i{
cout<<"第"<
p1->input_message();
p1=newZhuhu;
if(i==n-1)p2->next=NULL;
elsep2->next=p1;
p2=p1;
}
if(i==n)p2->next=NULL;
count=n;
}
returnhead;
}
voidshuchu(Zhuhu*head)
{Zhuhu*p1;
p1=head;
while(p1!
=NULL)
{
p1->show_message();
p1=p1->next;
}
;}
Zhuhu*charu(Zhuhu*head)
{
cout<<"请输入要添加住户的详细信息:
"<Zhuhu*p0,*p1,*p2,*p3;
p3=p1=head;
p0=newZhuhu;
p0->input_message();
while(p3->next!
=NULL)
{
if(p3->get_num()==p0->get_num())
{cout<<"您输入输入输入的房号有误或非空房,请重新输入!
"<p0->input_message();
}
p3=p3->next;
}
p1=head;//使p1指向第一个结点
if(head==NULL)//原来的链表是空表
{head=p0;p0->next=NULL;}//使p0指向的结点作为头结点
if(p0->get_num()get_num())
{head=p0;
p0->next=p1;}
else
{while((p0->get_num()>p1->get_num())&&(p1->next!
=NULL))
{p2=p1;//使p2指向刚才p1指向的结点
p1=p1->next;}//p1后移一个结点
if(p0->get_num()<=p1->get_num())
{if(head==p1)head=p0;//插到原来第一个结点之前
elsep2->next=p0;//插到p2指向的结点之后
p0->next=p1;}
else
{p1->next=p0;p0->next=NULL;}}//插到最后的结点之后
count++;
cout<<"添加成功,查看请选择[2]"<cout<<"---------------------------------------"<returnhead;}
Zhuhu*shanchu(Zhuhu*head)
{Zhuhu*p1,*p2;
intnum;
cout<<"请输入要删除住户的房号:
";
cin>>num;
p1=head;
if(head==NULL)//是空表
{cout<<"listnull!
"<p1=head;//使p1指向第一个结点
while(num!
=p1->get_num()&&p1->next!
=NULL)//p1指向的不是所要找的结点且后面还有结点
{p2=p1;p1=p1->next;}//p1后移一个结点
if(num==p1->get_num())//找到了
{cout<<"您要删除住户的详细信息是:
"<p1->show_message();
if(p1==head)head=p1->next;//若p1指向的是首结点,把第二个结点地址赋予head
elsep2->next=p1->next;//否则将下一结点地址赋给前一结点地址
cout<<"成功删除:
"<count--;
}
elsecout<<"您要删除的住户不存在,请核对后重新删除"<return(head);
}
voidzhixing(Zhuhu*head)
{intnum;
Zhuhu*p1,*p2;
cout<<"请输入要执行的住户编号"<cin>>num;
p1=head;
while(num!
=p1->get_num()&&p1->next!
=NULL)//p1指向的不是所要找的结点且后面还有结点
{p2=p1;p1=p1->next;}//p1后移一个结点
if(num==p1->get_num())//找到了
{p1->gongneng();
}
elsecout<<"您要执行的住户不存在,请核对后重新执行"<}
voidchaxun(Zhuhu*head)//查询功能函数
{
stringn;
intnum;
charname[20];
cout<<"●水量和电量查询-[1]●物业费缴纳情况查询-[2]●"<cin>>n;
while(n!
="1"&&n!
="2")
{cout<<"错误命令,重新输入:
";
cin>>n;
}
if(n=="1")
{
cout<<"●按房号查询-[1]●按户主查询-[2]●"<strings;
cin>>s;
while