大神看看银行程序,求找出问题
程序代码:
求解,大神 此程序运行后建立账户后有了密码和账户后,再次输入,却显示账户不存在或密码错误 #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; }