C++实验:电信模拟计费系统
中国电信在线计费系统(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++程序设计课程设计模拟电信计费课程设计任务书课程设计题目:模拟电信计费一、课程设计的原始资料及依据查阅有关资料,进一步理解面向对象程序设计的思想,并编写一个简单的管理系统。
通过本设计可以加深理解使用面向对象程序设计思想开发一个系统的方法,提高分析问题、解决问题和实际动手的能力。
二、课程设计主要内容及要求设计内容:假设电信计费标准:固定电话长途话费0.02元/秒,固定电话本地话费0.06元/分,无线电话长途话费1.00元/分,无线电话本地话费0.60元/分,无线电话接听话费0.50元/分。
在源数据文件中存放:电话号码,电信服务类别,通话时间(秒)。
根据源数据文件生成如下列表:固定长途电话:长途电话号码和通话时间。
固定本地电话:本地电话号码和通话时间。
无线长途电话:长途电话号码和通话时间。
无线本地电话:本地电话号码和通话时间。
无线接听电话:接听电话号码和通话时间。
统计电信费用:电话号码、累计电信费用。
(根据自己的任务填写内容)设计要求:(1)要求在设计的过程中建立清晰的类层次,并画出类图;(2) 设计功能满足要求、易于操作的友好界面;(3) 在系统的设计中,至少要用到面向对象的一种机制:继承、多态等;(4) 在完成该题目时,小组人员进行详细的任务分工,并要在报告中体现出来。
三、对课程设计说明书撰写内容、格式、字数的要求1.课程设计说明书是体现和总结课程设计成果的载体,主要内容包括:设计题目、设计目的、设备器材、设计原理及内容、设计步骤、遇到的问题及解决方法、设计总结、参考文献等。
一般不应少于3000字。
2.在适当位置配合相应的实验原理图、功能模块图、算法流程图等图表进行说明。
应做到文理通顺,内容正确完整,书写工整,装订整齐。
3.设计总结部分主要写本人完成工作简介以及自己的设计体会,包括通过课程设计学到了什么,哪里遇到了困难,解决的办法以及今后的目标。
4.课程设计说明书手写或打印均可。
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语⾔)..程序设计报告( 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 全球通计费程序实验报告

}
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.总结................................................................................................................... 错误!未定义书签。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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解决。