电信计费系统客户帐单管理

上传人:无*** 文档编号:139187669 上传时间:2022-08-22 格式:DOC 页数:46 大小:802.50KB
收藏 版权申诉 举报 下载
电信计费系统客户帐单管理_第1页
第1页 / 共46页
电信计费系统客户帐单管理_第2页
第2页 / 共46页
电信计费系统客户帐单管理_第3页
第3页 / 共46页
资源描述:

《电信计费系统客户帐单管理》由会员分享,可在线阅读,更多相关《电信计费系统客户帐单管理(46页珍藏版)》请在装配图网上搜索。

1、 程序设计报告( / 年 第 二 学期)题 目:电信计费系统客户帐单管理 专 业 学 生 姓 名 班 级 学 号 指 导 教 师 指 导 单 位 计算机软件教学中心 日 期 年05月29日 评 分 细 则评分项优秀良好中档差遵守机房规章制度上机时的体现学习态度程序准备状况程序设计能力团队合伙精神课题功能实现状况算法设计合理性顾客界面设计报告书写认真限度内容详实限度文字体现纯熟限度回答问题精确度简 短 评 语教师签名: 郭剑 年 12 月 25 日评分级别备注评分级别有五种:优秀、良好、中档、及格、不及格电信计费系统客户帐单管理一、 课题内容和规定客户帐单管理是电信计费系统必备的重要功能模块,重

2、要负责对电信各类客户每月帐单的增长、修改、删除、查询、备份等管理工作。本课题以中国电信公司客户帐单管理模块原型参照,规定基于单链表构造对文献存储的客户帐单数据进行排序、查找、计算、显示等造作。通过此可以,纯熟掌握单链表构造、文献读写、函数调用等知识,以及查找、排序典型算法的设计与应用。二、需求分析要能提供如下几种基本功能:(1)顾客资料文献与话单文献由程序设计人员预先从键盘上录入,顾客资料文献中的数据记录不得少于30条,话单文献中的数据记录不得少于200条,且必须有跨月份、跨年份的通话记录话单。(2)一方面从硬盘读入顾客资料和话单记录(3)对话单进行计费解决,输出费用详单到指定的文献。格式如下

3、:电话号码 顾客姓名 月租费 功能费 市内电话费用 长途电话费用 合计83470000 Zhang Qiang 25.00 6.00 xxxxx xxxxx xxx83470001 。 。(4)异常话单提示。有的话单也许是错误的,找出这些话单,不参与计费,另存为一种文献。也许的出错话单有:一种号码的通话时长不小于三天。一种号码在一种时间存在两条以上的记录。功能框架图如图1所示(1)提供可操作的主菜单:输出个菜单,用于显示以从文献中加载的总客户信息和若干个可选的功能选项。根据客户输入的选项来运营不同的功能,运营不同的函数。(2)显示所有顾客的功能:根据选项可将文本里的顾客信息在屏幕上显示出来。(

4、3)显示所有账单功能:可将文本里的通话账单在屏幕上显示出来。(4)添加顾客功能:可在屏幕上进行直接操作,将顾客信息添加到记录里。(5)添加账单功能:操作同上,可将新的通话记录添加到记录里。(6)按顾客民查找功能:输入记录里的顾客民,可以查询与之有关的通话账单记录。(7)按电话号码查找功能:输入记录里的已有电话号码,可以查找相应的通话账单记录。(8)输出耗费功能:在操控台和文本中,直接输出所有的耗费详情。三、概要设计 1、重要函数流程图如图2所示:开始打开文本读入数据选择操作选项子菜单结束返回上一级图2:主程序图开始调用菜单函数输出操作选项输入操作选项调用应用函数子菜单应用函数结束返回操作选项选

5、择结束图3:操作菜单系统开始读入数据显示顾客信息结束打开文本图4:显示所有信息菜单开始打开文本输入在末尾插入数据输出数据到文本尾关闭文本结束图5:插入数据菜单读入账户和账单信息选出一种所有顾客账单选出该顾客每月账单计算话费结束打开文本开始判断账单与否合理返回所有对的账单图6:计算话费函数开始开始记录开始时间以及结束时间的年月日时分秒No月日时分秒与否超过时间范畴?Yes输出错误提示,返回-1;返回1;结束图7::判断话费正误函数1、顾客类(Customer):#include#include#include/控制输出格式class Customer /定义一种顾客类protected:char

