大家帮忙看看这个银行系统,为什么转账那里用不了呢?明明代码没什么问题的啊

weixin_44938344 2019-04-18 01:29:30
#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;
}
...全文
38 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_44938344 2019-04-18
  • 打赏
  • 举报
回复
//登录
int login()
{
bank p;
fflush(stdin);
char no[20];
char pass[20];
printf("请输入卡号:");
scanf("%s",no);
printf("请输入密码:");
int j;
for(j=0;;j++)
{
fflush(stdin);
pass[j]=getch();//自动读取函数
if(pass[j]=='\b' && j!=0)
{
pass[--j]='\0';
j--;
printf("\b \b");
continue;
}
if(pass[j]=='\r')
{
pass[j]='\0';
break;
} putch('*');
}
FILE *fp;
fp=fopen("bankcard.bat","rb");
while(!feof(fp))
{
if(fread(&p,sizeof(bank),1,fp)!=1)
break;
if(strcmp(no,p.cardno)==0 && strcmp(pass,p.passwd)==0)//比较函数,验证卡号和密码
{
strcpy(loginNo,no);
fi=ftell(fp);
return 1;
}
}
fclose(fp);
return 0;
} //余额查询
void query()
{
bank b;
FILE *fp;
fp=fopen("bankcard.bat","rb");
fseek(fp,(fi/sizeof(bank)-1)*sizeof(bank),0);
fread(&b,sizeof(bank),1,fp);
fclose(fp);
printf("你卡中的余额:%.2f\n",b.money);
} //生成银行卡号
char *rands()
{
srand((int)time(NULL));
int i=0;
char a[6];
char *no=(char *)malloc(20);
strcpy(no,"9500");
for(;i<4;i++)
{
a[i]=rand()%10+'0';
}
a[i]='\0';
strcat(no,a);
return no;
} //查询所有的卡号
void queryAll()
{

bank p;
FILE *fp;
fp=fopen("bankcard.bat","rb+");
while(!feof(fp))
{
if(fread(&p,sizeof(bank),1,fp)==1)
{
printf("%s\t%s\t%.2f\n",p.cardno,p.passwd,p.money);
}
}
fclose(fp);
} 这个是剩下的一些过程
weixin_44938344 2019-04-18
  • 打赏
  • 举报
回复
引用 楼主 weixin_44938344的回复:
#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;
}
各位大佬,欢迎加QQ1104668911一起讨论,谢谢
weixin_44938344 2019-04-18
  • 打赏
  • 举报
回复
这个其它的就没弄上来,主要的是想看看那个转账的有什么问题

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