C++实验:电信模拟计费系统

合集下载

中国电信在线计费系统(OCS)方案介绍

中国电信在线计费系统(OCS)方案介绍

业务丰富
统一客户视图 资费灵活性 业务捆绑和套餐 市场推广方式
不能共享 低 低 中 不支持 不支持 高 高 高 较高 较高 中
31
共享 高 高 少 要登记客户资料 不支持 没有实时计费 不支持 低 高 低 低 中 高
共享 高 高 多 支持 有 高 中 成熟的商用案例不多 中 各设备只关注其核心功能 高 中 低
无 根据用户的信用级别,可以把信用低的用户 欠费 放在OCS方案中管理;对于信用高的放在Hot 成本 billing中管理。 高 高 低 有如下潜在ARPU值损失和用户流失 有如下潜在ARPU值损失和用 本方案的风险主要在于设备成熟度方面,通 成本: 户流失成本: 过测试和网上应用可以消除。 1)没有统一的用户管理,市场推 1)需要记录比较完整的用 1)用户可以在系统间自由切换 广支持能力差。 户资料,拓展渠道受限。 2)可以实现多业务捆绑和交叉优惠 2)存在时延和不能提供AoC 3)用户体验好,支持灵活的市场推广 机会 2)不能实现多种业务捆绑。 成本 3)不能实现同离线系统的融合计 ,用户使用体验存在缺陷。 费。 3)高附加值业务开展门槛 4)计费策略不灵活 高(如国际长途,小额支付 5)升级改造时间长,失去最佳市 )。 场推广时间 6)付费属性不能自由切换 低 中 低 集成 包括同客服系统,帐务系统等支撑 包括同客服系统,帐务系统 包括同客服系统,帐务系统等支撑系统的集 33 成本 中国电信股份有限公司上海研究院 系统的集成费用 等支撑系统的集成费用 成费用
64%
ቤተ መጻሕፍቲ ባይዱ48%
36%
29%
40% 30% 20% 10% 0%
2001
2002 签约用户
2003 预付费用户
2004
中移动2004年 新增用户中95% 根据中国移动2004年统计,签约用户ARPU值为预付费用户 根据中国联通2003年统计,签约用户ARPU值

C 课程设计模拟电信计费.

C  课程设计模拟电信计费.

课程设计设计题目:C++程序设计课程设计模拟电信计费课程设计任务书课程设计题目:模拟电信计费一、课程设计的原始资料及依据查阅有关资料,进一步理解面向对象程序设计的思想,并编写一个简单的管理系统。

通过本设计可以加深理解使用面向对象程序设计思想开发一个系统的方法,提高分析问题、解决问题和实际动手的能力。

二、课程设计主要内容及要求设计内容:假设电信计费标准:固定电话长途话费0.02元/秒,固定电话本地话费0.06元/分,无线电话长途话费1.00元/分,无线电话本地话费0.60元/分,无线电话接听话费0.50元/分。

在源数据文件中存放:电话号码,电信服务类别,通话时间(秒)。

根据源数据文件生成如下列表:固定长途电话:长途电话号码和通话时间。

固定本地电话:本地电话号码和通话时间。

无线长途电话:长途电话号码和通话时间。

无线本地电话:本地电话号码和通话时间。

无线接听电话:接听电话号码和通话时间。

统计电信费用:电话号码、累计电信费用。

(根据自己的任务填写内容)设计要求:(1)要求在设计的过程中建立清晰的类层次,并画出类图;(2) 设计功能满足要求、易于操作的友好界面;(3) 在系统的设计中,至少要用到面向对象的一种机制:继承、多态等;(4) 在完成该题目时,小组人员进行详细的任务分工,并要在报告中体现出来。

三、对课程设计说明书撰写内容、格式、字数的要求1.课程设计说明书是体现和总结课程设计成果的载体,主要内容包括:设计题目、设计目的、设备器材、设计原理及内容、设计步骤、遇到的问题及解决方法、设计总结、参考文献等。

一般不应少于3000字。

2.在适当位置配合相应的实验原理图、功能模块图、算法流程图等图表进行说明。

应做到文理通顺,内容正确完整,书写工整,装订整齐。

3.设计总结部分主要写本人完成工作简介以及自己的设计体会,包括通过课程设计学到了什么,哪里遇到了困难,解决的办法以及今后的目标。

4.课程设计说明书手写或打印均可。

C语言计费系统报告

C语言计费系统报告

学号0121510880212《计算机基础与综合编程实验》报告学院计算机科学与技术学院专业计算机类班级m1502班姓名韩龙指导教师张蕊日期2016-4-25页脚内容0页脚内容1目录1.实验目的-------------------------------------------------------12.系统功能描述-------------------------------------------------1添加卡信息----------------------------------------------------1查询卡信息----------------------------------------------------2上机操作-------------------------------------------------------------2下机操作--------------------------------------------------------------2充值操作--------------------------------------------------------------3退费操作--------------------------------------------------------------3注销卡操作-----------------------------------------------------------43.典型算法分析-------------------------------------------------44.开发难点与体会-------------------------------------------------75.实验总结----------------------------------------------------------8页脚内容21 实验目的了解迭代式软件开发的一般过程,领会需求分析、系统设计、系统实现以及系统测试等阶段的任务要点;深入理解和熟练应用C/C++语言的基本概念和基本原理,如数据类型、顺序选择和循环结构程序设计、函数等;熟练理解和掌握C/C++语言的高级知识,如字符串、结构体、文件读写、动态内存管理、链表等技术;熟练掌握在C/C++语言环境下,模块化开发的具体实现方法,深入领会和分析一些C/C++程序设计实用开发方法和技术;综合应用所学知识去分析需求,能够把所学的C/C++语言技术应用到具体的实践中去,并迭代式开发出一个软件系统,从而培养学生分析和解决问题的能力。

电信计费模拟实现(C语言)..

电信计费模拟实现(C语言)..

电信计费模拟实现(C语⾔)..程序设计报告( 2012 / 2013 学年第⼆学期)题⽬:电信计费模拟实现专业通信⼯程学⽣姓名班级学号指导教师郭剑指导单位计算机软件教学中⼼⽇期 2013年6⽉27⽇电信计费模拟实现⼀、课题内容和要求电信计费系统主要负责对电信各类客户每⽉帐单统计、查询、备份等管理⼯作。

本课题以该系统要求编写⼀个程序,实现对电信计费的模拟。

通过此可以,熟练掌握⽂件读写、函数调⽤等知识,以及查找、典型算法的设计与应⽤。

⼆、需求分析功能框架图:(见图1)图1(1)提供可操作的主菜单:输出个菜单,⽤于显⽰以从⽂件中加载的总客户信息和若⼲个可选的功能选项。

根据客户输⼊的选项来运⾏不同的功能,运⾏不同的函数。

(2)进⾏⽂本信息的载⼊:从指定的⽂件中以链表形式加载所需的客户信息。

这⾥的⽂件是在编译时就已经指定好的、存在的⽂本,需设计者预先⾃⼰建⽴好。

(3)查找客户功能:以客户输⼊的电话号码进⾏查找对应的客户信息并将它们输出。

(4)对现有信息的保存:保存内存中的最新的记录输出到磁盘⽂件中。

这⾥默认的是保存到原读取⽂件中并覆盖原来的信息。

(5)将信息备份到另外的⼀个⽂本中:通过⽂件格式读写函数,将源⽂件信息写到客户提供的⽬标⽂件中。

(6)分类合计功能:客户话费⼩计、长话费⼩计、通话费合计、客户帐单数量。

