?? bank.cpp
字號:
// bank.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include "math.h"
#include "time.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;
char RecvDate[9];
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 *change();
int readData(),OrderTel(),InquirName(),MonthStat(),RecvName(),OrderName(),InquirdTel(),DayStat();//函數說明
void report();//DelSpCpy(char *,char *,int);//該函數的功能相當于memcpy
int Records,RecvTel(); //用于保存實際讀入的記錄個數
char password[7]="123456";
int main(int argc, char* argv[])
{char i;
char s[7];
int n;
int flag=0;
for(n=3;n>0;n--)
{
printf("請你輸入密碼:\n");
printf("(默認密碼為123456)\n");
scanf("%s",s);
if(!strcmp(s,password))//若密碼正確
{
printf("恭喜你成功登陸了\n\n\n");
flag=1;
break;
}
else
printf("輸入有錯誤請重新輸入:\n");
}
if(n==0)
printf("你的輸入次數已到再見\n");
else
{
//char t;
if(readData()) return 0;
if(OrderTel()) return 0; //按電話號碼去排序
if(OrderName()) return 0; //按姓名去排序
for(;;)
{printf("\n-------------------銀行代收電話費管理系統1.0------------------\n");
printf("\n 1.報表 2.收費與退費 3.查詢 0.結束 ");
printf("\n");
printf("\n-----copyright(c) 2005 飛龍Technology.All Rights Reserved-----\n");
scanf("%s",&i);
//----------------------------------報表-----------------------------------------
if (i=='1')
{printf("\n1.按月統計收費 2.備注 0.結束\n");
scanf("%s",&i);
for(;;)
{ if(i=='1') {MonthStat();break;}
else
if(i=='2') {report();break;}
else
if(i=='0') break;
{printf("\n選擇錯誤,請重新輸入!\n");scanf("\n%s",&i);}
}
}
//-------------------------------收費與退費-----------------------------------
else
if (i=='2')
{printf("\n1.按姓名 2.按電話號碼 0.結束\n");
scanf("%s",&i);
for(;;)
{if(i=='1') {RecvName();break;}
else
if(i=='2') {RecvTel();break;}
else
if(i=='0') break;
{printf("\n選擇錯誤,請重新輸入!\n");scanf("\n%s",&i);}
}
}
//-----------------------------------查詢-------------------------------------------
else
if (i=='3')
{printf("\n1.按姓名查找 2.按電話號碼查找 3.按姓名排序 4.按電話號碼排序 0.結束\n");
scanf("%s",&i);
for(;;)
{ if(i=='1')
{
for(;i=InquirName()>-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(" 狀態: %c\n",Tel[i].status);
printf(" 年月:%d\n",Tel[i].yearmon);
}
printf("是否要查下一用戶(★按任意鍵繼續★按N退出★)?");scanf("%s",&i);
if(i=='n'||i=='N') break;
}
break;
}
else
if(i=='2')
{ for(;((i= InquirdTel())>-1);) //InquirdTel();按電話號碼查找
{
{
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(" 狀態: %c\n",Tel[i].status);
printf(" 年月:%d\n",Tel[i].yearmon);
}
printf("是否要查下一用戶(★按任意鍵繼續★按N退出★)?");scanf("%s",&i);
if(i=='n'||i=='N') break;
}break;
}
else
if(i=='3')
{printf("\n 排序結果如下:\n");
for (i=1; i <= Records;i++)
printf("%s\n",Ordn[i].name);break;
}
else
if(i=='4')
{printf("\n 排序結果如下:\n");
for (i=1; i <= Records;i++)
printf("%s\n",Ord[i].telNo);break;
}
else
if(i=='0') break;
else
{printf("\n選擇錯誤,請重新輸入!\n");scanf("\n%s",&i);}
}
}
//-----------------------------------結束-----------------------------------------
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[i].name,cc,16); memcpy(Tel[i].telNo,&cc[16],12);
//DelSpCpy(Tel[i].name,cc,16); DelSpCpy(Tel[i].telNo,&cc[16],12);//帶有不可見的空格字符(函數功能相當于memcpy)
Tel[i].city=(float) atof(&cc[28]); Tel[i].longf =(float) atof(&cc[35]);
Tel[i].message =(float) atof(&cc[42]); Tel[i].ADSL =(float) atof(&cc[47]);
Tel[i].total =(float) atof(&cc[54]);
Tel[i].status=cc[70]; cc[70]=' '; //需先處理,否則年月會變成7位數字
Tel[i].yearmon =(int)atof(&cc[64]);
memcpy(Tel[i].BankNo,&cc[79],20); cc[79]=' ';
//Tel[i].RecvDate=(long)atof(&cc[71]);
memcpy(Tel[i].RecvDate,&cc[71],8);
memcpy(Tel[i].RecvNM,&cc[99],8);
//printf("\n %s%s %f %d %c %d %s",Tel[i].name,Tel[i].telNo, Tel[i].total ,Tel[i].yearmon,Tel[i].status, Tel[i].RecvDate, Tel[i].RecvNM); //顯示讀入行的部分內容
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 MonthStat() //按月統計收費
{ int i,m;//Recv=0,NoRV=0; float Recvjj=0,NoRVjj=0;
char t;
FILE *pf; //char cc[110];
if ((pf=fopen("Bank.txt","r"))==NULL)//打開代收費數據文件
{printf("\n Open DataFile Error!"); return 1;}
for(;(!feof(pf)&&((i= InquirdTel())>-1||(i= InquirName())>-1));)
{printf("請輸入要統計的年月(形式如:200506)\n");scanf("%d",&m);
if(m==Tel[i].yearmon)
{Tel[i].total=Tel[i].ADSL+Tel[i].city+Tel[i].longf+Tel[i].message;
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(" 狀態: %c\n",Tel[i].status);
printf(" 合計:%8.2f\n",Tel[i].total);
}
printf("是否要對下一用戶統計(★按任意鍵繼續★按N退出★)?");scanf("%s",&t);
if(t=='n'||t=='N')
break;
}
return 0;
}
//---------------------------------------------------------
void report() //備注
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -