期货交易自动化论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 88|回复: 0

银行代收电话费系统都有哪些需求? - 金融行业 - ITPUB论坛-专业的IT技术社区

[复制链接] |主动推送

285万

主题

285万

帖子

855万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8553718
发表于 2022-9-11 10:13:06 | 显示全部楼层 |阅读模式
1、使用文件管理整个收费信息,内容有:客户姓名C16,电话号码N11,市话费F7.2长途费F7.2,信息费F7.2,ADSL费F7.2,费用合计F8.2,对应年月N6,收费状态C(0――未收,1――已收),收费日期D,银行帐号N20,收费人编姓名。
2、提供的功能:(注:所有输出送显示器)
按月统计总的收费情况和按天统计每天的收费金额;收费、退费的处理及相应单据的输出;提供按姓名和电话号码查询收费状况及费用明细,要求对姓名按顺序插入排序(稳定排序),对电话号码按折半插入排序。
3、整个开发分为三个阶段:
1)先画出各模块的流程图和模块的关系图
2)编码与测试
3)调试、演示和程序讲解
部分源代码如下:
#include stdafx.h   
#include stdio.h  
#include string.h  
#include math.h  
#define NN 30
//客户姓名C16---Name,电话号码N12---TelNo,市话费F7.2---City,长途费F7.2---LongF,
信息费F7.2---Message,ADSL费F7.2---ADSL,
//费用合计F8.2---Total,对应年月N6---YearMon,收费状态C---Status(0――未收,1――已收),
收费日期D---RecvDate,银行帐号N20---BankNo,收费人编姓名C8---RecvNM
//NN表示总记录数
struct telphone
{char name[17],telNo[13];
float city,longf,message,ADSL,total;
int yearmon;
char status;
long RecvDate;
char BankNo[21],RecvNM[9];
}Tel[NN];
struct TelOrd
{char telNo[13];
int RecordNo;
}Ord[NN+1];
struct NameOrd
{char name[17];
int RecordNo;
}Ordn[NN+1],tttn;
//函数说明
int readData(),OrderTel(),OrderName(),InquirdTel(),InquirName(),MonthStat(),DayStat();
void report(),RecvName(),RecvTel();//DelSpCpy(char *,char *,int);//该函数的功能相当于memcpy
int Records; //用于保存实际读入的记录个数
char password[7]= 123456  
int main(int argc, char* argv[])
{char i;
char s[7];
int n;
int flag=0;
for(n=3;n n--)     
{
printf( 请你输入密码:\n&quot

;
scanf( %s ,s);
if(!strcmp(s,password))//若密码正确
{
     printf( 恭喜你成功登陆了\n\n\n&quot

;
     flag=1;
     break;
}
else   
printf( 输入有错误请重新输入:\n&quot

;
}
if(n==0)
printf( 你的输入次数已到再见\n&quot

;
else
{
    //char t;
    if (readData()) return 0;
if(OrderTel()) return 0;   //按电话号码去排序
if(OrderName()) return 0; //按姓名去排序
for(;


{printf( \n-------------------银行代收电话费管理系统1.0------------------\n&quot

;
printf( \n         1.报表 2.收费与退费 3.查询 0.结束 &quot

;
printf( \n&quot

;
printf( \n-----copyright(c) 2005 飞龙Technology.All Rights Reserved-----\n&quot

;
scanf( %s ,  
//----------------------------------报表-----------------------------------------
if (i=='1')
{printf( \n1.按天统计收费 2.按月统计收费 3.备注 0.结束\n&quot

;
   scanf( %s ,  
   for(;;)
   {if(i=='1') {DayStat();break;}
    else
if(i=='2') {MonthStat();break;}
    else
if(i=='3') {report();break;}
    else
   if(i=='0') break;
    {printf( \n选择错误,请重新输入!\n scanf( \n%s , }
   }
}
//-------------------------------收费与退费-----------------------------------
else
    if (i=='2')   
    {printf( \n1.按姓名 2.按电话号码   0.结束\n  
   scanf( %s ,  
for(;;)
{if(i=='1') {RecvName();break;}
     else
   if(i=='2') {RecvTel();break;}
    else
if(i=='0') break;
   {printf( \n选择错误,请重新输入!\n scanf( \n%s , }
}
    }
//-----------------------------------查询-------------------------------------------
else   
    if (i=='3')   
    {printf( \n1.按姓名查找 2.按电话号码查找 0.结束\n  
   scanf( %s ,  
for(;;)
{ if(i=='1')   
{ if((i= InquirName()) -1) //按姓名查找
   {printf( \n 姓名:%s\n 电话号码:%s\n ,Tel.name,Tel.telNo);
                                        printf( 市话费:%7.2f\n ,Tel.city);
                           printf( 长途费:%7.2f\n ,Tel.longf);
                           printf( 信息费:%7.2f\n ,Tel.message);
                           printf( ADSL: %7.2f\n ,Tel.ADSL);
                           printf( 合计:%8.2f\n ,Tel.total);
                                        printf( 年月:%d\n ,Tel.yearmon);
      }
   break;
    }
   else
    if(i=='2')   
   {if((i= InquirdTel()) -1)   //InquirdTel();按电话号码查找
     {printf( \n 姓名:%s\n 电话号码:%s\n ,Tel.name,Tel.telNo);
                              printf( 市话费:%7.2f\n ,Tel.city);
                 printf( 长途费:%7.2f\n ,Tel.longf);
                   printf( 信息费:%7.2f\n ,Tel.message);
                 printf( ADSL: %7.2f\n ,Tel.ADSL);
                 printf( 合计:%8.2f\n ,Tel.total);
                              printf( 年月:%d\n ,Tel.yearmon);
     }
     break;
   }
else
if(i=='0') break;
    else
   {printf( \n选择错误,请重新输入!\n scanf( \n%s , }
}
   }
//-----------------------------------结束-----------------------------------------
   else
   if (i=='0') break;
      else
      printf( \n 选择错误,请重新输入\n  
}
printf( \n程序正常结束!  
return 0;
}
return 0;
}
//--------------------------读取数据--------------------------------------------
int readData()//函数定义
{//若出错,则返回1;否则返回0
    FILE *pf;   int i=0; char cc[110];
if ((pf=fopen( Bank.txt , r ))==NULL)//打开代收费数据文件
{printf( \n Open DataFile Error! return 1;}
//printf( \n   姓名        电话号码     合计      年月 状态 收费日期 收费人  
while(!feof(pf) (i NN)) //判断文件是否结束或已读的记录数是否达到所定义的空间
{ fgets(cc,110,pf); //一次读入整行的内容
    //以下处理所读入的行,转换成结构数组中的内容
    memcpy(Tel.name,cc,16); memcpy(Tel.telNo, cc[16],12);   
    Tel.city=(float) atof( cc[28]); Tel.longf =(float) atof( cc[35]);
               Tel.message =(float) atof( cc[42]); Tel.ADSL =(float) atof( cc[47]);
               Tel.total =(float) atof( cc[54]);   
    Tel.status=cc[70]; cc[70]=' '; //需先处理,否则年月会变成7位数字
    Tel.yearmon =(int)atof( cc[64]);
               memcpy(Tel.BankNo, cc[79],20); cc[79]=' ';
               Tel.RecvDate=(long)atof( cc[71]);
               memcpy(Tel.RecvNM, cc[99],8);   
     i++;
}      
    Records=i;
fclose(pf);//(char *)Tel[i++],sizeof(struct Telphone )
return 0;
}

//---------------DelSpCpy函数的功能相当于memcpy--------------------
/*void DelSpCpy(char *Pdes, char *PSource,int llen)
{
while (*PSource==' ') //去掉前面的空格
{PSource++; llen--;}

while ((*PSource ' ') (llen 0))//取非空格字符送Pdes   
{ *Pdes++ = *PSource++; llen--;   }
*Pdes=0;
}
*/
//-------------------------报表---------------------------------
int DayStat()   //按天统计收费
{return 0;
}
//------------------------------------------------------------
int MonthStat()   //按月统计收费
{return 0;
}
//---------------------------------------------------------
void report()    //备注
{
int i,Recv=0,NoRV=0;    float Recvjj=0,NoRVjj=0;
//printf( \n Run report!  
for(i=0; i Records ;i++)
{ if (Tel.status=='0')
{ NoRV++; NoRVjj+=Tel.total;//累计未收费
      }
   else
{ Recv++; Recvjj+=Tel.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.status=='0')   
{printf( \n 姓名:%s\n 电话号码:%s\n ,Tel.name,Tel.telNo);
   printf( 市话费:%7.2f\n ,Tel.city);
   printf( 长途费:%7.2f\n ,Tel.longf);
   printf( 信息费:%7.2f\n ,Tel.message);
   printf( ADSL: %7.2f\n ,Tel.ADSL);
   printf( 合计:%8.2f\n ,Tel.total);
   printf( 年月:%d\n ,Tel.yearmon);
}   
/*-----------------------------已收费备注-----------------------------------*/
printf( \n  
printf( \n ★已收费备注★:\n  
for(i=0;i Records;i++)
if(Tel.status=='1')
{   
printf( \n 姓名:%s\n 电话号码:%s\n ,Tel.name,Tel.telNo);
printf( 市话费:%7.2f\n ,Tel.city);
printf( 长途费:%7.2f\n ,Tel.longf);
printf( 信息费:%7.2f\n ,Tel.message);
printf( ADSL: %7.2f\n ,Tel.ADSL);
printf( 合计:%8.2f\n ,Tel.total);
printf( 年月:%d\n ,Tel.yearmon);
}
}

//-----------------------按电话号码排序(折半排序)--------------------------
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.telNo ) 0)//把Ord[k]的值与Tel比较
Low =k+1;
   else
         if (strcmp(Ord[k].telNo,Tel.telNo) 0)
Last =k-1;
else
{printf( \n 存在重复的电话号码 return 1;}
    }
    if (strcmp(Ord[k].telNo,Tel.telNo) 0)
    //移动
    {for(Low=i; Low Low--)
Ord[Low+1]=Ord[Low];
     k++;
    }
     else
     for(Low=i; Low Low--)
Ord[Low+1]=Ord[Low];
//       k=i+1;
    //插入Tel
strcpy(Ord[k].telNo, Tel.telNo);
Ord[k].RecordNo = i;
   }
   /*printf( \n 排序结果如下:\n  
for (i=1; i = Records;i++)
printf( %s ,Ord.telNo);*/
return 0;
}

//-----------------------按姓名排序--------------------------------
int OrderName()
{int i,j,k;
for(i=0;i Records;i++)
{strcpy(Ordn.name,Tel.name);Ordn.RecordNo=i;}
for(i=0;i Records-1;i++) //在Ordn,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; Ordn=tttn;}//交换
}
/*printf( \n排序结果如下:\n  
for(i=0;i Records;i++)
printf( %s ,Ordn.name);*/
return 0;
}
//----------------------按姓名收费------------------------------------
void RecvName()
{int i;
if((i= InquirName()) -1) //查找姓名
{//Tel.total=Tel.city+Tel.longf+Tel.message+Tel.ADSL;//合计
if(Tel.status=='0')   
{
printf( \n收费信息如下: \n  
printf( \n 姓名:%s\n 电话号码:%s\n ,Tel.name,Tel.telNo);
printf( 市话费:%7.2f\n ,Tel.city);
printf( 长途费:%7.2f\n ,Tel.longf);
printf( 信息费:%7.2f\n ,Tel.message);
printf( ADSL: %7.2f\n ,Tel.ADSL);
printf( 合计:%8.2f\n ,Tel.total);
printf( 年月:%d\n ,Tel.yearmon);
}
else   
if(Tel.status=='1')
{
printf( \n 退费信息如下: \n  
printf( \n 姓名:%s\n 电话号码:%s\n ,Tel.name,Tel.telNo);
printf( 市话费:%7.2f\n ,Tel.city);
printf( 长途费:%7.2f\n ,Tel.longf);
printf( 信息费:%7.2f\n ,Tel.message);
printf( ADSL: %7.2f\n ,Tel.ADSL);
printf( 合计:%8.2f\n ,Tel.total);
printf( 年月:%d\n ,Tel.yearmon);
}
else return;
}
}

//--------------------按电话号码收费----------------------------------
void RecvTel()
{int i;//t;
//FILE *fp;
if((i= InquirdTel()) -1) //查找电话号码
{//Tel.total=Tel.city+Tel.longf+Tel.message+Tel.ADSL;//合计
if(Tel.status=='1')   
{
printf( 该用户已收费,退费信息如下: \n //加上单引号有影响吗????
printf( \n 姓名:%s\n 电话号码:%s\n ,Tel.name,Tel.telNo);
printf( 市话费:%7.2f\n ,Tel.city);
printf( 长途费:%7.2f\n ,Tel.longf);
printf( 信息费:%7.2f\n ,Tel.message);
printf( ADSL: %7.2f\n ,Tel.ADSL);
printf( 合计:%8.2f\n ,Tel.total);
printf( 年月:%d\n ,Tel.yearmon);
}
else   
if(Tel.status=='0')
{
printf( 收费信息如下: \n  
printf( \n 姓名:%s\n 电话号码:%s\n ,Tel.name,Tel.telNo);
printf( 市话费:%7.2f\n ,Tel.city);
printf( 长途费:%7.2f\n ,Tel.longf);
printf( 信息费:%7.2f\n ,Tel.message);
printf( ADSL: %7.2f\n ,Tel.ADSL);
printf( 合计:%8.2f\n ,Tel.total);
printf( 年月:%d\n ,Tel.yearmon);
}
else return;
/*if(Tel.status=='0')
{printf( 要对该用户收费吗(y/n)? scanf( %s ,  
if(t='y')
{
if((fp=fopen( bank.txt , w+ ))==NULL)
{
printf( 不能够打开这个文件\n  
return;
}
Tel.status='1';printf( \n成功收费\n  
}
}
*/
}
}

//----------------------按姓名查找------------------------------------
/*--------------------无序线性表的顺序查找----------------------------*/
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.name,NameLen)==0?Ordn.RecordNo:-1;   // i NN?i:-1;
if((NameLen 17) memcmp(Name, Ordn.name,NameLen)==0)   
return Ordn.RecordNo; //i

printf( \n 没有找到此用户!  
return -1;

}
/*---------------------------有序存储线性表的查找--------------------------
int InquirName()
{int i,NameLen;char Name[17];   
printf( \n Name= scanf( %s ,Name);NameLen=strlen(Name);
for(i=0;;i++)
if(i Records (memcmp(Name, Ordn.name,NameLen)==0)) return Ordn.RecordNo;
   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;
最初由 xuangxing 发布
[B]上学的时候老师给我们提这样的需求做联系,大虾们能不能把这个需求给补充一下:
1、使用文件管理整个收费信息,内容有:客户姓名C16,电话号码N11,市话费F7.2长途费F7.2,信息费F7.2,ADSL费F7.2,费用合计F8.2,对应年月N6,收费状态C(0――未收,1――已收),收费日期D,银行帐号N20,收费人编姓名。
2、提供的功能:(注:所有输出送显示器)
按月统计总的收费情况和按天统计每天的收费金额;收费、退费的处理及相应单据的输出;提供按姓名和电话号码查询收费状况及费用明细,要求对姓名按顺序插入排序(稳定排序),对电话号码按折半插入排序。
3、整个开发分为三个阶段:
1)先画出各模块的流程图和模块的关系图
2)编码与测试
3)调试、演示和程序讲解
部分源代码如下:
#include stdafx.h   
#include stdio.h  
#include string.h  
#include math.h  
#define NN 30
//客户姓名C16---Name,电话号码N12---TelNo,市话费F7.2---City,长途费F7.2---LongF,
信息费F7.2---Message,ADSL费F7.2---ADSL,
//费用合计F8.2---Total,对应年月N6---YearMon,收费状态C---Status(0――未收,1――已收),
收费日期D---RecvDate,银行帐号N20---BankNo,收费人编姓名C8---RecvNM
//NN表示总记录数
struct telphone
{char name[17],telNo[13];
float city,longf,message,ADSL,total;
int yearmon;
char status;
long RecvDate;
char BankNo[21],RecvNM[9];
}Tel[NN];
struct TelOrd
{char telNo[13];
int RecordNo;
}Ord[NN+1];
struct NameOrd
{char name[17];
int RecordNo;
}Ordn[NN+1],tttn;
//函数说明
int readData(),OrderTel(),OrderName(),InquirdTel(),InquirName(),MonthStat(),DayStat();
void report(),RecvName(),RecvTel();//DelSpCpy(char *,char *,int);//该函数的功能相当于memcpy
int Records; //用于保存实际读入的记录个数
char password[7]= 123456  
int main(int argc, char* argv[])
{char i;
char s[7];
int n;
int flag=0;
for(n=3;n n--)     
{
printf( 请你输入密码:\n&quot

;
scanf( %s ,s);
if(!strcmp(s,password))//若密码正确
{
     printf( 恭喜你成功登陆了\n\n\n&quot

;
     flag=1;
     break;
}
else   
printf( 输入有错误请重新输入:\n&quot

;
}
if(n==0)
printf( 你的输入次数已到再见\n&quot

;
else
{
    //char t;
    if (readData()) return 0;
if(OrderTel()) return 0;   //按电话号码去排序
if(OrderName()) return 0; //按姓名去排序
for(;


{printf( \n-------------------银行代收电话费管理系统1.0------------------\n&quot

;
printf( \n         1.报表 2.收费与退费 3.查询 0.结束 &quot

;
printf( \n&quot

;
printf( \n-----copyright(c) 2005 飞龙Technology.All Rights Reserved-----\n&quot

;
scanf( %s ,  
//----------------------------------报表-----------------------------------------
if (i=='1')
{printf( \n1.按天统计收费 2.按月统计收费 3.备注 0.结束\n&quot

;
   scanf( %s ,  
   for(;;)
   {if(i=='1') {DayStat();break;}
    else
if(i=='2') {MonthStat();break;}
    else
if(i=='3') {report();break;}
    else
   if(i=='0') break;
    {printf( \n选择错误,请重新输入!\n scanf( \n%s , }
   }
}
//-------------------------------收费与退费-----------------------------------
else
    if (i=='2')   
    {printf( \n1.按姓名 2.按电话号码   0.结束\n  
   scanf( %s ,  
for(;;)
{if(i=='1') {RecvName();break;}
     else
   if(i=='2') {RecvTel();break;}
    else
if(i=='0') break;
   {printf( \n选择错误,请重新输入!\n scanf( \n%s , }
}
    }
//-----------------------------------查询-------------------------------------------
else   
    if (i=='3')   
    {printf( \n1.按姓名查找 2.按电话号码查找 0.结束\n  
   scanf( %s ,  
for(;;)
{ if(i=='1')   
{ if((i= InquirName()) -1) //按姓名查找
   {printf( \n 姓名:%s\n 电话号码:%s\n ,Tel.name,Tel.telNo);
                                        printf( 市话费:%7.2f\n ,Tel.city);
                           printf( 长途费:%7.2f\n ,Tel.longf);
                           printf( 信息费:%7.2f\n ,Tel.message);
                           printf( ADSL: %7.2f\n ,Tel.ADSL);
                           printf( 合计:%8.2f\n ,Tel.total);
                                        printf( 年月:%d\n ,Tel.yearmon);
      }
   break;
    }
   else
    if(i=='2')   
   {if((i= InquirdTel()) -1)   //InquirdTel();按电话号码查找
     {printf( \n 姓名:%s\n 电话号码:%s\n ,Tel.name,Tel.telNo);
                              printf( 市话费:%7.2f\n ,Tel.city);
                 printf( 长途费:%7.2f\n ,Tel.longf);
                   printf( 信息费:%7.2f\n ,Tel.message);
                 printf( ADSL: %7.2f\n ,Tel.ADSL);
                 printf( 合计:%8.2f\n ,Tel.total);
                              printf( 年月:%d\n ,Tel.yearmon);
     }
     break;
   }
else
if(i=='0') break;
    else
   {printf( \n选择错误,请重新输入!\n scanf( \n%s , }
}
   }
//-----------------------------------结束-----------------------------------------
   else
   if (i=='0') break;
      else
      printf( \n 选择错误,请重新输入\n  
}
printf( \n程序正常结束!  
return 0;
}
return 0;
}
//--------------------------读取数据--------------------------------------------
int readData()//函数定义
{//若出错,则返回1;否则返回0
    FILE *pf;   int i=0; char cc[110];
if ((pf=fopen( Bank.txt , r ))==NULL)//打开代收费数据文件
{printf( \n Open DataFile Error! return 1;}
//printf( \n   姓名        电话号码     合计      年月 状态 收费日期 收费人  
while(!feof(pf) (i NN)) //判断文件是否结束或已读的记录数是否达到所定义的空间
{ fgets(cc,110,pf); //一次读入整行的内容
    //以下处理所读入的行,转换成结构数组中的内容
    memcpy(Tel.name,cc,16); memcpy(Tel.telNo, cc[16],12);   
    Tel.city=(float) atof( cc[28]); Tel.longf =(float) atof( cc[35]);
               Tel.message =(float) atof( cc[42]); Tel.ADSL =(float) atof( cc[47]);
               Tel.total =(float) atof( cc[54]);   
    Tel.status=cc[70]; cc[70]=' '; //需先处理,否则年月会变成7位数字
    Tel.yearmon =(int)atof( cc[64]);
               memcpy(Tel.BankNo, cc[79],20); cc[79]=' ';
               Tel.RecvDate=(long)atof( cc[71]);
               memcpy(Tel.RecvNM, cc[99],8);   
     i++;
}      
    Records=i;
fclose(pf);//(char *)Tel[i++],sizeof(struct Telphone )
return 0;
}

//---------------DelSpCpy函数的功能相当于memcpy--------------------
/*void DelSpCpy(char *Pdes, char *PSource,int llen)
{
while (*PSource==' ') //去掉前面的空格
{PSource++; llen--;}

while ((*PSource ' ') (llen 0))//取非空格字符送Pdes   
{ *Pdes++ = *PSource++; llen--;   }
*Pdes=0;
}
*/
//-------------------------报表---------------------------------
int DayStat()   //按天统计收费
{return 0;
}
//------------------------------------------------------------
int MonthStat()   //按月统计收费
{return 0;
}
//---------------------------------------------------------
void report()    //备注
{
int i,Recv=0,NoRV=0;    float Recvjj=0,NoRVjj=0;
//printf( \n Run report!  
for(i=0; i Records ;i++)
{ if (Tel.status=='0')
{ NoRV++; NoRVjj+=Tel.total;//累计未收费
      }
   else
{ Recv++; Recvjj+=Tel.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.status=='0')   
{printf( \n 姓名:%s\n 电话号码:%s\n ,Tel.name,Tel.telNo);
   printf( 市话费:%7.2f\n ,Tel.city);
   printf( 长途费:%7.2f\n ,Tel.longf);
   printf( 信息费:%7.2f\n ,Tel.message);
   printf( ADSL: %7.2f\n ,Tel.ADSL);
   printf( 合计:%8.2f\n ,Tel.total);
   printf( 年月:%d\n ,Tel.yearmon);
}   
/*-----------------------------已收费备注-----------------------------------*/
printf( \n  
printf( \n ★已收费备注★:\n  
for(i=0;i Records;i++)
if(Tel.status=='1')
{   
printf( \n 姓名:%s\n 电话号码:%s\n ,Tel.name,Tel.telNo);
printf( 市话费:%7.2f\n ,Tel.city);
printf( 长途费:%7.2f\n ,Tel.longf);
printf( 信息费:%7.2f\n ,Tel.message);
printf( ADSL: %7.2f\n ,Tel.ADSL);
printf( 合计:%8.2f\n ,Tel.total);
printf( 年月:%d\n ,Tel.yearmon);
}
}

//-----------------------按电话号码排序(折半排序)--------------------------
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.telNo ) 0)//把Ord[k]的值与Tel比较
Low =k+1;
   else
         if (strcmp(Ord[k].telNo,Tel.telNo) 0)
Last =k-1;
else
{printf( \n 存在重复的电话号码 return 1;}
    }
    if (strcmp(Ord[k].telNo,Tel.telNo) 0)
    //移动
    {for(Low=i; Low Low--)
Ord[Low+1]=Ord[Low];
     k++;
    }
     else
     for(Low=i; Low Low--)
Ord[Low+1]=Ord[Low];
//       k=i+1;
    //插入Tel
strcpy(Ord[k].telNo, Tel.telNo);
Ord[k].RecordNo = i;
   }
   /*printf( \n 排序结果如下:\n  
for (i=1; i = Records;i++)
printf( %s ,Ord.telNo);*/
return 0;
}

//-----------------------按姓名排序--------------------------------
int OrderName()
{int i,j,k;
for(i=0;i Records;i++)
{strcpy(Ordn.name,Tel.name);Ordn.RecordNo=i;}
for(i=0;i Records-1;i++) //在Ordn,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; Ordn=tttn;}//交换
}
/*printf( \n排序结果如下:\n  
for(i=0;i Records;i++)
printf( %s ,Ordn.name);*/
return 0;
}
//----------------------按姓名收费------------------------------------
void RecvName()
{int i;
if((i= InquirName()) -1) //查找姓名
{//Tel.total=Tel.city+Tel.longf+Tel.message+Tel.ADSL;//合计
if(Tel.status=='0')   
{
printf( \n收费信息如下: \n  
printf( \n 姓名:%s\n 电话号码:%s\n ,Tel.name,Tel.telNo);
printf( 市话费:%7.2f\n ,Tel.city);
printf( 长途费:%7.2f\n ,Tel.longf);
printf( 信息费:%7.2f\n ,Tel.message);
printf( ADSL: %7.2f\n ,Tel.ADSL);
printf( 合计:%8.2f\n ,Tel.total);
printf( 年月:%d\n ,Tel.yearmon);
}
else   
if(Tel.status=='1')
{
printf( \n 退费信息如下: \n  
printf( \n 姓名:%s\n 电话号码:%s\n ,Tel.name,Tel.telNo);
printf( 市话费:%7.2f\n ,Tel.city);
printf( 长途费:%7.2f\n ,Tel.longf);
printf( 信息费:%7.2f\n ,Tel.message);
printf( ADSL: %7.2f\n ,Tel.ADSL);
printf( 合计:%8.2f\n ,Tel.total);
printf( 年月:%d\n ,Tel.yearmon);
}
else return;
}
}

//--------------------按电话号码收费----------------------------------
void RecvTel()
{int i;//t;
//FILE *fp;
if((i= InquirdTel()) -1) //查找电话号码
{//Tel.total=Tel.city+Tel.longf+Tel.message+Tel.ADSL;//合计
if(Tel.status=='1')   
{
printf( 该用户已收费,退费信息如下: \n //加上单引号有影响吗????
printf( \n 姓名:%s\n 电话号码:%s\n ,Tel.name,Tel.telNo);
printf( 市话费:%7.2f\n ,Tel.city);
printf( 长途费:%7.2f\n ,Tel.longf);
printf( 信息费:%7.2f\n ,Tel.message);
printf( ADSL: %7.2f\n ,Tel.ADSL);
printf( 合计:%8.2f\n ,Tel.total);
printf( 年月:%d\n ,Tel.yearmon);
}
else   
if(Tel.status=='0')
{
printf( 收费信息如下: \n  
printf( \n 姓名:%s\n 电话号码:%s\n ,Tel.name,Tel.telNo);
printf( 市话费:%7.2f\n ,Tel.city);
printf( 长途费:%7.2f\n ,Tel.longf);
printf( 信息费:%7.2f\n ,Tel.message);
printf( ADSL: %7.2f\n ,Tel.ADSL);
printf( 合计:%8.2f\n ,Tel.total);
printf( 年月:%d\n ,Tel.yearmon);
}
else return;
/*if(Tel.status=='0')
{printf( 要对该用户收费吗(y/n)? scanf( %s ,  
if(t='y')
{
if((fp=fopen( bank.txt , w+ ))==NULL)
{
printf( 不能够打开这个文件\n  
return;
}
Tel.status='1';printf( \n成功收费\n  
}
}
*/
}
}

//----------------------按姓名查找------------------------------------
/*--------------------无序线性表的顺序查找----------------------------*/
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.name,NameLen)==0?Ordn.RecordNo:-1;   // i NN?i:-1;
if((NameLen 17) memcmp(Name, Ordn.name,NameLen)==0)   
return Ordn.RecordNo; //i

printf( \n 没有找到此用户!  
return -1;

}
/*---------------------------有序存储线性表的查找--------------------------
int InquirName()
{int i,NameLen;char Name[17];   
printf( \n Name= scanf( %s ,Name);NameLen=strlen(Name);
for(i=0;;i++)
if(i Records (memcmp(Name, Ordn.name,NameLen)==0)) return Ordn.RecordNo;
   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;
} [/B]


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|期货交易自动化论坛

GMT+8, 2025-10-30 03:07 , Processed in 0.090699 second(s), 28 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表