模拟电信计费系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

3.8模拟电信计费系统的设计与实现3.8.1设计题目及要求模拟电信计费系统的设计与实现要求:(1)计费功能。根据存放在源数据文件中的通话记录和长途费率文件对每一条通话记录计算其通话费用,并将结果保存在费用文件中。其中:通话费的计算方法如下:通话费=长途电话费+本地电话费长途电话费=费率(元/分钟)×通话时长(分钟)(通话时长不满1分钟的按1分钟计算)本地电话费为:3分钟以内0.5元,以后每3分钟递增0.2元。(2)话费查询。输入一个电话号码,从费用文件中统计该电话号码的所有本地话费、长途话费,并从用户文件中查找其用户名,最后在屏幕上显示:用户名电话号码本地话费长途话费话费总计(3)话单查询。输入一个电话号码,查询并在屏幕显示该用户的所有通话记录,格式为:用户名主叫电话号码被叫电话号码通话时长3.8.2设计思想及程序流程框图程序设计大致思路:1.本系统的输入输出文件本系统的输入文件有三个:(1)源数据文件(hd.dat)存放:主叫区号主叫电话号码被叫区号被叫电话号码通话时长(秒)每次通话作为一条记录,占源数据文件的一行。每条记录中各数据之间以空格间隔,例如:025834912340106232098390每个电话号码可以有多次通话记录。如果主、被叫区号相同,则通话记录为本地通话记录;否则为长途通话记录。(2)长话费率文件(fl.dat)存放:区号费率例如:0101.20表示从本地打往区号为010的地区每分钟收费1.20元。(3)用户文件(yh.dat)存放:电话号码用户姓名例如:83491234张明本系统的输出文件有一个:费用文件(fy.dat)存放:主叫电话号码通话类型话费金额其中,通话类型表示本次通话是长途还是本地。2.系统输入数据hd.dat—有20条通话记录,分别是:fl.dat有4条记录0258349123402585319971700101.2002584927038010621100452360201.2002587216340025845210093100210.800258349123405718219951610005711.000255812032102181094532500258349123402585319971800258492703802583491234115yh.dat有5条记录02558120321025872163404783491234张明02587216340010621100459384927038李小红025834912340106211004579287216340王励0258492703805718219951693183492200赵强025834912340258531997158058120321杨冬02584927038025834912343580255812032102181094532197025872163400258452100925602587216340010621100451930258349220002584521009320025834912340258531997127002584927038025834912342310258349220002584927038723.数据结构(可用C++实现)三个类:话单(callist)、费用(charge)和用户(user)两个常量:存放本地费率和递增量(1)话单类数据成员:主叫区号、主叫电话号码、被叫区号、被叫电话号码、通话时长数据类型属性(私有、保护、公有)方法:构造函数和析构函数从源数据文件读入通话数据显示一次通话数据取主叫区号取主叫电话号码等等(2)费用类——从话单类派生数据成员:通话类型、通话费用数据类型属性(私有、保护、公有)方法:构造函数和析构函数从费用文件读入费用数据向费用文件输出数据屏幕显示费用求通话费用求通话类型取(返回)通话类型取通话费用等等(3)用户类数据成员:姓名、电话号码数据类型属性(私有、保护、公有)方法:设置用户的电话号码查询用户名设置用户名查询用户的电话号码显示用户名和电话号码等等(1)话单类(CallList)classCallList{protected:char*ZCode;//主叫区号char*ZNum;//主叫号码char*BCode;//被叫区号char*BNum;//被叫号码intTime;//通话时长(秒)public:CallList(char*zcode=NULL,char*znum=NULL,char*bcode=NULL,char*bnum=NULL,inttime=0);~CallList();voidSet(char*zcode=NULL,char*znum=NULL,char*bcode=NULL,char*bnum=NULL,inttime=0);voidPrint();char*getZC();char*getZN();char*getBC();char*getBN();intgetTime();};(2)费用类(Charge)——从话单类派生classCharge:publicCallList//公有继承{protected:intCallStyle;//为0时表示本地通话,为1时表示长途通话floatExpense;//话费public:Charge(char*zcode=NULL,char*znum=NULL,char*bcode=NULL,char*bnum=NULL,inttime=0,intcallstyle=0,floatexp=0);voidSet(char*zcode=NULL,char*znum=NULL,char*bcode=NULL,char*bnum=NULL,inttime=0);voidComputeSty();intGetStyle();floatGetExp();voidPrintExp();};(3)用户类(Consumer)classConsumer{protected:char*Name;//用户姓名char*Num;//用户电话号码public:Consumer(char*name=NULL,char*num=NULL);~Consumer();voidSetName(char*name=NULL);voidSetNum(char*num=NULL);char*GetName();char*GetNum();voidPrint();};(4)费率类(Rate)classRate{protected:char*Code;//区号floatrate;//费率public:Rate(char*code=NULL,floatrat=0);~Rate();voidSet(char*code=NULL,floatra=0);char*GetCode();floatGetRate();voidprintRate();};根据自顶向下,逐步细化的程序设计思想,考虑将程序分为五大模块:文件导入模块,话费计算模块,文件导出模块,查询模块以及确认退出模块。由此所得的程序结构图大致如下所示:由系统结构图得到相应各个主要模块的的函数如下:1.charMenu(char*ptr);//函数功能:菜单显示并获得键盘选择//函数参数:字符型指针ptr,表示菜单选择时输入字符串地址//函数返回值:输入的键盘的ASCII码对应字符2.Rate*InputRate(int&total);//函数功能:从文件中读取费率文件并做相关异常处理//函数参数:整型total,表示费率的总数//函数返回值:Rate型,表示对象数组的首地址3.Consumer*InputConsumer(int&total);//函数功能:从文件中读取用户文件并做相关异常处理//函数参数:整型total,表示用户的总数//函数返回值:Consumer型,表示对象数组的首地址4.Charge*InputCharge(int&total);//函数功能:从文件中读取通话记录文件并做相关异常处理//函数参数:整型total,表示通话记录的总数//函数返回值:Charge型,表示对象数组的首地址5.intComputeExp(Charge*ptc=NULL,Rate*ptr=NULL,inttotalCharge=0,inttotalRate=0);//函数功能:计算每个通话记录的话费//函数参数:Charge型指针ptc,表示通话记录对象数组的首地址//Rate型指针ptr,表示费率对象数组的首地址开始键盘输入选择功能文件导入话费计算文件导出查询退出系统//整型totalCharge,表示通话记录总数//整形totalRate,表示费率总数//函数返回值:整型,0表示异常退出;1表示正常退出6.intOutput(Charge*point=NULL,inttotal=0);//函数功能:导出数据到文件保存//函数参数:Marks指针point,表示对象数组的首地址//整型total,表示学生总数//函数返回值:整形,0表示正常输出;1表示异常输出7.intPrintFY(Charge*point=NULL,inttotal=0);//函数功能:显示导出到文件保存的数组//函数参数:Charge指针,表示通话记录对象数组的首地址//整型total,表示通话记录总数//函数返回值:整形,0表示正常输出;1表示异常输出8.intFindExp(Charge*ptch=NULL,Consumer*ptco=NULL,inttotalCharge=0,inttotalConsumer=0);//函数功能:话费查询//函数参数:Charge型指针ptch,表示通话记录对象数组的首地址//Consumer型指针ptco,表示用户对象数组的首地址//整型totalCharge,表示通话记录总数//整形totalConsumer,表示用户总数//函数返回值:整型,1表示异常退出;0表示正常退出9.intFindList(Charge*ptch=NULL,Consumer*ptco=NULL,inttotalCharge=0,inttotalConsumer=0);//函数功能:话单查询//函数参数:Charge型指针ptch,表示通话记录对象数组的首地址//Consumer型指针ptco,表示用户对象数组的首地址//整型totalCharge,表示通话记录总数//整形totalConsumer,表示用户总数//函数返回值:整型,1表示异常退出;0表示正常退出10.voidExit(char*p1,Rate*p2,Consumer*p3,Charge*p4);//函数功能:选择是否退回DOS,确定后释放相关内存//函数参数:字符型指针p1,表示Menu模块中输入选择字符串的首地址//Rate型指针p2,表示费率对象数组的首地址//Consumer型指针p3,表示用户对象数组的首地址//Charge型指针p4,表示通话记录对象数组的首地址//函数返回值:无3.8.3逻辑功能程序1.HeaderFiles(1).CallList.h#includeiostream.hclassCallList{protected:char*ZCode;//主叫区号char*ZNum;//主叫号码char*BCode;//被叫区号char*BNum;//被叫号码intTime;//通话时长(秒)public:CallList(char*zcode=NULL,char*znum=NULL,char*bcode=NULL,char*bnum=NULL,inttime=0);~CallList();voidSet(char*zcode=NULL,char*znum=NULL,char*bcode=NULL,char*bnum=NULL,inttime=0);voidPrint();char*getZC();char*getZN();char*getBC();char*getBN();intgetT

1 / 30
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功