朝中措742 2022-05-23 00:00 采纳率: 100%
浏览 28
已结题

程序能运行但页面空白,求修改

img

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

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


int welcome();//欢迎界面的功能实现 
void openAccount();//开户
int menu();//菜单
void deposit();//存款
void withdraw();//取款
void showAccount();//查询用户信息
void showAll();//显示所有用户
void closeAccount();//销户
void readData();//开始前从文件中读数据,存在数组中
void writeData();//程序结束前,将数组中的数据写入到文件中
int search(int id);//根据账号找到用户数据对应的下标

int main()
{
    system("color f4");
    system("title  银行账户管理系统");//设置窗口标题 
    readData();
    users[0].account=0;
    strcpy(users[N].identificationNumber,"0");
    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();//取款
                break;
            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");//用户数未超标时
    users[N+1].account=1+users[N].account;//账号顺延
    printf("即将开户的账号为:%d",users[N+1].account);//输出账号
    printf("姓名:");//输入姓名
    scanf("%s",users[N+1].name);
    printf("余额:");
    scanf("%f",&users[N+1].balance);
    printf("身份证号码:");
    scanf("%s",users[N+1].identificationNumber); 
    for (j = 0; j < N+1; j++)
    {
        if (strcmp(users[N+1].identificationNumber, users[j].identificationNumber) == 0)
        {
            printf("该用户已存在,开户失败!\n");
            break;
        }
    }
    printf("电话号码:");
    scanf("%s",users[N+1].phoneNumber);
    printf("开户成功!\n");
    ++N;
    return;
}


void closeAccount()//销户
{
    int i, j, flag = 0;
    int s1;
    printf("请输入要删除的账号:\n");
    scanf("%d", s1);
    for (i = 0; i < N; i++)
    {
        if (users[i].account==s1)
        {
            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--;
    }
    return;//新加的 
}

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


int search(int id)//账号查找 
{
    for (int j = 0; j <=N; ++j)
    {
        if (users[j].account == id)
            return j;
    }
    return -1;
}



void showAccount()//查询账户信息
{
    int i,item,flag;
    int s1;
    char s2[11];
    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("%d", s1);
                for (i = 0; i<=N+1; i++)
                if (s1=users[i].account )
                {
                    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", s2);
               for (i = 0; i<=N; i++)
               if (strcmp(users[i].name, s2) == 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("以下为所有账户信息(按账号由小到大排序):\n");
    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,"%d %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,"%d %s %.2f %s %s",users[i].account,users[i].name,users[i].balance,users[i].identificationNumber,users[i].phoneNumber);
      fclose(fp);
}




之前还能显示出菜单页面,但是在开户之后其他功能都无法实现,像这样

img


我多试了几回之后,就变成了这样

img


百度了之后还是解决不了,唉
感谢各位阅读至此,如能提供帮助,十分感谢

  • 写回答

2条回答 默认 最新

  • UIUI 2022-05-23 08:36
    关注

    1, scanf("%d",&s); ----> & 有不少地方缺少 &
    2, scanf("%0.2f", &i); --> %0.2f 真的有这种格式去控制输入吗?
    3,修改了这些后,功能基本都能用。但显示版面有点问题。

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

报告相同问题?

问题事件

  • 系统已结题 5月31日
  • 已采纳回答 5月23日
  • 修改了问题 5月23日
  • 创建了问题 5月23日

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)