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);

一、语法错误
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);
}

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

现在是到哪一个流程了

img


这样发

看不太清楚啊

char account[max+1],账户数怎么加到账号上了;
users[N].account=N-1;//账号顺延
printf("账号:%s",users[N].account);//输出账号,N-1是整形怎么给字符串赋值?输出字符串?;;;
N没赋初始值(默认0)?上一步N-1直接越界;;
printf("身份证号码:");
scanf("%s,identificationNumber");这idxxx是个啥;;;;
printf("开户成功!");;