朝中措742 2022-05-09 20:03 采纳率: 100%
浏览 127
已结题

C语言程序无法运行求修改

重新编辑了一下,可以发出来了
若能解决,十分感谢

img

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define max 2000//设置最大用户数
int N;//实际用户数

  struct accountInformation{
     char account[max+1];//账号
     char name[11];//姓名
     float balance;//余额
     char identificationNumber[19];//身份证号码
     char phoneNumber[12];//电话号码
 }users;//创建账户信息结构体,包括账号、姓名、余额、身份证号码、电话号码

struct record users[max]//系统内所有账户
int welcome();//欢迎界面的功能实现 
void openAccount();//开户
int menu();//菜单
void deposit();//存款
void withdraw();//取款
void showAccount();//查询用户信息
void showAll();//显示所有用户
void closeAccount();//销户
void readData();//开始前从文件中读数据,存在数组中
void writeData();//程序结束前,将数组中的数据写入到文件中

int main()
{
    system("color f4");
    system("title  银行账户管理系统");//设置窗口标题 
    readData();
    welcome();
    writeData();
    return 0;
}


int welcome()//欢迎界面的功能实现 
{
    int Choice;/*选择功能*/
    do
    {
        Choice=menu();
        switch(Choice)
        {
            case 1:
                openAccount();//开户
                break;
            case 2:
                void closeAccount();//销户
                break;
            case 3:
                void deposit();//存款
                break;
            case 4:
                void withdraw();//取款
            case 5:
                void showAccount();//查询用户信息
                break;
            case 0:
                printf("结束使用,退出系统\n欢迎下次使用!");
                break;
        }
    }while(Choice);
}



int menu()//菜单
{
    int i;
    while(1)
    {
    printf(" _________________________________________ \n");
    printf("*                                         *\n");
    printf("*         欢迎使用银行账户管理系统        *\n");
    printf("*                                         *\n");
    printf("*        1.开户            2.销户         *\n"); 
    printf("*        3.存款            4.取款         *\n");
    printf("*        5.查询            0.退出         *\n");
    printf("*                                         *\n");
     printf("*_________________________________________*\n");
     printf("请选择服务类型:");
     scanf("%d,&i");
     if(i>=0&&i<=5)
       break;
     else
       printf("选择有误,请重新选择\n\n");
    }
    return i;
}





void openAccount()/*开户:输入账户信息并予以保存。账户信息包括
账号、姓名、余额、身份证号码、电话号码。若输入信息中的账号已经
存在,则不允许添加该信息。*/
{
    if(N==max)//用户数量超上限
    {
        printf("用户已达上限,开户失败");
        return;
    }
    int j;
    printf("正在进行开户业务\n");//用户数未超标时
    users[N].account=N-1;//账号顺延
    printf("账号:%s",users[N].account);//输出账号
    printf("姓名:");//输入姓名
    scanf("%s",users[N].name);
    printf("余额:");
    scanf("%f",users[N].balance);
    printf("身份证号码:");
    scanf("%s,identificationNumber");
    for (j = 0; j < N; j++)
    {
        if (strcmp(users[N].identificationNumber, users[j].identificationNumber) == 0)
        {
            printf("该用户已存在,开户失败!\n");
            break;
        }
    }
    printf("电话号码:");
    scanf("%s,phoneNumber");
    printf("开户成功!");
}


void closeAccount();//销户
{
    int i, j, flag = 0;
    char s1[5];
    printf("请输入要删除的账号:\n");
    scanf("%s", s1);
    for (i = 0; i < N; i++)
    {
        if (strcpy(users[i].account, s1) == 0)
        {
            flag = 1;
           //要删除账号后面的账号往前移一位
            for (j = i; j < n - 1; j++)
            {
                users[j] = users[j + 1];
            }
        }
    }
    //查找失败
   if (0 == flag)
    {
      printf("该账户不存在!!!\n");
    }
    if (1 == flag)
    {
        printf("删除成功!");
        //删除成功,账户数量减1
        N--;
    }
    
}