6、 Name20;/顾客名 char Number15;/顾客电话号码char CID;/与否来电显示public:Customer(char* = ,char* = ,char cid= ); /定义构造函数Customer();/定义析构函数 Customer(const Customer & obj); /定义拷贝构造函数char* GetName();/获得顾客名字符型指针函数char* GetNumber();/获得顾客号字符型指针函数char GetCID();/看顾客与否有来电显示friend istream & operator (istream & in , Customer

7、& cus);/友元重载输入 friend ostream & operator (istream & in,Customer & cus)incus.Name;/输入顾客名incus.Number;/输入顾客号码 incus.CID;/来电业务信息return in;ostream & operator (ostream & out,const Customer & cus)outsetiosflags(ios:left);outsetw(20)cus.Name;/左对齐输出顾客名outsetw(15)cus.Number;/左对齐输出顾客号码 outsetw(1)cus.CID;/来电业务

8、信息outendl;return out;2、话单类(Bill): #include#include#include#includeclass Billprotected:char Dialing15;char Dialed15;char StartTime15;char EndTime15;public:Bill(char *dialing= ,char *dialed= ,char *stime= ,char *etime= );/定义构造函数Bill();Bill( const Bill & obj);/帐单的拷贝构造函数char* GetDialing();/获得主叫号码 char*

9、GetDialed();/获得被叫号码char* GetStart();/获得起始时间 char* GetEnd();/获得结束时间int GetDate();/获得日期int GetTime();/获得通话时长friend int mon_day(int year,int month);/记录不同月份的天数friend istream & operator (istream & in ,Bill & bill);/友元重载输入 friend ostream & operator (istream & in,Bill & bill)inbill.Dialing; inbill.Dialed;

10、inbill.StartTime; inbill.EndTime;return in;ostream & operator (ostream & out,const Bill & bill)outsetiosflags(ios:left);outsetw(15)bill.Dialing; outsetw(15)bill.Dialed; outsetw(15)bill.StartTime; outsetw(15)bill.EndTime;outendl;return out;int Bill:GetDate()int Dat6;double date=0;for(int i=0;i6;i+)Da

11、ti=StartTimei-48;/文本文献读入时只能以字符型的形式,计算是转化成整形date+=Dati*pow(10,5-i);return (int)date;int Bill:GetTime()return Estimate(StartTime,EndTime);int mon_day(int year,int month) /记录不同月份的天数int day12;/d数组12个成员为12个月份day0=31; /给成员一一赋值if( year%4=0 & year%100!=0 | year%400 = 0 ) /判断与否是闰年day1=29;else day1=28;day2=31

