| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 506 人关注过本帖
标题:大神看看银行程序,求找出问题
只看楼主 加入收藏
sunshinefly
Rank: 1
等 级:新手上路
帖 子:46
专家分:2
注 册:2012-12-11
结帖率:62.5%
收藏
 问题点数:0 回复次数:3 
大神看看银行程序,求找出问题
程序代码:

求解,大神

此程序运行后建立账户后有了密码和账户后,再次输入,却显示账户不存在或密码错误


#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;
}

搜索更多相关主题的帖子: password include person color 
2013-06-26 14:24
Han_FlyB
Rank: 6Rank: 6
等 级:侠之大者
帖 子:143
专家分:424
注 册:2013-3-25
收藏
得分:0 
我粗略的看了一下前面的,首先你这个银行系统只能开户一个号吧。你开户了,但是没有存入D:\\account.dat,你下面打开的文件里会有用户信息?除非你先存进去了。没看仔细,说得不对的话望指出
2013-06-27 13:57
木蕊
Rank: 2
等 级:论坛游民
帖 子:32
专家分:26
注 册:2013-6-22
收藏
得分:0 
per.password[j-1]=j;//password[]不是为字符数组嘛,如果不改密码,输入初始密码就是错的
fscanf(  ;"%d %s %s %d %s"; )和fprintf(  ;"%d %s %s %d %s"; )要对应:  要么都有空格,要么都没有
2013-06-27 16:13
sunshinefly
Rank: 1
等 级:新手上路
帖 子:46
专家分:2
注 册:2012-12-11
收藏
得分:0 
回复 2楼 Han_FlyB
我想的是,自动存款机一个人操作结束后不是退出么,就相当于把我那个程序退出,然后另外一个人再用,相当于再把程序运行一次,不过D盘的确只能记录一个账户信息,不知道怎么改了
2013-06-28 08:23
快速回复:大神看看银行程序,求找出问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021621 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved