模拟电信计费系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.8.2 设计思想及程序流程框图
程序设计大致思路: 1.本系统的输入输出文件
本系统的输入文件有三个: (1) 源数据文件(hd.dat) 存放:主叫区号 主叫电话号码 被叫区号 被叫电话号码 通话时长(秒) 每次通话作为一条记录,占源数据文件的一行。 每条记录中各数据之间以空格间隔,例如:025 83491234 010 62320983 90 每个电话号码可以有多次通话记录。 如果主、被叫区号相同,则通话记录为本地通话记录;否则为长途通话记录。 (2) 长话费率文件(fl.dat) 存放:区号 费率 例如:010 1.20 表示从本地打往区号为 010 的地区每分钟收费 1.20 元。 (3) 用户文件(yh.dat) 存放: 电话号码 用户姓名 例如: 83491234 张明 本系统的输出文件有一个: 费用文件(fy.dat) 存放:主叫电话号码 通话类型 话费金额 其中,通话类型表示本次通话是长途还是本地。 2.系统输入数据
退出系统
2. Rate *InputRate(int &total); //函数功能:从文件中读取费率文件并做相关异常处理 //函数参数:整型 total,表示费率的总数 //函数返回值:Rate 型,表示对象数组的首地址
3. Consumer *InputConsumer(int &total); //函数功能:从文件中读取用户文件并做相关异常处理 //函数参数:整型 total,表示用户的总数 //函数返回值:Consumer 型,表示对象数组的首地址
~Rate();
void Set(char *code=NULL,float ra=0);
char *GetCode();
float GetRate();
void printRate();
};
根据自顶向下,逐步细化的程序设计思想,考虑将程序分为五大模块:文件
导入模块,话费计算模块,文件导出模块,查询模块以及确认退出模块。由此所 得的程序结构图大致如下所示:
3.8 模拟电信计费系统的设计与实现
3.8.1 设计题目及要求
模拟电信计费系统的设计与实现 要求:(1) 计费功能。根据存放在源数据文件中的通话记录和长途费率文 件对每一条通话记录计算其通话费用,并将结果保存在费用文件中。其 中: 通话费的计算方法如下: 通话费=长途电话费+本地电话费 长途电话费=费率(元/分钟)×通话时长(分钟) (通话时长不满 1 分钟的按 1 分钟计算) 本地电话费为:3 分钟以内 0.5 元,以后每 3 分钟递增 0.2 元。 (2) 话费查询。输入一个电话号码,从费用文件中统计该电话号码 的所有本地话费、长途话费,并从用户文件中查找其用户名,最后在 屏幕上显示: 用户名 电话号码 本地话费 长途话费 话费总计 (3) 话单查询。输入一个电话号码,查询并在屏幕显示该用户的所 有通话记录,格式为: 用户名 主叫电话号码 被叫电话号码 通话时长
//
Consumer 型指针 ptco,表示用户对象数组的首地址
//
整型 totalCharge,表示通话记录总数
//
整形 totalConsumer,表示用户总数
//函数返回值:整型,1 表示异常退出;0 表示正常退出
10.void Exit(char *p1,Rate *p2,Consumer *p3,Charge *p4);
3.数据结构(可用 C++实现)
三个类:话单(callist)、费用(charge)和用户(user)
两个常量:存放本地费率和递增量
(1)话单类
数据成员: 主叫区号、主叫电话号码、被叫区号、被叫电话号码、通话
时长
数据类型
属性(私有、保护、公有)
方法: 构造函数和析构函数
从源数据文件读入通话数据
显示一次通话数据
//函数返回值:无
3.8.3 逻辑功能程序 1.Header Files (1) .CallList.h #include<iostream.h>
4. Charge *InputCharge(int &total); //函数功能:从文件中读取通话记录文件并做相关异常处理 //函数参数:整型 total,表示通话记录的总数 //函数返回值:Charge 型,表示对象数组的首地址
5. int ComputeExp(Charge *ptc=NULL,Rate *ptr=NULL,
025 87216340 025 84521009 256
025 87216340 010 62110045 193
025 83492200 025 84521009 320
025 83491234 025 85319971 270
025 84927038 025 83491234 231
025 83492200 025 84927038 72
//函数返回值:整型,1 表示异常退出;0 表示正常退出
9.int FindList(Charge *ptch=NULL,Consumer *ptco=NULL,
int totalCharge=0,int totalConsumer=0);
//函数功能:话单查询
//函数参数:Charge 型指针 ptch,表示通话记录对象数组的首地址
//函数返回值:整型,0 表示异常退出;1 表示正常退出
6. int Output(Charge *point=NULL,int total=0);
//函数功能:导出数据到文件保存
//函数参数:Marks 指针 point,表示对象数组的首地址
//
整型 total,表示学生总数
//函数返回值:整形,0 表示正常输出;1 表示异常输出
查询用户名 设置用户名
查询用户的电话号码 显示用户名和电话号码 等等 (1) 话单类(CallList)
class CallList
{
protected:
char *ZCode;
//主叫区号
char *ZNum;
//主叫号码
char *BCode;
//被叫区号
char *BNum;
//被叫号码
int Time;
//函数功能:选择是否退回 DOS,确定后释放相关内存
//函数参数:字符型指针 p1,表示 Menu 模块中输入选择字符串的首地址
//
Rate 型指针 p2,表示费率对象数组的首地址
//
Consumer 型指针 p3,表示用户对象数组的首地址
//
Charge 型指针 p4,表示通话记录对象数组的首地址
7. int PrintFY(Charge *point=NULL,int total=0);
//函数功能:显示导出到文件保存的数组
//函数参数:Charge 指针,表示通话记录对象数组的首地址
//
整型 total,表示通话记录总数
//函数返回值:整形,0 表示正常输出;1 表示异常输出
8. int FindExp(Charge *ptch=NULL,Consumer *ptco=NULL,
87216340 王励
025 84927038 0571 82199516 931
83492200 赵强
025 83491234 025 85319971 580
58120321 杨冬
025 84927038 025 83491234 358
025 58120321 021 81094532 197
char *bcode=NULL,char *bnum=NULL,int time=0);
void Print();
char *getZC();
char *getZN();
char *getBC();
char *getBN();
int getTime();
};
(2) 费用类(Charge) —— 从话单类派生
int totalCharge=0,int totalConsumer=0);
//函数功能:话费查询
//函数参数:Charge 型指针 ptch,表示通话记录对象数组的首地址
//
Consumer 型指针 ptco,表示用户对象数组的首地址
//
整型 totalCharge,表示通话记录总数
//
整形 totalConsumer,表示用户总数
void SetNum(char *num=NULL);
char *GetName();
char *GetNum();
void Print();
};
(4)费率类(Rate)
class Rate
{
protected:
char *Code;
//区号
float rate;
//费率
public:
Rate(char *code=NULL,float rat=0);
开始
键盘输入选择功能
文件导入
话费计算
文件导出
查询
由系统结构图得到相应各个主要模块的的函数如下: 1. char Menu(char *ptr); //函数功能:菜单显示并获得键盘选择 //函数参数:字符型指针 ptr,表示菜单选择时输入字符串地址 //函数返回值:输入的键盘的 ASCII 码对应字符
}; (3)用户类(Consumer)
class Consumer
{
protected:
char *Name;
//用户姓名
char *Num;
//用户电话号码
public:
Consumer(char *name=NULL,char *num=NULL);
~Consumer();
void SetName(char *name=NULL);
//通话时长(秒)
public:
CallList(char *zcode=NULL,char *znum=NULL,
char *bcode=NULL,char *bnum=NULL,int time=0);
~CallList();
void Set(char *zcode=NULL,char *znum=NULL,
hd.dat—有 20 条通话记录,分别是: 025 83491234 025 85319971 70 025 84927038 010 62110045 236 025 87216340 025 84521009 310 025 83491234 0571 82199516 100 025 58120321 021 81094532 50 025 83491234 025 85319971 80 025 84927038 025 83491234 115
class Charge:public CallList { protected:
int CallStyle; float Expense;
//公有继承
//为 0 时表示本地通话,为 1 时表示长途通话 //话费
public: Charge(char *zcode=NULL,char *znum=NULL,char *bcode=NULL, char *bnum=NULL,int time=0,int callstyle=0,float exp=0); void Set(char *zcode=NULL,char *znum=NULL, char *bcode=NULL,char *bnum=NULL,int time=0); void ComputeSty(); int GetStyle(); float GetExp(); void PrintExp();
fl.dat 010 020 021 0571
有 4 条记录 1.20 1.20 0.80 1.00
yh.dat 有 5 条记录
025 58120321 025 87216340 47
83491234 张明
025 87216340 010 62110045 93
84927038 李小红
025 83491234 010 62110045 792
int totalCharge=0,int totalRate=0);
//函数功能:计算每个通话记录的话费
//函数参数:Charge 型指针 ptc,表示通话记录对象数组的首地址
//
Rate 型指针 ptr,表示费率对象数组的首地址
//
整型 totalCharge,表示通话记录总数
//
整形 totalRate,表示费率总数
取主叫区号
取主叫电话号码 等等
(2)费用类 —— 从话单类派生
数据成员: 通话类型、通话费用
数据类型
属性(私有、保护、公有)
方法: 构造函数和析构函数
从费用文件读入费用数据
向费用文件输出数据
屏幕显示费用
求通话费用 求通话类型 取(返回)通话类型
取通话费用 等等 (3)用户类 数据成员: 姓名、电话号码 数据类型 属性(私有、保护、公有) 方法: 设置用户的电话号码
相关文档
最新文档