没有米西只有呱唧 2022-01-08 13:26 采纳率: 77.8%
浏览 38

可以看看为什么有时候连续输入航班信息时,浏览的页面会不会输出一些信息吗?(有点急 )


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <Windows.h>
#include <io.h>//定义access函数(判断指定文件是否具有可读、可写、可执行等权限)的头文件 
#define N 100001
#define PRINT "%d\t\t%s\t\t%s\t\t%d\t\t\n",Flight[i].flightnumber,Flight[i].startstaion,Flight[i].endstation,Flight[i].count //定义输出格式

//头文件 
struct flight
{
    int flightnumber;//航班号 
    char startstaion[20];//起始站 
    char endstation[20];//终点站
    int count;//机票数量
}Flight[N];//航班信息

typedef struct
{
    char name[20];
    char secret[10];
}Client;//用户信息

int i, m = 0;//全局变量,标志航班数量 
char ch[10];//相对于flag 

void MainMenu();//主页面
void OptionMenu();//输入选择 进入功能区
void Login(Client client[]);//登陆
void Clearing();//函数初始化 
void Build();//创建航班信息 
void Read();//读取 
void SaveInformation();//保存航班信息
void AddInformation();//增加信息函数 
void output();//航班信息输出 
void FlightInformation();//航班信息浏览 


int main()//主函数
{
    MainMenu();//菜单
    OptionMenu();//输入选择
    return 0;
}

void MainMenu()//菜单
{
    printf("***************************************\n");
    printf("      欢迎进入航班订票系统\n");
    printf("        0.请登录您的账号... \n");
    printf("        1.航班信息浏览        \n");
    printf("        2.航班查询(按航班号)        \n");
    printf("        3.航班订票        \n");
    printf("        4.航班退票        \n");
    printf("        5.退出系统        \n");
    printf("***************************************\n");
}

void OptionMenu()//选择功能
{
    Clearing();//函数初始化 
    int number1;//表示选择
    Client* user;
    user = (Client*)malloc(sizeof(Client));//动态内存分配

    
    do
    {
        system("cls");//清屏
        MainMenu();
        printf("请选择...\n");
        scanf("%d", &number1);//输入
        getchar();//吸收换行符

        switch (number1)
        {
            case 0:
                printf("为了您的信息准确、安全,请先登陆...\n");
                Sleep(500);
                Login(user);//登陆
                AddInformation(); 
                break;//增加信息函数 
            case 1:FlightInformation(); break;//浏览航班信息 
            case 5:
                SaveInformation();//保存信息
                printf("      感谢使用航班订票系统,再见!        \n");
                exit(0);
            default:
                printf("您输入不对,只能输入0-5...\n");
                printf("请重新输入...\n");
                Sleep(500);//停留
        }
    } while ((number1 <= 5) && (number1 >= 0));//结束标志
}

void Login(Client client[])//登陆
{
    printf("请输入您的账号: \n");
    scanf("%s", &client->name);
    printf("请输入您的密码: \n");
    scanf("%s", &client->secret);

    FILE* fp = fopen("B.txt", "a");//定义文件指针 用户账号 密码文件

    char clientNam[20] = "\n账号:";//定义账号 密码
    char clientsecret[10] = "\n密码:";

    fputs(clientNam, fp);
    fputs(client->name, fp);

    fputs(clientsecret, fp);
    fputs(client->secret, fp);
    fclose(fp);
    fp = NULL;

    printf("登陆成功!\n");
    
}

void Clearing()//函数初始化 
{
    if (_access("flight.dat", 0)) Build();//没有权限对文件进行操作就建立
    else Read();//阅读 
}

void Build()//创建航班信息数据文件 
{
    FILE* fp1;//定义文件指针 
    if ((fp1 = fopen("flight.dat", "wb")) == NULL)
    {
        printf("创建航班信息文件失败!\n");
        getchar();
        return;
    }
    printf("请依次输入航班信息...\n");

    for (i = 0; i < N; i++)
    {
        printf("请输入航班号:\n");
        scanf("%d", &Flight[i].flightnumber);

        printf("请输入起始站:\n");
        scanf("%s", Flight[i].startstaion);

        printf("请输入终点站:\n");
        scanf("%s", Flight[i].endstation);

        printf("请输入预售机票数:\n");
        scanf("%d", &Flight[i].count);

        fwrite(&Flight[i], sizeof(struct flight), 1, fp1);//写入文件

        m++;//航班增加

        printf("已添加,是否继续添加航班信息?(Y/N)\n");
        scanf("%s", ch);
        if (!strcmp(ch, "Y"))
        {
            fclose(fp1);
            return;
        }
    }
}

