#includestdio.h
int main()
{
int a[10];
char q;
int i,m=0,n=0,p=0;
long long b[10],c[10],d[10],s[10];
for(i=0;i10;i++)
{
b[i]=0;
c[i]=0;
d[i]=0;
}
for(i=0;i10;i++)
{
scanf("%d%lld",a[i],s[i]);
}
for(i=9;i=0;i--)
{
if(a[i]==0)
{
b[m++]=s[i];
}
if(a[i]==1)
{
c[n++]=s[i];
}
if(a[i]==2)
{
d[p++]=s[i];
}
}
for(i=0;i10;i++)
{
printf("%lld %lld %lld\n",b[i],c[i],d[i]);
}
return 0;
}
是可以查询的, 电信用户可以通过电信掌上营业厅,网上营业厅查询通话详单的,电信网上营业厅查询方法:
1、打开中国电信网上营业厅,然后登录自己的帐号
2、登录后在导航栏找到,清单查询
3、然后选择需要查询的月份,填写好验证码即可进行查询
了解更多服务优惠请关注“安徽电信”公众号。
国际、国内、市话的电话号码识别,我没有写。
你想写,只要在我留的函数getcallType里写代码就行,其他不用改。参数:主叫号码 、 被叫号码。返回值:0或1或2,对应(国际、国内、市话)。
另外,输入我没有写验证,测试请规范输入,时间必须2位数hh:mm:ss,你想写验证证,自己添加到我的函数inputInfo中就行。
#includestdio.h
#includestdlib.h
#includemalloc.h
#define n 6//输入次数
typedef struct callInfo
{
char calldate[11];//通话日期
char callCode[15];//主叫码
char beCallCode[15];//被叫码
char beginTime[10];//起始时间
char endTime[10];//通话结束时间
long callTime;//通话时长,单位秒
double callPay;//通话费用
int callType;//国际长途:0,国内长途:1,市话:2
struct callInfo *next;
}CALLINFO;
CALLINFO *inputInfo(int con);//输入,参数con:输入的次数 返回首节点
void prfCallInfo(CALLINFO *callInfoHead);//打印链表
long getTime(char *beginTime,char *endTime);//计算通话时长,返回秒数,时间格式:小时:分钟:秒
double getpay(long t,int callType);//计算费用,不足1分钟按1分钟算
int getcallType(char *callCode,char *beCallCode);//通过主叫号码 和 被叫号码,识别通话类别(国际、国内、市话),返回0或1或2。
void orderByPay(CALLINFO *callInfoHead);//排序 话费从高到低
void wirteFile(FILE *fp,CALLINFO *callInfoHead);
int main()
{
CALLINFO *callInfoHead=NULL;
FILE *fp=NULL;
callInfoHead=(CALLINFO *)malloc(sizeof(CALLINFO));
callInfoHead-next=NULL;
fp=fopen("c:\\list2.txt","rt+");
if(fp==NULL)
{
fp=fopen("c:\\list2.txt","w");
}
callInfoHead-next=inputInfo(n);
printf("\n----测试代码所有费用默认按照市话计算----\n");
orderByPay(callInfoHead);
printf("\n----按照话费由高到低排序----\n");
prfCallInfo(callInfoHead);
printf("\n----开始写入文件----\n");
wirteFile(fp,callInfoHead);
return 0;
}
void wirteFile(FILE *fp,CALLINFO *callInfoHead)
{
CALLINFO *callInfoNow=NULL;
fseek(fp, 0, SEEK_SET);//文件流指针重置到开头
fprintf(fp,"%s %s %s %s %s\n","日期","主叫号码","被叫号码","起始时间","通话时间");
while(callInfoHead-next!=NULL)
{
callInfoNow=callInfoHead-next;
fprintf(fp,"%s %s %s %s %s\n",callInfoNow-calldate,callInfoNow-callCode,callInfoNow-beCallCode,callInfoNow-beginTime,callInfoNow-endTime);
callInfoHead=callInfoHead-next;
}
}
void orderByPay(CALLINFO *callInfoHead)//排序 话费从高到低
{
CALLINFO *callInfoNext=NULL,*callInfoNow=NULL,callInfoSave;
while(callInfoHead-next!=NULL)
{
callInfoNext=callInfoHead-next-next;
callInfoNow=callInfoHead-next;
while(callInfoNext!=NULL)
{
if(callInfoNow-callPaycallInfoNext-callPay)//高的往前移动,交换成员值保留链表指针
{
callInfoSave=*callInfoNow;
*callInfoNow=*callInfoNext;
*callInfoNext=callInfoSave;
callInfoNext-next=callInfoNow-next;
callInfoNow-next=callInfoSave.next;
}
callInfoNext=callInfoNext-next;
}
callInfoHead=callInfoHead-next;
}
}
void prfCallInfo(CALLINFO *callInfoHead)//打印链表
{
CALLINFO *callInfoNow=NULL;
printf("\n通话日期 主叫码 被叫码 起始时间 通话结束时间 通话时长 通话费用\n");
while(callInfoHead-next!=NULL)
{
callInfoNow=callInfoHead-next;
printf("%s %s %s %s %s %ld %lf\n",callInfoNow-calldate,callInfoNow-callCode,callInfoNow-beCallCode,callInfoNow-beginTime,callInfoNow-endTime,callInfoNow-callTime,callInfoNow-callPay);
callInfoHead=callInfoHead-next;
}
}
CALLINFO *inputInfo(int con)//输入,参数con:输入的次数 返回首节点
{
int i;
CALLINFO *callInfo0=NULL,*callInfoTail=NULL,*callInfoNew=NULL;
printf("请分别录入%d条通话记录,每行1条\n格式:(通话日期、主叫码、被叫码、起始时间、通话时间)\n",con);
for(i=0;icon;i++)
{
callInfoNew=(CALLINFO *)malloc(sizeof(CALLINFO));
scanf("%s%s%s%s%s",callInfoNew-calldate,callInfoNew-callCode,callInfoNew-beCallCode,callInfoNew-beginTime,callInfoNew-endTime); //输入我没有写验证,想写验证添加在这
callInfoNew-callTime=getTime(callInfoNew-beginTime,callInfoNew-endTime);//时间
callInfoNew-callType=getcallType(callInfoNew-callCode,callInfoNew-beCallCode);
callInfoNew-callPay=getpay(callInfoNew-callTime,callInfoNew-callType);//费用
callInfoNew-next=NULL;
if(callInfo0==NULL)
callInfo0=callInfoNew;
else
callInfoTail-next=callInfoNew;
callInfoTail=callInfoNew;
}
return callInfo0;
}
long getTime(char *beginTime,char *endTime)//计算通话时长,返回秒数,时间格式24制:小时:分钟:秒
{
int h1,m1,s1,h2,m2,s2;
long t;
h1=(beginTime[0]-'0')*10+beginTime[1]-'0';
m1=(beginTime[3]-'0')*10+beginTime[4]-'0';
s1=(beginTime[6]-'0')*10+beginTime[7]-'0';
h2=(endTime[0]-'0')*10+endTime[1]-'0';
m2=(endTime[3]-'0')*10+endTime[4]-'0';
s2=(endTime[6]-'0')*10+endTime[7]-'0';
t=(h2-h1)*60*60+(m2-m1)*60+(s2-s1);
return t;
}
int getcallType(char *callCode,char *beCallCode)//通过主叫号码 和 被叫号码,识别通话类别(国际、国内、市话),返回0或1或2。
{
//我没写,你需要自己写,测试代码默认返回类别2,市话
return 2;
}
double getpay(long t,int callType)//计算费用,不足1分钟按1分钟算
{
//(1) 国际长途1.00元/分钟,(2) 国内长途0.60元/分钟,(3) 市话前3分钟0.20元,3分钟以后0.10元/分钟。
double callpay;
if(t%60!=0)
t=t/60+1;
else
t=t/60;
if(callType==0)
callpay=t*1;
if(callType==1)
callpay=t*0.6;
if(callType==2)
{
if(t=3)
callpay=t*0.2;
else
callpay=3*0.2+(t-3)*0.1;
}
return callpay;
}
间","通话时间"); while(callInfoHead-next!=NULL) { callInfoNow=callInfoHead-next; fprintf(fp,"%s %s %s %s %s\n",c
INFO *callInfoHead);int main(){ CALLINFO *callInfoHead=NULL; FILE *fp=NULL; callInfoHead=(CALLIN