C++课程设计小区物业管理系统.docx
- 文档编号:7930795
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:21
- 大小:52.36KB
C++课程设计小区物业管理系统.docx
《C++课程设计小区物业管理系统.docx》由会员分享,可在线阅读,更多相关《C++课程设计小区物业管理系统.docx(21页珍藏版)》请在冰豆网上搜索。
C++课程设计小区物业管理系统
《小区物业管理系统》
程序设计基础课程设计报告
专业:
电子信息工程
班级:
2007级1班
学号:
2007082020
姓名:
张超
指导教师:
常耀辉
一.编程目的:
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<<"※※※※※※欢迎进入小区物业管理系统※※※※※※※※"< 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() {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]●"< s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计 小区 物业管理 系统