电信计费模拟实现(C语言)_第1页
电信计费模拟实现(C语言)_第2页
电信计费模拟实现(C语言)_第3页
电信计费模拟实现(C语言)_第4页
电信计费模拟实现(C语言)_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上程序设计报告( 2012 / 2013 学年 第 二 学期)题 目: 电信计费模拟实现 专 业 通信工程 学 生 姓 名 班 级 学 号 指 导 教 师 郭 剑 指 导 单 位 计算机软件教学中心 日 期 2013年6月27日 电信计费模拟实现一、 课题内容和要求电信计费系统主要负责对电信各类客户每月帐单统计、查询、备份等管理工作。本课题以该系统要求编写一个程序,实现对电信计费的模拟。通过此可以,熟练掌握文件读写、函数调用等知识,以及查找、典型算法的设计与应用。二、 需求分析 功能框架图:(见图1)电信计费模拟系统通话记录显示备份通话记录检测通话时长异常保存话费详细话

2、费统计 图1(1) 提供可操作的主菜单:输出个菜单,用于显示以从文件中加载的总客户信息和若干个可选的功能选项。根据客户输入的选项来运行不同的功能,运行不同的函数。(2) 进行文本信息的载入:从指定的文件中以链表形式加载所需的客户信息。这里的文件是在编译时就已经指定好的、存在的文本,需设计者预先自己建立好。(3) 查找客户功能:以客户输入的电话号码进行查找对应的客户信息并将它们输出。(4) 对现有信息的保存:保存内存中的最新的记录输出到磁盘文件中。这里默认的是保存到原读取文件中并覆盖原来的信息。(5) 将信息备份到另外的一个文本中:通过文件格式读写函数,将源文件信息写到客户提供的目标文件中。(6

3、) 分类合计功能:客户话费小计、长话费小计、通话费合计、客户帐单数量。三、概要设计 1 主要结构体:struct consumer /用户信息定义char name110; /客户姓氏 char name210; /客户名char phone9; /电话号码char YN2; /来电显示是否yhzl100;struct feelist /话单信息定义 char number19; /主叫号码char number213; /被叫号码char qishi15; /通话起始时间char zhongzhi15; /通话终止时间hd300;struct huafeichar haoma9; /本人号码

4、char xingming110; /姓 char xingming210; /名int y; /月租费int g; /功能费double shinei; /市内话费double changtu; /长途话费double zonghe; /总和hfd100;2 主要函数流程图: (1)装载函数:用于实现用户与系统的交互,显示用户菜单、操作提示等,流程图如图2所示:开始调用函数打开文件成功读入数据是号码比对相同输出数据文件是否结束是不同否结束开始读入号码加载菜单读入选项选项符合条件调用函数是否继续是是否否结束图2 图3(2)查找函数:利用用户输入的号码进行顺序查找并将找到的客户的所有通话记录并输

5、出。见图3(3)查看账单:利用计算函数和输入的用户号码,进行顺序查找出用户的通话账单并显示在屏幕上。见图4开始打开文件成功读入数据文件是否结束计算时间判断时间输出话单结束是开始打开文件成功读入数据文件是否结束号码是否相同输出话费信息结束否是是否 图4 图5(4)检查错误话单:检查号码通话时长是否大于三天,并显示和保存异常话单,如图5(5)保存文件函数:将用户所有通话记录保存到本文件中。 四、 源程序代码 #include<stdio.h>#include<stdlib.h>#include<string.h>struct consumer /用户信息定义ch

6、ar name110; /姓 char name210; /名char phone9; /电话号码char YN2; /来电显示是否yhzl100;struct feelist /话单信息定义 char number19; /主叫号码char number213; /被叫号码char qishi15; /通话起始时间char zhongzhi15; /通话终止时间hd300;struct huafeichar haoma9; /本人号码char xingming110; /姓 char xingming210; /名int y; /月租费int g; /功能费double shinei; /市

7、内话费double changtu; /长途话费double zonghe; /总和hfd100;const int a=25, b=6; /a为月租费,b为来电显示费const double c=0.1,d=0.7; /c为市内电话单价,d为长途电话单价void jisuan(); /计算所有话费信息void menu(); /显示菜单double shijian(char ,char ); /计算单次通话时长void jilu(char ); /显示个人所有通话记录void xiangxi(char ); /显示个人话费账单void savefile(char ); /保存个人所有通话记录