void Read()//读取文件 
{
    FILE* fp2;//定义文件指针
    if ((fp2 = fopen("flight.dat", "r")) == NULL)
    {
        printf("创建航班信息文件失败!\n");
        getchar();
        return;
    }
    i = 0;
    while (!feof(fp2))//用文件结束符来判断文件是否被关闭 feof()函数 即检验文件是否到了末尾
    {
        fread(&Flight[i], sizeof(struct flight), 1, fp2);
        i++;
        m++;//计算航班数 
    }
    m--;
    fclose(fp2);
}

void AddInformation()//增加信息函数 
{
    do
    {
        printf("请依次输入航班信息...\n");

        printf("请输入航班号:\n");
        scanf("%d", &Flight[i].flightnumber);

        printf("请输入起始站:\n");
        scanf("%s", Flight[i].startstaion);

        printf("请输入终点站:\n");
        scanf("%s", Flight[i].endstation);

        printf("请输入预售机票数:\n");
        scanf("%d", &Flight[i].count);

        m++;//航班数量增加

        printf("已添加,是否继续添加航班信息?(Y/N)\n");
        scanf("%s", ch);
    } while (!strcmp(ch, "Y"));
}

void SaveInformation()//保存航班信息 
{
    FILE* fp3;
    if ((fp3 = fopen("flight.dat", "wb")) == NULL)
    {
        printf("创建航班信息文件失败!\n");
        getchar();
        return;
    }
    for (i = 0; i < m; i++)
    {
        fwrite(&Flight[i], sizeof(struct flight), 1, fp3);
    }
    fclose(fp3);
}

void output()//航班信息输出 
{
    printf("航班号\t\t起始站\t\t终点站\t\t机票数\t\t\n");
    for (i = 0; i < m; i++)
    {
        printf(PRINT);
    }
}

void FlightInformation()//航班信息浏览 
{
    printf("目前的航班信息如下...\n");
    output();
    printf("请按enter键返回上级菜单...\n");
    getchar();//吸收换行符
}
  • 写回答

