weixin_51715033
橘猫不会喵
采纳率100%
2021-01-03 17:13

不会鸭,不会鸭,有没有大神帮忙,我是大一女生,想知道这个程序问题出现在哪里?(报错一共就2个问题)

已采纳

#include <stdio.h>
#include <string.h>
#include <io.h>
#include <process.h>
#define N 9999 //定义最多的航班数
#define PRINT "%d\t\t%s\t\t%s\t\t%s\t\t%d\t\t%s\t\t%s\t\t%s\n",s[i].num1,s[i].start,s[i].over,s[i].time,s[i].num2,s[i].marking,s[i].name,s[i].num3

struct air { //定义结构体数组
    int num1;
    char start[20];
    char over[20];
    char time[10];
    int num2;
    char marking[10];
    char name[10];
    char num3[20];
    int count;
} s[N];

int i, m = 0; //定义全局变量
char ii[10];
void main();
void add(); //函数声明增加航班信息函数
void print(); //显示航班信息
void search(); //查找航班信息(按终点站)
void dingpiao(); //订票业务
void tuipiao(); //退票
void read1(); //读取文件
void save(); //保存文件
void output(); //输出格式
void paixu(); //航班排序
void chushihua(); //系统初始化
void build(); //建立数据文件
void paixu1(); //按航班号从小到大排序
void paixu2(); //从大到小

void main() { //主函数
    int j;
    chushihua(); //系统初始化判断是否存在原始数据文件
    printf(" 欢迎使用飞机订票系统 \n");
    printf(" 该系统有以下功能 \n");
    do {
        printf("==========================\n");
        printf("1.航班信息录入 \n"
               "2.航班信息浏览 \n"
               "3.查找航班信息 \n"
               "4.订票业务 \n"
               "5.退票业务 \n"
               "6.退出系统 \n");
        printf("==========================\n");
        printf(" 请在 1-6 中选择以回车键结束: ");

        scanf("%d", &j);
        fflush(stdin);
        switch (j) {
            case 1:
                add();
                break;
            case 2:
                print();
                break;
            case 3:
                search();
                break;
            case 4:
                paixu();
                break;
            case 5:
                dingpiao();
                break;
            case 6:
                tuipiao();
                break;
            case 7:
                save();
                printf(" 谢谢使用,再见 !");
                break;
            default:
                printf(" 您输入不合法 ,请按回车键继续 ");
                getchar();
        }
    } while (j != 0); //判断是否调用其他函数
}

void chushihua() { //定义系统初始化函数
    if (access("hangban.txt", 0)) {
        build();
    } else
        read1();
}

void build() { //定义建立数据文件函数
    FILE *fp; //定义文件指针
    if ((fp = fopen("hangban.txt", "wb")) == NULL) { //打开文件并判定是否出错
        printf(" 创建文件失败 ! ");
        getchar();
        return;
    }
    printf(" 请依次输入航班信息 (以回车键结束 ):\n");
    printf("----------------------------\n");
    for (int i = 0; i < N; i++) {
        printf(" 请输入航班号 : ");
        scanf("%d", &s[i].num1);
        printf(" 请输入起始站 : ");
        scanf("%s", s[i].start);
        printf(" 请输入终点站 : ");
        scanf("%s", s[i].over);
        printf(" 请输入起飞时间 (星期几 ): ");
        scanf("%s", s[i].time);
        printf(" 请输入座次号 : ");
        scanf("%d", &s[i].num2);
        printf(" 座次订出与否 : ");
        scanf("%s", s[i].marking);
        printf(" 订票者姓名 : ");
        scanf("%s", s[i].name);
        printf(" 订票者身份证号码 : ");
        scanf("%s", s[i].num3);
        fwrite(&s[i], sizeof(struct air), 1, fp);
        m++;
        printf(" 添加完毕 ,是否继续添加 ?请键入 y 或 n 以回车键结束 :");
        scanf("%s", ii);
        if (strcmp(ii, "y") != 0) { //判断是否继续添加航班信息
            fclose(fp); //关闭文件
            return;
        }
    }
}

void read1() { //定义读取文件函数
    FILE *fp;
    if ((fp = fopen("hangban.txt", "r")) == NULL) {
        printf(" 创建文件失败 ! ");
        getchar();
        return;
    }
    i = 0;
    while (!feof(fp)) {
        fread(&s[i], sizeof(struct air), 1, fp); //逐块读取数据
        i++;
        m++; //计算存在航班数
    }
    m--;
    fclose(fp);
}

void save() { //定义保存函数
    FILE *fp;
    if ((fp = fopen("hangban.txt", "wb")) == NULL) {
        printf(" 创建文件失败 ! ");
        getchar();
        return;
    }
    for (int i = 0; i < m; i++) //逐块保存数据
        fwrite(&s[i], sizeof(struct air), 1, fp);
    fclose(fp);
}

void add() { //定义增加航班信息函数
    char ch;
    do {
        printf(" 请依次输入您要增加的航班信息 (以回车键结束 ): \n"); //打印提示信息
        printf("----------------------------\n");
        for (int i = 0; i < N; i++) {
            printf(" 请输入航班号 : ");
            scanf("%d", &s[i].num1);
            printf(" 请输入起始站 : ");
            scanf("%s", s[i].start);
            printf(" 请输入终点站 : ");
            scanf("%s", s[i].over);
            printf(" 请输入起飞时间 (星期几 ): ");
            scanf("%s", s[i].time);
            printf(" 请输入座次号 : ");
            scanf("%d", &s[i].num2);
            printf(" 座次订出与否 : ");
            scanf("%s", s[i].marking);
            printf(" 订票者姓名 : ");
            scanf("%s", s[i].name);
            printf(" 订票者身份证号码 : ");
            scanf("%s", s[i].num3);
            m++;
            printf(" 添加完毕 ,是否继续添加 ?请键入 y 或 n 以回车键结束 :");
            scanf(" %c", &ch); //%前有一个空格
        }
        while (ch == 'y' || ch == 'Y'); //判断是否继续添加
    }

    void print() { //定义显示航班信息函数
        printf("\n 目前我们有如下航班: \n");
        output(); //调用输出格式函数
        printf("\n 请按回车键返回上层菜单 ");
        getchar();
    }

    void output() { //定义输出格式函数
        printf(" 航班号 \t\t 起始站 \t\t 终点站 \t\t 起飞时间 \t\t 座位号 \t\t 座次订出与否 \t\t 订票者姓名 \t\t 订票者身份证号码 \n");
        for (int i = 0; i < m; i++)
            printf(PRINT);// 打印出信息
    }

    void search() { //定义查询函数
        char c[20];
        do {
            printf("\n 请输入终点站: ");
            scanf("%s", c); //输入查询的终点站
            for (int i = 0; i < m; i++) {
                if (strcmp(s[i].over, c) == 0) { //按终点站判定输出条件
                    printf("\n 您所查找的航班信息为 :\n ");
                    printf(" 航班号 \t\t 起始站 \t\t 终点站 \t\t 时间 \t\t 座位号 \t\t 座次订出与否 \t\t 订票者姓名 \t\t 订票者身份证号码 \n");
                    printf(PRINT); //显示信息
                    printf("\n 查询完毕,按回车键继续 ");
                    getchar();
                    getchar();
                    return;
                }
            }
            printf(" 对不起,没有您需要的信息 !\n ");
            printf(" 是否重新查找 ?请键入 y 或 n 以回车键结束 ");
            scanf("%s", ii);
        } while (!strcmp(ii, "y")); // 判定是否重新查找
    }

    void dingpiao() { //定义订票业务函数
        int n;
        char a[10] = "y";
        do {
            search();//调用查询模块
            if (!strcmp(ii, "n")) {
                printf(" 对不起 !没有找到您所需要的航班 ,所以不能订票。 \n");
                printf("\n 请按回车键返回上层菜单 ");
                getchar();
                strcpy(ii, "n");
                break;
            }
            do {
                printf(" 请输入您要订的机票数(以回车键结束) : ");
                scanf("%d", &n);
                if (n <= 0) { //判定机票数是否出错
                    printf(" 输入错误!至少需订 1 张机票。 \n");
                } else if (s[i].count == 0) { //判定机票是否售完
                    printf(" 对不起,你所选择的航班的机票已售空 !\n");
                    break;
                } else if (s[i].count != 0 && s[i].count >= n) { //判定机票数是否大于等于订票数
                    s[i].count = s[i].count - n;
                    printf(" 订票成功 ! ");
                    break;
                } else if (s[i].count < n) { //判定机票数是否小于订票数
                    printf(" 对不起,你所选择的航班只剩 %d 张机票 \n", s[i].count);
                    printf(" 是否需要重新输入机票数 ?请输入 y 或 n 以回车键结束 :");//判定是否重新输入订票数
                    scanf("%s", a);
                }
            } while (!strcmp(a, "y"));
            printf(" 是否需要订其他航班的机票 ?请输入 y 或 n 以回车键结束 : ");
            scanf("%s", a);
        } while (!strcmp(a, "y")); //判定是否继续订票
    }
    void tuipiao() { //定义退票函数
        int n;
        char a[10];
        do {
            search(); //调用查询函数
            if (!strcmp(ii, "n")) {
                printf(" 对不起 !没有找到您所需要的航班 ,所以不能退票。 \n");
                printf("\n 请按回车键返回上层菜单 ");
                getchar();
                strcpy(ii, "n");
                break;
            }
            printf(" 请输入您要退的机票数目: ");
            scanf("%d", &n);
            if (n <= 0) //判定票数是否有效
                printf(" 输入错误!至少需退 1 张机票。 ");
            else {
                s[i].count = s[i].count + n;
                printf(" 退票成功 ! ");
            }
            printf(" 是否继续? 请键入 y 或 n 以回车键结束 : "); //判定是否继续
            scanf("%s", a);
        } while (!strcmp(a, "y")); //判定并跳出循环
    }

    void paixu() { //定义排序函数
        int n;
        printf("\n***************************\n ");
        printf("1. 按航班号从小到大排序 \n"
               " 2.按航班号从大到小排序 \n");
        printf("***************************\n ");
        printf(" 请在 1-2 中选择以回车键结束: ");
        scanf("%d", &n);
        switch (n) {
            case 1:
                paixu1();//调用从小到大排序函数
                break;
            case 2:
                paixu2();//调用从大到小排序函数
                break;
        }
        printf(" 排序后的航班信息为 :\n");
        output(); //显示排序后航班信息
        printf("\n 请按回车键返回上层菜单 ");
        getchar();
    }
    void paixu1() { //定义从小到大排序函数
        int k, j;
        struct air t;
        for (int i = 0; i < m; i++) { // 选择法排序
            k = i;
            for (j = i + 1; j < m; j++)
                if (s[k].num1 > s[j].num1)
                    k = j;
            if (i != k) {
                t = s[k];
                s[k] = s[i];
                s[i] = t;
            }
        }
    }
    void paixu2() { //定义从大到小排序函数
        int k, j;
        struct air t;
        for (int i = 0; i < m; i++) {
            k = i;
            for (j = i + 1; j < m; j++)
                if (s[k].num1 < s[j].num1)
                    k = j;
            if (i != k) {
                t = s[k];
                s[k] = s[i];
                s[i] = t;
            }
        }
    }

 

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • yakumosumi yakumosumi 3月前

    187行上面缺一个"}"符号

    点赞 1 评论 复制链接分享
  • weixin_51715033 橘猫不会喵 3月前

    可是还是有问题啊/(ㄒoㄒ)/~~

    点赞 评论 复制链接分享
  • weixin_51715033 橘猫不会喵 3月前

    这是187行,331行是最后一行

    点赞 评论 复制链接分享