void deposit();//存款
{
    int id,who;
    double money;
    printf("请输入需要存款的账号:");
    scanf("%d",&id);
    who=search(id);//根据账号查询用户,返回用户下标
    if(who<0)//说明id账户不存在
    {
        printf("该用户不存在,存款失败!\n");
    }
    else
    {
        printf("用户姓名:%s\n",users[who].name);
        printf("输入存款额:");
        scanf("%lf",&money);
        users[who].balance+=money;
        printf("存款后,该账号的余额为:%.2f.\n",users[who].balance);
        }
    return;
}


void withdraw();//取款
{
    int id,who;
    int iPass;
    double money;
    printf("请输入需要取款的账号:");
    scanf("%d",&id);
    who=search(id);//根据账号查询用户,返回用户下标
    if(who<0)//说明id账户不存在
    {
        printf("该用户不存在,取款失败!\n");
    }
    else
    {
        printf("用户姓名:%s\n",users[who].name);
        printf("请输入取款额:");
        scanf("%lf",&money);
        if(money>users[who].balance)//余额不足
        {
            printf("余额不足,取款失败!\n");
            printf("贷款功能尚未开通,敬请期待。\n");
        }
        else
        {
            users[who].balance-=money;
            priintf("取款后,剩余%.2f元.\n",users[who].balance);
        }
    }return;                
}

void shouAccount();//查询账户信息
{
    int i,item,flag;
    char s1[max+1];
    printf(" _________________________________________ \n");
    printf(" |                                        |\n");
    printf(" |         查 询 账 户 信 息              |\n");
    printf(" |                                        |\n");
    printf(" |             1.按账号查询               |\n");
    printf(" |             2.按姓名查询               |\n");
    printf(" |             3.退出本菜单               |\n");
    printf(" |________________________________________|\n");
    while (1)
    {
        printf("请选择子菜单编号:");
        scanf("%d", &item);
        flag = 0;
        switch (item)
        {
            case 1:
                printf("请输入要查询用户的账号:\n");
                scanf("%s", s1);
                for (i = 0; i<N; i++)
                if (strcmp(s1,users[i].account) == 0)
                {
                    flag = 1;
                    printf("账号     姓名     余额     身份证号码               电话号码\n");
                    printf("========================================================================\n");
                    printf("%d %s  %.2f  %s  %s",users[who].account,users[who].name,users[who].balance,users[who].identificationNumber,users[who].phoneNumber);
                }
                if (0 == flag)
                printf("该账号不存在!\n"); 
                break;
            case 2:
               printf("请输入要查询用户的姓名:\n");
               scanf("%s", s1);
               for (i = 0; i<N; i++)
               if (strcmp(users[i].name, s1) == 0)
               {
               flag = 1;
                    printf("账号     姓名     余额     身份证号码               电话号码\n");
                    printf("========================================================================\n");
                    printf("%d %s  %.2f  %s  %s",users[who].account,users[who].name,users[who].balance,users[who].identificationNumber,users[who].phoneNumber);
                }
                if (0 == flag)
                printf("该姓名不存在!\n"); break;
            case 3:
                return;
            default:
                void showAll();
        }
    }
}





void showAll()//显示所有用户
{
    int i;
    printf("以下为所有账户信息(按账号由小到大排序):");
    printf("账号     姓名     余额     身份证号码               电话号码\n");
    printf("========================================================================\n");
    for(i=0;i<=N;i++)
    {
        printf("%d %s %.2f %s %s",users[i].account,users[i].name,users[i].balance,users[i].identificationNumber,users[i].phoneNumber);
    }
}





void readData()//读 
{
    FILE *fp;
    int i=0;
    //从文件中取出余额
    if((fp=fopen("account.txt","a+"))==NULL)
    {
        printf("Data file cannot open!");
        exit(0);
    }
    while(fscanf(fp,"%s %s %.2f %s %s",users[i].account,users[i].name,users[i].balance,users[i].identificationNumber,users[i].phoneNumber)!=EOF)
    {
        i++;
    }
    N=i;//用全局变量储存用户总人数
    fclose(fp);
    return;
}


