《C++:水费管理系统(共24页).doc》由会员分享,可在线阅读,更多相关《C++:水费管理系统(共24页).doc(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上 C+ 课程设计报告题 目: 水费管理系统水费基本信息管理、查询、统计、存盘 和收费管理 学生姓名: 学 号: 专业班级: 同组姓名: 指导教师: 设计时间: 2008年下学期第1516周 指导老师意见: 评定成绩: 签名: 日期: 1 系统(项目)设计11 系统功能模块图通过查阅相关资料和仔细分析,得出系统功能模块图如图1所示。系统主要由用户信息管理、收费管理、查询与统计、存盘等几个功能模块组成,我负责的是收费管理、查询与统计、存盘功能。 其中收费管理包括用户本月用水量、本月所收水费、收费时间,查询与统计包括用户信息查询与收费查询与统计,存盘包括用户信息和收费信息存
2、盘。图 1 水费管理系统模块水 费 管 理 系 统 时间收费时间本月收水费统计水费查询本月用水量添加删除修改编号时间查询.统计用户信息管理收 费 管 理记 录12 系统登陆模块系统登陆模块主要完成系统登陆和系统退出功能。其详细流程图如图2所示。1、 密码输入;2、 判断密码的正确与否,即当前用户是否具有进入系统运行的权限;3、 主菜单中选择1、2、3、4,分别进入用户基本信息管理、收费管理、查询与统计、存盘操作;4、 密码错误或主菜单中选择0,退出程序; 准 备登 录 系 统输 入 密 码判 断 权 限主 菜 单操 作是否01234子 菜 单 操 作退 出图 2 水费管理系统流程图13 收费管
3、理 收费管理模块主要完成对用户进行收费的功能,该模块包含用户本月所收水费、存盘等功能。其流程图如图3所示。 131 子菜单2模块1、从子菜单2中选择1、2分别进入本月所收水费、存盘操作;2、选择0,返回主菜单。 主菜单操作0退出子菜单22操作选择12进入收费管理操作00图 3 子菜单2流程图132 本月所收水费模块该模块主要完成对用户本月收取水费的功能,其流程图如图 4所示。1. 进入子菜单 2中选择 1,进行用户信息的添加;2. 键盘输入要收水费用户的编、名称、收费时间和本月用水量,计算对该用户所收水费;3. 一次用户信息输入完成,系统回到上一级菜单,提示存盘;4. 输入2,进行存盘。子菜单
4、21添加用户信息键盘输入计算水费图 4 本月所收水费流程图133 存盘模块 该模块主要完成用户收费信息的存盘,详情见流程图 5.所示。1、 子菜单2中选择2,进行添加用户信息和所收水费存盘;2、 继续输入用户信息或返回上级菜单。图 5 存盘操作流程图存 盘计算水费键盘输入1添加用户信息子菜单 214 查询与统计模块 查询、统计模块主要完成对用户基本信息的和收费信息的查询和统计的功能,详情见流程图 6所示。1、 从主菜单中选择3,进入查询与统计子菜单 3;2、 从子菜单中选择1、2分别进行用户基本信息查询和收费记录的统计;3、 输入要查询用户的名称或编号,系统从consumer文本文档中找到要查
5、询用户的基本信息,屏幕输出信息,返回子菜单 3;4、 输入要查询用户收费记录的日期,系统从charge文本文档中找到该用户信息及收费记录,在屏幕上输出,返回子菜单 3;5、 如果没找到该用户信息,返回子菜单 3。主菜单操作退出03子菜单 31. 用户信息查询2. 用户收费记录统计输入查询条件是否找到信息是屏幕输出用户信息或收费记录否0图 6 查询与统计模块流程图2 程序源代码#include #include #include #include #include #define NULL 0/定义用户基本信息类由组员郭文君完成/定义收费信息类class chargechar * name; /
6、用户名称 char * kind; /用户类型float volumn; /本月用水量float money; /本月所收水费char * time; /收费时间public:static int i; /交费次数charge * next;/指向charge类对象的指针charge(char * n,char * k,float v,float m,char * t)name=new charstrlen(n)+1;strcpy(name,n); kind=new charstrlen(k)+1; strcpy(kind,k);volumn=v;money=m;time=new charst
7、rlen(t)+1;strcpy(time,t);+i;charge()name=new char10; kind=new char10;volumn=0;money=0;time=new char10;+i;charge()/析构函数-i;delete kind;delete name;delete time;char *getname()return name;char *getkind()return kind;float getvolumn()return volumn; float getmoney()return money;char *gettime()return time;v
8、oid setname(char *x)/用成员函数修改私有数据成员strcpy(name,x);void setkind(char *y)strcpy(kind,y);void setvolumn(float z)volumn=z; void setmoney(float p)money=p;void settime(char *q)strcpy(time,q); /声明运算符重载函数为charge类的友元函数friend ostream & operator (istream & is, charge &ob);int charge:i=0;/*重载运算符函数 *ostream & ope
9、rator (ostream & os,charge &ob)osob.name ob.kind ob.volumn ob.money ob.time运算符函数 *istream & operator (istream & is,charge &ob)isob.name;isob.kind;isob.volumn;isob.money;isob.time;return is;consumer *head=NULL;/用户信息类链表头初始化charge *link=NULL; /收费标准类链表头void load()/从硬盘读取用户基本信息void save() /将用户信息存入硬盘由组员郭文君
10、完成void Cload() /从硬盘读取收费信息ifstream fin(charge.txt,ios:in|ios:nocreate);if(!fin)cout不能打开文件endlcount; /读入收费类型数x=1;while(x*temp; /读入一个用户收费记录到内存/将用户记录插入内存链表if(link = NULL) /链表为空link = temp;temp-next=NULL;else /将新节点插入到头结点之前temp-next = link;link=temp;x+;charge:i=count;if(link = NULL) charge:i=0;fin.close()
11、;void Csave() /将用户收费信息存入硬盘if(link=NULL) Cload();ofstream fout(charge.txt,ios:out);/存入用户收费记录总条数,以控制读取收费记录时的循环次数foutcharge:i ;charge *p=link;while(p!=NULL)foutnext;fout.close();link=NULL;cout收费信息保存成功!endlendl;/*用户基本信息管理*由组员郭文君完成void sub2()/子菜单2int x;while(x)void sub21(); cout*水量使用管理*endl;cout*endl;cou
12、t本月所交水费 *endl;cout存盘 *endl;cout返回主菜单 *endl;cout*endl;coutx;if(x=0&x=2)switch(x)case 1:sub21();break;case 2:Csave();break;case 0:return; elsecout选择有误,请重新选择!endlendl;void sub21()char N20;char L20;char K20;float V;char D20;float P;float sum;coutL;coutK;coutD;coutV;if(head = NULL) load();consumer * ptr=
13、head;while(ptr!=NULL)if(strcmp(ptr-getnum(),L)!=0)ptr=ptr-next;else P=ptr-getprice();strcpy(N,ptr-getname();break;charge *temp=new charge(N,K,V,P,D);if(link =NULL) Cload();if(link=NULL)link=temp;temp-next=NULL;else temp-next=link;link=temp;sum=V*P;cout用户N D的用水量为:V吨。endl;cout本月水费:sum元。endlendl;charge
14、:i+;cout用户N D水费记录完成,储存请选择存盘!endlendl;/*3 查询、统计*/ 子菜单3 void sub3() int x;while(1)void sub31(); /函数原型声明void sub32(); /函数原型声明cout*查询、统计*endl;cout*endl;cout用户信息查询; *endl;cout收费记录统计; *endl;cout返回主菜单; *endl;cout*endl;coutx;if(x=0&x=2)switch(x)case 1:sub31();break;case 2:sub32();break;case 0:return;else co
15、ut选择有误,请重新选择!endlendl;void sub31()/用户信息查询void sub311(); void sub312(); int x;cout*用户信息查询*endl;cout*endl;cout根据用户名称查询; *endl;cout根据用户编号查询; *endl;cout返回上一菜单; *endl;cout*endl;coutx;if(x=0&x=2)switch(x)case 1:sub311();break;case 2:sub312();break; case 0:return;else cout选择有误,请重新选择!endlendl;void sub311()
16、/根据用户名称查询char N20; consumer *p; cout请输入要查找用户的名称:N;if(head=NULL) load();p=head;while(p!=NULL)if(strcmp(p-getname(),N)=0)cout*所查找用户的名称:getname()endl;cout*用户的编号: getnum()endl;cout*该用户所属类型: getkind()endl;cout*该用户类型的价格 getprice()next;cout该用户不存在!endl;return ;void sub312()/按编号查找 char M20;consumer *q;cout请输
17、入要查找用户的编号:M; if(head=NULL) load();q=head;while(q!=NULL)if(strcmp(q-getnum(),M)=0)cout*所查找用户的名称:getname()endl;cout*用户的编号: getnum()endl;cout*该用户所属类型: getkind()endl;cout*该用户类型的价格 getprice()next;cout该用户不存在!endl;return ;void sub32() /收费记录统计char D20;cout*收费记录统计*endl;coutD;if(link=NULL) Cload();charge *p=l
18、ink;while(p!=NULL)if(strcmp(p-gettime(),D)=0)coutgetname() D的用水量为:getvolumn()吨。endl;cout本月水费:getmoney()*p-getvolumn()元。endl;coutnext;else p=p-next;/*主函数*int main()int i;char pwd10;int count=0;while(1)coutpwd;if(strcmp(pwd,water)!=0)/密码错误cout密码错误,请重新输入!endl;count+;else break;/密码正确if(count = 3) cout密码
19、已输错三次!请重新运行程序!endl;return 0;while(1)/主菜单cout* 总管理系统 *endl;cout*endl;cout用户信息管理; *endl;cout水费信息管理; *endl;cout查询、统计; *endl;cout存盘; *endl;cout退出; *endl;cout*endl;couti;switch(i)case 1:sub1();break;case 2:sub2();break;case 3:sub3();break;case 4:save();Csave();break;case 0:return 0;3系统测试系统各功能的运行时界面及使用说明。
20、1、 程序运行主菜单 图 7 主菜单3、 收费管理功能 图 8 收费管理菜单4输入水费用户信息 图 9 用户信息输入4、 计算水费并输出 图 10 计算并输出该用户水费信息6、 存盘并返回上级菜单 图 11 水费信息存盘7、 查询和统计功能 图 12 查询、统计菜单8、 用户信息查询 图 13 用户信息查询 9、 由名称查询 图 13 由名称查询 10、由编号查询 图 14 编号查询11、收费记录统计 图 15 收费记录统计12 、存盘 图 16 用户信息收费信息存盘13、退出系统 图 17 退出系统 4 小结在这次课程设计课程之前,学习C语言和C+过程中,我所遇到的都是一些简单的程序,写的也
21、是些简单的函数程序,在实验课中才自己进行编写一些简单程序,以此巩固自己的基本知识,从中积累了些自己编程时间的知识。在这次15、16周的课程设计过程中,第一次接触复杂的程序,并且要自己进行编写和修改并运行测试,从中学到了很多东西,认识到以前对变成语言的认识不足,从中也看到了自己的很多不足,希望以后能去努力改正并多学习。首先最重要的一点就是很难处理较复杂程序,看到一个程序后不知道该从哪方面着手,不懂得去分析这个程序及需要用到哪方面的知识,必须要在老师的知道下才能有些思路。另外在分模块方面也遇到了不少麻烦,不知道如何划分模块,并把整个程序的框架整理好,对这方面以后要重点学习加强。不过在这两周课程设计
22、还是学到了不少东西,链表是这次课程设计中最重要的环节,通过这次学习,基本掌握了链表的使用,对文件的读写也有了一定的了解。还熟练掌握了流程图的制作以及截图操作,对Word文档使用也比较的熟练了。在课程实际过程中,花了不少时间,学到了不少东西。感谢易明老师在课程实际过程中的指导。5 参考文献课程设计过程中所查阅的书籍、网站等。1 谭浩强编著.C语言程序设计.-北京:清华大学出版社,2000.1(2007.5重印).338页2 陈维兴,林小茶编著.C+面向对象程序设计.-2版.-北京:清华大学出版社,2004.8(2007重印).277页3 刘振安等编著.C+课程设计.-北京:机械工业出版社,2007.1.224页专心-专注-专业