三、概要设计1 主要结构体:ishi,hd[j].zhongzhi);if((t-(int)t)>0) t=(int)t+1;else t=(int)t;if(hd[j].number2[0]=='0')changtuhf+=d*t;elseshineihf+=c*t;}}sum=a+num1+shineihf+changtuhf;fprintf(fp3,"%-10s%-6s%-10s%-10d%-10d%-15lf%-15lf%-15lf\n",yhzl[i].phone,yhzl[i].name1,yhzl[i].name2,a,num1,shineihf,changtuhf,sum);rewind(fp1);changtuhf=,shineihf=,sum=;}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");}void jilu(char phone1[]) xt","r");if(!tt){printf("file cannot be opened");exit(0);}fscanf(tt,"%s%s%s%s",&hd[i].number1,&hd[i].number2,&hd[i].qishi,&hd[i].zhongzhi);while(!feof(tt)){if(strcmp(hd[i].number1,phone1)==0)fprintf(stdout,"%-10s%-10s%-20s%-20s\n",hd[i].number1,hd[i].number2,hd[i].qishi,h d[i].zhongzhi); i++;fscanf(tt,"%s%s%s%s",&hd[i].number1,&hd[i].number2,&hd[i].qishi,&hd[i].zhongzhi);}fclose(tt);}void xiangxi(char phone1[]) xt","r");if(!ss){printf("file cannot be opened");exit(0);}fscanf(ss,"%s%s%s%d%d%lf%lf%lf",&hfd[i].haoma,&hfd[i].xingming1,&hfd[i].xingming2,&hfd[i] .y,&hfd[i].g,&hfd[i].shinei,&hfd[i].changtu,&hfd[i].zonghe);while(!feof(ss)){if(strcmp(hfd[i].haoma,phone1)==0){printf(" ⽤户号码⽤户姓名⽉租费功能费市话费长途费合计\n ");printf("%-10s%-6s%-10s%-10d%-10d%%%\n",hfd[i].haoma,hfd[i].xingming1,hfd[i].xingming2,hfd [i].y,hfd[i].g,hfd[i].shinei,hfd[i].changtu,hfd[i].zonghe);break;}elsefscanf(ss,"%s%s%s%d%d%lf%lf%lf",&hfd[i].haoma,&hfd[i].xingming1,&hfd[i].xingming2,&hfd[i] .y,&hfd[i].g,&hfd[i].shinei,&hfd[i].changtu,&hfd[i].zonghe);}fclose(ss);}void savefile(char phone1[]) xt","r");p=fopen("D:\\话单保存.txt","w");if(!q){printf("file cannot be opened");exit(0);}if(!p){printf("file cannot be opened");while(!feof(q)){if(strcmp(hd[i].number1,phone1)==0)fprintf(p,"%-10s%-10s%-20s%-10s\n",hd[i].number1,hd[i].number2,hd[i].qishi,hd[i]. zhongzhi);i++;fscanf(q,"%s%s%s%s",&hd[i].number1,&hd[i].number2,&hd[i].qishi,&hd[i].zhongzhi);}printf("您的话单已保存于D盘");fclose(q);fclose(p);}void check(char phone1[]) xt","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",&hd[i].number1,&hd[i].number2,&hd[i].qishi,&hd[i].zhongzhi);while(!feof(p1)){t=shijian(hd[i].qishi,hd[i].zhongzhi);if(t>4320){fprintf(p2,"%-10s%-10s%-20s%-10s\n",hd[i].number1,hd[i].number2,hd[i].qishi,hd[i].zho ngzhi);if(strcmp(phone1,hd[i].number1)==0)printf("您的异常通话时长话单为:\n%-10s%-10s%-20s%-10s\n",hd[i].number1,hd[i].number2,hd[i].qishi,hd[i].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=(jt[0]-kt[0])*1000+(jt[1]-kt[1])*100+(jt[2]-kt[2])*10+(jt[3]-kt[3]);tmonth=(jt[4]-kt[4])*10+(jt[5]-kt[5]);tday=(jt[6]-kt[6])*10+(jt[7]-kt[7]);thour=(jt[8]-kt[8])*10+(jt[9]-kt[9]);tminute=(jt[10]-kt[10])*10+(jt[11]-kt[11]);ts=(jt[12]-kt[12])*10+(jt[13]-kt[13]);kyear=kt[0]*1000+kt[1]*100+kt[2]*10+kt[3];if(kyear%4==0&&kyear%100!=0||kyear%400==0)year=tyear*527040;elseyear=tyear*525600;kmonth=(kt[6]-48)*10+(kt[7]-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/;t=t1;return t; //返回值:单次通话时间}五、测试数据及其结果分析(1)主菜单:图6(2)主要操作图7(3)主要功能图8(4)输出的所有话单记录⽂件图9(5)输出账单⽂件图10(6)退出系统输⼊0或当出现“是否继续”时输⼊N图11结果分析:1)在输⼊菜单选项时如果输⼊的内容不是0-4之间的数字,⽽是其他数字,系统将显⽰“不可⽤,是否继续”,等待下次正确的输⼊。

程序设计————模拟电信计费系统

程序设计————模拟电信计费系统

