c列车时刻表管理系统

设计一个列车时刻表,可以实现列车车次信息的添加、显示、修改、删除、
查询和保存。列车的车次详细信息包括:车次号(5 位编码,如 K1038,第一位
为大写字母,后四位为数字)、始发站、终点站、发车日期、发车时间、到达时
间、票价。
具体功能如下:
a.信息添加:通过键盘输入添加列车次记录,并将信息保存到文件。
b.信息显示:将所有的车次信息按发车时间从早到晚进行输出。
c.信息修改:对已经存在的车次信息进行局部修改。
d.信息删除:删除某个车次记录。
e.车次查询:可按照车次号、起点站或终点站三种方式查询车次信息。

之前有写过 一个类似的 可以讨论讨论 需要的话私我一起学习

GPT

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

#define MAX_TRAIN_NUMBER_LENGTH 6
#define MAX_STATION_LENGTH 20
#define MAX_DATE_LENGTH 11
#define MAX_TIME_LENGTH 6
#define MAX_SCHEDULE_SIZE 100

struct Train {
    char trainNo[MAX_TRAIN_NUMBER_LENGTH];
    char startStation[MAX_STATION_LENGTH];
    char endStation[MAX_STATION_LENGTH];
    char departureDate[MAX_DATE_LENGTH];
    char departureTime[MAX_TIME_LENGTH];
    char arrivalTime[MAX_TIME_LENGTH];
    float ticketPrice;
};

struct Train trainSchedule[MAX_SCHEDULE_SIZE];
int scheduleSize = 0;

void addTrain() {
    struct Train train;
    printf("请输入车次号:");
    scanf("%s", train.trainNo);
    printf("请输入始发站:");
    scanf("%s", train.startStation);
    printf("请输入终点站:");
    scanf("%s", train.endStation);
    printf("请输入发车日期:");
    scanf("%s", train.departureDate);
    printf("请输入发车时间:");
    scanf("%s", train.departureTime);
    printf("请输入到达时间:");
    scanf("%s", train.arrivalTime);
    printf("请输入票价:");
    scanf("%f", &train.ticketPrice);

    trainSchedule[scheduleSize++] = train;
    printf("车次信息添加成功。\n");
}

void displayTrains() {
    printf("列车时刻表:\n");
    printf("----------------------------------\n");
    printf("车次号\t\t始发站\t\t终点站\t\t发车日期\t\t发车时间\t\t到达时间\t\t票价\n");
    printf("----------------------------------\n");
    for (int i = 0; i < scheduleSize; i++) {
        printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%.2f\n", trainSchedule[i].trainNo,
            trainSchedule[i].startStation, trainSchedule[i].endStation, trainSchedule[i].departureDate,
            trainSchedule[i].departureTime, trainSchedule[i].arrivalTime, trainSchedule[i].ticketPrice);
    }
}

void modifyTrain() {
    char trainNo[MAX_TRAIN_NUMBER_LENGTH];
    printf("请输入要修改的车次号:");
    scanf("%s", trainNo);

    int found = 0;
    for (int i = 0; i < scheduleSize; i++) {
        if (strcmp(trainSchedule[i].trainNo, trainNo) == 0) {
            printf("请输入新的始发站:");
            scanf("%s", trainSchedule[i].startStation);
            printf("请输入新的终点站:");
            scanf("%s", trainSchedule[i].endStation);
            printf("请输入新的发车日期:");
            scanf("%s", trainSchedule[i].departureDate);
            printf("请输入新的发车时间:");
            scanf("%s", trainSchedule[i].departureTime);
            printf("请输入新的到达时间:");
            scanf("%s", trainSchedule[i].arrivalTime);
            printf("请输入新的票价:");
            scanf("%f", &trainSchedule[i].ticketPrice);

            printf("车次信息修改成功。\n");
            found = 1;
            break;
        }
    }

    if (!found) {
        printf("未找到该车次号的列车信息。\n");
    }
}

void deleteTrain() {
    char trainNo[MAX_TRAIN_NUMBER_LENGTH];
    printf("请输入要删除的车次号:");
    scanf("%s", trainNo);

    int found = 0;
    for (int i = 0; i < scheduleSize; i++) {
        if (strcmp(trainSchedule[i].trainNo, trainNo) == 0) {
            for (int j = i; j < scheduleSize - 1; j++) {
                trainSchedule[j] = trainSchedule[j + 1];
            }
            scheduleSize--;

            printf("车次信息删除成功。\n");
            found = 1;
            break;
        }
    }

    if (!found) {
        printf("未找到该车次号的列车信息。\n");
    }
}

