最全—航班信息管理系统【数组版】

航班管理系统(数组版)

航班信息查询系统
1、 导言 用所学过的 C 语言,以及链表相关知识,实现一个航班信息的录入、查询、显示、 排序等功能。航班信息
节点设计,请参见附录。
2、 基本功能: 使用链表或数组,实现以下功能:
1) 录入(可以直接从键盘录入,也可通过文件存储)
2) 显示所有航班信息
3) 按照查询要求(比如日期、地点等),列出相关的航班信息。
4) 完善该项目功能。
5) 对录入的信息进行排序(比如按起飞时间排序、按起飞地址排序等)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_FLIGHTS 100 // 定义最大航班数量

static int flight_num = 0; // 当前航班的数量

typedef struct airplane
{
    char number[10];     // 航班号
    char Start_City[20]; // 起飞城市
    char End_City[20];   // 到达城市
    // char type;              //机型
    char Start_Time[20]; // 起飞时间
    char End_Time[20];   // 到达时间
    float Price;         // 机票价格
    float Discount;      // 机票折扣
    int Tickets;         // 机票剩余数量
} Plane;

Plane flights[MAX_FLIGHTS]; // 存储航班信息的数组

void Menu();           // 菜单
void addFlight();      // 添加
void findFlight();     // 查询
void displayFlights(); // 显示所有
void modifyFlight();   // 修改
void deleteFlight();   // 删除
void Sort();           // 排序

/*
    功能:  显示菜单信息
    参数:  无
    返回值:无
    */
void Menu()
{

    int choice;

    while (1)
    {

        printf("        航班管理系统        \n");
        printf("----------------------------\n");
        printf("|1、添加航班信息            |\n");
        printf("|2、显示所有航班信息        |\n");
        printf("|3、查询航班信息            |\n");
        printf("|4、修改航班信息            |\n");
        printf("|5、删除航班信息            |\n");
        printf("|6、排序                    |\n");
        printf("|0、退出                    |\n");
        printf("----------------------------\n");
        printf("请输入相应的序号选择!       \n");

        scanf("%d", &choice);
        getchar();

        switch (choice)
        {
        case 1:
            addFlight();
            break;
        case 2:
            displayFlights();
            break;
        case 3:
            findFlight();
            break;
        case 4:
            modifyFlight();
            break;
        case 5:
            deleteFlight();
            break;
        case 6:
            Sort();
            break;
        case 0:
            exit(0);
            break;
        default:
            printf("无效的选择,请重试!\n");
        }
        // 暂停操作
        printf("\n");
        system("pause"); // 这行代码会使程序等待用户按下任意键
        system("cls");   // 清屏操作
    }
}

/*
    功能:  添加航班信息
    参数:  无
    返回值:无
*/
void addFlight()
{

    if (flight_num >= MAX_FLIGHTS)
    {
        printf("无法添加更多航班,已达到最大限制!\n");
        return;
    }

    Plane newFlight;
    printf("请输入航班号: ");
    gets(newFlight.number);

    printf("请输入起飞城市: ");
    gets(newFlight.Start_City);

    printf("请输入到达城市: ");
    gets(newFlight.End_City);

    printf("请输入起飞时间: ");
    gets(newFlight.Start_Time);

    printf("请输入到达时间: ");
    gets(newFlight.End_Time);

    printf("请输入机票价格: ");
    scanf("%f", &newFlight.Price);
    getchar();

    printf("请输入机票折扣: ");
    scanf("%f", &newFlight.Discount);
    getchar();

    printf("请输入剩余票数: ");
    scanf("%d", &newFlight.Tickets);
    getchar();

    flights[flight_num++] = newFlight; // 将新航班添加到数组中
    printf("航班添加成功!\n");
}