void writeData()//写 
{
    FILE *fp;
    int i=0;
    //保存余额
    if((fp=fopen("account.txt","w"))==NULL)
    {
        printf("Data file cannot open!");
        exit(0);
    }
    for(i=0;i<N;i++)
      fprintf(fp,"%s %s %.2f %s %s",users[i].account,users[i].name,users[i].balance,users[i].identificationNumber,users[i].phoneNumber);
      fclosr(fp);
  • 写回答

5条回答 默认 最新

  • 丨秋水丨 2022-05-11 08:52
    关注

    一、语法错误
    1、第17行结尾少了分号

    struct record users[max];//系统内所有账户
    

    2、第40行开始,welcome里的方法调用不要加返回值类型,把方法调用前的void给去掉

    int welcome()//欢迎界面的功能实现 
    {
        int Choice;/*选择功能*/
        do
        {
            Choice = menu();
            switch (Choice)
            {
            case 1:
                openAccount();//开户
                break;
            case 2:
                closeAccount();//销户
                break;
            case 3:
                deposit();//存款
                break;
            case 4:
                withdraw();//取款
            case 5:
                showAccount();//查询用户信息
                break;
            case 0:
                printf("结束使用,退出系统\n欢迎下次使用!");
                break;
            }
        } while (Choice);
    }
    

    3、第9行开始,users变量重复定义,users类型错误,应该改成

    struct accountInformation {
        char account[max + 1];//账号
        char name[11];//姓名
        float balance;//余额
        char identificationNumber[19];//身份证号码
        char phoneNumber[12];//电话号码
    };//创建账户信息结构体,包括账号、姓名、余额、身份证号码、电话号码
    
    struct accountInformation users[max];//系统内所有账户
    

    4、第110行,需要把数字转成字符串,也不是直接赋值

    itoa(N - 1, users[N].account, 10); //users[N].account = N - 1;//账号顺延
    

    5、第132行,结尾多了个分号,要去掉

    void closeAccount()//销户
    

    6、第144行,变量名错误,要把n改成N

    for (j = i; j < N - 1; j++)
    

    7、第164行,结尾多了个分号,也要去掉

    void deposit()//存款
    

    8、第187行,结尾又多了个分号,要去掉

    void withdraw()//取款
    

    9、第217行,结尾也多了个分号,去掉

    void shouAccount()//查询账户信息
    

    10、第245行,who变量不存在,应该是i变量,把who改成i

    printf("%d %s  %.2f  %s  %s", users[i].account, users[i].name, users[i].balance, users[i].identificationNumber, users[i].phoneNumber);
    

    11、第259行,who变量也不存在,应该是i变量,把who改成i

    printf("%d %s  %.2f  %s  %s", users[i].account, users[i].name, users[i].balance, users[i].identificationNumber, users[i].phoneNumber);
    

    12、第266行,方法调用前面不要加返回值类型void

    showAll();
    

    二、编译错误
    1、第217行,函数名拼错,应该是show而不是shou

    void showAccount()//查询账户信息
    

    2、第212行,函数名拼错,应该是printf而不是priintf

    printf("取款后,剩余%.2f元.\n", users[who].balance);
    

    3、第323行,函数名拼错,应该是fclose而不是fclosr

    fclose(fp);
    

    4、第170和194行, 引用了未定义了search函数,要在这两个函数之前先定义一个search函数

    int search(int id)
    {
        for (int i = 0; i < N; ++i)
        {
            if (atoi(users[i].account) == id)
                return i;
        }
        return -1;
    }
    

    三、运行时错误
    1、menu函数里的scanf有错误,改成

    scanf("%d", &i);
    

    2、openAccount里输入余额的scanf有错误,要取地址,应该改成

    scanf("%f", &users[N].balance);
    

    3、openAccount里输入身份证号码的scanf有错误,应该改成

    scanf("%s", users[N].identificationNumber);
    

    4、openAccount里输入电话号码的scanf有错误,应该改成

    scanf("%s", users[N].phoneNumber);
    

    四、全部代码

    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<ctype.h>
    #define max 2000//设置最大用户数
    int N;//实际用户数
    
    struct accountInformation {
        char account[max + 1];//账号
        char name[11];//姓名
        float balance;//余额
        char identificationNumber[19];//身份证号码
        char phoneNumber[12];//电话号码
    };//创建账户信息结构体,包括账号、姓名、余额、身份证号码、电话号码
    
    struct accountInformation users[max];//系统内所有账户
        int welcome();//欢迎界面的功能实现 
    void openAccount();//开户
    int menu();//菜单
    void deposit();//存款
    void withdraw();//取款
    void showAccount();//查询用户信息
    void showAll();//显示所有用户
    void closeAccount();//销户
    void readData();//开始前从文件中读数据,存在数组中
    void writeData();//程序结束前,将数组中的数据写入到文件中
    
    int main()
    {
        system("color f4");
        system("title  银行账户管理系统");//设置窗口标题 
        readData();
        welcome();
        writeData();
        return 0;
    }
    
    
    int welcome()//欢迎界面的功能实现 
    {
        int Choice;/*选择功能*/
        do
        {
            Choice = menu();
            switch (Choice)
            {
            case 1:
                openAccount();//开户
                break;
            case 2:
                closeAccount();//销户
                break;
            case 3:
                deposit();//存款
                break;
            case 4:
                withdraw();//取款
            case 5:
                showAccount();//查询用户信息
                break;
            case 0:
                printf("结束使用,退出系统\n欢迎下次使用!");
                break;
            }
        } while (Choice);
    }
    
    
    
    int menu()//菜单
    {
        int i;
        while (1)
        {
            printf(" _________________________________________ \n");
            printf("*                                         *\n");
            printf("*         欢迎使用银行账户管理系统        *\n");
            printf("*                                         *\n");
            printf("*        1.开户            2.销户         *\n");
            printf("*        3.存款            4.取款         *\n");
            printf("*        5.查询            0.退出         *\n");
            printf("*                                         *\n");
            printf("*_________________________________________*\n");
            printf("请选择服务类型:");
            scanf("%d", &i);
            if (i >= 0 && i <= 5)
                break;
            else
                printf("选择有误,请重新选择\n\n");
        }
        return i;
    }
    
    
    
    
    
    void openAccount()/*开户:输入账户信息并予以保存。账户信息包括
    账号、姓名、余额、身份证号码、电话号码。若输入信息中的账号已经
    存在,则不允许添加该信息。*/
    {
        if (N == max)//用户数量超上限
        {
            printf("用户已达上限,开户失败");
            return;
        }
        int j;
        printf("正在进行开户业务\n");//用户数未超标时
        itoa(N - 1, users[N].account, 10); //users[N].account = N - 1;//账号顺延
        printf("账号:%s", users[N].account);//输出账号
        printf("姓名:");//输入姓名
        scanf("%s", users[N].name);
        printf("余额:");
        scanf("%f", &users[N].balance);
        printf("身份证号码:");
        scanf("%s", users[N].identificationNumber);
        for (j = 0; j < N; j++)
        {
            if (strcmp(users[N].identificationNumber, users[j].identificationNumber) == 0)
            {
                printf("该用户已存在,开户失败!\n");
                break;
            }
        }
        printf("电话号码:");
        scanf("%s", users[N].phoneNumber);
        printf("开户成功!");
    }
    
    
    void closeAccount()//销户
    {
        int i, j, flag = 0;
        char s1[5];
        printf("请输入要删除的账号:\n");
        scanf("%s", s1);
        for (i = 0; i < N; i++)
        {
            if (strcpy(users[i].account, s1) == 0)
            {
                flag = 1;
                //要删除账号后面的账号往前移一位
                for (j = i; j < N - 1; j++)
                {
                    users[j] = users[j + 1];
                }
            }
        }
        //查找失败
        if (0 == flag)
        {
            printf("该账户不存在!!!\n");
        }
        if (1 == flag)
        {
            printf("删除成功!");
            //删除成功,账户数量减1
            N--;
        }
    
    }
    
    int search(int id)
    {
        for (int i = 0; i < N; ++i)
        {
            if (atoi(users[i].account) == id)
                return i;
        }
        return -1;
    }
    
    void deposit()//存款
    {
        int id, who;
        double money;
        printf("请输入需要存款的账号:");
        scanf("%d", &id);
        who = search(id);//根据账号查询用户,返回用户下标
        if (who < 0)//说明id账户不存在
        {
            printf("该用户不存在,存款失败!\n");
        }
        else
        {
            printf("用户姓名:%s\n", users[who].name);
            printf("输入存款额:");
            scanf("%lf", &money);
            users[who].balance += money;
            printf("存款后,该账号的余额为:%.2f.\n", users[who].balance);
        }
        return;
    }
    
    
    void withdraw()//取款
    {
        int id, who;
        int iPass;
        double money;
        printf("请输入需要取款的账号:");
        scanf("%d", &id);
        who = search(id);//根据账号查询用户,返回用户下标
        if (who < 0)//说明id账户不存在
        {
            printf("该用户不存在,取款失败!\n");
        }
        else
        {
            printf("用户姓名:%s\n", users[who].name);
            printf("请输入取款额:");
            scanf("%lf", &money);
            if (money > users[who].balance)//余额不足
            {
                printf("余额不足,取款失败!\n");
                printf("贷款功能尚未开通,敬请期待。\n");
            }
            else
            {
                users[who].balance -= money;
                printf("取款后,剩余%.2f元.\n", users[who].balance);
            }
        }return;
    }
    
    void showAccount()//查询账户信息
    {
        int i, item, flag;
        char s1[max + 1];
        printf(" _________________________________________ \n");
        printf(" |                                        |\n");
        printf(" |         查 询 账 户 信 息              |\n");
        printf(" |                                        |\n");
        printf(" |             1.按账号查询               |\n");
        printf(" |             2.按姓名查询               |\n");
        printf(" |             3.退出本菜单               |\n");
        printf(" |________________________________________|\n");
        while (1)
        {
            printf("请选择子菜单编号:");
            scanf("%d", &item);
            flag = 0;
            switch (item)
            {
            case 1:
                printf("请输入要查询用户的账号:\n");
                scanf("%s", s1);
                for (i = 0; i < N; i++)
                    if (strcmp(s1, users[i].account) == 0)
                    {
                        flag = 1;
                        printf("账号     姓名     余额     身份证号码               电话号码\n");
                        printf("========================================================================\n");
                        printf("%d %s  %.2f  %s  %s", users[i].account, users[i].name, users[i].balance, users[i].identificationNumber, users[i].phoneNumber);
                    }
                if (0 == flag)
                    printf("该账号不存在!\n");
                break;
            case 2:
                printf("请输入要查询用户的姓名:\n");
                scanf("%s", s1);
                for (i = 0; i < N; i++)
                    if (strcmp(users[i].name, s1) == 0)
                    {
                        flag = 1;
                        printf("账号     姓名     余额     身份证号码               电话号码\n");
                        printf("========================================================================\n");
                        printf("%d %s  %.2f  %s  %s", users[i].account, users[i].name, users[i].balance, users[i].identificationNumber, users[i].phoneNumber);
                    }
                if (0 == flag)
                    printf("该姓名不存在!\n"); break;
            case 3:
                return;
            default:
                showAll();
            }
        }
    }
    
    
    
    
    
    void showAll()//显示所有用户
    {
        int i;
        printf("以下为所有账户信息(按账号由小到大排序):");
        printf("账号     姓名     余额     身份证号码               电话号码\n");
        printf("========================================================================\n");
        for (i = 0; i <= N; i++)
        {
            printf("%d %s %.2f %s %s", users[i].account, users[i].name, users[i].balance, users[i].identificationNumber, users[i].phoneNumber);
        }
    }
    
    
    
    
    
    void readData()//读 
    {
        FILE* fp;
        int i = 0;
        //从文件中取出余额
        if ((fp = fopen("account.txt", "a+")) == NULL)
        {
            printf("Data file cannot open!");
            exit(0);
        }
        while (fscanf(fp, "%s %s %.2f %s %s", users[i].account, users[i].name, users[i].balance, users[i].identificationNumber, users[i].phoneNumber) != EOF)
        {
            i++;
        }
        N = i;//用全局变量储存用户总人数
        fclose(fp);
        return;
    }
    
    
    void writeData()//写 
    {
        FILE* fp;
        int i = 0;
        //保存余额
        if ((fp = fopen("account.txt", "w")) == NULL)
        {
            printf("Data file cannot open!");
            exit(0);
        }
        for (i = 0; i < N; i++)
            fprintf(fp, "%s %s %.2f %s %s", users[i].account, users[i].name, users[i].balance, users[i].identificationNumber, users[i].phoneNumber);
        fclose(fp);
    }
    

    改完后可以编译运行,然后正常开户了,其他地方似乎还有小错误,你这代码是扫描图片得到的吗?!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 5月19日
  • 已采纳回答 5月11日
  • 修改了问题 5月10日
  • 创建了问题 5月9日

悬赏问题

  • ¥15 求指导ADS低噪放设计
  • ¥15 CARSIM前车变道设置
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存