void searchTrain() {
    int choice;
    printf("请选择查询方式:\n");
    printf("1. 按车次号查询\n");
    printf("2. 按始发站查询\n");
    printf("3. 按终点站查询\n");
    printf("请输入选项:");
    scanf("%d", &choice);

    switch (choice) {
        case 1: {
            char trainNo[MAX_TRAIN_NUMBER_LENGTH];
            printf("请输入要查询的车次号:");
            scanf("%s", trainNo);

            int found = 0;
            for (int i = 0; i < scheduleSize; i++) {
                if (strcmp(trainSchedule[i].trainNo, trainNo) == 0) {
                    printf("车次号\t\t始发站\t\t终点站\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%s\t\t%.2f\n", trainSchedule[i].trainNo,
                        trainSchedule[i].startStation, trainSchedule[i].endStation, trainSchedule[i].departureDate,
                        trainSchedule[i].departureTime, trainSchedule[i].arrivalTime, trainSchedule[i].ticketPrice);

                    found = 1;
                    break;
                }
            }

            if (!found) {
                printf("未找到该车次号的列车信息。\n");
            }
            break;
        }
        case 2: {
            char startStation[MAX_STATION_LENGTH];
            printf("请输入要查询的始发站:");
            scanf("%s", startStation);

            int found = 0;
            for (int i = 0; i < scheduleSize; i++) {
                if (strcmp(trainSchedule[i].startStation, startStation) == 0) {
                    printf("车次号\t\t始发站\t\t终点站\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%s\t\t%.2f\n", trainSchedule[i].trainNo,
                        trainSchedule[i].startStation, trainSchedule[i].endStation, trainSchedule[i].departureDate,
                        trainSchedule[i].departureTime, trainSchedule[i].arrivalTime, trainSchedule[i].ticketPrice);

                    found = 1;
                }
            }

            if (!found) {
                printf("未找到该始发站的列车信息。\n");
            }
            break;
        }
        case 3: {
            char endStation[MAX_STATION_LENGTH];
            printf("请输入要查询的终点站:");
            scanf("%s", endStation);

            int found = 0;
            for (int i = 0; i < scheduleSize; i++) {
                if (strcmp(trainSchedule[i].endStation, endStation) == 0) {
                    printf("车次号\t\t始发站\t\t终点站\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%s\t\t%.2f\n", trainSchedule[i].trainNo,
                        trainSchedule[i].startStation, trainSchedule[i].endStation, trainSchedule[i].departureDate,
                        trainSchedule[i].departureTime, trainSchedule[i].arrivalTime, trainSchedule[i].ticketPrice);

                    found = 1;
                }
            }

            if (!found) {
                printf("未找到该终点站的列车信息。\n");
            }
            break;
        }
        default:
            printf("无效的选项。\n");
    }
}