/*
    功能:  显示所有航班信息
    参数:  无
    返回值:无
*/
void displayFlights()
{
    if (flight_num == 0)
    { // 检查是否有航班信息
        printf("没有可显示的航班信息!\n");
        return;
    }
    printf("航班号\t\t起飞城市\t到达城市\t起飞时间\t到达时间\t机票价格\t优惠折扣\t剩余票数\n");
    for (int i = 0; i < flight_num; i++)
    {
        printf("%s\t\t%s\t-->\t%s\t\t%s\t\t%s\t\t%.2f\t\t%.2f\t\t%d\n",
               flights[i].number, flights[i].Start_City, flights[i].End_City,
               flights[i].Start_Time, flights[i].End_Time,
               flights[i].Price, flights[i].Discount, flights[i].Tickets);
    }
}

/*
    功能:  查询航班信息
    参数:  无
    返回值:无
*/
void findFlight()
{
    if (flight_num == 0)
    { // 检查是否有航班信息
        printf("没有可查询的航班信息!\n");
        return;
    }
    char fnum[10];

    printf("请输入要查询的航班号:");

    fgets(fnum, sizeof(fnum), stdin);
    fnum[strcspn(fnum, "\n")] = '\0'; // 去除换行符
    for (int i = 0; i < flight_num; i++)
    {
        if (strcmp(fnum, flights[i].number) == 0)
        {
            printf("航班号\t\t起飞城市\t到达城市\t起飞时间\t到达时间\t机票价格\t优惠折扣\t剩余票数\n");
            printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%.2f\t\t%.2f\t\t%d\n",
                   flights[i].number, flights[i].Start_City, flights[i].End_City,
                   flights[i].Start_Time, flights[i].End_Time,
                   flights[i].Price, flights[i].Discount, flights[i].Tickets);
            return;
        }
    }
    printf("未找到该航班!\n");
}

/*
    功能:  修改航班信息
    参数:  无
    返回值:无
*/
void modifyFlight()
{
    if (flight_num == 0)
    { // 检查是否有航班信息
        printf("没有修改的航班信息!\n");
        return;
    }

    printf("请输入要修改的航班号:");
    char fnum[10];
    int flag = 0;
    fgets(fnum, 10, stdin);
    fnum[strcspn(fnum, "\n")] = 0; // 去掉换行符

    for (int i = 0; i < flight_num; i++)
    {
        if (strcmp(fnum, flights[i].number) == 0)
        {
            flag = 1;
            printf("修改开始\n请输入航班号: ");
            gets(flights[i].number);

            printf("请输入起飞城市: ");
            gets(flights[i].Start_City);

            printf("请输入到达城市: ");
            gets(flights[i].End_City);

            printf("请输入起飞时间: ");
            gets(flights[i].Start_Time);

            printf("请输入到达时间: ");
            gets(flights[i].End_Time);

            printf("请输入机票价格: ");
            scanf("%f", &flights[i].Price);
            getchar();

            printf("请输入机票折扣: ");
            scanf("%f", &flights[i].Discount);
            getchar();

            printf("请输入剩余票数: ");
            scanf("%d", &flights[i].Tickets);
            getchar();

            printf("航班修改成功!\n");
            break;
        }
    }

    if (flag == 0)
    {
        printf("未找到该航班号对应的航班信息!\n");
    }
}

/*
    功能:  删除航班信息
    参数:  无
    返回值:无
*/

void deleteFlight()
{
    if (flight_num == 0)
    { // 检查是否有航班信息
        printf("没有可删除的航班信息!\n");
        return;
    }
    printf("请输入要删除的航班号:");
    char fnum[10];
    int flag = 0;
    fgets(fnum, sizeof(fnum), stdin);
    fnum[strcspn(fnum, "\n")] = 0;

    for (int i = 0; i < flight_num; i++)
    {
        if (strcmp(fnum, flights[i].number) == 0)
        {
            flag = 1;
            for (int j = i; j < flight_num - 1; j++)
            {
                strcpy(flights[j].number, flights[j + 1].number);
                strcpy(flights[j].Start_City, flights[j + 1].Start_City);
                strcpy(flights[j].End_City, flights[j + 1].Start_Time);
                strcpy(flights[j].Start_Time, flights[j + 1].Start_Time);
                strcpy(flights[j].End_Time, flights[j + 1].End_Time);

                flights[j].Price = flights[j + 1].Price;
                flights[j].Discount = flights[j + 1].Discount;
                flights[j].Tickets = flights[j + 1].Tickets;
            }
            flight_num--;
            printf("删除成功!");
            break;
        }
    }
    if (!flag)
        printf("未找到该航班号对应的航班信息!\n");
}