12、;day3=30;day4=31;day5=30;day6=31;day7=31;day8=30;day9=31;day10=30;day11=31;return daymonth-1; /返回y年m月有多少天int Estimate(char *m,char *n)/判断时间正误函数int a14,b14; /a记录开始时间,b记录结束时间for(int i=0;i12 |mon112 |mon223 |h123 |h159 |min159 |min259 |s159 |s20 |d11 |d2mon_day(y1,mon1) |d2mon_day(y2,mon2)return -1; /如

13、果“月,日,时,分,秒”超过范畴,则返回-1elseif(y1=y2) /判断同年if(mon1=mon2) /判断月份 if( (y-x0) ) /判断通话在三天内if(s1s1) /结束秒数不小于开始秒数,就是对的的,否则错误return 1;else cout通话时间记录错误!endl;return -1;else /通话不在三天内或结束时间不不小于开始时间则错误cout通话时间记录错误!endl;return -1;else if(mon2-mon1!=1) /不再同一月的话,那么结束时间必须比开始时间大一月cout通话时间记录错误!endl;return -1;else if(s1s

14、2) /s1跟s2不同的大小关系决定怎么算return y-x+1+mon_day(y1,mon1)*24*60;elsereturn y-x+mon_day(y1,mon1)*24*60;else /不同年的状况if(y2-y1=1&mon1=12&mon2=1) /不同年只能是去年的12月,当年的1月结束if(s1s2)return y-x+1+31*24*60;elsereturn y-x+31*24*60;elsecout通话时间记录错误!endl;return -1;四、源程序代码.#includeCustomer.h#includeBill.h#include#includedou

15、ble PrepaidFee=25.0,Cid=6.0,Local=0.1,Toll=0.7;/定义全局变量:月租,来电显示费用市内电话单价和长途电话单价const int Max=;/最大数组长度char ShowMainMeun();/显示主菜单char ShowSonMenu();/显示子菜单void ShowCustomer();/显示所有客户信息void ShowBill();/显示所有帐单信息void AddCusInfo();/添加顾客信息void AddBilInfo();/添加帐单信息void SearchCusInfo();/按照客户查找帐单信息void SearchNum

16、Info();/按照号码查找帐单信息void Calculate(Customer *cus,Bill *bill ,int m,int n);/void ShowAll();/输出所有帐单信息void ShowWrongMess(Bill *bill,int n);/输出错误帐单的信息bool Compare(int m,int *p,int n);/如果m与数组pn的任何一种数都不相等,那么就返回falseint Judge(Bill *bill,int m,Bill bil,int n);/判断bil帐单与否会发生冲突char ShowMainMeun()coutt 主菜单 endl;c

17、outt =endl;coutt | |endl;coutt | 输入1:显示所有顾客信息 |endl;coutt | 输入2:显示所有话单信息 |endl;coutt | 输入3:添加顾客信息 |endl;coutt | 输入4:添加话单信息 |endl;coutt | 输入5:按客户名查找话单 |endl;coutt | 输入6:按号码查找话单 |endl;coutt | 输入7:输出所有话费信息 |endl;coutt | 输入0:结束操作 |endl;coutt | |endl;coutt =endl;cout 费用详单目录为:电话号码-顾客姓名-月份-月租费-功能费-市话-长途-合计

18、endl;cout注:时间24:00算错误;计费月份按拨打电话时间算endlendl;char choice;cout请输入操作选项:choice;/顾客输入操作选项return choice; /返回操作选项char ShowSonMenu()coutt =endl;coutt | |endl;coutt | 输入0:返回上一级菜单 |endl;coutt | 输入1:显示查询顾客话费信息 |endl;coutt | 输入2:显示查询顾客错误话单信息 |endl;coutt | |endl;coutt =endl;char choice;coutchoice;/顾客输入操作选项return

19、choice; /返回操作选项void ShowCustomer()coutCuscount1;coutbillcount2;count2+;inf1.close();inf2.close();char point;while(point=ShowSonMenu()!=0)if(point=1)Calculate(SaveCus,SaveBill,2,count2);else if(point=2)ShowWrongMess(bill,count2);elsecout输入有误: 请重新输入!Cuscount1;count1+;ifstream inf2(话单信息.txt);int count2

20、 =0;while (!inf2.eof()inf2billcount2;coutbillcount2;count2+;inf1.close();inf2.close();char point;while(point=ShowSonMenu()!=0)if(point=1)Calculate(SaveCus,SaveBill,2,count2);else if(point=2)ShowWrongMess(bill,count2);elsecout输入有误: 请重新输入!Cuscount1;count1+; /有m-1个顾客 int count2=0;ifstream inf2(话单信息.txt

21、);while(!inf2.eof() /录入账单记录到Bill类的数组bill中inf2billcount2;count2+; /有n个账单记录inf1.close();/关闭文献inf2.close();/关闭文献Calculate(Cus,bill,count1,count2);void AddCusInfo() Customer CusMax; int num; coutnum; cout请输入顾客的相应信息:endl顾客姓名 顾客号码 与否开通来电显示(Y/N)endl; for( int n=0;nCusn;/输入添加的顾客名 ofstream outf; outf.open(顾客

22、信息.txt,ios:app); /用app方式打开文本,能直接在文本尾加入信息 for(n=0;nnum;n+) outfCusn;/添加客户文本信息 cout成功添加顾客信息。endl; outf.close();void AddBilInfo()Bill billMax;int num;coutnum;cout请输入帐单的相应信息:endl;cout主叫号码 被叫号码 开始通话时间 结束通话时间 endl;cout格式形如:endl;for( int n=0;nbilln;ofstream outf;outf.open(话单信息.txt,ios:app); /用app方式打开文本,能直接

23、在文本尾加入信息for(n=0;nnum;n+)outfbilln;/添加话单文本信息cout成功添加话单信息。endl;outf.close();void SearchCusInfo()char Name20;coutName;Customer CusMax;Bill billMax;ifstream inf1(顾客信息.txt);int count1=0;while (!inf1.eof() /录入顾客信息到Customer类数组Cus中inf1Cuscount1;count1+;/记录总共有(count1-1)个顾客ifstream inf2(话单信息.txt);int count2 =

24、0;while (!inf2.eof()inf2billcount2;count2+;/总共有count2条话单inf1.close();inf2.close();Customer SaveCus1;Bill SaveBillMax;/保存该顾客的话单信息int i=0,j=0,k=0;cout您所查找的顾客信息是:endl;bool p=false,q=false,r=false;for(i=0;icount1-1;i+)if(strcmp(Cusi.GetName(),Name)=0)SaveCus0=Cusi;for(j=0;jcount2;j+)if (strcmp(Cusi.GetN

25、umber(),billj.GetDialing()=0)coutbillj;q=true;SaveBillk=billj;k+;elsecontinue;r=true;else p=true;if (!q&r)cout无法查询该顾客信息!endl;if(p&!r)cout输入有误:无法查询该顾客信息!endl;char point;while(point=ShowSonMenu()!=0)if(point=1)Calculate(SaveCus,SaveBill,2,count2);else if(point=2)ShowWrongMess(bill,count2);elsecout输入有误

26、: 请重新输入!Cuscount1;count1+;/有count1-1个顾客Bill billMax;ifstream inf2(话单信息.txt);int count2 =0;while (!inf2.eof()inf2billcount2;count2+;/有count2条话单记录inf1.close();inf2.close();char Number15;coutNumber;Bill SaveBillMax;int i=0,j=0,k=0;cout您所查找的话单信息是:endl;bool p=true;for(i=0;icount2;i+)if(strcmp(billi.GetDi

27、aling(),Number)=0) coutbilli;j=false;SaveBillk=billi;k+;if(j)cout输入有误:无法查询该号码信息!endl;Customer SaveCus1;for(i=0;icount1-1;i+)if(strcmp(Cusi.GetNumber(),Number)=0)SaveCus0=Cusi;char point;while(point=ShowSonMenu()!=0)if(point=1)Calculate(SaveCus,SaveBill,2,count2);else if(point=2)ShowWrongMess(bill,co

28、unt2);elsecout输入有误: 请重新输入!endl;void Calculate (Customer *cus,Bill *bill,int m,int n)cout姓名t 电话号码 日期 月租 来电 市话 长途 总计endl;ofstream outa(所有信息.txt);ofstream outw(错误账单.txt);for(int i=0;im-1;i+) /计算话费int aMax=0; /int数组,用于记录已计算过的月份if(cusi.GetCID()=Y)/判断顾客与否有功能费Cid=6;elseCid=0;for(int j=0;jn;j+)if( strcmp( c

29、usi.GetNumber() , billj.GetDialing() ) = 0 ) /找出custi客户的所有帐单double local=0,toll=0,sum=0; /一种月的市话费、长途费及总电话费if(Compare(billj.GetDate(),a,n ) /判断在记录an中与否存在 billj.getdate() 记录,若存在,则跳过这条账单信息continue;elsefor(int k=j;k=0& Judge(bill,n,billk,k)=1)if( strlen( billk.GetDialed() )8 )/按照市话来看,长度不小于8的都算是长途电话toll

30、+= billk.GetTime()*Toll;elselocal += billk.GetTime()*Local;aj=billj.GetDate();/把billj存到an中 elseoutwbillk;sum=PrepaidFee+Cid+toll+local;/文本输出outacusi.GetNumber();outasetw(15)cusi.GetName();outasetw(10)billj.GetDate();outasetw(5)PrepaidFeesetw(5)Cid;outasetw(8)localsetw(8)toll;outasetw(8)sumendl;outa.

31、close();outw.close();void ShowWrongMess(Bill *bill,int n)bool a=true;for(int i=0;in;i+)if(billi.GetTime()=-1|Judge(bill,n,billi,i)=-1)/如果时间不符或者不符合判断函数的条件,则为错误账单coutbilli;a=false;if(a)cout该顾客无错误信息!endl;bool Compare(int m,int *p,int n)for(int i=0;in;i+)if(m=pi)return true;else continue;return false;in

32、t Judge(Bill *bill,int m,Bill bil,int n)/判断bi的时间与否和其她账单冲突,若冲突,则返回-1for(int i=0;im;i+)if(i!=n)if(strcmp( bil.GetDialed(),billi.GetDialing() )=0)if(strcmp(bil.GetStart(),billi.GetStart()=1)/终结时间与否冲突if(strcmp(bil.GetStart(),billi.GetEnd()=1)return 1;elsereturn -1;else if(strcmp(bil.GetStart(),billi.Get

33、Start()=-1)/终结时间与否冲突if(strcmp(billi.GetStart(),bil.GetEnd()=1)return 1;elsereturn -1;elsereturn -1;else continue;return 1;主函数代码:#includeSourceFile.h#include #include int main()cout t endl;cout t _ endl;cout t_ endl;cout t _ endl;cout endl;cout t endl; cout t-_-_-_-_-_-_-_- endl;cout t_-_-_-欢迎进入 电信计费系统- -_- endl;cout t- _-_- endl;coutt *endl;coutt * *endl;coutt * *endl; coutt * 组长: *endl;coutt * 成员: *endl;coutt * *endl;coutt * *endl;coutt * *endl;coutt * *endl; coutt *endl;Sleep(3000);/延时system(cls);/清屏int c

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!