程序设计报告( / 学年第学期)题目:很简易电信计费模拟系统专业学生姓名班级学号指导教师指导单位日期四、源程序代码#include<stdio.h>#include<stdlib.h>#include<string.h>int denglu();int caidan1(); //管理员菜单int caidan2(); //用户菜单int add(); //管理员菜单中的添加用户功能函数int delet(); //管理员菜单中的删除用户功能函数int change(); //管理员菜单中的修改用户功能函数int search(); //管理员菜单中的查询用户功能函数int chahuafei(); //用户菜单中的查话费功能函数int chahuadan(); //用户菜单中的查话单功能函数int i; // 用于确定是哪个用户int q; // 用于确定是管理员还是用户int n=0; //用于管理员和用户返回登录页面int ww=0; //用于管理员返回管理员菜单int gg=0; //用于用户返回用户菜单int k=2; //用户信息有两条int w=6; //通话记录有条double ben[10]; //用于统计各用户本地话费double chang[10]; //用于统计各用户长途话费double sum[10]; //用于统计各用户总话费char namex[10];char passwordx[7];char numberx[8];struct gerenxinxi //用户信息{char name[10];char password[7];char number[8];double bendi;double changtu;double sum;};struct tonghuajilu // 通话记录{char name[10];char zhujiao[8];char beijiao[8];double time;int type; // 1表示本地,表示长途};struct feiyong //每条通话记录的费用{char number[8];double bendi;double changtu;double sum;};struct gerenxinxi aaa[10]={ //初始化两个用户的个人信息{"mike","000000","1234560"},{"james","000001","1234561"}};char gname[10]= "jack";char gpassword[7]= "111111" ; //初始化管理员的信息struct tonghuajilu bbb[10]={{"mike","1234560","1000000",100.0,1},{"james" ,"1234561","1000001",12.0,1}, //初始化前条通话记录{"james" ,"1234561","1000001",12.0,1},{"mike" ,"1234560","1000001",100.0,1},{"mike","1234560","1000002",30.0,2},{"james","1234561","1000003",14.0,2}};struct feiyong ccc[10];int main(){int x,t,y;for(x=0;x<w;x++) //求ccc[]的值{strcpy(&ccc[x].number,&bbb[x].zhujiao);switch(bbb[x].type){case 1:{if(bbb[x].time<=3)ccc[x].bendi=0.2;elseccc[x].bendi= (bbb[x].time-3)*0.1+0.2;};break;case 2:{ccc[x].changtu=bbb[x].time*2.0; //设长途费率元/分};break;}ccc[x].sum=ccc[x].bendi+ccc[x].changtu;}for(t=0;t<k;t++) //求各用户的各费用{for(y=0;y<w;y++){if(strcmp(aaa[t].number,ccc[y].number)==0){ben[t]=ben[t]+ccc[y].bendi;chang[t]=chang[t]+ccc[y].changtu;sum[t]=ben[t]+chang[t];}}}do{n=0;denglu(); //登录函数,n用于返回登录页面}while(n);}int denglu(){int a=1;int b=1;int m=1;int l=1;system("cls");printf("=========欢迎登录=========\n"); printf("请选择身份登录:______管理员;______普通用户\n"); printf("请输入:");scanf("%d",&q);while(l){if(q!=1&&q!=2){printf("error!\n");printf("请输入:");scanf("%d",&q);}elsel=0;}if(q==1){printf("请输入管理员您的名字: ");scanf("%s",namex);while(a){if (strcmp(namex,gname)!=0){printf("error!\n");printf("请输入管理员您的名字: ");scanf("%s",namex);}elsea=0;}printf("请输入密码: ");scanf("%s",passwordx);while(b){if (strcmp(passwordx,gpassword)!=0){printf("error!\n");printf("请输入密码: ");scanf("%s",passwordx);}elseb=0;}printf("恭喜管理员登录成功!\n");do{ww=0;caidan1();}while(ww);}else if(q==2){do{gg=0;caidan2(); //进入用户菜单}while(gg);}}int caidan1() //管理员菜单{int z,qq;int y=1;system("cls");printf("============您好** 管理员============\n");printf("1----增加用户\n");printf("2----删除用户\n");printf("3----修改用户\n");printf("4----查询用户\n");printf("0----返回登陆页面\n");printf("请输入: ");scanf("%d",&z);while(y){if(z!=0&&z!=1&&z!=2&&z!=3&&z!=4){printf("error!\n");printf("请输入: ");scanf("%d",&z);}elsey=0;}switch(z){case 1:{add();printf("按返回管理员菜单:");scanf("%d",&qq);if(qq==1)ww=1;};break;case 2:{delet();printf("按返回管理员菜单:");scanf("%d",&qq);if(qq==2)ww=1;};break;case 3:{change();printf("按返回管理员菜单:");scanf("%d",&qq);if(qq==3)ww=1;};break;case 4:{search();printf("按返回管理员菜单:");scanf("%d",&qq);if(qq==4)ww=1;};break;case 0: n=1 ;break;}}int caidan2() //用户菜单{int p;int c=1;system("cls");printf("=================欢迎尊敬的用户!===============\n");printf("1----查询费用\n");printf("2----查询话单\n");printf("0----返回登陆页面\n");printf("请选择: ");scanf("%d",&p);while(c){if(p!=0&&p!=1&&p!=2){printf("error!\n");printf("请选择: ");scanf("%d",&p);}elsec=0;}if(p==1)chahuafei();else if(p==2)chahuadan();else if(p==0)n=1;}int add() //管理员菜单中的添加用户功能函数{printf("=========请输入用户信息============\n");printf("请输入用户姓名: ");scanf("%s",&aaa[k].name);printf("\n请输入用户密码: ");scanf("%s",&aaa[k].password);printf("\n请输入用户电话号码: ");scanf("%s",&aaa[k].number);printf("添加成功!");k++;}int delet() //管理员菜单中的删除用户功能函数{char deletnumber[8];int h,g;printf("========删除用户信息========\n");printf("请输入要删除用户的电话号码: \n");scanf("%s",deletnumber);for(h=0;h<k;h++){if(strcmp(deletnumber,aaa[h].number)==0)break;}for(g=h;g<k-1;g++){aaa[g]=aaa[g+1];}k--;printf("删除成功!");}int change() //管理员菜单中的修改用户功能函数{char changenumber[8];int h;printf("========修改用户信息========\n");printf("请输入要修改用户的电话号码: ");scanf("%s",changenumber);for(h=0;h<k;h++){if(strcmp(changenumber,aaa[h].number)==0)break;}printf("请输入修改后密码:");scanf("%s",aaa[h].password);printf("修改成功!");}int search() //管理员菜单中的查询用户功能函数{char searchnumber[8];int h;printf("========查询用户信息========\n");printf("请输入要查询用户的电话号码: ");scanf("%s",searchnumber);for(h=0;h<k;h++){if(strcmp(searchnumber,aaa[h].number)==0)break;}if(h!=k){printf("用户名电话号码 \n");printf("%s\t%s\n",aaa[h].name,aaa[h].number);}elseprintf("不存在该用户!\n");}int chahuafei() //用户菜单中的查话费功能函数{int o,v;int d=1;int e=1;int i=1000;printf("请输入电话号码: ");scanf("%s",numberx);while(d){for(o=0;o<k;o++){if (strcmp(numberx,aaa[o].number)==0)i=o;}if(i==1000){printf("error!\n");printf("请输入电话号码: ");scanf("%s",numberx);}elsed=0;}printf("请输入密码: ");scanf("%s",passwordx);while(e){if (strcmp(passwordx,aaa[i].password)!=0){printf("error!\n");printf("请输入密码: ");scanf("%s",passwordx);}elsee=0;}printf("用户名电话号码本地话费长途话费话费总计\n " );printf("%s\t\t%s\t\t%.1f\t\t%.1f\t\t%.1f",aaa[i].name,aaa[i].number,ben[i],chang[i],s um[i]);printf("\n按返回用户页面:");scanf("%d",&v);if(v==1)gg=1;}int chahuadan() //用户菜单中的查话单功能函数{int o,r,xx;int d=1;int e=1;int i=1000;printf("请输入电话号码: ");scanf("%s",numberx);while(d){for(o=0;o<k;o++){if (strcmp(numberx,aaa[o].number)==0)i=o;}if(i==1000){printf("error!\n");printf("请输入电话号码: ");scanf("%s",numberx);}elsed=0;}printf("请输入密码: ");scanf("%s",passwordx);while(e){if (strcmp(passwordx,aaa[i].password)!=0){printf("error!\n");printf("请输入密码: ");scanf("%s",passwordx);}elsee=0;}printf("用户名主叫电话号码被叫电话号码通话时长\n");for(xx=0;xx<w;xx++){if(strcmp(aaa[i].number,bbb[xx].zhujiao)==0)printf("%s\t\t%s\t\t\t%s\t\t\t%.1f\n",bbb[xx].name,bbb[xx].zhujiao,bbb[xx].beijiao,bb b[xx].time);}printf("\n按返回用户页面:");scanf("%d",&r);if(r==1)gg=1;}五、测试数据及其结果分析进入登录页面。

C 全球通计费程序实验报告

C  全球通计费程序实验报告
cout<<TelNum<<"\t"<<Time<<"\t"<<Duration<<"\t\t"<<cost<<endl; }
}
fread.close(); cout<<"按任意键返回......"<<endl; getch(); Interface(); }
void VIP(){ system("cls"); int total=0;
11
北京理工大学珠海学院计算机学院课程设计
1.2 测试
输入: 13750076404 2014/06/21 1000 13750076404 2014/06/28 1000 13750076404 2014/06/29 500 账单查询界面:
VIP 资费查询界面
12
北京理工大学珠海学院计算机学院课程设计
10
北京理工大学珠海学院计算机学院课程设计
cout<<"基本套餐\t 商旅套餐\t 银卡服务\t 金卡服务(元)"<<endl; ifstream fread("C:\\Users\\omaps\\Desktop\\CallList.txt"); while(fread>>TelNum){
fread>>Time>>Duration>>cost; total+=Duration; } fread.close(); cout<<Cost(total)<<"\t\t"<<Bussiness(total)<<"\t\t"<<SilverCard(total)<<"\t\t"<< GoldCard(total)<<endl; cout<<"按任意键返回......"<<endl; getch(); Interface(); }

电信计费系统的设计与实现

电信计费系统的设计与实现

本科毕业设计说明书题目:电信计费系统的设计与实现院(部):计算机科学与技术学院专业:网络工程班级:姓名:学号:指导教师:完成日期:目录摘要 (IV)ABSTRACT (V)1 前言1.1背景 (1)1.2改进 (1)1.3意义 (2)1.4章节安排 (2)2 系统分析2.1技术可行性 (4)2.1.1企业目前系统环境 (4)2.1.2系统开发环境 (4)2.2经济可行性 (4)2.2.1服务器 (4)2.2.2 数据库 (4)2.2.3 应用软件开发 (4)2.3开发技术简介 (5)3 系统需求3.1项目总体介绍 (8)3.2系统部署结构模型 (8)3.3功能模块结构模型 (9)3.4操作功能菜单结构模型 (10)3.5系统功能具体描述 (10)3.5.1采集系统 (10)3.5.2整合系统 (11)3.5.3用户管理系统 (11)3.5.5管理员管理系统 (12)3.5.6帐单查询系统 (13)3.5.7帐务查询系统 (13)3.5.8用户自服务系统 (14)3.5.9权限管理系统 (14)4系统总体设计4.1软件结构图 (15)4.2数据实体设计 (16)4.2.1权限与管理员数据实体类图 (16)4.2.2用户帐务帐号,业务帐号与资费实体类类图 (17)4.2.3用户登录时长数据相关实体类图 (18)4.3数据库设计 (18)4.3.1 表的分类 (18)4.3.2 数据的存储 (19)4.3.3 建表规则 (19)4.3.4权限,角色与管理员相关表设计 (19)4.3.5用户帐务帐号,资费与业务帐号相关表设计 (21)4.3.6用户登录时长原始数据与整合数据相关表设计 (22)4.4架构设计 (24)5详细设计5.1资费模块的设计与实现 (26)5.1.1资费管理的设计与实现 (26)5.1.2资费修改的设计与实现 (30)5.1.3资费删除的设计与实现 (34)5.1.4资费增加的设计与实现 (36)6 系统测试6.2 测试目的 (40)6.3测试用例 (40)6.4 测试结果分析 (42)7 结论 (44)谢辞 (45)参考文献 (46)摘要在电信运营系统中,电信计费系统是主要的支撑系统,占有重要地位。

电信计费系统实习报告

电信计费系统实习报告

实习报告生产实习单位实习时间2017年 4月 6日至2017年 4 月 15日止指导教师(单位)指导教师(学校)学生姓名学号学校说明生产实习结束之前,每个学生都必须认真撰写《实习报告》。

