厦门地铁票务管理系统设计与实现
#include <stdio.h> #include <stdlib.h> #include <string.h>
// 定义站点信息结构体 typedef struct { char name[20]; // 站点名称 int index; // 站点编号 } Station;
// 定义线路信息结构体 typedef struct { int id; // 线路编号 char name[20]; // 线路名称 Station stations[20]; // 途径站点信息 int station_count; // 途径站点数量 } Line;
// 定义车次信息结构体 typedef struct { int line_id; // 线路编号 char date[20]; // 日期 Station start; // 起点站 Station end; // 终点站 char depart_time[20]; // 发车时间 char arrive_time[20]; // 到达时间 } Train;
// 定义全局变量 Line lines[20]; // 存储所有线路信息 int line_count = 0; // 线路数量 Train trains[100]; // 存储所有车次信息 int train_count = 0; // 车次数量
// 根据站点名称查找站点编号 int get_station_index(char *name) { int i; for (i = 0; i < line_count; i++) { int j; for (j = 0; j < lines[i].station_count; j++) { if (strcmp(lines[i].stations[j].name, name) == 0) { return lines[i].stations[j].index; } } } return -1; }
// 根据站点编号查找站点名称 char *get_station_name(int index) { int i; for (i = 0; i < line_count; i++) { int j; for (j = 0; j < lines[i].station_count; j++) { if (lines[i].stations[j].index == index) { return lines[i].stations[j].name; } } } return NULL; }
// 添加新线路/新站点信息 void add_line() { Line line; printf("请输入线路编号:"); scanf("%d", &line.id); printf("请输入线路名称:"); scanf("%s", line.name); printf("请输入途径站点数量:"); scanf("%d", &line.station_count); int i; for (i = 0; i < line.station_count; i++) { printf("请输入第%d个站点名称:", i+1); scanf("%s", line.stations[i].name); line.stations[i].index = i; } lines[line_count] = line; line_count++; printf("新线路/新站点信息添加成功!\n"); }
// 添加列车时刻信息 void add_train() { Train train; printf("请输入线路编号:"); scanf("%d", &train.line_id); printf("请输入日期:"); scanf("%s", train.date); printf("请输入起点站名称:"); scanf("%s", train.start.name); train.start.index = get_station_index(train.start.name); printf("请输入终点站名称:"); scanf("%s", train.end.name); train.end.index = get_station_index(train.end.name); printf("请输入发车时间:"); scanf("%s", train.depart_time); printf("请输入到达时间:"); scanf("%s", train.arrive_time); trains[train_count] = train; train_count++; printf("列车时刻信息添加成功!\n"); }
// 查询线路详细信息 void query_line() { int i, line_id; printf("请输入线路编号:"); scanf("%d", &line_id); for (i = 0; i < line_count; i++) { if (lines[i].id == line_id) { printf("线路名称:%s\n", lines[i].name); printf("途径站点如下:\n"); int j; for (j = 0; j < lines[i].station_count; j++) { printf("%d. %s\n", j+1, lines[i].stations[j].name); } return; } } printf("未找到该线路信息,请重新输入!\n"); }
// 查询票价信息 void query_price() { char start_name[20], end_name[20]; printf("请输入起点站名称:"); scanf("%s", start_name); printf("请输入终点站名称:"); scanf("%s", end_name); int start_index = get_station_index(start_name); int end_index = get_station_index(end_name); if (start_index == -1 || end_index == -1) { printf("未找到该站点信息,请重新输入!\n"); return; } int i, j; float price = 0; for (i = 0; i < line_count; i++) { for (j = 0; j < lines[i].station_count-1; j++) { if (lines[i].stations[j].index == start_index && lines[i].stations[j+1].index == end_index) { price = (float)(j+1) * 2; printf("票价为:%.2f元\n", price); return; } } } printf("未找到该站点之间的线路信息,请重新输入!\n"); }
// 查询应乘坐地铁线路信息及途径站点信息、发车时间、到达时间、乘坐的站数和换乘信息等 void query_train() { char start_name[20], end_name[20]; printf("请输入起点站名称:"); scanf("%s", start_name); printf("请输入终点站名称:"); scanf("%s", end_name); int start_index = get_station_index(start_name); int end_index = get_station_index(end_name); if (start_index == -1 || end_index == -1) { printf("未找到该站点信息,请重新输入!\n"); return; } int i, j, k; for (i = 0; i < train_count; i++) { if (trains[i].start.index == start_index && trains[i].end.index == end_index) { int line_id = trains[i].line_id; for (j = 0; j < line_count; j++) { if (lines[j].id == line_id) { printf("应乘坐地铁线路信息如下:\n"); printf("线路名称:%s\n", lines[j].name); printf("途径站点如下:\n"); int n = 0; for (k = 0; k < lines[j].station_count; k++) { if (lines[j].stations[k].index >= start_index && lines[j].stations[k].index <= end_index) { printf("%d. %s\n", n+1, lines[j].stations[k].name); n++; } } printf("发车时间:%s\n", trains[i].depart_time); printf("到达时间:%s\n", trains[i].arrive_time); printf("乘坐的站数:%d\n", end_index - start_index); return; } } } } printf("未找到该站点之间的地铁线路信息,请重新输入!\n"); }
// 列车时刻信息查询 void query_train_time() { int i, j, line_id, start_index, end_index; char date[20]; printf("请输入线路编号(输入-1表示不限制线路):"); scanf("%d", &line_id); printf("请输入起点站名称(输入’所有’表示不限制起点站):"); scanf("%s", start_index); if (strcmp(start_index, "所有") != 0) { start_index = get_station_index(start_index); if (start_index == -1) { printf("未找到该站点信息,请重新输入!\n"); return; } } printf("请输入终点站名称(输入’所有’表示不限制终点站):"); scanf("%s", end_index); if (strcmp(end_index, "所有") != 0) { end_index = get_station_index(end_index); if (end_index == -1) { printf("未找到该站点信息,请重新输入!\n"); return; } } printf("请输入日期(输入’所有’表示不限制日期):"); scanf("%s", date); for (i = 0; i < train_count; i++) { if ((line_id == -1 || trains[i].line_id == line_id) && (strcmp(start_index, "所有") == 0 || trains[i].start.index == start_index) && (strcmp(end_index, "所有") == 0 || trains[i].end.index == end_index) && (strcmp(date, "所有") == 0 || strcmp(trains[i].date, date) == 0)) { printf("线路名称:%s,起点站:%s,终点站:%s,发车时间:%s,到达时间:%s\n", get_line_name(trains[i].line_id), get_station_name(trains[i].start.index), get_station_name(trains[i].end.index), trains[i].depart_time, trains[i].arrive_time); } } }
// 按起点/终点统计每日的车次数 void count_trains() { char start_name[20], end_name[20]; printf("请输入起点站名称:"); scanf("%s", start_name); printf("请输入终点站名称:"); scanf("%s", end_name); int start_index = get_station_index(start_name); int end_index = get_station_index(end_name); if (start_index == -1 || end_index == -1) { printf("未找到该站点信息,请重新输入!\n"); return; } int i, count = 0; for (i = 0; i < train_count; i++) { if (trains[i].start.index == start_index && trains[i].end.index == end_index) { count++; } } printf("每日从%s到%s的车次数为:%d\n", start_name, end_name, count); }
// 主函数 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("7. 按起点/终点统计每日的车次数\n"); printf("8. 退出\n"); printf("请选择功能:"); scanf("%d", &choice); switch (choice) { case 1: add_line(); break; case 2: add_train(); break; case 3: query_line(); break; case 4: query_price(); break; case 5: query_train(); break; case 6: query_train_time(); break; case 7: count_trains(); break; case 8: printf("谢谢使用,再见!\n"); exit(0); default: printf("输入的功能编号有误,请重新输入!\n"); break; } } return 0;
原文地址: https://www.cveoy.top/t/topic/oKQD 著作权归作者所有。请勿转载和采集!