8、void check(char ); /检查号码通话时长是否大于三天,并显示和保存异常话单int main()int e; /e为所选操作项目序号char f; /f为记录是否继续操作(Y或N)char p19; /电话号码字符串 jisuan();printf(" 欢迎进入电信计费模拟系统n");printf("*n");printf("请输入您的号码:n");gets(p1);menu(); doprintf("请选择您要进行的操作:n");scanf("%d",&e); switc

9、h(e) case 1: jilu(p1); break; case 2: xiangxi(p1); break;case 3: savefile(p1); break;case 4: check(p1); break;case 0: exit(0);default: printf("n%d不可用",e);printf("n是否继续(Y/N)?n");getchar();f=getchar();while(f='Y'|f='y');return 0; void jisuan() /打开文件,并生成“费用详单”文件 int

10、i=0,j=0;int num1; /num1为来电显示费用 double t,changtuhf=0.0,shineihf=0.0,sum=0.0; /changtuhf长途话费累加变量,shineihf市内话费累加变量,sum话费总和FILE *fp1,*fp2,*fp3; fp1=fopen("D:话单记录.txt","r"); fp2=fopen("D:用户资料.txt","r"); fp3=fopen("D:费用详单.txt","w"); if(!fp1) prin

11、tf("file cannot be opened"); exit(0); if(!fp2) printf("file cannot be opened"); exit(0); if(!fp3) printf("file cannot be opened"); exit(0); for(i=0;!feof(fp2);i+) fscanf(fp2,"%s%s%s%s",&1,&2,&yhzli.phone,&yhzli.YN); for(j=0;

12、!feof(fp1);j+) fscanf(fp1,"%s%s%s%s",&hdj.number1,&hdj.number2,&hdj.qishi,&hdj.zhongzhi);if(strcmp(yhzli.phone,hdj.number1)=0) /找出所选号码对应的通话记录 if(strcmp(yhzli.YN,"Y")=0) /判断是否开通来电显示功能 num1=b; else num1=0;t=shijian(hdj.qishi,hdj.zhongzhi); if(t-(int)t)>0) t=(int)

13、t+1; else t=(int)t; if(hdj.number20='0') changtuhf+=d*t; else shineihf+=c*t; sum=a+num1+shineihf+changtuhf; fprintf(fp3,"%-10s%-6s%-10s%-10d%-10d%-15lf%-15lf%-15lfn",yhzli.phone,1,2,a,num1,shineihf,changtuhf,sum); rewind(fp1); changtuhf=0.0,shineihf=0.0,sum=0.0;

14、 fclose(fp1); fclose(fp2); fclose(fp3);void menu() printf("*n");printf("请选择需要的服务:n");printf("*n");printf("1-通话记录显示 n");printf("2-详细话费 n");printf("3-保存话费 n");printf("4-检测通话时长异常 n");printf("0-退出 n");printf("*n");