int main() {
    int choice;
    while (1) {
        printf("请选择操作:\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:
                addTrain();
                break;
            case 2:
                displayTrains();
                break;
            case 3:
                modifyTrain();
                break;
            case 4:
                deleteTrain();
                break;
            case 5:
                searchTrain();
                break;
            case 6:
                printf("程序已退出。\n");
                exit(0);
            default:
                printf("无效的选项,请重新选择。\n");
        }
        printf("\n");
    }

    return 0;
}

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7599761
  • 你也可以参考下这篇文章:编写一个函数,由实参传来一个字符串,统计次字符串中字母、数字、空格和其他字符的个数,在主函数 中输入字符串以及输出上述的结果
  • 除此之外, 这篇博客: C语言实现八大排序算法详解及其性能之间的中的 这里需要对堆有一定的了解,堆就是一个比较特殊的完全二叉树,在最大堆里,每个节点的值都大于其左右两个孩子节点的值。这就是最大堆。反之就是最小堆。拿最大堆举例子,每次堆顶的元素值,不就是当前数列的最大吗?这不就成选择排序里的简单排序了吗?找完之后,将他和完全二叉树里最后一个结点的值进行交换,然后做一个自顶向下的自我调整,将他再次调整成一个完全二叉堆。第二次取最大的树,这时我们需要将上一次找到的结点屏蔽掉,不然会陷入一个死循环。无数次找完之后,再按层序的思想将二叉树里的数据遍历到一个数组当中,这时的数组为一个有序的数组。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 算法思想

  • 您还可以看一下 数智优佳学堂老师的智慧城市之智慧中台专题-数字孪生城市架构解决方案课程中的 如何实现虚实互动,以虚控实,支撑城市一盘棋小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    我可以提供一个基于Python的解决方案,使用面向对象的编程思想实现列车时刻表管理系统。

    1. 定义列车类Train,包括车次号、始发站、终点站、发车日期、发车时间、到达时间、票价等信息,以及与这些信息相关的各种方法,例如添加、删除、修改、查询等。
    class Train:
        def __init__(self, train_no, start_station, end_station, departure_date, departure_time, arrival_time, fare):
            self.train_no = train_no
            self.start_station = start_station
            self.end_station = end_station
            self.departure_date = departure_date
            self.departure_time = departure_time
            self.arrival_time = arrival_time
            self.fare = fare
    
        def __str__(self):
            return f"Train {self.train_no}, {self.start_station} to {self.end_station}, {self.departure_date} {self.departure_time} - {self.arrival_time}, Fare: {self.fare}"
    
        def update_info(self, start_station=None, end_station=None, departure_date=None, departure_time=None, arrival_time=None, fare=None):
            """
            Update train information
            """
            if start_station:
                self.start_station = start_station
            if end_station:
                self.end_station = end_station
            if departure_date:
                self.departure_date = departure_date
            if departure_time:
                self.departure_time = departure_time
            if arrival_time:
                self.arrival_time = arrival_time
            if fare:
                self.fare = fare
    
        def get_info(self):
            """
            Get train information
            """
            return str(self)
    
    1. 定义列车时刻表类Schedule,包括一个由Train对象组成的列表,以及新增、显示、修改、删除、查询和保存等方法。
    import json
    
    class Schedule:
        def __init__(self):
            self.schedule = []
    
        def add_train(self, train):
            """
            Add a train to the schedule
            """
            self.schedule.append(train)
    
        def display_schedule(self, sort_by_departure_time=True):
            """
            Display the schedule
            """
            if sort_by_departure_time:
                # sort the schedule by departure time
                self.schedule.sort(key=lambda x: x.departure_time)
            for train in self.schedule:
                print(train.get_info())
    
        def update_train(self, train_no, start_station=None, end_station=None, departure_date=None, departure_time=None, arrival_time=None, fare=None):
            """
            Update a train's information based on its train number
            """
            for train in self.schedule:
                if train.train_no == train_no:
                    train.update_info(start_station, end_station, departure_date, departure_time, arrival_time, fare)
                    break
    
        def delete_train(self, train_no):
            """
            Delete a train based on its train number
            """
            for i, train in enumerate(self.schedule):
                if train.train_no == train_no:
                    del self.schedule[i]
                    break
    
        def search_train(self, search_by, keyword):
            """
            Search for a train based on search criteria and keyword
            """
            results = []
            for train in self.schedule:
                if search_by == "train_no" and train.train_no == keyword:
                    results.append(train)
                elif search_by == "start_station" and train.start_station == keyword:
                    results.append(train)
                elif search_by == "end_station" and train.end_station == keyword:
                    results.append(train)
            return results
    
        def save_schedule(self, file_path):
            """
            Save the schedule as a JSON file
            """
            with open(file_path, "w") as f:
                json.dump([train.__dict__ for train in self.schedule], f)
    
        def load_schedule(self, file_path):
            """
            Load the schedule from a JSON file
            """
            with open(file_path, "r") as f:
                data = json.load(f)
                self.schedule = [Train(**train_info) for train_info in data]
    
    1. 使用上述类实现列车时刻表管理系统的各种操作。下面是一个简单的示例程序:
    # create a schedule object
    schedule = Schedule()
    
    # add some trains
    train1 = Train("G1", "Beijing", "Shanghai", "2022-01-01", "08:00", "14:00", 500)
    train2 = Train("G2", "Shanghai", "Beijing", "2022-01-01", "12:00", "18:00", 500)
    train3 = Train("K1234", "Beijing", "Tianjin", "2022-01-01", "08:00", "10:00", 50)
    train4 = Train("K5678", "Tianjin", "Beijing", "2022-01-01", "12:00", "14:00", 50)
    schedule.add_train(train1)
    schedule.add_train(train2)
    schedule.add_train(train3)
    schedule.add_train(train4)
    
    # display the entire schedule
    schedule.display_schedule()
    
    # modify a train's information
    schedule.update_train("G1", departure_time="09:00")
    
    # delete a train
    schedule.delete_train("K1234")
    
    # search for a train
    results = schedule.search_train("end_station", "Beijing")
    for train in results:
        print(train.get_info())
    
    # save schedule to a file
    schedule.save_schedule("schedule.json")
    
    # load schedule from a file
    new_schedule = Schedule()
    new_schedule.load_schedule("schedule.json")
    new_schedule.display_schedule()