通过撰写生产实习报告,系统地回顾和总结实习的全过程,将实践性教学的感性认识升华到一定的理论高度,从而提高实习教学效果。

1.实习报告要求条理清晰,内容详尽,数据准确。

字数不少于5000字。

2.生产实习报告的质量反映了生产实习的质量,它是实习成绩评定的主要依据之一。

没有在规定时间前递交实习报告者不得参加实习成绩评定。

3.生产实习报告含有“学生实习鉴定”表。

4.实习单位指导教师须在“学生实习鉴定”表中给予评价并签署,否则视为无效。

5.封面中的“生产实习单位”必须写单位的全名,必须写上单位指导教师姓名。

6.“前言”部分:“实习背景”可简介实习目的、学院有关实习的要求、通过何种方式到此单位实习、实习起止时间等内容;“实习环境”可包括实习单位全称、地址、实习单位性质、规模、简介、所在部门、该部门主要工作、指导教师安排等内容。

7.“实习内容”部分:属报告的主要部分。

“实习过程”概述实习各阶段所从事的主要工作等;“实习内容”包括项目介绍、本人从事的工作、软硬件平台和技术等;“实习成果”应具体列出自己所完成的主要成果及实际应用情况等。

8.“总结”部分:其中“其它意见”可对学院课程设置、教学内容、实习安排等方面提出自己的意见或建议,也可对实习单位的各个方面提出自己的意见。

目录1. 前言 (3)1.1实习背景 (3)1.2实习环境 (4)2. 实习内容 (4)2.1 实习过程 (6)2.2实习内容 (7)2.3主要成果 (8)3.总结................................................................................................................... 错误!未定义书签。

中国电信在线计费系统C网OCS SCP集成方案

中国电信在线计费系统C网OCS SCP集成方案

中国电信企业标准中国电信在线计费系统C网OCS SCP集成方案版本号:1.0中国电信股份有限公司2008-5前言中国电信移动业务在线计费系统技术方案是在充分研究和分析国内外在线计费系统实现方案基础上,基于中国电信移动业务在线计费需求,并参考3GPP、IETF等国际标准组织的在线计费系统规范和接口协议规范编制的。

本要求是中国电信移动业务在线计费系统SCP设备改造要求,为在线计费系统方案实施的指导性文件,整个在线计费系统技术方案主要包括:➢《中国电信在线计费系统(OCS)总体技术方案》➢《中国电信在线计费系统(OCS)业务需求》➢《中国电信在线计费系统(OCS)技术要求》➢《中国电信在线计费系统OCP接口规范》➢《中国电信在线计费系统SCP设备改造要求》➢《中国电信在线计费系统ISMP设备改造要求》➢《中国电信在线计费系统CCG设备技术要求》随着技术的发展,还将制定后续的相关标准。

本规范由中国电信股份有限公司提出并归口。

本方案起草单位:中国电信股份有限公司上海研究院本方案主要起草人:周峰王伊霖张冀文高国文,邓爽,温胤鑫,潘黎强,本方案解释单位:中国电信股份有限公司上海研究院目录1.范围 (2)2.规范性引用文件 (2)3.术语和缩略语 (2)3.1.术语 (2)3.2.缩略语 (3)4.系统结构 (3)4.1.系统结构图 (3)4.2.系统介绍 (4)5.功能及数据划分 (4)5.1.划分原则 (4)5.2.功能划分 (5)5.3.业务数据划分 (5)5.4.业务功能划分 (7)6.路由(漫游) (9)6.1.路由方案 (9)6.2.电路域路由流程 (10)7.信令流程 (11)7.1.预付费主叫流程 (11)7.2.预付费被叫流程 (13)7.3.无条件/遇忙前转流程 (15)7.4.无应答前转流程 (17)7.5.管理流程 (19)8.异常处理 (20)8.1.OCS出现故障 (20)8.2.SCP出现故障 (23)9.话单 (23)9.1.文件命名格式 (23)9.2.话单输出格式 (24)1.范围本方案用于指导中国电信移动业务在线计费系统的方案实施和系统建设,并为在线计费系统及相关设备的研发和改造、以及相应技术规范的制定提供技术依据。

电信计费系统课程设计

电信计费系统课程设计

电信计费系统课程设计一、课程目标知识目标:1. 理解电信计费系统的基本概念、原理及其在通信行业中的应用;2. 掌握电信计费系统的组成部分、功能及相互关系;3. 了解电信计费系统的业务流程、计费策略和收费方式;4. 掌握电信计费系统的安全性、可靠性和扩展性要求。

技能目标:1. 能够运用所学知识分析电信计费系统的实际案例,提出优化和改进方案;2. 学会使用相关软件工具设计简单的电信计费系统,实现基本计费功能;3. 能够编写简单的计费算法,对电信业务进行计费;4. 具备一定的团队协作和沟通能力,能够就电信计费系统设计与他人进行有效讨论。

情感态度价值观目标:1. 培养学生对电信计费系统的兴趣,激发他们探索通信行业发展的热情;2. 增强学生的信息安全意识,认识到电信计费系统在保护消费者权益方面的重要性;3. 培养学生严谨、务实的学习态度,提高他们分析问题和解决问题的能力;4. 培养学生的创新精神和团队协作精神,使他们具备一定的职业素养。

本课程目标旨在使学生在掌握电信计费系统相关知识的基础上,提高实际操作能力和综合素质,为未来从事通信行业工作打下坚实基础。

同时,注重培养学生的情感态度价值观,使他们在学习过程中形成正确的价值观和职业操守。

二、教学内容1. 电信计费系统概述- 电信计费系统的基本概念与原理- 电信计费系统的发展历程与现状- 电信计费系统在通信行业中的重要性2. 电信计费系统的组成与功能- 计费系统的基本组成部分- 各组成部分的功能与相互关系- 计费系统的主要业务流程3. 计费策略与收费方式- 常见计费策略及其特点- 计费参数的设置与调整- 收费方式的分类及实际应用4. 电信计费系统的安全性、可靠性与扩展性- 安全性要求及其保障措施- 可靠性要求及其实现方法- 扩展性要求及其设计原则5. 计费系统设计与实践- 计费算法的设计与实现- 计费系统软件工具的使用- 简单电信计费系统的设计与实现6. 电信计费系统案例分析与优化- 实际案例的介绍与分析- 现有计费系统的优缺点- 优化与改进方案的设计与讨论教学内容依据课程目标进行选择和组织,注重科学性和系统性。

基于C语言的电话计费系统软件设计

基于C语言的电话计费系统软件设计
电话计 费系统 问题 的提 出 众所 周知, 目前 ,拥 有 电话机 的用 户数不胜 数,计费的 根据都是 来 自电信局交换 机给 出的清 单 ,而清单 的方 式是准 确 的 ,但 绝 大 多 数 的 电话 机 用 户 不 能及 时 方 便 地 看 到 费 用 清 单,而各类 卡式电话机 可 以实时显示计费,但 不能进入 家庭 , 前些年常 见的 L E D公用 电话计 费器 因不 能适 应 电话 费率的变 化而显得不太适用 。因此我们希 望能有一台像 家庭 内的电表 、 水表 、气表一样的 电话计费表 。 二 、电话计费器 的软件设计 电话 计费器系统有 需要实现 以下 功能: 日期和 时间的显 示; 电话接 听计时 ;去 电计时计 费及显 示;挂机 时的查询、 累计及设 置功能。可在主程序 中用循环 语句,使计 费器 工作 于 以上四种功能状态,循环体 中用 i f条件语句来判断是哪个 状 态 的条件 发生 ,则调用 该功能状态 的执行 函数 。软 件系统 的流 程 图 如 图 1 所 示。
_
_ —
图 1 程序 流程 图 主 程序 开始 时 进 行 一些 初 始 化, 如清 除显 示 器 R A M 、 F I F 0 R A M ,设置键盘、显示方式、时钟分频、定时器 / 计数器 初始 化等 。然 后打开 中断后便 可进入循环体 。下面对各程 序 模块分别加 以介绍。 ( 一 )显 示设计 。可 以采用数组 d i S S作为显示缓冲 区, 存 放 将 要 显 示 的数 据 。t a b l e数 组 作 为 段码 存 放 区 。通 过 对 专用 接 口芯片 8 2 7 9的写 显示 命令 ,储 存显 示数据 ,再 从 t a b l e 段码 表中取出要显示数据 的相应段码送到数据 口显示。 也可 以设计一个 显示子 函数每 次显示 时,只需给 d i s s数组 重 新赋值 ,便于 改变 要显 示的内容 。 ( 二 )计 时设计。在来 电接 听 以及拨 号去 电接通 时,均 需要 计费器有计 时显示功 能。设计 中可 以采用复 合定时 的方 法 ,得到 1 s的定 时中断 。可使定时器 0工作在定时器方式 i , 定时5 0 m s ,定时时间到后 P 1 . 0反相 。定 时器 1 则工作在计数 器方式 2 , 对T 1 引脚端输入 的脉冲计数, 当计数满 1 O 次 的时候 , 定时 1 s时间。当有挂机信号时,I N T O 端为低 电平时 ,发生外 部 中断,此时两 定时计数器都 停止计数 。显示 数据时只 需将 计时变量 S I N的值赋给 d i S S 数组 ,调用显示 函数 ,并且每 一 秒d i s s 数组 中的内容变化一次,则显示器每秒就刷新一次 v o i d t i m e c o n t r o l 0 来 电计 时 爿 c /

