www.pudn.com > ATM.rar > try.cpp
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"math.h"
void main()
{
int *ID(); /*核对银行帐号*/
void password(char *id_1); /*核对密码*/
void dispace(); //转帐
void get(char *ID); //取钱
void see(char *ID); //查询
void amend(char *ID); //修改密码
void integer(int num4[],char num6[],int n);
char c_string(int n); //把数字转换成字符
int c1_string(char n); //把字符转换成数字
int NO_1(double n); //判断次数
int integer_1(double n); //把双精度浮点数转化为整数int,例1.20000=>=1
double spread(double n);
void start1(); //开始1
void start2(); //开始2
start1();
start2();
}
char c_string(int n) //数字转换成字符函数
{
char str[1];
switch(n)
{
case 0: str[0]='0';break;
case 1: str[0]='1';break;
case 2: str[0]='2';break;
case 3: str[0]='3';break;
case 4: str[0]='4';break;
case 5: str[0]='5';break;
case 6: str[0]='6';break;
case 7: str[0]='7';break;
case 8: str[0]='8';break;
case 9: str[0]='9';break;
}
return (str[0]);
}
int c1_string(char n)
{
int n1;
switch(n)
{
case '0': n1=0;break;
case '1': n1=1;break;
case '2': n1=2;break;
case '3': n1=3;break;
case '4': n1=4;break;
case '5': n1=5;break;
case '6': n1=6;break;
case '7': n1=7;break;
case '8': n1=8;break;
case '9': n1=9;break;
}
return (n1);
}
double spread(double n)
{
double n2;
if((n/1e11>=1)&amt;&amt;(n/1e11<10))
n2=1e11;
else if((n/1e10>=1)&amt;&amt;(n/1e10<10))
n2=1e10;
else if((n/1e9>=1)&amt;&amt;(n/1e9<10))
n2=1e9;
else if((n/1e8>=1)&amt;&amt;(n/1e8<10))
n2=1e8;
else if((n/1e7>=1)&amt;&amt;(n/1e7<10))
n2=1e7;
else if((n/1e6>=1)&amt;&amt;(n/1e6<10))
n2=1e6;
else if((n/1e5>=1)&amt;&amt;(n/1e5<10))
n2=1e5;
else if((n/1e4>=1)&amt;&amt;(n/1e4<10))
n2=1e4;
else if((n/1e3>=1)&amt;&amt;(n/1e3<10))
n2=1e3;
else if((n/1e2>=1)&amt;&amt;(n/1e2<10))
n2=1e2;
else if((n/1e1>=1)&amt;&amt;(n/1e1<10))
n2=1e1;
else if((n/1e0>=1)&amt;&amt;(n/1e0<10))
n2=1e0;
else if(n/1e0==0)
n2=0;
else
{
printf("错误2!对不起,系统内部有误,请到营业厅取钱,谢谢您的合作!\n");
printf(">f\n",n);
exit(0);
}
return n2;
}
int NO_1(double n)
{
int n1;
if(n==1e11) n1=12;
else if(n==1e10) n1=11;
else if(n==1e9) n1=10;
else if(n==1e8) n1=9;
else if(n==1e7) n1=8;
else if(n==1e6) n1=7;
else if(n==1e5) n1=6;
else if(n==1e4) n1=5;
else if(n==1e3) n1=4;
else if(n==1e2) n1=3;
else if(n==1e1) n1=2;
else if(n==1e0) n1=1;
else if(n==0) n1=0;
else
{
printf("错误1!,对不起,系统内部有误,请到营业厅取钱,谢谢您的合作!\n");
exit(0);
}
return (n1);
}
void integer(int num4[],char num6[],int n)
{
int i;
for(i=0;i<n;i++)
{
if(num4[i]==0)
num6[i]='0';
else if(num4[i]==1)
num6[i]='1';
else if(num4[i]==2)
num6[i]='2';
else if(num4[i]==3)
num6[i]='3';
else if(num4[i]==4)
num6[i]='4';
else if(num4[i]==5)
num6[i]='5';
else if(num4[i]==6)
num6[i]='6';
else if(num4[i]==7)
num6[i]='7';
else if(num4[i]==8)
num6[i]='8';
else if(num4[i]==9)
num6[i]='9';
}
}
int integer_1(double n)//把双精度浮点数转化为整数int,例1.20000=>1
{
int n1;
if(n>=0&amt;&amt;n<1)
n1=0;
else if(n>=1&amt;&amt;n<2)
n1=1;
else if(n>=2&amt;&amt;n<3)
n1=2;
else if(n>=3&amt;&amt;n<4)
n1=3;
else if(n>=4&amt;&amt;n<5)
n1=4;
else if(n>=5&amt;&amt;n<6)
n1=5;
else if(n>=6&amt;&amt;n<7)
n1=6;
else if(n>=7&amt;&amt;n<8)
n1=7;
else if(n>=8&amt;&amt;n<9)
n1=8;
else if(n>=9&amt;&amt;n<10)
n1=9;
else
{
printf("错误3!,对不起,系统内部有误,请到营业厅取钱,谢谢您的合作!\n");
exit(0);
}
return n1;
}
void assembled_money(char *together,char *ID)
{
int i;
for(i=0;i<6;i++)
*(together+i)=*(ID+i);
*(together+6)='m',*(together+7)='o',*(together+8)='n',*(together+9)='e',*(together+10)='y',
*(together+11)='.',*(together+12)='t',*(together+13)='x',*(together+14)='t',
*(together+15)='\0';
}
void assembled_password(char *together,char *ID)
{
int i;
for(i=0;i<6;i++)
*(together+i)=*(ID+i);
*(together+6)='.',*(together+7)='t',*(together+8)='x',
*(together+9)='t',*(together+10)='\0';
}
void password(char *id_1)//密码验证
{
FILE *fp;
int i,n1=3,n2=0/*,result*/;
char acounts[6],word1[6],word2[6],id[11];
char *p1,*p2,*p3;
p2=id,p1=word1,p3=word2;
loop:{
i=0;
printf("请输入您的密码:");
while((*(p1+i)=getchar())!='\n')
{
*(p2+i)=*(id_1+i)=*(p1+i);
i++;
}
*(p2+6)='.',*(p2+7)='t',*(p2+8)='x',*(p2+9)='t',*(p2+10)='\0';
if((fp=fopen(p2,"r"))==NULL)
{
n1--;
if(n1==0)
{
printf("您的卡已被锁定,请用您的合法证据与有关人员联系解锁。\n");
printf("谢谢您对中国银行的支持。\n");
exit(0);
}
printf("密码错误,剩余输入次数为>d!\n",n1);
goto loop;
}
fclose(fp);
}
}
void see(char *ID)//查询余额
{
void assembled_money(char *together,char *ID);
FILE *fp;
int i=0,k;
char num[11],file[16];
char *p1;
p1=file;
assembled_money(p1,ID);
if((fp=fopen(file,"r"))==NULL)
{
printf("can not open the file!\n");
exit(0);
}
num[i]=fgetc(fp);
while(*(num+i)!=EOF)
{
i++;
*(num+i)=fgetc(fp);
}
fclose(fp);
printf("您的帐户余额为:");
for(k=i;k<11;k++)
*(num+i)='\0';
printf(">s",num);
printf("\n");
}
void get(char *ID)//取款
{
void assembled_money(char *together,char *ID);
FILE *fp;
int i=0,k,j,p=1,place,number,num4[11],num5[11],number3;
char num3[11],num6[11],file[16],*p1;
double n,n1=10,n2=0,n3,number2,number1,num;
p1=file;
assembled_money(p1,ID);
while(p==1)//重新输入循环判断
{
if((fp=fopen(p1,"r"))==NULL)
{
printf("can not open the file!\n");
exit(0);
}
i=0;
*(num3+i)=fgetc(fp);
while(*(num3+i)!=EOF)
{
i++;
*(num3+i)=fgetc(fp);
}
fclose(fp);
place=i; //记录下存款的位数,例10000为5位
for(j=0;j<i;j++)
*(num5+j)=c1_string(*(num3+j));
for(k=i;k<11;k++)
*(num5+k)=-1; //把前面的位数定为-1。方便后面判
printf("您的帐户余额为:");
for(k=0;k<place;k++)
printf(">d",*(num5+k));
printf("\n");
printf("请按数字键选择您要的取款金额:\n");
loop:
{
printf(" **************************\n");
printf(" * 按1取100,按2取200; *\n");
printf(" * 按5取500,按3取1000. *\n");
printf(" **************************\n");
scanf(">d",&amt;number3);
number1=(double)number3;
if(number1==1)
number1=100;
else if(number1==2)
number1=200;
else if(number1==5)
number1=500;
else if(number1==3)
number1=1000;
else
{
printf("输入错误,请重新输入。\n");
goto loop;
}
}
n=10;
n=pow(n,place-1);
number2=0;
for(i=0;i<place;i++)
{
number2=number2+*(num5+i)*n;
n=n/10;
}
if(number2<number1)
{
p=0;
while(p==0)
{
printf("您的卡上没有这么多金额,继续取款请按1,退出本系统请按0.\n请输入:");
scanf(">d",&amt;number);
if(number==1)
p=1;
else if(number==0)
exit(0);
else p=0;
}
}
else
p=0;
}
num=number2-number1;//取后余额
n3=spread(num);
k=NO_1(n3);
for(i=0;i<k;i++)
{
n3=spread(num);
if(n3==0) break;
num4[i]=integer_1(num/n3);
if((num/n3>1&amt;&amt;num/n3<1.0000000001)||(num/n3>2&amt;&amt;num/n3<2.0000000001)||
(num/n3>3&amt;&amt;num/n3<3.0000000001)||(num/n3>4&amt;&amt;num/n3<4.0000000001)||
((num/n3>5)&amt;&amt;(num/n3<5.0000000001))||((num/n3>6)&amt;&amt;(num/n3<6.0000000001))||
((num/n3>7)&amt;&amt;(num/n3<7.0000000001))||((num/n3>8)&amt;&amt;(num/n3<8.0000000001))||
((num/n3>9)&amt;&amt;(num/n3<9.0000000001)))
{
num4[i+1]=0;
num4[i+2]=0;
num4[i+3]=0;
num4[i+4]=0;
num4[i+5]=0;
num4[i+6]=0;
num4[i+7]=0;
num4[i+8]=0;
num4[i+9]=0;
num4[i+10]=0;
num=num-n3*num4[i];
i=i+10;
continue;
}
else if((num/n3>1.0000000001)&amt;&amt;(num/n3<1.000000001)||
(num/n3>=2.0000000001)&amt;&amt;(num/n3<2.000000001)||
(num/n3>=3.0000000001)&amt;&amt;(num/n3<3.000000001)||
(num/n3>=4.0000000001)&amt;&amt;(num/n3<4.000000001)||
(num/n3>=5.0000000001)&amt;&amt;(num/n3<5.000000001)||
(num/n3>=6.0000000001)&amt;&amt;(num/n3<6.000000001)||
(num/n3>=7.0000000001)&amt;&amt;(num/n3<7.000000001)||
(num/n3>=8.0000000001)&amt;&amt;(num/n3<8.000000001)||
(num/n3>=9.0000000001)&amt;&amt;(num/n3<9.000000001))
{
num4[i+1]=0;
num4[i+2]=0;
num4[i+3]=0;
num4[i+4]=0;
num4[i+5]=0;
num4[i+6]=0;
num4[i+7]=0;
num4[i+8]=0;
num4[i+9]=0;
num=num-n3*num4[i];
i=i+9;
continue;
}
else if((num/n3>=1.000000001)&amt;&amt;(num/n3<1.00000001)||
(num/n3>=2.000000001)&amt;&amt;(num/n3<2.00000001)||
(num/n3>=3.000000001)&amt;&amt;(num/n3<3.00000001)||
(num/n3>=4.000000001)&amt;&amt;(num/n3<4.00000001)||
(num/n3>=5.000000001)&amt;&amt;(num/n3<5.00000001)||
(num/n3>=6.000000001)&amt;&amt;(num/n3<6.00000001)||
(num/n3>=7.000000001)&amt;&amt;(num/n3<7.00000001)||
(num/n3>=8.000000001)&amt;&amt;(num/n3<8.00000001)||
(num/n3>=9.000000001)&amt;&amt;(num/n3<9.00000001))
{
num4[i+1]=0;
num4[i+2]=0;
num4[i+3]=0;
num4[i+4]=0;
num4[i+5]=0;
num4[i+6]=0;
num4[i+7]=0;
num4[i+8]=0;
num=num-n3*num4[i];
i=i+8;
continue;
}
else if((num/n3>=1.00000001)&amt;&amt;(num/n3<1.0000001)||
(num/n3>=2.00000001)&amt;&amt;(num/n3<2.0000001)||
(num/n3>=3.00000001)&amt;&amt;(num/n3<3.0000001)||
(num/n3>=4.00000001)&amt;&amt;(num/n3<4.0000001)||
(num/n3>=5.00000001)&amt;&amt;(num/n3<5.0000001)||
(num/n3>=6.00000001)&amt;&amt;(num/n3<6.0000001)||
(num/n3>=7.00000001)&amt;&amt;(num/n3<7.0000001)||
(num/n3>=8.00000001)&amt;&amt;(num/n3<8.0000001)||
(num/n3>=9.00000001)&amt;&amt;(num/n3<9.0000001))
{
num4[i+1]=0;
num4[i+2]=0;
num4[i+3]=0;
num4[i+4]=0;
num4[i+5]=0;
num4[i+6]=0;
num4[i+7]=0;
num=num-n3*num4[i];
i=i+7;
continue;
}
else if((num/n3>=1.0000001)&amt;&amt;(num/n3<1.000001)||
(num/n3>=2.0000001)&amt;&amt;(num/n3<2.000001)||
(num/n3>=3.0000001)&amt;&amt;(num/n3<3.000001)||
(num/n3>=4.0000001)&amt;&amt;(num/n3<4.000001)||
(num/n3>=5.0000001)&amt;&amt;(num/n3<5.000001)||
(num/n3>=6.0000001)&amt;&amt;(num/n3<6.000001)||
(num/n3>=7.0000001)&amt;&amt;(num/n3<7.000001)||
(num/n3>=8.0000001)&amt;&amt;(num/n3<8.000001)||
(num/n3>=9.0000001)&amt;&amt;(num/n3<9.000001))
{
num4[i+1]=0;
num4[i+2]=0;
num4[i+3]=0;
num4[i+4]=0;
num4[i+5]=0;
num4[i+6]=0;
num=num-n3*num4[i];
i=i+6;
continue;
}
else if((num/n3>=1.000001)&amt;&amt;(num/n3<1.00001)||
(num/n3>=2.000001)&amt;&amt;(num/n3<2.00001)||
(num/n3>=3.000001)&amt;&amt;(num/n3<3.00001)||
(num/n3>=4.000001)&amt;&amt;(num/n3<4.00001)||
(num/n3>=5.000001)&amt;&amt;(num/n3<5.00001)||
(num/n3>=6.000001)&amt;&amt;(num/n3<6.00001)||
(num/n3>=7.000001)&amt;&amt;(num/n3<7.00001)||
(num/n3>=8.000001)&amt;&amt;(num/n3<8.00001)||
(num/n3>=9.000001)&amt;&amt;(num/n3<9.00001))
{
num4[i+1]=0;
num4[i+2]=0;
num4[i+3]=0;
num4[i+4]=0;
num4[i+5]=0;
num=num-n3*num4[i];
i=i+5;
continue;
}
else if((num/n3>=1.00001)&amt;&amt;(num/n3<1.0001)||
(num/n3>=2.00001)&amt;&amt;(num/n3<2.0001)||
(num/n3>=3.00001)&amt;&amt;(num/n3<3.0001)||
(num/n3>=4.00001)&amt;&amt;(num/n3<4.0001)||
(num/n3>=5.00001)&amt;&amt;(num/n3<5.0001)||
(num/n3>=6.00001)&amt;&amt;(num/n3<6.0001)||
(num/n3>=7.00001)&amt;&amt;(num/n3<7.0001)||
(num/n3>=8.00001)&amt;&amt;(num/n3<8.0001)||
(num/n3>=9.00001)&amt;&amt;(num/n3<9.0001))
{
num4[i+1]=0;
num4[i+2]=0;
num4[i+3]=0;
num4[i+4]=0;
num=num-n3*num4[i];
i=i+4;
continue;
}
else if((num/n3>=1.0001)&amt;&amt;(num/n3<1.001)||
(num/n3>=2.0001)&amt;&amt;(num/n3<2.001)||
(num/n3>=3.0001)&amt;&amt;(num/n3<3.001)||
(num/n3>=4.0001)&amt;&amt;(num/n3<4.001)||
(num/n3>=5.0001)&amt;&amt;(num/n3<5.001)||
(num/n3>=6.0001)&amt;&amt;(num/n3<6.001)||
(num/n3>=7.0001)&amt;&amt;(num/n3<7.001)||
(num/n3>=8.0001)&amt;&amt;(num/n3<8.001)||
(num/n3>=9.0001)&amt;&amt;(num/n3<9.001))
{
num4[i+1]=0;
num4[i+2]=0;
num4[i+3]=0;
num=num-n3*num4[i];
i=i+3;
continue;
}
else if((num/n3>=1.001)&amt;&amt;(num/n3<1.01)||
(num/n3>=2.001)&amt;&amt;(num/n3<2.01)||
(num/n3>=3.001)&amt;&amt;(num/n3<3.01)||
(num/n3>=4.001)&amt;&amt;(num/n3<4.01)||
(num/n3>=5.001)&amt;&amt;(num/n3<5.01)||
(num/n3>=6.001)&amt;&amt;(num/n3<6.01)||
(num/n3>=7.001)&amt;&amt;(num/n3<7.01)||
(num/n3>=8.001)&amt;&amt;(num/n3<8.01)||
(num/n3>=9.001)&amt;&amt;(num/n3<9.01))
{
num4[i+1]=0;
num4[i+2]=0;
num=num-n3*num4[i];
i=i+2;
continue;
}
else if((num/n3>=1.01)&amt;&amt;(num/n3<1.1)||
(num/n3>=2.01)&amt;&amt;(num/n3<2.1)||
(num/n3>=3.01)&amt;&amt;(num/n3<3.1)||
(num/n3>=4.01)&amt;&amt;(num/n3<4.1)||
(num/n3>=5.01)&amt;&amt;(num/n3<5.1)||
(num/n3>=6.01)&amt;&amt;(num/n3<6.1)||
(num/n3>=7.01)&amt;&amt;(num/n3<7.1)||
(num/n3>=8.01)&amt;&amt;(num/n3<8.1)||
(num/n3>=9.01)&amt;&amt;(num/n3<9.1))
{
num4[i+1]=0;
num=num-n3*num4[i];
i=i+1;
continue;
}
num=num-n3*num4[i];
}
if(i<k)
{
for(j=i;j<k;j++)
num4[j]=0;
}
else if(k==0)
{
num4[0]=0;
k=1;
}
integer(num4,num6,k);
printf("您的帐户余额现在是:");
for(i=0;i<k;i++)
printf(">c",num6[i]);
printf("\n");
getchar();
for(i=k;i<11;i++)
num6[i]='w';
if((fp=fopen(p1,"w"))==NULL)
{
printf("can not open the file!\n");
exit(0);
}
for(i=0;i<11;i++)
{
if(num6[i]!='w')
fputc(num6[i],fp);
else
continue;
}
fclose(fp);
}
void dispace()//转帐空函数
{
}
void amend(char *ID)//修改密码函数
{
void assembled_password(char *together,char *ID);
void assembled_money(char *together,char *ID);
FILE *fp;
int i,note=0,sign_1,sign_2;
char password_1[6],password_2[6],file_1[11],file_2[11],file_3[16],file_4[16];
char *p1,*p2,*p3,*p4;
p1=password_1;
p2=password_2;
p3=file_3;
p4=file_4;
loop:{
sign_1=1;
while(sign_1==1)
{
printf("请输入您的新密码:");
scanf(">s",password_1);
for(i=0;i<6;i++)
{
if(*(p1+i)=='\0')
{
printf("您输入的密码应该是六位数字!\n");
sign_1=1;
break;
}
else
sign_1=2;
}
}
sign_2=1;
while(sign_2==1)
{
printf("请再次输入您的新密码:");
scanf(">s",password_2);
for(i=0;i<6;i++)
{
if(*(p2+i)=='\0')
{
printf("您输入的密码应该是六位数字!\n");
sign_2=1;
break;
}
else
sign_2=2;
}
}
}
for(i=0;i<6;i++)
if(*(p1+i)!=*(p2+i))
break;
if(i==6)
{
assembled_password(file_2,p1);
assembled_password(file_1,ID);
assembled_money(p3,p1);
assembled_money(p4,ID);
for(i=0;i<6;i++)
*(ID+i)=*(p1+i);
if(rename(p4,p3)!=0) //修改修改为新密码的帐户余额文件名
printf("rename file error(1)!\n");
if(rename(file_1,file_2)!=0) //修改修改为新密码后的帐户密码文件名
printf("rename file error(2)!\n");
if((fp=fopen(file_2,"w"))==NULL)
{
printf("the system is error!\n");
exit(0);
}
for(i=0;i<6;i++)
fputc(*(p1+i),fp);
fclose(fp);
printf("密码修改成功!\n");
getchar();
}
else
{
printf("两次密码不相同,请重新输入!\n");
goto loop;
}
}
void start1()
{
printf(" ************************************\n");
printf(" * 欢迎光临中国银行! *\n");
printf(" ************************************\n");
}
void start2()
{
char n1,mark[6],*ID;
int n2=0,n3=0;
ID=mark;
password(ID); //调用密码认证
loop:{
printf("\n");
printf(" ***************************\n");
printf(" * 查询余额请按c/C *\n");
printf(" * 取款请按g/G *\n");
printf(" * 转帐请按m/M(不能开通) *\n");
printf(" * 修改密码a/A *\n");
printf(" * 取卡退出请按e/E *\n");
printf(" ***************************\n");
printf("\n");
scanf(">c",&amt;n1);
getchar();
if((n1=='e')||(n1=='E'))
{
printf(" *********************\n");
printf(" * 谢谢您的使用! *\n");
printf(" *********************\n");
exit(0);
}
do
{
if((n1=='C')||(n1=='c'))
{
see(ID);
goto loop;
}
else if((n1=='g')||(n1=='G'))
{
n3++;
get(ID);
goto loop;
}
else if((n1=='m')||(n1=='M'))
{
dispace();
goto loop;
}
else if((n1=='a')||(n1=='A'))
{
amend(ID);
goto loop;
}
else
{
n2=1;
printf("输入不合法,请重新输入。\n");
goto loop;
}
}while(n2==1);
}
}