15、void jilu(char phone1) /利用用户输入的号码进行顺序查找并将找到的客户信息输出 int i=0; FILE *tt; tt=fopen("D:话单记录.txt","r"); if(!tt) printf("file cannot be opened"); exit(0); fscanf(tt,"%s%s%s%s",&hdi.number1,&hdi.number2,&hdi.qishi,&hdi.zhongzhi); while(!feof(tt) if(str

16、cmp(hdi.number1,phone1)=0)fprintf(stdout,"%-10s%-10s%-20s%-20sn",hdi.number1,hdi.number2,hdi.qishi,hdi.zhongzhi);i+; fscanf(tt,"%s%s%s%s",&hdi.number1,&hdi.number2,&hdi.qishi,&hdi.zhongzhi); fclose(tt);void xiangxi(char phone1) /将用户月租费、功能费、市话费、长途费和合计显示在屏幕上 int i=0

17、;FILE *ss; ss=fopen("D:费用详单.txt","r");if(!ss) printf("file cannot be opened"); exit(0); fscanf(ss,"%s%s%s%d%d%lf%lf%lf",&hfdi.haoma,&hfdi.xingming1,&hfdi.xingming2,&hfdi.y,&hfdi.g,&hfdi.shinei,&hfdi.changtu,&hfdi.zonghe); while(

18、!feof(ss) if(strcmp(hfdi.haoma,phone1)=0) printf(" 用户号码 用户姓名 月租费 功能费 市话费 长途费 合计 n "); printf("%-10s%-6s%-10s%-10d%-10d%-10.3lf%-10.3lf%-10.3lfn",hfdi.haoma,hfdi.xingming1,hfdi.xingming2,hfdi.y,hfdi.g,hfdi.shinei,hfdi.changtu,hfdi.zonghe); break; else fscanf(ss,"%s%s%s%d%d%lf

19、%lf%lf",&hfdi.haoma,&hfdi.xingming1,&hfdi.xingming2,&hfdi.y,&hfdi.g,&hfdi.shinei,&hfdi.changtu,&hfdi.zonghe); fclose(ss);void savefile(char phone1) /将用户的所有通话记录输出到指定文件中 int i=0; FILE *q,*p; q=fopen("D:话单记录.txt","r"); p=fopen("D:话单保存.txt&qu

20、ot;,"w"); if(!q) printf("file cannot be opened"); exit(0); if(!p) printf("file cannot be opened"); exit(0); fscanf(q,"%s%s%s%s",&hdi.number1,&hdi.number2,&hdi.qishi,&hdi.zhongzhi); while(!feof(q) if(strcmp(hdi.number1,phone1)=0)fprintf(p,"

21、%-10s%-10s%-20s%-10sn",hdi.number1,hdi.number2,hdi.qishi,hdi.zhongzhi);i+; fscanf(q,"%s%s%s%s",&hdi.number1,&hdi.number2,&hdi.qishi,&hdi.zhongzhi); printf("您的话单已保存于D盘"); fclose(q); fclose(p);void check(char phone1) /检查号码通话时长是否大于三天,并显示和保存异常话单 int i=0; double t

22、;FILE *p1,*p2;p1=fopen("D:话单记录.txt","r"); p2=fopen("D: 话单异常.txt","w"); if(!p1) printf("file cannot be opened"); exit(0); if(!p2) printf("file cannot be opened"); exit(0); fscanf(p1,"%s%s%s%s",&hdi.number1,&hdi.number2,&

23、;hdi.qishi,&hdi.zhongzhi); while(!feof(p1) t=shijian(hdi.qishi,hdi.zhongzhi);if(t>4320) fprintf(p2,"%-10s%-10s%-20s%-10sn",hdi.number1,hdi.number2,hdi.qishi,hdi.zhongzhi);if(strcmp(phone1,hdi.number1)=0)printf("您的异常通话时长话单为:n%-10s%-10s%-20s%-10sn",hdi.number1,hdi.number2,hd

24、i.qishi,hdi.zhongzhi);else fscanf(p1,"%s%s%s%s",&hdi.number1,&hdi.number2,&hdi.qishi,&hdi.zhongzhi); i+; fclose(p1);fclose(p2);double shijian(char kt,char jt)int tyear,tmonth,tday,thour,tminute,ts; int kyear,kmonth,year,month;double t,t1;tyear=(jt0-kt0)*1000+(jt1-kt1)*100+(

25、jt2-kt2)*10+(jt3-kt3);tmonth=(jt4-kt4)*10+(jt5-kt5); tday=(jt6-kt6)*10+(jt7-kt7);thour=(jt8-kt8)*10+(jt9-kt9);tminute=(jt10-kt10)*10+(jt11-kt11);ts=(jt12-kt12)*10+(jt13-kt13); kyear=kt0*1000+kt1*100+kt2*10+kt3; if(kyear%4=0&&kyear%100!=0|kyear%400=0) year=tyear*;else year=tyear*;kmonth=(kt6-

26、48)*10+(kt7-48);switch(tmonth)case -11: if(kyear%4=0&&kyear%100!=0|kyear%400=0) month=-335; else month=-334; break;case 0: month=0; break;case 1: month=kmonth; break;default: break;t1=year+month*1440+tday*1440+thour*60+tminute+ts/60.0;t=t1;return t; /返回值:单次通话时间五、测试数据及其结果分析(1) 主菜单:图6(2) 主要操作图

27、7(3) 主要功能图8(4) 输出的所有话单记录文件图9(5) 输出账单文件图10(6) 退出系统输入0或当出现“是否继续<Y/N>”时输入N图11结果分析:1)在输入菜单选项时如果输入的内容不是0-4之间的数字,而是其他数字,系统将显示“不可用,是否继续<Y/N>”,等待下次正确的输入。 2)当结束某项操作时,系统会自动询问用户是否继续查询。 3)当输入文件时,如文件事先未建立,系统将提示file cannot be opened 4)当输出文件时,如文件事先未建立,系统将自行建立。 5)当选择“检查通话时长异常”选项时,系统会提示如果异常将会产生的结果,如果有异常,系统将自动输出异常通话记录。六、调试过程中的问题 1)输出格式的控制问题:选择选项二中显示详细话单是只能显示

温馨提示

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

评论

0/150

提交评论