设计一个列车时刻表,可以实现列车车次信息的添加、显示、修改、删除、
查询和保存。列车的车次详细信息包括:车次号(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;
}
我可以提供一个基于Python的解决方案,使用面向对象的编程思想实现列车时刻表管理系统。
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)
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]
# 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()