⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bank.cpp

📁 银行代收电话费管理系统功能叙述 1、使用文件管理整个收费信息
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{
	  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 + -