大神看看银行程序,求找出问题
程序代码:
求解,大神
此程序运行后建立账户后有了密码和账户后,再次输入,却显示账户不存在或密码错误
#include
#include
#include
#include
#include
struct person
{
int hash;
char name[20];
char id[20];
char password[20];
int money;
}per;
int choice();
int draw(int);
int kaihu();
int land(int);
int now();
int now2();
int save(int);
int store();
int choice()
{
printf("\t\t***********************************************************\t\t\n");
printf("\t\t***********************欢迎您使用!*************************\t\t\n");
printf("\t\t******************1.储户开户(请输入)**********************\t\t\n");
printf("\t\t******************2.储户存款(请输入)**********************\t\t\n");
printf("\t\t******************3.储户取款(请输入)**********************\t\t\n");
printf("\t\t******************4.——退出(请输入)**********************\t\t\n");
printf("\t\t***********************欢迎您使用!*************************\t\t\n");
printf("\t\t***********************************************************\t\t\n");
return 0;
}
int kaihu()
{
int j,flag;
char a[9];
system("CLS");
printf("\t\t*******************************************************\t\t\n");
printf("\t\t***********************欢迎您!*************************\t\t\n");
printf("\t\t请输入您的用户名:");
scanf("%s",per.name);
getchar();
printf("\t\t请输入您的身份证号码:");
scanf("%s",per.id);
getchar();
printf("\t\t请输入您的存储金额:");
scanf("%d",&per.money);
getchar();
while(per.money<10)
{
printf("/t/t对不起!开户金额不得低于元。请重新输入您的开户金额:\n\t");
scanf("%d",per.money);
getchar();
}
srand((unsigned int)time(NULL));
per.hash=rand()%10000+1;
printf("\t\t恭喜您!开户成功!请牢记您的登陆账号:%d\n",per.hash);
printf("您账户的初始密码为:");
for(j=1;j<7;j++)
{
per.password[j-1]=j;
printf("%d",j);
}
printf("\n");
printf("是否修改您的密码,修改请输入,不修改请输入\n");
scanf("%d",&flag);
getchar();
if(flag==1)
{
former:
printf("请输入您的新密码:(不要超过个字,但也建议不要过短)\n");
scanf("%s",per.password);
printf("请再次输入您的新密码:");
scanf("%s",a);
if(strcmp(per.password,a)==0)
printf("恭喜修改密码成功!");
else
goto former;
}
now();/*调用这个函数,显示当前账户信息*/
store();/*调用存储函数,将用户信息存储到account.dat中*/
return 0;
}
int land(int c)
{
int n,mon,j=0;
char pass[10];
struct person per2;
FILE *fpp;
if((fpp=fopen("D:\\account.dat","r"))==NULL)
{
printf("\t\a\a出错啦!(您可能还没开户)\n");
exit(0);
}
fscanf(fpp,"%d%s%s%d%s",&per2.hash,per2.name,per2.id,&per2.money,per2.password);
fclose(fpp);/*关闭文件*/
loop:
if(j>=3)
exit(0);
printf("请输入您的帐号:");
scanf("%d",&n);
getchar();
printf("\t密码:");
scanf("%s",pass);
getchar();
if(n==per2.hash && strcmp(pass,per2.password)==0)
printf("恭喜您,登录成功!\n");
else
{
printf("\t账户不存在或密码错误,请重新输入!\n");
j++;
goto loop;
}
if(c==2)
{
printf("\t输入取款金额:");
scanf("%d",&mon);
draw(mon);
}
else
{
printf("\t输入存款金额:");
scanf("%d",&mon);
save(mon);
}
return 0;
}
int draw(int m)/*取款函数*/
{
if(per.money-m<10)
{
printf("\t对不起,您的余额不足,不能进行取款操作,请减少取款金额。");/*对用户的取款的限制,即如果余额不超过元将不能取款
,执行else分句,把新的余额写入account.dat*/
}
else
{
per.money=per.money-m;
store();
}
now();/*显示当前账户余额信息*/
return 0;
}
int save(int m)/*存款函数*/
{
per.money=per.money+m;
printf("\t恭喜,存款成功!\n");
store();
now();
return 0;
}
int now()
{
printf("\n\t以下是您的当前账户信息:\n");
printf("\t——账号——姓名———ID——-余额——密码——\n");
printf("\t%6d%10s%10s%6d%10s\n",per.hash,per.name,per.id,per.money,per.password);
return 0;
}
int now2()
{
FILE *fp;
if((fp=fopen("D:\\account.dat","r"))==NULL)
{
printf("\t\a\a出错啦!(您可能还没开户)\n");
exit(0);
}
fscanf(fp,"%d%s%s%d%s",&per.hash,per.name,per.id,&per.money,per.password);
fclose(fp);/*关闭文件*/
return 0;
}
int store()
{
FILE *fp;
if((fp=fopen("D:\\account.dat","w"))==NULL)
{
printf("\t\t\aOpen file error!\n");
exit(0);
}
fprintf(fp,"%d %s %s %d %s",per.hash,per.name,per.id,per.money,per.password);
fclose(fp);/*关闭文件*/
return 0;
}
int main()
{
int c;
choice();
myd:
printf("\n");
scanf("%d",&c);
getchar();
if(c==1)
{
kaihu();
system("pause");/*使屏幕停留在当前状态*/
system("CLS");/*清屏,用到了头文件stdlib.h*/
choice();
goto myd;
}
else if(c==2 || c==3)
{
printf("\t\t请您登录:\n");
now2();/*需要注意的一点是,如果account.dat存在,而里边没有数据或者数据的存储格式与
per里边的量的存储格式不一样,那么当你执行程序后直接输入,将会登陆不上。*/
land(c);
goto myd;
}
else if(c==0)
{
system("CLS");
printf("\t\t**************************************************************\t\t\n");
printf("\t\t*****************感谢你的使用!再见!**************************\t\t\n");
printf("\t\t********我们将以百分百的诚信换你百分百的放心和满意!***********\t\t\n");
printf("\t\t**************************************************************\t\t\n");
}
else
{
printf("\t\t****************指令错误!请重新输入!*************************\t\t\n");
goto myd;
}
return 0;
}