电信计费管理系统设计与实现

电信计费管理系统设计与实现
整个系统的实现还需要依赖于后台对原始话单进行一系列的处理,后台通过定时器或存储过程对话单数据进行实时处理之后,才能在前台实时的统计出用户需要的数据信息。以上这些是对系统的初步了解,详细调查将在系统分析部分讨论。
3
1.技术可行性
目前,已经有较多的电信计费系统解决方案成功实现,并运用在实际的生产环境中,实现此类系统的技术都是较为成熟的,而本论文需要实现的只是电信计费系统中统计分析的小部分功能,较为简单。因此,从技术上来说,完全可以用现有的技术实现本论文中的项目系统。
实时的计费解决方案不仅可使运营商在任何基于分组的网络上向不同类型的用户提交一切服务,并通过开发新的收益来源来增加平均每户每月收入值,还能使运营商按照用户的切实需求迅速地将增值服务推向市场。其次,它能够有效地帮助运营商弥补在数据业务预付费方面存在的技术差距,并以较低的成本真正实现预付费与后付费的融合。最后,它还能促使运营商将所需的基础设施及时安排到位,并着手就第三方提供的内容展开交易并顺利实现收益结算。但是,好的实时计费方案也需要有配套的计费管理系统进行数据统计和异常数据监控,才能完美发挥其作用。
总之,电信计费管理系统已不再是被动的后台系统,其作为整个电信行业的核心竞争力所在的地位日益巩固,已经成为整个电信系统的灵魂。它能有效地提供服务,降低运营成本,提高运营效率。无论是运营商、内容提供商还是各分销商必须给予它足够的重视,才能在群雄逐鹿中占居有利地位。
第2章
2.1. 项目开发背景
从电信运营商来看,电信计费远不是通话时长乘以费率这么一个简单算式就能解决的。以固话为例,要生成账单,首先交换机要将主叫、被叫、通话时长等实时记录,然后系统把采集到的交换机记录经过预处理、过滤、划价、累计求和,才能形成最后的用户账单。电信全程全网的特性,使得用户在使用电信业务过程中要涉及多个环节。传统的计费系统只是一个数据的处理系统,如果由于时钟同步、信令传送等问题,影响到所采集数据的准确性,那么计费的结果就会出现偏差。因此,建立配套的计费管理系统的必要性就突现出来了。

电信运营-计费管理系统

电信运营-计费管理系统
其次,具有用户管理权限的管理员还可以开通业务帐号,但用户要 想开通一个业务帐号,前提是必须拥有一个帐务帐号。在开通业务 帐号时,先由用户为这个业务帐号选择一种资费方式,选择一台开 放实验室,然后把选择好的信息提供给管理员,再由管理员将信息 录入并保存,这个业务帐号会被保存到用户选择的开放实验室的服 务器上,对于开通好的业务帐号也是由具有用户管理权限的管理员 来管理的,如暂停业务帐号,恢复业务帐号,删除业务帐号,修改 业务帐号密码。
<<include>>
角色删除
角色修改
描述查要询描用述内例容说明

用例名 权限浏览 称
用例编 号
用例简 1. 用户进入界面可以浏览所有权限 述 2. 然后输入相应的条件,可以查询 浏览满足条件的权限。
参与者 电信运营超级管理员
备注事项
前置条 必须登录 件
后置条
查询时序说明
: 电信营运超级 管理员 1: 打开
– 年帐务查询
具有账务查询角色的管理员进入本系统,登录成功后,可以执行如 下查询操作:
– 根据输入的年份查询所有开放实验室这一年被使用的总的时长信息。 – 在上一个查询的基础上查看某个实验室这一年每个月的时长信息。
用用户自户服自务服系务统可系以统方便地供用户查询自己的账单
和修改自己的个人信息。这个子系统是唯一的一个 用户可以使用的子系统。具体操作如下:
采集系统
整合系统
用户管理系统
资费管理系统
管理员管理系统
帐单查询系统
帐务查询系统
计费系统电整信营运体系统结构图
后台数据服务 前台营运管理
前台用户服务
采集系统 整合系统
用户管理系统 资费管理系统 管理员管理系统 帐单查询系统 帐务查询系统 权限管理系统

C 课程设计模拟电信计费解读

C  课程设计模拟电信计费解读

课程设计设计题目:C++程序设计课程设计模拟电信计费课程设计任务书课程设计题目:模拟电信计费一、课程设计的原始资料及依据查阅有关资料,进一步理解面向对象程序设计的思想,并编写一个简单的管理系统。

通过本设计可以加深理解使用面向对象程序设计思想开发一个系统的方法,提高分析问题、解决问题和实际动手的能力。

二、课程设计主要内容及要求设计内容:假设电信计费标准:固定电话长途话费0.02元/秒,固定电话本地话费0.06元/分,无线电话长途话费1.00元/分,无线电话本地话费0.60元/分,无线电话接听话费0.50元/分。

在源数据文件中存放:电话号码,电信服务类别,通话时间(秒)。

根据源数据文件生成如下列表:固定长途电话:长途电话号码和通话时间。

固定本地电话:本地电话号码和通话时间。

无线长途电话:长途电话号码和通话时间。

无线本地电话:本地电话号码和通话时间。

无线接听电话:接听电话号码和通话时间。

统计电信费用:电话号码、累计电信费用。

(根据自己的任务填写内容)设计要求:(1)要求在设计的过程中建立清晰的类层次,并画出类图;(2) 设计功能满足要求、易于操作的友好界面;(3) 在系统的设计中,至少要用到面向对象的一种机制:继承、多态等;(4) 在完成该题目时,小组人员进行详细的任务分工,并要在报告中体现出来。

三、对课程设计说明书撰写内容、格式、字数的要求1.课程设计说明书是体现和总结课程设计成果的载体,主要内容包括:设计题目、设计目的、设备器材、设计原理及内容、设计步骤、遇到的问题及解决方法、设计总结、参考文献等。

一般不应少于3000字。

2.在适当位置配合相应的实验原理图、功能模块图、算法流程图等图表进行说明。

应做到文理通顺,内容正确完整,书写工整,装订整齐。

3.设计总结部分主要写本人完成工作简介以及自己的设计体会,包括通过课程设计学到了什么,哪里遇到了困难,解决的办法以及今后的目标。

4.课程设计说明书手写或打印均可。

模拟电信计费系统课程设计方案报告

模拟电信计费系统课程设计方案报告

专业课程设计II报告(2015 / 2016 学年第一学期)题目:模拟电信计费管理系统专业计算机科学与技术学生姓名章慧班级学号B12040310指导教师黄睿指导单位计算机科学与技术系日期2016.1.4 - 2016.1.14指导教师成绩评定表模拟电信计费管理系统一、课题内容和要求完成模拟电信计费管理信息系统,基本功能包括:1、入库功能。

从本地选取原始话单文件(text格式),并将话单文件中数据输入话单数据库(表)。

2、计费功能。

根据1功能存放在话单数据库中的通话记录和数据库中已建好的长途费率表对每一条通话记录计算其通话费用,并将结果保存在已完成话单划价的费用表中。

3、话费查询。

输入一个电话号码,从费用表中统计该电话号码的所有本地话费、长途话费,并从用户表中查找其用户名,最后在屏幕上显示。

4、话单查询。

输入一个电话号码,从费用表中查询所有的通话记录并在屏幕显示该用户的所有通话记录。

5、数据管理功能。

系统能对相关数据进行增、删、改功能。

6、操作权限管理。