1条回答 默认 最新

  • 书山客 2022-01-08 14:00
    关注
    
    
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <Windows.h>
    #include <io.h>//定义access函数(判断指定文件是否具有可读、可写、可执行等权限)的头文件 
    #define N 100001
    #define PRINT "%d\t\t%s\t\t%s\t\t%d\t\t\n",Flight[i].flightnumber,Flight[i].startstaion,Flight[i].endstation,Flight[i].count //定义输出格式
    
    //头文件 
    struct flight
    {
        int flightnumber;//航班号 
        char startstaion[20];//起始站 
        char endstation[20];//终点站
        int count;//机票数量
    }Flight[N];//航班信息
    
    typedef struct
    {
        char name[20];
        char secret[10];
    }Client;//用户信息
    
    int i, m = 0;//全局变量,标志航班数量 
    char ch[10];//相对于flag 
    
    void MainMenu();//主页面
    void OptionMenu();//输入选择 进入功能区
    void Login(Client client[]);//登陆
    void Clearing();//函数初始化 
    void Build();//创建航班信息 
    void Read();//读取 
    void SaveInformation();//保存航班信息
    void AddInformation();//增加信息函数 
    void output();//航班信息输出 
    void FlightInformation();//航班信息浏览 
    
    
    int main()//主函数
    {
        MainMenu();//菜单
        OptionMenu();//输入选择
        return 0;
    }
    
    void MainMenu()//菜单
    {
        printf("***************************************\n");
        printf("      欢迎进入航班订票系统\n");
        printf("        0.请登录您的账号... \n");
        printf("        1.航班信息浏览        \n");
        printf("        2.航班查询(按航班号)        \n");
        printf("        3.航班订票        \n");
        printf("        4.航班退票        \n");
        printf("        5.退出系统        \n");
        printf("***************************************\n");
    }
    
    void OptionMenu()//选择功能
    {
        Clearing();//函数初始化 
        int number1;//表示选择
        Client* user;
        user = (Client*)malloc(sizeof(Client));//动态内存分配
    
    
        do
        {
            system("cls");//清屏
            MainMenu();
            printf("请选择...\n");
            scanf("%d", &number1);//输入
            getchar();//吸收换行符
    
            switch (number1)
            {
            case 0:
                printf("为了您的信息准确、安全,请先登陆...\n");
                Sleep(500);
                Login(user);//登陆
                AddInformation();
                break;//增加信息函数 
            case 1:FlightInformation(); break;//浏览航班信息 
            case 5:
                SaveInformation();//保存信息
                printf("      感谢使用航班订票系统,再见!        \n");
                exit(0);
            default:
                printf("您输入不对,只能输入0-5...\n");
                printf("请重新输入...\n");
                Sleep(500);//停留
            }
        } while ((number1 <= 5) && (number1 >= 0));//结束标志
    }
    
    void Login(Client client[])//登陆
    {
        printf("请输入您的账号: \n");
        scanf("%s", &client->name);
        printf("请输入您的密码: \n");
        scanf("%s", &client->secret);
    
        FILE* fp = fopen("B.txt", "a");//定义文件指针 用户账号 密码文件
    
        char clientNam[20] = "\n账号:";//定义账号 密码
        char clientsecret[10] = "\n密码:";
    
        fputs(clientNam, fp);
        fputs(client->name, fp);
    
        fputs(clientsecret, fp);
        fputs(client->secret, fp);
        fclose(fp);
        fp = NULL;
    
        printf("登陆成功!\n");
    
    }
    
    void Clearing()//函数初始化 
    {
        if (_access("flight.dat", 0)==-1) Build();//没有权限对文件进行操作就建立
        else Read();//阅读 
    }
    
    void Build()//创建航班信息数据文件 
    {
        FILE* fp1;//定义文件指针 
        if ((fp1 = fopen("flight.dat", "wb")) == NULL)
        {
            printf("创建航班信息文件失败!\n");
            getchar();
            return;
        }
        printf("请依次输入航班信息...\n");
    
        for (i = 0; i < N; i++)
        {
            printf("请输入航班号:\n");
            scanf("%d", &Flight[i].flightnumber);
    
            printf("请输入起始站:\n");
            scanf("%s", Flight[i].startstaion);
    
            printf("请输入终点站:\n");
            scanf("%s", Flight[i].endstation);
    
            printf("请输入预售机票数:\n");
            scanf("%d", &Flight[i].count);
    
            fwrite(&Flight[i], sizeof(struct flight), 1, fp1);//写入文件
    
            m++;//航班增加
    
            printf("已添加,是否继续添加航班信息?(Y/N)\n");
            scanf("%s", ch);
            if (strcmp(ch, "Y")!=0)
            {
                fclose(fp1);
                return;
            }
        }
    }
    
    void Read()//读取文件 
    {
        FILE* fp2;//定义文件指针
        if ((fp2 = fopen("flight.dat", "r")) == NULL)
        {
            printf("创建航班信息文件失败!\n");
            getchar();
            return;
        }
        i = 0;
        while (!feof(fp2))//用文件结束符来判断文件是否被关闭 feof()函数 即检验文件是否到了末尾
        {
            fread(&Flight[i], sizeof(struct flight), 1, fp2);
            i++;
            m++;//计算航班数 
        }
        m--;
        fclose(fp2);
    }
    
    void AddInformation()//增加信息函数 
    {
        i = 0;
        do
        {
            printf("请依次输入航班信息...\n");
            printf("请输入航班号:\n");
            scanf("%d", &Flight[i].flightnumber);
    
            printf("请输入起始站:\n");
            scanf("%s", Flight[i].startstaion);
    
            printf("请输入终点站:\n");
            scanf("%s", Flight[i].endstation);
    
            printf("请输入预售机票数:\n");
            scanf("%d", &Flight[i].count);
    
            m++;//航班数量增加
            i++;
            printf("已添加,是否继续添加航班信息?(Y/N)\n");
            scanf("%s", ch);
            
        } while (!strcmp(ch, "Y"));
    }
    
    void SaveInformation()//保存航班信息 
    {
        FILE* fp3;
        if ((fp3 = fopen("flight.dat", "wb")) == NULL)
        {
            printf("创建航班信息文件失败!\n");
            getchar();
            return;
        }
        for (i = 0; i < m; i++)
        {
            fwrite(&Flight[i], sizeof(struct flight), 1, fp3);
        }
        fclose(fp3);
    }
    
    void output()//航班信息输出 
    {
        printf("航班号\t\t起始站\t\t终点站\t\t机票数\t\t\n");
        for (i = 0; i < m; i++)
        {
            printf("%d\t\t%s\t\t%s\t\t%d\t\t\n", Flight[i].flightnumber, Flight[i].startstaion, Flight[i].endstation, Flight[i].count);
        }
    }
    
    void FlightInformation()//航班信息浏览 
    {
        printf("目前的航班信息如下...\n");
        output();
        printf("请按enter键返回上级菜单...\n");
        getchar();//吸收换行符
    }
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 1月8日

悬赏问题

  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题
  • ¥15 学习指导与未来导向啊
  • ¥15 求多普勒频移瞬时表达式
  • ¥15 如果要做一个老年人平板有哪些需求
  • ¥15 k8s生产配置推荐配置及部署方案