C语言内核链表实现航班管理系统:展示、修改、新增和删除航班信息

这段代码实现了一个简单的航班管理系统,使用内核链表来存储航班信息。可以通过菜单选项进行航班的展示、修改、新增和删除操作。

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

typedef struct {
    char flight_no[10];
    char departure[20];
    char destination[20];
    char departure_time[6];
    char arrival_time[6];
    float amount;
    int passengers;
} Flight;

typedef struct Node {
    Flight flight;
    struct Node* next;
} Node;

Node* head = NULL;

Node* createNode(Flight flight) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->flight = flight;
    newNode->next = NULL;
    return newNode;
}

void insertNode(Flight flight) {
    Node* newNode = createNode(flight);
    if (head == NULL) {
        head = newNode;
    } else {
        Node* curr = head;
        while (curr->next != NULL) {
            curr = curr->next;
        }
        curr->next = newNode;
    }
}

void displayFlights() {
    Node* curr = head;
    printf("Flight No\tDeparture\tDestination\tDeparture Time\tArrival Time\tAmount\tPassengers\n");
    while (curr != NULL) {
        printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%.2f\t%d\n",
            curr->flight.flight_no, curr->flight.departure, curr->flight.destination, curr->flight.departure_time,
            curr->flight.arrival_time, curr->flight.amount, curr->flight.passengers);
        curr = curr->next;
    }
}

void updateFlight(char flight_no[10], char departure_time[6], char arrival_time[6], float amount) {
    Node* curr = head;
    while (curr != NULL) {
        if (strcmp(curr->flight.flight_no, flight_no) == 0) {
            strcpy(curr->flight.departure_time, departure_time);
            strcpy(curr->flight.arrival_time, arrival_time);
            curr->flight.amount = amount;
            break;
        }
        curr = curr->next;
    }
}

void addFlight() {
    Flight flight;
    printf("Enter Flight No: ");
    scanf("%s", flight.flight_no);
    printf("Enter Departure: ");
    scanf("%s", flight.departure);
    printf("Enter Destination: ");
    scanf("%s", flight.destination);
    printf("Enter Departure Time: ");
    scanf("%s", flight.departure_time);
    printf("Enter Arrival Time: ");
    scanf("%s", flight.arrival_time);
    printf("Enter Amount: ");
    scanf("%f", &flight.amount);
    printf("Enter Passengers: ");
    scanf("%d", &flight.passengers);
    insertNode(flight);
    printf("Flight added successfully!\n");
}

void deleteFlight(char flight_no[10]) {
    Node* prev = NULL;
    Node* curr = head;
    while (curr != NULL) {
        if (strcmp(curr->flight.flight_no, flight_no) == 0) {
            if (prev == NULL) {
                head = curr->next;
            } else {
                prev->next = curr->next;
            }
            free(curr);
            printf("Flight deleted successfully!\n");
            return;
        }
        prev = curr;
        curr = curr->next;
    }
    printf("Flight not found!\n");
}

int main() {
    Flight flight1 = {"FL001", "Beijing", "Shanghai", "19.05", "20.35", 1000.88, 200};
    Flight flight2 = {"FL002", "Shanghai", "Guangzhou", "20.00", "22.30", 1500.50, 150};
    Flight flight3 = {"FL003", "Guangzhou", "Shenzhen", "18.30", "19.45", 800.75, 120};
    Flight flight4 = {"FL004", "Shenzhen", "Chengdu", "21.15", "23.45", 2000.25, 180};
    Flight flight5 = {"FL005", "Chengdu", "Beijing", "22.00", "00.30", 1200.50, 100};

    insertNode(flight1);
    insertNode(flight2);
    insertNode(flight3);
    insertNode(flight4);
    insertNode(flight5);

    int choice;
    char flight_no[10];
    char departure_time[6];
    char arrival_time[6];
    float amount;

    do {
        printf("\n----- Flight Management System -----\n");
        printf("1. Display Flights\n");
        printf("2. Update Flight\n");
        printf("3. Add Flight\n");
        printf("4. Delete Flight\n");
        printf("5. Exit\n");
        printf("Enter your choice: ");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                displayFlights();
                break;
            case 2:
                printf("Enter Flight No: ");
                scanf("%s", flight_no);
                printf("Enter new Departure Time: ");
                scanf("%s", departure_time);
                printf("Enter new Arrival Time: ");
                scanf("%s", arrival_time);
                printf("Enter new Amount: ");
                scanf("%f", &amount);
                updateFlight(flight_no, departure_time, arrival_time, amount);
                printf("Flight updated successfully!\n");
                break;
            case 3:
                addFlight();
                break;
            case 4:
                printf("Enter Flight No: ");
                scanf("%s", flight_no);
                deleteFlight(flight_no);
                break;
            case 5:
                printf("Exiting…\n");
                break;
            default:
                printf("Invalid choice. Please try again.\n");
        }
    } while (choice != 5);

    return 0;
}

代码解释

  1. 数据结构定义

    • Flight 结构体:用于存储航班信息,包括航班号、始发地、目的地、出发时间、到达时间、金额和乘客人数。
    • Node 结构体:用于构建链表节点,包含一个 Flight 结构体和指向下一个节点的指针。
  2. 函数定义

    • createNode(Flight flight):创建一个新的节点,并初始化节点的航班信息。
    • insertNode(Flight flight):将一个新的航班信息插入到链表中。
    • displayFlights():遍历链表,显示所有航班信息。
    • updateFlight(char flight_no[10], char departure_time[6], char arrival_time[6], float amount):根据航班号查找航班信息,并更新出发时间、到达时间和金额。
    • addFlight():添加新的航班信息到链表中。
    • deleteFlight(char flight_no[10]):根据航班号删除指定航班信息。
  3. 主函数

    • 初始化五个航班信息。
    • 使用 do-while 循环构建菜单,用户可以选择展示、修改、新增和删除航班信息,以及退出系统。

总结

这段代码提供了一个简单的航班管理系统的实现,使用了 C 语言中的内核链表来存储航班信息,并支持常见的航班管理功能,包括展示、修改、新增和删除。 可以通过修改代码来添加更多的功能,例如查询航班信息、排序航班信息等。

优化建议

  • 可以使用 typedef 定义链表节点类型,使代码更简洁。
  • 可以使用更健壮的输入验证方法,避免输入错误导致程序崩溃。
  • 可以添加更多功能,例如查询航班信息、排序航班信息等,使其更实用。
  • 可以考虑使用文件存储航班信息,使其持久化。

代码运行示例

----- Flight Management System -----
1. Display Flights
2. Update Flight
3. Add Flight
4. Delete Flight
5. Exit
Enter your choice: 1
Flight No	Departure	Destination	Departure Time	Arrival Time	Amount	Passengers
FL001		Beijing		Shanghai		19.05		20.35		1000.88	200
FL002		Shanghai		Guangzhou		20.00		22.30		1500.50	150
FL003		Guangzhou		Shenzhen		18.30		19.45		800.75	120
FL004		Shenzhen		Chengdu		21.15		23.45		2000.25	180
FL005		Chengdu		Beijing		22.00		00.30		1200.50	100

----- Flight Management System -----
1. Display Flights
2. Update Flight
3. Add Flight
4. Delete Flight
5. Exit
Enter your choice: 5
Exiting…
C语言内核链表实现航班管理系统:展示、修改、新增和删除航班信息

原文地址: https://www.cveoy.top/t/topic/qd5U 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录