大家帮忙看看这个银行系统,为什么转账那里用不了呢?明明代码没什么问题的啊
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<conio.h>
//银行卡信息
struct Bank_Card
{
char cardno[20];//卡号
char passwd[20];//密码
float money;
};
typedef struct Bank_Card bank;
char loginNo[20];
long fi=0;//文件位置指针
char *rands();//随机生成银行卡函数
int regedit();//注册函数
int login();//登录函数
void query();//余额查询
int getMoney();//存款函数
int putMoney();//取款函数
void queryAll();//查询所有的卡号
void deleteOne();//删除某张卡
int changPassword();//改密码
int chanMoney();//转账
void main()
{
char choice;
int fag=1;
while(fag)
{
printf("\n");
printf("**********ATM自动柜元机系统**************\n");
printf("* 1.注册账户 *\n");
printf("* 2.登录账户 *\n");
printf("* 3.退出系统 *\n");
printf("* 4.查询已有卡号信息 *\n");
printf("* 5.删除某张卡 *\n");
printf("*****************************************\n\n");
printf("请选择操作项:");
fflush(stdin);//清空输入缓冲区
scanf("%c",&choice);
switch(choice)
{
case '1': if(regedit()==1)
{
printf("注册成功!\n");
printf("你卡中的余额为:10元\n");
system("pause");
system("cls");
}
else
{
printf("注册失败!\n");
system("pause");
system("cls");
}
break;
case '2': if(login()==1)
{
printf("\n登录成功!\n");
fag=0;
system("pause");
system("cls");
}
else
{
printf("\n登录失败!\n");
system("pause");
system("cls");
}
break;
case '3': exit(0); break;
case '4': queryAll(); break;
case '5': deleteOne(); break;
default : printf("选择错误!请重新选择\n");
system("pause");
system("cls");
break;
}
}
while(1)
{
printf("\n");
printf("**********ATM自动柜元机系统*************\n");
printf("* 1.余额查询 *\n");
printf("* 2.存款 *\n");
printf("* 3.取款 *\n");
printf("* 4.改密码 *\n");
printf("* 5.转账 *\n");
printf("* 6.退出 *\n");
printf("****************************************\n\n");
printf("请选择操作项:");
fflush(stdin);//清空输入缓冲区
scanf("%c",&choice);
switch(choice)
{
case '1': query();
system("pause");
system("cls");
break;
case '2': if(getMoney()==1)
{
printf("存款成功!谢谢使用!\n");
system("pause");
system("cls");
}
else
{
printf("存款失败!\n");
system("pause");
system("cls");
}
break;
case '3': if(putMoney()==1)
{
printf("取款成功!谢谢使用!\n");
system("pause");
system("cls");
}
else
{
system("pause");
system("cls");
}
break;
case '4': changPassword();
break;
case '5': if(chanMoney()==1)
{
printf("转账成功!\n");
system("pause");
system("cls");
}
else
{
system("pause");
system("cls");
}
break;
case '6': exit(0);
default: printf("操作项选择错误,请重新选择!\n");
system("pause");
system("cls");
break;
}
}
}
//注册银行卡
int regedit()
{
char password[20];
bank p;
FILE *fp;
if((fp=fopen("bankcard.bat","aw"))==NULL)
//文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回 NULL,并把错误代码存在 error 中
{
printf("创建文件失败");
return 0;
}
fflush(stdin);
int fag=1;
int i;
char *no=rands();//产生随机数的一个随机函数
printf("这是你的卡号:%s\n请记住哦!\n",no);
strcpy(p.cardno,no);//添加卡号到银行卡信息中,将no复制到p.cardno 中
while(fag)
{
printf("请输入密码(4--8位):");
fflush(stdin);
for(i=0;;i++)
{
password[i]=getch();
if(i>8)
{
printf("\n密码超过8位,请重新输入\n");
break;
}
if(password[i]=='\r')//换行
{
if(i<4)
{
printf("\n密码不能小于4位,请重新输入\n");
break;
}
else
{
fag=0;
password[i]='\0';
break;
}
}
if(i!=0 && password[i]=='\b')//退格
{
password[--i]='\0';
i--;
printf("\b \b");
continue;
}
putch(password[i]);
}
}
strcpy(p.passwd,password);//添加密码到银行卡信息中
printf("\n请向卡中存入10元:");
scanf("%f",&p.money);
fwrite(&p,sizeof(bank),1,fp);//向指定的文件中写入数据块&P
fclose(fp);
return 1;
}
//转账
int chanMoney()
{
int fag=1;//用于判断是否有这个卡号
int fagm=1;//用于判断余额不足
char no[20];
float money;
printf("请输入转账的卡号:");
fflush(stdin);
scanf("%s",no);
printf("请输入要转的金额:");
fflush(stdin);
scanf("%f",&money);
bank p;
FILE *fp,*fpw;
fp=fopen("bankcard.bat","r");//用于读文件
fpw=fopen("temp.bat","wb");//把读出来的文件,写到临时文件中
while(!feof(fp))
{
if(fread(&p,sizeof(bank),1,fp)==1)
{
//如果有要转的账号
if(strcmp(no,p.cardno)==0)
{
p.money+=money;
fag=0;
}
if(strcmp(loginNo,p.cardno)==0)
{
if(money>p.money)
{
//printf("你的余额不足,请查询后再转\n");
fagm=0;
}
else
{
p.money-=money;
}
}
//写到临时文件中去
fwrite(&p,sizeof(bank),1,fpw);
}
}
fclose(fp);
fclose(fpw);
if(fag)
{
printf("没有要转的账号\n");
remove("temp.bat");//删除临时文件
return 0;
}
else if(!fagm)
{
printf("你的余额不足,请查询后再转\n");
remove("temp.bat");//删除临时文件
return 0;
}
else
{
remove("bankcard.bat");//删除原文件
rename("temp.bat","bankcard.bat");//将临时文件名改为原文件名
}
return 1;
}