用户必须通过登录和权限审核才能操作上述相应功能。

二、需求和思路分析1、建立数据库telecom(借助于HeidiSQL工具),分别建立课题对应用到的数据库表通话记录表callrecord,长途费率表cost,费用表fee,用户电话表phone,登录操作表operater。

2、入库功能,通过html中<input id="" type="file" />标签让用户自行选择本地存放话单文件目录,后端通过对文件内容的解析组装成callrecord 对象,通过sql中insert语法插入到数据库callrecord表中。

3、计费功能,为保证数据库中每条通话记录的通话费用不重复,故计费功能与入库功能是同步进行的,及将2功能中解析组装成的对象直接与从cost 费率表中取得的费率根据calltype属性进行配对相乘放入fee费用表中。

模拟电信计费系统

模拟电信计费系统
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();

电信资费管理系统实训任务计划书

电信资费管理系统实训任务计划书

基于MVC模式的电信资费管理系统实训任务计划书1.项目背景近年来,电信行业经历了很大的变化,从固定到移动,从语音到数据, 从电路交换到分组交换, 从窄带到宽带的变化。

电信运营商在市场和政策的双重影响下,正面临着深刻的重组。

新技术新业务创造了市场机会,使新运营商不断兴起。

旧运营商为了保持原有的市场份额也通过兼并改组等方式不断扩大业务范围, 争取为客户提供从传统的市话、长话、移动、智能网到新兴的数据。

用户将来可以在多个运营商提供的多种电信业务中自由选择。

在这种大背景下,对电信运营商的计费和其它业务支持系统的要求有了大的变化,怎么能够达到尽量为用户提供优惠和方便, 以吸引更多用户,又能够保证企业合理的收益,降低运营成本, 维持企业的运行和发展的目的。

电信计费系统成为了电信行业的运行体系中最重要的支撑系统。

从为用户提供综合服务的运营商的角度来看, 一个好的计费系统应具有以下特点:●综合性:能够满足同时从不同的数据源中采集数据,并能够对数据进行适当的处理,并送到数据处理中心去。

●灵活性:计费系统是业务规则驱动以及对用户有好.●集成性:系统具备高内聚低耦合性,系统具有良好的接口和可扩展性。

●可靠性。

对计费业务,要求保证数据的完整性.2.项目需求根据业务模型和电信业务的需要,该系统的功能需求模块进行分析设计如下:(1)登录模块。

实现登录功能的数据处理功能,如果用户名和密码不存在,实现注册功能.(2)用户管理模块。

开通帐号、用户帐号查询、用户列表、其中开通帐号查询可以更方便用户的查询,用户可以通过开通帐号查询来查取一些相关的信息.用户列表中具有增加、暂停、修改、和删除等功能。

(3)管理员管理模块。

分为:增加管理员,管理员列表和私人信息.管理员管理包括信息有帐号、登录密码、重复密码、真实姓名、管理员邮箱、联系电话、登录权限等.登录权限包括:管理员管理、资费管理、用户管理、帐务查询、帐单查询。

管理员列表有:删除、帐号、姓名、电话、邮箱、开户日期、权限、和修改。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

程序设计报告( 2012 / 2013 学年第一学期)题目:电信计费系统客户帐单管理专业计算机科学与技术学生姓名班级学号指导教师指导单位计算机软件教学中心日期 2012年9月28日电信计费系统客户帐单管理课题内容和要求客户帐单管理是电信计费系统必备的重要功能模块,主要负责对电信各类客户每月帐单的增加、修改、删除、查询、备份等管理工作。

本课题以中国电信企业客户帐单管理模块原型参照,要求基于单链表结构对文件存储的客户帐单数据进行排序、查找、计算、显示等造作。

通过此可以,熟练掌握单链表结构、文件读写、函数调用等知识,以及查找、排序典型算法的设计与应用。

需求分析要能提供以下几个基本功能:(1)用户资料文件与话单文件由程序设计人员预先从键盘上录入,用户资料文件中的数据记录不得少于30条,话单文件中的数据记录不得少于200条,且必须有跨月份、跨年份的通话记录话单。

(2)首先从硬盘读入用户资料和话单记录(3)对话单进行计费处理,输出费用详单到指定的文件。

格式如下:电话号码用户姓名月租费功能费市内电话费用长途电话费用合计84370000 ChenChao 25 6 34.2 19.6 84.8 84370000 ChenChao 25 6 ………………(4)异常话单提示。

有的话单可能是错误的,找出这些话单,不参加计费,另存为一个文件。

可能的出错话单有:一个号码的通话时长大于三天。

图1:功能图(1)提供可操作的主菜单:输出个菜单,用于显示以从文件中加载的总客户信息和若干个可选的功能选项。

根据客户输入的选项来运行不同的功能,运行不同的函数。

(2)显示所有用户功能:根据选项可将文本里的用户信息在屏幕上显示出来。

(3)显示所有帐单功能:可将文本里的通话帐单在屏幕上显示出来。

(4)添加用户功能:可在屏幕上进行直接操作,将新的用户信息添加到记录里。

(5)添加帐单功能:操作同上,可将新的通话记录添加到记录里。

(6)按用户名查找功能:输入记录里的用户名,可以查找与之相关的通话帐单信息。

(7)按电话号码查找功能:输入记录里已有的电话号码,可以查找相应的通话帐单记录。

(8)输出话费功能:在操控台和文本中,直接输出所有的话费详情。