/*
    功能:  删除航班信息
    参数:  无
    返回值:无
*/
void Sort()
{
    if (flight_num == 0)
    { // 检查是否有航班信息
        printf("没有可排序的航班信息!\n");
        return;
    }
    printf("请选择排序方式:\n");
    printf("1.按日期升序排序\n2.按日期降序排序\n3.按价格升序排序\n4.按价格降序排序\n");
    int num;
    scanf("%d", &num);

    if (num == 1 || num == 2) // 1.按日期升序排序 2.按日期降序排序
    {
        for (int i = 0; i < flight_num - 1; i++)
        {
            for (int j = 0; j < flight_num - i - 1; j++)
            {
                if ((num == 1 && strcmp(flights[j].Start_Time, flights[j + 1].Start_Time) > 0) ||
                    (num == 2 && strcmp(flights[j].Start_Time, flights[j + 1].Start_Time) < 0))
                {
                    Plane temp = flights[j];
                    flights[j] = flights[j + 1];
                    flights[j + 1] = temp;
                }
            }
        }
        printf("日期排序成功!\n");
    }
    else if (num == 3 || num == 4) // 3.按价格升序排序 4.按价格降序排序
    {
        for (int i = 0; i < flight_num - 1; i++)
        {
            for (int j = 0; j < flight_num - i - 1; j++)
            {
                if ((num == 3 && (flights[j].Price - flights[j + 1].Price) > 0) ||
                    (num == 4 && (flights[j].Price - flights[j + 1].Price) < 0))
                {
                    Plane temp = flights[j];
                    flights[j] = flights[j + 1];
                    flights[j + 1] = temp;
                }
            }
        }
        printf("价格排序成功!\n");
    }

    printf("航班号\t\t起飞城市\t到达城市\t起飞时间\t到达时间\t机票价格\t优惠折扣\t剩余票数\n");
    for (int i = 0; i < flight_num; i++)
    {
        printf("%s\t\t%s\t-->\t%s\t\t%s\t\t%s\t\t%.2f\t\t%.2f\t\t%d\n",
               flights[i].number, flights[i].Start_City, flights[i].End_City,
               flights[i].Start_Time, flights[i].End_Time,
               flights[i].Price, flights[i].Discount, flights[i].Tickets);
    }
}

int main(int argc, char const *argv[])
{
    Menu();
    return 0;
}

相关推荐

  1. 航班信息管理系统数组

    2024-07-17 19:10:03       17 阅读
  2. 航班管理系统【C语言】单文件编写

    2024-07-17 19:10:03       18 阅读
  3. Git管理详解

    2024-07-17 19:10:03       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 19:10:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 19:10:03       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 19:10:03       58 阅读
  4. Python语言-面向对象

    2024-07-17 19:10:03       69 阅读

热门阅读

  1. 什么是HTTP协议攻击

    2024-07-17 19:10:03       20 阅读
  2. AnyConv OGG 转换器:轻松转换音频格式

    2024-07-17 19:10:03       23 阅读
  3. Local Cache(二)demo

    2024-07-17 19:10:03       18 阅读
  4. Git简要笔记

    2024-07-17 19:10:03       19 阅读
  5. 爬虫-存储数据

    2024-07-17 19:10:03       22 阅读
  6. Windows的包管理器Chocolatey

    2024-07-17 19:10:03       21 阅读
  7. 渗透测试前景怎么样

    2024-07-17 19:10:03       22 阅读
  8. 区块链技术的应用场景和优势

    2024-07-17 19:10:03       19 阅读
  9. 摘要算法介绍

    2024-07-17 19:10:03       23 阅读