📄 bank.cpp
字号:
{
int i,Recv=0,NoRV=0; float Recvjj=0,NoRVjj=0;
//printf("\n Run report!");
for(i=0; i<Records ;i++)
{ if (Tel[i].status=='0')
{NoRV++; NoRVjj+=Tel[i].total;}//累计未收费
else
{Recv++; Recvjj+=Tel[i].total;}//累计已收费
}
printf("\n 类型 户数 金额 占比%");
printf("\n 已收费 %4d %7.2f %5.2f",Recv,Recvjj,Recvjj/(Recvjj+NoRVjj)*100);
printf("\n 未收费 %4d %7.2f %5.2f\n",NoRV,NoRVjj,NoRVjj/(Recvjj+NoRVjj)*100);
/*-----------------------------未收费备注---------------------------------*/
printf("\n ★未收费备注★:\n");
for(i=0;i<Records;i++)
if(Tel[i].status=='0')
{
printf("\n 姓名:%s\n 电话号码:%s\n",Tel[i].name,Tel[i].telNo);
printf(" 市话费:%7.2f\n",Tel[i].city);
printf(" 长途费:%7.2f\n",Tel[i].longf);
printf(" 信息费:%7.2f\n",Tel[i].message);
printf(" ADSL: %7.2f\n",Tel[i].ADSL);
printf(" 合计:%8.2f\n",Tel[i].total);
printf(" 年月:%d\n",Tel[i].yearmon);
}
/*-----------------------------已收费备注-----------------------------------*/
printf("\n");
printf("\n ★已收费备注★:\n");
for(i=0;i<Records;i++)
if(Tel[i].status=='1')
{
printf("\n 姓名:%s\n 电话号码:%s\n",Tel[i].name,Tel[i].telNo);
printf(" 市话费:%7.2f\n",Tel[i].city);
printf(" 长途费:%7.2f\n",Tel[i].longf);
printf(" 信息费:%7.2f\n",Tel[i].message);
printf(" ADSL: %7.2f\n",Tel[i].ADSL);
printf(" 合计:%8.2f\n",Tel[i].total);
printf(" 年月:%d\n",Tel[i].yearmon);
printf(" 收费日期:%s\n",Tel[i].RecvDate);
}
}
//-----------------------按电话号码排序(折半排序)--------------------------
int OrderTel()
{ int i,k,Low,Last;
Ord[0].telNo[0]='0';
strcpy(Ord[1].telNo, Tel[0].telNo);
Ord[1].RecordNo =0;
for (i=1; i< Records ;i++)
{
Low=0; Last=i; //寻找插入位置
while (Low <=Last)
{
k =(Low+ Last) /2;//计算中间位置
if (strcmp(Ord[k].telNo, Tel[i].telNo )<0)//把Ord[k]的值与Tel[i]比较
Low =k+1;
else
if (strcmp(Ord[k].telNo,Tel[i].telNo)>0)
Last =k-1;
else
{printf("\n 存在重复的电话号码"); return 1;}
}
if (strcmp(Ord[k].telNo,Tel[i].telNo)<0)
//移动
{for(Low=i; Low >k; Low--)
Ord[Low+1]=Ord[Low];
k++;
}
else
for(Low=i; Low >=k; Low--)
Ord[Low+1]=Ord[Low];
//k=i+1;
//插入Tel[i]
strcpy(Ord[k].telNo, Tel[i].telNo);
Ord[k].RecordNo = i;
}
return 0;
}
//-----------------------按姓名排序--------------------------------
int OrderName()
{int i,j,k;
for(i=0;i<Records;i++)
{strcpy(Ordn[i].name,Tel[i].name);Ordn[i].RecordNo=i;}
for(i=0;i<Records-1;i++) //在Ordn[i],Ordn[i+1],...,Ordn[Records-1]中选键值最小的Ordn[k]
{
for(k=i,j=i+1;j<Records;j++)//如果存在有同名字的怎么办???
if(strcmp(Ordn[k].name,Ordn[j].name)>0) k=j;
if(k!=i) {tttn=Ordn[k]; Ordn[k]=Ordn[i]; Ordn[i]=tttn;}//交换
}
return 0;
}
//----------------------按姓名收费------------------------------------
int RecvName()
{int i;char t,date[9];//t;
FILE *pf; char cc[110];
do//(;t=='y'||t=='Y';)
{ if ((pf=fopen("Bank.txt","r"))==NULL)//打开代收费数据文件
{printf("\n Open DataFile Error!"); return 1;}
while(!feof(pf)&&((i= InquirName())>-1))
//if((i= InquirdTel())>-1) //查找电话号码
{
if(Tel[i].status=='1')
{
printf("该用户已收费,退费信息如下: \n");//加上单引号有影响吗????
printf("\n 姓名:%s\n 电话号码:%s\n",Tel[i].name,Tel[i].telNo);
printf(" 市话费:%7.2f\n",Tel[i].city);
printf(" 长途费:%7.2f\n",Tel[i].longf);
printf(" 信息费:%7.2f\n",Tel[i].message);
printf(" ADSL: %7.2f\n",Tel[i].ADSL);
printf(" 合计:%8.2f\n",Tel[i].total);
printf(" 年月:%d\n",Tel[i].yearmon);
printf(" 收费日期:%s\n",Tel[i].RecvDate);
}
else
if(Tel[i].status=='0')
{
printf("收费信息如下: \n");
printf("\n 姓名:%s\n 电话号码:%s\n",Tel[i].name,Tel[i].telNo);
printf(" 市话费:%7.2f\n",Tel[i].city);
printf(" 长途费:%7.2f\n",Tel[i].longf);
printf(" 信息费:%7.2f\n",Tel[i].message);
printf(" ADSL: %7.2f\n",Tel[i].ADSL);
printf(" 合计:%8.2f\n",Tel[i].total);
printf(" 年月:%d\n",Tel[i].yearmon);
printf("要对该用户收费吗(y/n)?");scanf("%s",&t);
if((t=='y')||(t=='Y'))
{
fgets(cc,110,pf);cc[70]='1';
Tel[i].status=cc[70];
_strdate(date);memcpy(Tel[i].RecvDate,date,8);//获取系统当前时间//printf("The current date is %s\n", date);
printf("\n成功收费\n");
}
else
if((t=='n')||(t=='N'))
break;
}
break;
}
printf("\n是否继续对下一用户收费?(★按Y继续★按任意键退出★)");
scanf("%s",&t);
}while(t=='y'||t=='Y');
return 0;
}
//--------------------按电话号码收费----------------------------------
int RecvTel()
{int i;char t,date[9];//t;
FILE *pf; char cc[110];
do//(;t=='y'||t=='Y';)
{ if ((pf=fopen("Bank.txt","r"))==NULL)//打开代收费数据文件
{printf("\n Open DataFile Error!"); return 1;}
while(!feof(pf)&&((i= InquirdTel())>-1))
//if((i= InquirdTel())>-1) //查找电话号码
{
if(Tel[i].status=='1')
{
printf("该用户已收费,退费信息如下: \n");//加上单引号有影响吗????
printf("\n 姓名:%s\n 电话号码:%s\n",Tel[i].name,Tel[i].telNo);
printf(" 市话费:%7.2f\n",Tel[i].city);
printf(" 长途费:%7.2f\n",Tel[i].longf);
printf(" 信息费:%7.2f\n",Tel[i].message);
printf(" ADSL: %7.2f\n",Tel[i].ADSL);
printf(" 合计:%8.2f\n",Tel[i].total);
printf(" 年月:%d\n",Tel[i].yearmon);
printf(" 收费日期:%s\n",Tel[i].RecvDate);
}
else
if(Tel[i].status=='0')
{
printf("收费信息如下: \n");
printf("\n 姓名:%s\n 电话号码:%s\n",Tel[i].name,Tel[i].telNo);
printf(" 市话费:%7.2f\n",Tel[i].city);
printf(" 长途费:%7.2f\n",Tel[i].longf);
printf(" 信息费:%7.2f\n",Tel[i].message);
printf(" ADSL: %7.2f\n",Tel[i].ADSL);
printf(" 合计:%8.2f\n",Tel[i].total);
printf(" 年月:%d\n",Tel[i].yearmon);
printf("要对该用户收费吗(y/n)?");scanf("%s",&t);
if((t=='y')||(t=='Y'))
{
fgets(cc,110,pf);cc[70]='1';
Tel[i].status=cc[70];
_strdate(date);memcpy(Tel[i].RecvDate,date,8);//获取系统当前时间
printf("\n成功收费\n");
}
else
if((t=='n')||(t=='N'))
break;
}
break;
}
printf("\n是否对下一用户收费?(★按Y继续★按任意键退出★)");
scanf("%s",&t);
}while(t=='y'||t=='Y');
return 0;
}
//----------------------按姓名查找------------------------------------
/*--------------------无序线性表的顺序查找----------------------------*/
int InquirName()
{int i,NameLen; char Name[17];
printf("\n Name= ");scanf("%s",Name);NameLen=strlen(Name);
for(i=0;i<Records;i++)
//return memcmp(Name, Ordn[i].name,NameLen)==0?Ordn[i].RecordNo:-1; // i<NN?i:-1;
if((NameLen<17)&&memcmp(Name, Ordn[i].name,NameLen)==0)
return Ordn[i].RecordNo; //i
printf("\n 没有找到此用户!");
return -1;
}
//--------------------按电话号码查找(折半查找)------------------------
int InquirdTel()
{ int Mid ,Low, Last,TelLen; char Telphone[13];
printf("\n Tel= "); scanf("%s",Telphone);
Low=1; Last=Records; TelLen=strlen(Telphone);
while (Low <= Last)
{ Mid= (Low +Last) /2;
//printf("\n Mid=%d , TelNo=%s ",Mid,Ord[Mid].telNo);
if (memcmp(Telphone, Ord[Mid].telNo,TelLen)==0) //加上单引号有何不同????//strcmp??
return Ord[Mid].RecordNo;//Mid;
else
if(memcmp(Telphone, Ord[Mid].telNo,TelLen)> 0)
Low= Mid+1;
else
Last= Mid-1;
}
printf("\n 没有找到此号码!");
return -1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -