Re.___ 2021-01-06 16:55 采纳率: 0%
浏览 721

c语言课程设计 飞机订票系统

一、 功能需求说明(必须采用结构体数组实现)

假设某航空公司有 M 架 N 个座位的飞机,每架飞机每天飞行一趟。通过

该系统来实现机票的订购问题。

1、采用一个包含 N 个数据的结构体数组,每个数据的结构应当包括:

起飞地、目的地、 航班号、座次号码、座次订出与否标记、订座者

的姓名和订座者的身份证号码。

2、系统显示菜单如下:

(1)输入航班信息

(2)输出航班信息

(3)查找航班信息

a.显示空座的数量

b.显示空座的信息

c.显示已订座的信息

d.起飞时间

(4)订票预约

(5)删除订票预约

(6)退出系统

3、系统成功执行菜单的每个信息,选项 4)和 5)将要求额外的输入,

并且它们都允许用户收回其输入。

4、查找航班信息既可按线路查,也可按目的地查。

二、设计要求

1.航班数据放入指定文件:Flight.txt。

2.不同的模块都要有出错处理,并能给出出错提示。如输入数据错误,文

件操作错误等等。

3.以上各个功能均编写成子函数,有良好的注释说明,由主函数调用实

现。

4.必须采用结构体数组现对航班数据的存储和访问,采用链表结构不加

分。

5. 必须使用文件保存数据。

6.应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可

能清晰美观。

三、测试数据

航班数 M 不少于 5,每架飞机的座位数 N 不少于 12

  • 写回答

1条回答 默认 最新

  • 芣苢的成长之路 2023-06-26 23:57
    关注

    程序的设计思路如下:

    1、定义了一个struct Flight结构体,用于存储每个航班的相关信息,包括起飞地、目的地、航班号、座次号码、座次订出与否标记、订座者的姓名和身份证号码。
    2、主函数使用一个结构体数组flights[]来存储多个航班的信息。
    3、程序通过菜单方式提供不同的功能选项,并使用switch语句根据用户选择调用相应的子函数实现对应功能。
    4、inputFlightInfo()函数用于输入航班信息,将用户输入的数据存储到对应的结构体数组元素中。
    5、outputFlightInfo()函数用于输出已输入的航班信息,遍历结构体数组并输出每个航班的详细信息。
    6、searchFlightInfo()函数用于查找航班信息,根据用户选择的不同功能,显示空座的数量、空座的信息、已订座的信息或起飞时间。
    7、bookTicket()函数用于订票预约,用户输入座位号并检查该座位是否已被预订,如果未被预订则要求输入订座者姓名和身份证号码,并将相应的信息更新到对应的结构体数组元素中。
    8、cancelTicket()函数用于删除订票预约,用户输入座位号并检查该座位是否已被预订,如果已被预订则将订座信息清空。
    9、程序使用文件操作来保存和读取航班数据,航班数据被存储在指定文件Flight.txt中。
    10、在每个函数中,都进行了错误处理,例如输入数据错误或文件操作错误时,会输出相应的错误提示信息。
    11、程序中使用了循环,用户可以重复选择不同的功能,直到选择退出系统。

    总体而言,该程序采用模块化的设计方式,每个功能都被封装为一个子函数,并由主函数调用,使得程序结构清晰,易于理解和维护。使用结构体数组来存储航班数据,便于管理和访问。菜单方式的用户交互使得用户能够方便地选择所需功能。通过文件保存数据,实现了数据的持久化存储。

    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAX_FLIGHTS 5
    #define MAX_SEATS 12
    
    struct Flight {
        char departure[50];
        char destination[50];
        char flightNumber[10];
        int seatNumber;
        int isBooked;
        char passengerName[50];
        char passengerID[20];
    };
    
    void inputFlightInfo(struct Flight flights[], int count);
    void outputFlightInfo(struct Flight flights[], int count);
    void searchFlightInfo(struct Flight flights[], int count);
    void bookTicket(struct Flight flights[], int count);
    void cancelTicket(struct Flight flights[], int count);
    
    int main() {
        struct Flight flights[MAX_FLIGHTS];
        int count = 0;
        int choice;
    
        do {
            printf("\n***** 飞机订票系统 *****\n");
            printf("1. 输入航班信息\n");
            printf("2. 输出航班信息\n");
            printf("3. 查找航班信息\n");
            printf("4. 订票预约\n");
            printf("5. 删除订票预约\n");
            printf("6. 退出系统\n");
            printf("请输入您的选择: ");
            scanf("%d", &choice);
    
            switch (choice) {
                case 1:
                    inputFlightInfo(flights, count);
                    count++;
                    break;
                case 2:
                    outputFlightInfo(flights, count);
                    break;
                case 3:
                    searchFlightInfo(flights, count);
                    break;
                case 4:
                    bookTicket(flights, count);
                    break;
                case 5:
                    cancelTicket(flights, count);
                    break;
                case 6:
                    printf("正在退出系统...\n");
                    break;
                default:
                    printf("无效的选择,请重新输入。\n");
            }
        } while (choice != 6);
    
        return 0;
    }
    
    void inputFlightInfo(struct Flight flights[], int count) {
        if (count >= MAX_FLIGHTS) {
            printf("已达到最大航班数。\n");
            return;
        }
    
        struct Flight *flight = &flights[count];
    
        printf("\n输入航班信息:\n");
        printf("起飞地: ");
        scanf("%s", flight->departure);
        printf("目的地: ");
        scanf("%s", flight->destination);
        printf("航班号: ");
        scanf("%s", flight->flightNumber);
        printf("座次号码: ");
        scanf("%d", &(flight->seatNumber));
        printf("订座者姓名: ");
        scanf("%s", flight->passengerName);
        printf("订座者身份证号码: ");
        scanf("%s", flight->passengerID);
    
        flight->isBooked = 0;
    
        printf("航班信息添加成功。\n");
    }
    
    void outputFlightInfo(struct Flight flights[], int count) {
        if (count == 0) {
            printf("无可用的航班信息。\n");
            return;
        }
    
        printf("\n航班信息:\n");
        for (int i = 0; i < count; i++) {
            struct Flight *flight = &flights[i];
            printf("航班 %d:\n", i + 1);
            printf("起飞地: %s\n", flight->departure);
            printf("目的地: %s\n", flight->destination);
            printf("航班号: %s\n", flight->flightNumber);
            printf("座次号码: %d\n", flight->seatNumber);
            if (flight->isBooked) {
                printf("订座者姓名: %s\n", flight->passengerName);
                printf("订座者身份证号码: %s\n", flight->passengerID);
            } else {
                printf("座位未被预订。\n");
            }
            printf("------------------------\n");
        }
    }
    
    void searchFlightInfo(struct Flight flights[], int count) {
        int choice;
        printf("\n查找航班信息:\n");
        printf("1. 显示空座的数量\n");
        printf("2. 显示空座的信息\n");
        printf("3. 显示已订座的信息\n");
        printf("4. 显示起飞时间\n");
        printf("请输入您的选择: ");
        scanf("%d", &choice);
    
        switch (choice) {
            case 1: {
                int availableSeats = 0;
                for (int i = 0; i < count; i++) {
                    if (!flights[i].isBooked) {
                        availableSeats++;
                    }
                }
                printf("空座数量: %d\n", availableSeats);
                break;
            }
            case 2: {
                printf("空座信息:\n");
                for (int i = 0; i < count; i++) {
                    if (!flights[i].isBooked) {
                        printf("座位 %d\n", flights[i].seatNumber);
                    }
                }
                break;
            }
            case 3: {
                printf("已订座信息:\n");
                for (int i = 0; i < count; i++) {
                    if (flights[i].isBooked) {
                        printf("座位 %d: %s - %s\n", flights[i].seatNumber, flights[i].passengerName, flights[i].passengerID);
                    }
                }
                break;
            }
            case 4: {
                printf("起飞时间:\n");
                for (int i = 0; i < count; i++) {
                    printf("航班 %d: %s - %s\n", i + 1, flights[i].departure, flights[i].flightNumber);
                }
                break;
            }
            default:
                printf("无效的选择,请重新输入。\n");
        }
    }
    
    void bookTicket(struct Flight flights[], int count) {
        if (count == 0) {
            printf("无可用的航班信息。\n");
            return;
        }
    
        int seatNumber;
        printf("\n输入要预订的座位号: ");
        scanf("%d", &seatNumber);
    
        for (int i = 0; i < count; i++) {
            struct Flight *flight = &flights[i];
            if (flight->seatNumber == seatNumber) {
                if (flight->isBooked) {
                    printf("该座位已被预订。\n");
                    return;
                }
    
                printf("输入订座者姓名: ");
                scanf("%s", flight->passengerName);
                printf("输入订座者身份证号码: ");
                scanf("%s", flight->passengerID);
    
                flight->isBooked = 1;
                printf("座位预订成功。\n");
                return;
            }
        }
    
        printf("无效的座位号。\n");
    }
    
    void cancelTicket(struct Flight flights[], int count) {
        if (count == 0) {
            printf("无可用的航班信息。\n");
            return;
        }
    
        int seatNumber;
        printf("\n输入要取消预订的座位号: ");
        scanf("%d", &seatNumber);
    
        for (int i = 0; i < count; i++) {
            struct Flight *flight = &flights[i];
            if (flight->seatNumber == seatNumber) {
                if (!flight->isBooked) {
                    printf("该座位尚未预订。\n");
                    return;
                }
    
                flight->isBooked = 0;
                printf("座位取消预订成功。\n");
                return;
            }
        }
    
        printf("无效的座位号。\n");
    }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