程序设计模拟电信计费系统.docx
《程序设计模拟电信计费系统.docx》由会员分享,可在线阅读,更多相关《程序设计模拟电信计费系统.docx(22页珍藏版)》请在冰点文库上搜索。
程序设计模拟电信计费系统
程序设计报告
(/学年第学期)
题目:
很简易电信计费模拟系统
专业
学生姓名
班级学号
指导教师
指导单位
日期
四、源程序代码
#include
#include
#include
intdenglu();
intcaidan1();//管理员菜单
intcaidan2();//用户菜单
intadd();//管理员菜单中的添加用户功能函数
intdelet();//管理员菜单中的删除用户功能函数
intchange();//管理员菜单中的修改用户功能函数
intsearch();//管理员菜单中的查询用户功能函数
intchahuafei();//用户菜单中的查话费功能函数
intchahuadan();//用户菜单中的查话单功能函数
inti;//用于确定是哪个用户
intq;//用于确定是管理员还是用户
intn=0;//用于管理员和用户返回登录页面
intww=0;//用于管理员返回管理员菜单
intgg=0;//用于用户返回用户菜单
intk=2;//用户信息有两条
intw=6;//通话记录有条
doubleben[10];//用于统计各用户本地话费
doublechang[10];//用于统计各用户长途话费
doublesum[10];//用于统计各用户总话费
charnamex[10];
charpasswordx[7];
charnumberx[8];
structgerenxinxi//用户信息
{
charname[10];
charpassword[7];
charnumber[8];
doublebendi;
doublechangtu;
doublesum;
};
structtonghuajilu//通话记录
{
charname[10];
charzhujiao[8];
charbeijiao[8];
doubletime;
inttype;//1表示本地,表示长途
};
structfeiyong//每条通话记录的费用
{
charnumber[8];
doublebendi;
doublechangtu;
doublesum;
};
structgerenxinxiaaa[10]={//初始化两个用户的个人信息
{"mike","000000","1234560"},
{"james","000001","1234561"}
};
chargname[10]="jack";
chargpassword[7]="111111";//初始化管理员的信息
structtonghuajilubbb[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}
};
structfeiyongccc[10];
intmain()
{
intx,t,y;
for(x=0;x{
strcpy(&ccc[x].number,&bbb[x].zhujiao);
switch(bbb[x].type)
{
case1:
{
if(bbb[x].time<=3)
ccc[x].bendi=0.2;
else
ccc[x].bendi=(bbb[x].time-3)*0.1+0.2;
};
break;
case2:
{
ccc[x].changtu=bbb[x].time*2.0;//设长途费率元/分
};
break;
}
ccc[x].sum=ccc[x].bendi+ccc[x].changtu;
}
for(t=0;t{
for(y=0;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);
}
intdenglu()
{
inta=1;
intb=1;
intm=1;
intl=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);
}
else
l=0;
}
if(q==1)
{
printf("请输入管理员您的名字:
");
scanf("%s",namex);
while(a)
{
if(strcmp(namex,gname)!
=0)
{
printf("error!
\n");
printf("请输入管理员您的名字:
");
scanf("%s",namex);
}
else
a=0;
}
printf("请输入密码:
");
scanf("%s",passwordx);
while(b)
{
if(strcmp(passwordx,gpassword)!
=0)
{
printf("error!
\n");
printf("请输入密码:
");
scanf("%s",passwordx);
}
else
b=0;
}
printf("恭喜管理员登录成功!
\n");
do
{
ww=0;
caidan1();
}while(ww);
}
elseif(q==2)
{
do
{
gg=0;
caidan2();//进入用户菜单
}while(gg);
}
}
intcaidan1()//管理员菜单
{
intz,qq;
inty=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);
}
else
y=0;
}
switch(z)
{
case1:
{
add();
printf("按返回管理员菜单:
");
scanf("%d",&qq);
if(qq==1)
ww=1;
};
break;
case2:
{
delet();
printf("按返回管理员菜单:
");
scanf("%d",&qq);
if(qq==2)
ww=1;
};
break;
case3:
{
change();
printf("按返回管理员菜单:
");
scanf("%d",&qq);
if(qq==3)
ww=1;
};
break;
case4:
{
search();
printf("按返回管理员菜单:
");
scanf("%d",&qq);
if(qq==4)
ww=1;
};
break;
case0:
n=1;break;
}
}
intcaidan2()//用户菜单
{
intp;
intc=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);
}
else
c=0;
}
if(p==1)
chahuafei();
elseif(p==2)
chahuadan();
elseif(p==0)
n=1;
}
intadd()//管理员菜单中的添加用户功能函数
{
printf("=========请输入用户信息============\n");
printf("请输入用户姓名:
");
scanf("%s",&aaa[k].name);
printf("\n请输入用户密码:
");
scanf("%s",&aaa[k].password);
printf("\n请输入用户电话号码:
");
scanf("%s",&aaa[k].number);
printf("添加成功!
");
k++;
}
intdelet()//管理员菜单中的删除用户功能函数
{
chardeletnumber[8];
inth,g;
printf("========删除用户信息========\n");
printf("请输入要删除用户的电话号码:
\n");
scanf("%s",deletnumber);
for(h=0;h{
if(strcmp(deletnumber,aaa[h].number)==0)
break;
}
for(g=h;g{
aaa[g]=aaa[g+1];
}
k--;
printf("删除成功!
");
}
intchange()//管理员菜单中的修改用户功能函数
{
charchangenumber[8];
inth;
printf("========修改用户信息========\n");
printf("请输入要修改用户的电话号码:
");
scanf("%s",changenumber);
for(h=0;h{
if(strcmp(changenumber,aaa[h].number)==0)
break;
}
printf("请输入修改后密码:
");
scanf("%s",aaa[h].password);
printf("修改成功!
");
}
intsearch()//管理员菜单中的查询用户功能函数
{
charsearchnumber[8];
inth;
printf("========查询用户信息========\n");
printf("请输入要查询用户的电话号码:
");
scanf("%s",searchnumber);
for(h=0;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);
}
else
printf("不存在该用户!
\n");
}
intchahuafei()//用户菜单中的查话费功能函数
{
into,v;
intd=1;
inte=1;
inti=1000;
printf("请输入电话号码:
");
scanf("%s",numberx);
while(d)
{
for(o=0;o{
if(strcmp(numberx,aaa[o].number)==0)
i=o;
}
if(i==1000)
{
printf("error!
\n");
printf("请输入电话号码:
");
scanf("%s",numberx);
}
else
d=0;
}
printf("请输入密码:
");
scanf("%s",passwordx);
while(e)
{
if(strcmp(passwordx,aaa[i].password)!
=0)
{
printf("error!
\n");
printf("请输入密码:
");
scanf("%s",passwordx);
}
else
e=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],sum[i]);
printf("\n按返回用户页面:
");
scanf("%d",&v);
if(v==1)
gg=1;
}
intchahuadan()//用户菜单中的查话单功能函数
{
into,r,xx;
intd=1;
inte=1;
inti=1000;
printf("请输入电话号码:
");
scanf("%s",numberx);
while(d)
{
for(o=0;o{
if(strcmp(numberx,aaa[o].number)==0)
i=o;
}
if(i==1000)
{
printf("error!
\n");
printf("请输入电话号码:
");
scanf("%s",numberx);
}
else
d=0;
}
printf("请输入密码:
");
scanf("%s",passwordx);
while(e)
{
if(strcmp(passwordx,aaa[i].password)!
=0)
{
printf("error!
\n");
printf("请输入密码:
");
scanf("%s",passwordx);
}
else
e=0;
}
printf("用户名主叫电话号码被叫电话号码通话时长\n");
for(xx=0;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,bbb[xx].time);
}
printf("\n按返回用户页面:
");
scanf("%d",&r);
if(r==1)
gg=1;
}
五、测试数据及其结果分析
进入登录页面。
选1后管理员输入信息。
管理员进入管理员菜单。
按1后进入增加用户菜单。
按2后进入删除用户菜单,按3后进入修改用户菜单,按4后进入删除用户菜单。
空间有限,在此不多列举。
选择页面选择2,即用户的页面。
查询费用界面。
查询话单界面。
六、调试过程中的问题
刚拿到题目时,有些迷惘,感觉一片模糊。
后来静下心来,渐渐有了头绪。
主要攻克的难关有以下几点:
1.如何将数据写入文件中。
因为流文件不怎么熟悉,所以该用结构数组的方式来代替。
虽然它不具有永久保存的功能,但在该次运行中还是有保存功能的。
以后我会尝试用流文件的方式,现在先用这个来代替。
2.如何统计个人的全部本地话费和长途话费。
我先将各通话记录的费用统计出来,再利用strcmp函数,将各通话记录中主叫是某用户的费用加起来来完成。
3.如何实现子菜单返回母菜单的功能。
我利用dowhile(x)语句,x初始化为0,当输入某个值时,将x赋为非零值,从而实现返回母菜单的功能。
七、设计总结
本次历时一星期的程序设计实验确实让我收获很大。
在只学了C语言的基础上,拿到这么“庞大”的题目确实有些难度。
在上学期,我们最多只写过几十行代码的程序,而这次我写了足有400多行。
第一天拿到题目后上午到处找资料,发现类似的代码也有,不过都不怎么符合。
下午自己有了点思绪后开始写了几十行。
晚上一直在想代码,想到一点,第二天就马上把它打出来。
渐渐的有了框架,只剩几个“瓶颈”,就是上面提到的几个难关。
后来,查了资料看了书,渐渐的开始领悟,最后终于被我攻克!
本来也想去网上找找有没有源代码,后来考虑到为何不乘此机会好好锻炼一下自己呢,于是,我就自己动手打出了整个程序的代码。
虽然还熬了两个夜,不过最终我还是成功了,感觉很有成就感!
我很喜欢这样的程序设计实验。
值得一提的是,其间我还丢失了一次代码,心碎之后还是振作了起来。
这个事情告诉我们要愈挫愈勇,不要轻易灰心。