概要设计函数结构图图2:主程序图图3:操作菜单系统图4:显示所有信息菜单图5:插入数据菜单图6:计算话费函数1.顾客类(Customer.h)#include<iostream.h>#include<iomanip.h>#include<string.h>class Customer //顾客类{protected:char name[20]; //顾客姓名char phonenum[14]; //顾客电话号码char laidian; //顾客是否订来电显示public:Customer(char *n="",char *ph="",char l=0); //构造函数Customer(const Customer &cu); //拷贝构造函数~Customer(); //析构函数char* getname(); //提取姓名char* getphone(); //提取电话号码char getlaidian(); //提起是否订来电显示friend ostream & operator << (ostream &,const Customer &); //友元函数重载输出运算符"<<"friend istream & operator >> (istream &,Customer &); //友元函数重载输入运算符">>"};//Customer类的函数的实现Customer::Customer(char *n,char *ph,char l){strcpy(name,n);strcpy(phonenum,ph);laidian=l;}Customer::Customer(const Customer &cu){strcpy(name,);strcpy(phonenum,cu.phonenum );laidian=idian;}Customer::~Customer(){}char* Customer::getname(){return name;}char* Customer::getphone(){return phonenum;}char Customer::getlaidian(){return laidian;}ostream & operator<<(ostream & out ,const Customer & cust) {cout.setf(ios::left);out<<setw(20)<<;out<<setw(15)<<cust.phonenum;out<<setw(2)<<idian<<'\n';return out;}istream & operator >> (istream & in ,Customer & cust){in>>;in>>cust.phonenum;in>>idian;return in;}2.账单类(Bill.h)#include<iostream.h>#include<string.h>int mon_day(int y,int m); //判断一个月有几天class Bill //账单类{protected:char zhujiao[14]; //主叫号码char beijiao[14]; //被叫号码char starttime[15]; //开始时间char endtime[15]; //结束时间public:Bill(char *zh="",char *be="",char *st="",char *en=""); //构造函数Bill(const Bill &bi); //拷贝构造函数~Bill(); //析构函数char* getzhujiao(); //提取主叫号码char* getbeijiao(); //提取被叫号码int gettime(); //提取通话时间int getdate(); //提取通话日期char* getstart(); //提取开始时间char* getend(); //提取结束时间friend int panduan(char *m,char *n); //友元函数判断账单记录是否错误,若错误,返回-1;若正确,返回通话时间friend ostream & operator << (ostream &,const Bill &); //友元函数重载输出运算符"<<"friend istream & operator >> (istream &,Bill &); //友元函数重载输入运算符">>"};//Bill类的函数的实现Bill::Bill(char *zh,char *be,char *st,char *en) {strcpy(zhujiao,zh);strcpy(beijiao,be);strcpy(starttime,st);strcpy(endtime,en);}Bill::Bill(const Bill &bi){strcpy(zhujiao,bi.zhujiao);strcpy(beijiao,bi.beijiao);strcpy(starttime,bi.starttime);strcpy(endtime,bi.endtime);}Bill::~Bill(){}char* Bill:: getzhujiao(){return zhujiao;}char* Bill:: getbeijiao(){return beijiao;}int Bill::gettime(){return panduan(starttime,endtime);}int Bill::getdate(){int date[6];for(int i=0;i<6;i++){date[i]=starttime[i]-48;}int dat=date[0]*100000+date[1]*10000+date[2]*1000+date[3]*100+date[4]*10+date[5];return dat;}char* Bill::getstart(){return starttime;}char* Bill::getend(){return endtime;}ostream & operator << (ostream &out,const Bill &bi){out<<bi.zhujiao<<'\t';out<<bi.beijiao<<'\t';out<<bi.starttime<<'\t';out<<bi.endtime<<'\n';return out;}istream & operator >> (istream &in,Bill &bi){in>>bi.zhujiao;in>>bi.beijiao;in>>bi.starttime;in>>bi.endtime;return in;}int panduan(char *m,char *n){int a[14],b[14]; //建立两个int数组接收开始时间和终止时间for(int i=0;i<14;i++) //把char数组转换为int数组{a[i]=m[i]-48;b[i]=n[i]-48;}int y1,mon1,d1,h1,min1,s1; //开始时间年,月,日,时,分,秒int y2,mon2,d2,h2,min2,s2; //终止时间年,月,日,时,分,秒int x,y; //x把开始时间d1,h1,min1统一转换为分钟形式,便于计算;y则为终止时间y1=a[0]*1000+a[1]*100+a[2]*10+a[3]; //把a[n]转换为6个整数:年,月,日,时,分,秒mon1=a[4]*10+a[5];d1=a[6]*10+a[7];h1=a[8]*10+a[9];min1=a[10]*10+a[11];s1=a[12]*10+a[13];x=d1*24*60+h1*60+min1;y2=b[0]*1000+b[1]*100+b[2]*10+b[3]; //把b[n]转换为6个整数:年,月,日,时,分,秒mon2=b[4]*10+b[5];d2=b[6]*10+b[7];h2=b[8]*10+b[9];min2=b[10]*10+b[11];s2=b[12]*10+b[13];y=d2*24*60+h2*60+min2;if( mon1>12 ||mon1<1 ||mon2>12 ||mon2<1 ||h1>23 ||h1<0 ||h2>23 ||h1<0 ||min1>59 ||min1<0 ||min2>59 ||min2<0 ||s1>59 ||s1<0 ||s2>59 ||s2<0 ||d1<1 ||d2<1 ||d1>mon_day(y1,mon1) ||d2>mon_day(y2,mon2)){return -1; //若“月,日,时,分,秒”超出范围,则返回-1 }else{if(y1==y2){if(mon1==mon2) //同一个月内的情况{if( (y-x<24*60*3) && (y-x>0) ) //通话时间在3天内{if(s1<s2) //通话时间不足一分钟,当一分钟计算return y-x+1;elsereturn y-x;}else if(y==x) //开始时间的分钟等于终止时间的分钟{if(s2>s1) //开始时间小于终止时间return 1;else //开始时间等于或大于终止时间算错误,不计入话费,返回-1{//cout<<"账单通话时间记录错误!"<<endl;return -1;}}else //开始时间大于终止时间或通话时间大于3天,算错误,返回-1 {//cout<<"账单通话时间记录错误!"<<endl;return -1;}}else //跨月的情况{if(mon2-mon1!=1) //终止时间月份只可能比开始时间月份大1{//cout<<"账单通话时间记录错误!"<<endl;return -1;}else{if(s1<s2){return y-x+1+mon_day(y1,mon1)*24*60;}else{return y-x+mon_day(y1,mon1)*24*60;}}}}else //跨年的情况{if(y2-y1==1&&mon1==12&&mon2==1) //年和月只有这一种情况是对的{if(s1<s2){return y-x+1+31*24*60;}else{return y-x+31*24*60;}}else{//cout<<"账单通话时间记录错误!"<<endl;return -1;}}}}int mon_day(int y,int m){int list[12];list[0]=31;if(y%4==0&&y%100!=0||y%400==0) //判断是否是闰年list[1]=29;elselist[1]=28;list[2]=31;list[3]=30;list[4]=31;list[5]=30;list[6]=31;list[7]=31;list[8]=30;list[9]=31;list[10]=30;list[11]=31;return list[m-1]; //返回y年m月有多少天}源程序代码#include"Customer.h"#include"Bill.h"#include<fstream.h>char Printmenu(); //显示菜单选项char Printzimenu(); //显示子菜单选项,查询话费和输出错误话单void PrintCustomer(); //显示所有用户信息void PrintBill(); //显示所有帐单信息void EnterCustomer(); //添加用户信息void EnterBill(); //添加账单信息void SearchBIll1(); //按用户名查找帐单,并显示该账户所有帐单void SearchBIll2(); //按电话号码查找账单,并显示该账户所有帐单void PrintAll(); //不操作,输出所有花费信息void jifei(Customer *cust,Bill *bill,int m,int n); //计算话费,并输出到文本void PrintWrongBill(Bill *bill,int n); //输出错误账单信息bool compare(int m,int *p,int n); //如果m与数组p[n]的任何一个数都不相等,返回falseint chongtu(Bill *bill,int n,Bill bi,int i); //判断bi账单是否与其他账单冲突,若冲突,则返回-1double yuezhu=25.0 , laixian=6.0 , local=0.1 , idfee=0.7 ; //月租,来电显示费用及市内电话和长途电话单价const int Max=1000; //最大数组长度int main(){char n;while((n=Printmenu())!='0'){switch(n){case '1': PrintCustomer(); break;case '2': PrintBill(); break;case '3': EnterCustomer(); break;case '4': EnterBill(); break;case '5': SearchBIll1(); break;case '6': SearchBIll2(); break;case '7': PrintAll(); return 0;default: cout<<"输入有误:请重新输入!\n";}}return 0;}char Printmenu(){cout<<"\t 模拟电信计费系统"<<endl;cout<<"\t************************************************************"<<endl;cout<<"\t *********** 输入1:显示所有用户信息**********"<<endl;cout<<"\t *********** 输入2:显示所有帐单信息**********"<<endl;cout<<"\t *********** 输入3:添加用户信息**********"<<endl;cout<<"\t *********** 输入4:添加帐单信息**********"<<endl;cout<<"\t *********** 输入5:按用户名查找帐单**********"<<endl;cout<<"\t *********** 输入6:按电话号码查找帐单**********"<<endl;cout<<"\t *********** 输入7:不操作,输出所有话费信息**********"<<endl;cout<<"\t *********** 输入0:结束操作**********"<<endl;cout<<"\t************************************************************"<<endl;cout<<"\n\n使用说明:\n 错误话单存在此程序目录下WrongBill.txt中\n 费用详单存在此程序目录下allmessage.txt中\n";cout<<" 费用详单目录为:电话号码—用户姓名—月份—月租费—功能费—市话—长途—合计\n";cout<<"注:时间24:00算错误;计费月份按拨打电话时间算\n\n";char n;cout<<"请输入操作选项:\n";cin>>n;return n; //返回操作选项}char Printzimenu(){cout<<"\t************************************************************"<<endl;cout<<"\t *********** 输入0:返回上一级菜单**********"<<endl;cout<<"\t *********** 输入1:显示查询用户话费信息**********"<<endl;cout<<"\t *********** 输入2:显示查询用户错误账单信息**********"<<endl;cout<<"\t************************************************************"<<endl;char n;cout<<"请输入操作选项:\n";cin>>n;return n; //返回操作选项}void PrintCustomer(){Customer cust[Max];ifstream inf("Customer.txt");int m=0;while(!inf.eof()) //录入顾客信息到Customer类的数组cust中{inf>>cust[m];cout<<cust[m]; // 输出顾客信息m++; //有m-1个顾客}inf.close();Bill bill[Max];ifstream infs("Bill.txt");int n=0;while(!infs.eof()) //录入账单记录到Bill类的数组bill中{infs>>bill[n];//cout<<bill[n]; //输出账单信息n++; //有n个账单记录}infs.close();char z;while((z=Printzimenu())!='0'){if(z=='1')jifei(cust,bill,m,n);else if(z=='2')PrintWrongBill(bill,n);elsecout<<"输入错误,请重新输入!"<<endl;}}void PrintBill(){Customer cust[Max];ifstream inf("Customer.txt");int m=0;while(!inf.eof()) //录入顾客信息到Customer类的数组cust中{inf>>cust[m];//cout<<cust[m]; // 输出顾客信息m++; //有m-1个顾客}inf.close();Bill bill[Max];ifstream infs("Bill.txt");int n=0;while(!infs.eof()) //录入账单记录到Bill类的数组bill中{infs>>bill[n];cout<<bill[n]; //输出账单信息n++; //有n个账单记录}infs.close();char z;while((z=Printzimenu())!='0'){if(z=='1')jifei(cust,bill,m,n);else if(z=='2')PrintWrongBill(bill,n);elsecout<<"输入错误,请重新输入!"<<endl;}}void EnterCustomer(){Customer cust[Max];int n;cout<<"请输入用户数量:\n";cin>>n;cout<<"请输入客户信息:\n客户姓名—电话号码—是否有来电显示(Y/N)\n";for(int i=0;i<n;i++)cin>>cust[i];ofstream outf;outf.open("Customer.txt",ios::app); //用app方式打开文本,能直接在文本尾加入信息for(i=0;i<n;i++)outf<<cust[i];cout<<"输入成功!"<<endl;outf.close();}void EnterBill(){Bill bill[Max];int n;cout<<"请输入帐单数量:\n";cin>>n;cout<<"请输入帐单信息:\n主叫号码—被叫号码—开始时间—结束时间\n时间格式为连续14个数:年月日时分秒(20080201134421)\n";for(int i=0;i<n;i++)cin>>bill[i];ofstream outf;outf.open("Bill.txt",ios::app);for(i=0;i<n;i++)outf<<bill[i];cout<<"输入成功!"<<endl;outf.close();}void SearchBIll1(){char name[20];cout<<"请输入用户姓名:\n";cin>>name;Customer cust[Max];Customer cu[1]; //保存输入的用户名的类Bill bill[Max];ifstream inf("Customer.txt");ifstream infs("Bill.txt");int m=0;while(!inf.eof()) //录入顾客信息到Customer类的数组cust中{inf>>cust[m];//cout<<cust[m]; // 输出顾客信息m++; //有m-1个顾客}inf.close();int n=0;while(!infs.eof()) //录入账单记录到Bill类的数组bill中{infs>>bill[n];//cout<<bill[n]; //输出账单信息n++; //有n个账单记录}infs.close();Bill bi[Max]; //保存输入用户名的账单类信息int k=0;cout<<"该用户的账单信息为:"<<endl;bool p=false,t=false,u=false;for(int i=0;i<m-1;i++){if(strcmp(cust[i].getname(),name)==0){cu[0]=cust[i];for(int j=0;j<n;j++){if(strcmp(cust[i].getphone(),bill[j].getzhujiao())==0){cout<<bill[j];t=true;bi[k]=bill[j];k++;}elsecontinue;}u=true;}elsep=true;}if(!t&&u)cout<<"\t该用户没有信息!"<<endl;if(p&&!u)cout<<"输入错误:没有该用户信息!"<<endl;char z;while((z=Printzimenu())!='0'){if(z=='1')jifei(cu,bi,2,k);else if(z=='2')PrintWrongBill(bi,k);elsecout<<"输入错误,请重新输入!"<<endl;}}void SearchBIll2(){Customer cust[Max];ifstream inf("Customer.txt");int m=0;while(!inf.eof()) //录入顾客信息到Customer类的数组cust中{inf>>cust[m];//cout<<cust[m]; // 输出顾客信息m++; //有m-1个顾客}inf.close();char phone[20];cout<<"请输入用户电话号码:\n";cin>>phone;Bill bill[Max];ifstream infs("Bill.txt");int n=0;while(!infs.eof()) //录入账单记录到Bill类的数组bill中{infs>>bill[n];//cout<<bill[n]; //输出账单信息n++; //有n个账单记录}infs.close();int b=0;cout<<"该用户的账单信息为:"<<endl;bool r=true;Bill bi[Max];int k=0;for(int j=0;j<n;j++)if(strcmp(bill[j].getzhujiao(),phone)==0){cout<<bill[j];b=false;bi[k]=bill[j];k++;}if(b){cout<<"输入错误:没有该号码的信息"<<endl;}Customer cu[1];for(int i=0;i<m-1;i++){if(strcmp(cust[i].getphone(),phone)==0){cu[0]=cust[i];}}char z;while((z=Printzimenu())!='0'){if(z=='1')jifei(cu,bi,2,k);else if(z=='2')PrintWrongBill(bi,k);cout<<"输入错误,请重新输入!"<<endl;}}void PrintAll(){Customer cust[Max];Bill bill[Max];ifstream inf("Customer.txt");ifstream infs("Bill.txt");int m=0;while(!inf.eof()) //录入顾客信息到Customer类的数组cust中{inf>>cust[m];//cout<<cust[m]; // 输出顾客信息m++; //有m-1个顾客}inf.close();int n=0;while(!infs.eof()) //录入账单记录到Bill类的数组bill中{infs>>bill[n];//cout<<bill[n]; //输出账单信息n++; //有n个账单记录}infs.close();jifei(cust,bill,m,n);}void jifei(Customer *cust,Bill *bill,int m,int n){cout<<"姓名\t 电话号码日期月租来电市话长途总计"<<endl;ofstream ou("allmessage.txt");ofstream outw("WrongBill.txt");for(int i=0;i<m-1;i++) //计算话费{int a[Max]={0}; //int数组,用于记录已计算过的月份if(cust[i].getlaidian()=='Y')laixian=6;elselaixian=0;for(int j=0;j<n;j++)if( strcmp( cust[i].getphone() , bill[j].getzhujiao() ) == 0 ) //找出cust[i]客户的所有帐单{double shihua=0,changtu=0,zong; //一个月的市话费、长途费及总电话费if(compare(bill[j].getdate(),a,n )) //判断在记录a[n]中是否存在bill[j].getdate() 记录,若存在,则跳过这条账单信息continue;else{for(int k=j;k<n;k++){if(( bill[j].getdate() == bill[k].getdate() )&&( strcmp( cust[i].getphone() , bill[k].getzhujiao() ) == 0 ) ) //若bill[k]的月份与主叫电话号码都相同,则计算这个月的电话费{if(bill[k].gettime()>=0&&chongtu(bill,n,bill[k],k)==1){if( strlen( bill[k].getbeijiao() )>8 )changtu += bill[k].gettime()*idfee;elseshihua += bill[k].gettime()*local;a[j]=bill[j].getdate(); //把bill[j]记录到a[n]中}else{outw<<bill[k];}}}zong=yuezhu+laixian+shihua+changtu;//操控台输出cout.setf(ios::left);cout<<setw(15)<<cust[i].getname();cout<<setw(12)<<cust[i].getphone();cout<<setw(8)<<bill[j].getdate();cout<<setw(5)<<yuezhu<<setw(5)<<laixian;cout<<setw(8)<<shihua<<setw(8)<<changtu;cout<<setw(8)<<zong<<'\n';//文本输出ou<<cust[i].getphone();ou<<setw(15)<<cust[i].getname();ou<<setw(10)<<bill[j].getdate();ou<<setw(5)<<yuezhu<<setw(5)<<laixian;ou<<setw(8)<<shihua<<setw(8)<<changtu;ou<<setw(8)<<zong<<'\n';}}}}outw.close();ou.close();}void PrintWrongBill(Bill *bill,int n){bool a=true;for(int i=0;i<n;i++){if(bill[i].gettime()==-1||chongtu(bill,n,bill[i],i)==-1){cout<<bill[i];a=false;}}if(a)cout<<"该用户没有错误信息!"<<endl;}bool compare(int m,int *p,int n){for(int i=0;i<n;i++){if(m==p[i])return true;elsecontinue;}return false;}int chongtu(Bill *bill,int n,Bill bi,int i) //判断bi的时间是否和其他账单冲突,若冲突,则返回-1{for(int j=0;j<n;j++){if(j!=i){if(strcmp( bi.getzhujiao(),bill[j].getzhujiao() )==0){if(strcmp(bi.getstart(),bill[j].getstart())==1){if(strcmp(bi.getstart(),bill[j].getend())==1)return 1;elsereturn -1;}else if(strcmp(bi.getstart(),bill[j].getstart())==-1){if(strcmp(bill[j].getstart(),bi.getend())==1)return 1;elsereturn -1;}elsereturn -1;}}else continue;}return 1;}测试数据及其结果分析显示的主菜单界面:(1)显示用户信息测试:(2)显示账单信息测试:(3)添加用户信息测试:(4)添加账单信息测试:(5)按用户名查找账单测试:(6)按电话号码查找账单测试:(7)输出话费信息测试:调试过程中的问题(1)输出格式不对,不整齐:用了setw()函数和ios::left解决。

相关文档
最新文档