厦门地铁1号线票务管理系统C语言实现 - 线路、时刻表、票价查询
#include <stdio.h> #include <stdlib.h> #include <string.h>
//定义结构体
//线路信息结构体 typedef struct { int line_no; //线路编号 char name[20]; //线路名称 int station_num; //途径站点数量 char station[20][20]; //途径站点名称 } Line;
//列车时刻表结构体 typedef struct { int line_no; //线路编号 char date[10]; //日期 char start_station[20]; //起点站 char end_station[20]; //终点站 char start_time[10]; //发车时间 char end_time[10]; //到达时间 } Train;
//票价信息结构体 typedef struct { char start_station[20]; //起点站 char end_station[20]; //终点站 int price; //票价 } Price;
//函数定义
//录入新线路/新站点信息 void input_line(Line *line); void input_station(Line *line);
//录入列车时刻信息 void input_train(Train *train);
//查询线路详细信息 void search_line(Line *line, int line_no);
//查询票价信息 void search_price(Price *price, char *start_station, char *end_station);
//查询乘坐地铁线路信息 void search_train(Train *train, int line_no, char *start_station, char *end_station);
//列车时刻信息查询 void search_train_time(Train *train, int line_no, char *start_station, char *end_station, char *date);
//按起点/终点统计每日的车次数 void count_train(Train *train, char *station, char *date);
//主函数 int main() { Line line[20]; //最多20条线路 Train train[100]; //最多100条列车时刻信息 Price price[50]; //最多50条票价信息 int choice; int line_no; char start_station[20], end_station[20], date[10];
while (1) {
printf("=====厦门地铁1号线票务管理系统=====
"); printf("1. 录入新线路/新站点信息 "); printf("2. 录入列车时刻信息 "); printf("3. 查询线路详细信息 "); printf("4. 查询票价信息 "); printf("5. 查询乘坐地铁线路信息 "); printf("6. 列车时刻信息查询 "); printf("7. 按起点/终点统计每日的车次数 "); printf("8. 退出 "); printf("请选择功能:"); scanf("%d", &choice);
switch (choice) {
case 1:
input_line(line);
break;
case 2:
input_train(train);
break;
case 3:
printf("请输入线路编号:");
scanf("%d", &line_no);
search_line(line, line_no);
break;
case 4:
printf("请输入起点站:");
scanf("%s", start_station);
printf("请输入终点站:");
scanf("%s", end_station);
search_price(price, start_station, end_station);
break;
case 5:
printf("请输入起点站:");
scanf("%s", start_station);
printf("请输入终点站:");
scanf("%s", end_station);
search_train(train, line_no, start_station, end_station);
break;
case 6:
printf("请输入线路编号:");
scanf("%d", &line_no);
printf("请输入起点站:");
scanf("%s", start_station);
printf("请输入终点站:");
scanf("%s", end_station);
printf("请输入日期:");
scanf("%s", date);
search_train_time(train, line_no, start_station, end_station, date);
break;
case 7:
printf("请输入站点名称:");
scanf("%s", start_station);
printf("请输入日期:");
scanf("%s", date);
count_train(train, start_station, date);
break;
case 8:
exit(0);
default:
printf("输入错误,请重新选择功能!
"); break; } }
return 0;
}
//函数实现
//录入新线路/新站点信息 void input_line(Line *line) { int line_no, station_num, i; char name[20];
printf("请输入线路编号:");
scanf("%d", &line_no);
printf("请输入线路名称:");
scanf("%s", name);
printf("请输入途径站点数量:");
scanf("%d", &station_num);
for (i = 0; i < station_num; i++) {
printf("请输入第%d个途径站点名称:", i + 1);
scanf("%s", line[line_no - 1].station[i]);
}
line[line_no - 1].line_no = line_no;
strcpy(line[line_no - 1].name, name);
line[line_no - 1].station_num = station_num;
printf("线路信息录入成功!
"); }
void input_station(Line *line) { int line_no, station_num, i;
printf("请输入线路编号:");
scanf("%d", &line_no);
printf("请输入要添加的站点数量:");
scanf("%d", &station_num);
for (i = 0; i < station_num; i++) {
printf("请输入要添加的站点名称:");
scanf("%s", line[line_no - 1].station[line[line_no - 1].station_num + i]);
}
line[line_no - 1].station_num += station_num;
printf("站点信息录入成功!
"); }
//录入列车时刻信息 void input_train(Train *train) { int i = 0;
while (1) {
printf("请输入第%d条列车的信息:
", i + 1); printf("请输入线路编号:"); scanf("%d", &train[i].line_no); printf("请输入日期:"); scanf("%s", train[i].date); printf("请输入起点站:"); scanf("%s", train[i].start_station); printf("请输入终点站:"); scanf("%s", train[i].end_station); printf("请输入发车时间:"); scanf("%s", train[i].start_time); printf("请输入到达时间:"); scanf("%s", train[i].end_time);
printf("是否继续录入(Y/N)?");
getchar(); //清除缓存
if (getchar() == 'N') {
break;
}
i++;
}
printf("列车时刻信息录入成功!
"); }
//查询线路详细信息 void search_line(Line *line, int line_no) { printf("线路编号 线路名称 途径站点数量 途径站点名称 "); printf("%d %s %d ", line[line_no - 1].line_no, line[line_no - 1].name, line[line_no - 1].station_num);
int i;
for (i = 0; i < line[line_no - 1].station_num; i++) {
printf("%s ", line[line_no - 1].station[i]);
}
printf("
"); }
//查询票价信息 void search_price(Price *price, char *start_station, char *end_station) { int i;
for (i = 0; i < 50; i++) {
if (strcmp(price[i].start_station, start_station) == 0 && strcmp(price[i].end_station, end_station) == 0) {
printf("%s 到 %s 的票价为 %d 元
", start_station, end_station, price[i].price); return; } }
printf("未找到 %s 到 %s 的票价信息!
", start_station, end_station); }
//查询乘坐地铁线路信息 void search_train(Train *train, int line_no, char *start_station, char *end_station) { int i, j, start_index = -1, end_index = -1;
for (i = 0; i < 100; i++) {
if (train[i].line_no == line_no) {
for (j = 0; j < 20; j++) {
if (strcmp(train[i].start_station, start_station) == 0) {
start_index = i;
}
if (strcmp(train[i].end_station, end_station) == 0) {
end_index = i;
}
}
}
}
if (start_index == -1 || end_index == -1) {
printf("未找到 %s 到 %s 的乘坐地铁线路信息!
", start_station, end_station); return; }
printf("%s 到 %s 的乘坐地铁线路信息如下:
", start_station, end_station); printf("从 %s 站(%s)乘坐 %d 号线路,", start_station, train[start_index].start_time, line_no); printf("途径站点:");
for (i = start_index + 1; i < end_index; i++) {
printf("%s、", train[i].start_station);
}
printf("%s,", end_station);
printf("到达 %s 站(%s)
", end_station, train[end_index].end_time); printf("共乘坐 %d 站,票价为 %d 元 ", end_index - start_index + 1, (end_index - start_index + 1) * 2); }
//列车时刻信息查询 void search_train_time(Train *train, int line_no, char *start_station, char *end_station, char *date) { int i;
printf("线路编号 日期 起点站 终点站 发车时间 到达时间
");
for (i = 0; i < 100; i++) {
if (train[i].line_no == line_no && strcmp(train[i].date, date) == 0 &&
strcmp(train[i].start_station, start_station) == 0 && strcmp(train[i].end_station, end_station) == 0) {
printf("%d %s %s %s %s %s
", train[i].line_no, train[i].date, train[i].start_station, train[i].end_station, train[i].start_time, train[i].end_time); } } }
//按起点/终点统计每日的车次数 void count_train(Train *train, char *station, char *date) { int i, count = 0;
for (i = 0; i < 100; i++) {
if (strcmp(train[i].date, date) == 0 && (strcmp(train[i].start_station, station) == 0 ||
strcmp(train[i].end_station, station) == 0)) {
count++;
}
}
printf("%s 在 %s 的车次数量为 %d
", station, date, count); }
原文地址: https://www.cveoy.top/t/topic/oKxw 著作权归作者所有。请勿转载和采集!