设计一个厦门地铁1号线票务管理系统用C语言实现。对该系统功能需求描述如下:1系统功能1新线路新站点相关信息线路编号、途径站点信息等录入。2列车时刻信息线路编号、日期、起点、终点、发车时间、到达时间录入。3根据用户输入线路信息查询线路详细信息。3根据用户输入起终点信息查询票价信息。4根据用户输入起终点信息查询应乘坐地铁线路信息及途径站点信息、发车时间、到达时间、乘坐的站数和换乘信息等。5列车时刻信息
出该系统比较复杂,需要设计多个结构体和函数来实现各项功能。以下是一个基本的程序框架,可以根据需要进行修改和完善。
#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号线票务管理系统=====\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:
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("输入错误,请重新选择功能!\n");
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("线路信息录入成功!\n");
}
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("站点信息录入成功!\n");
}
//录入列车时刻信息 void input_train(Train *train) { int i = 0;
while (1) {
printf("请输入第%d条列车的信息:\n", 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("列车时刻信息录入成功!\n");
}
//查询线路详细信息 void search_line(Line *line, int line_no) { printf("线路编号\t线路名称\t途径站点数量\t途径站点名称\n"); printf("%d\t\t%s\t\t%d\t\t", 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("\n");
}
//查询票价信息 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 元\n", start_station, end_station, price[i].price);
return;
}
}
printf("未找到 %s 到 %s 的票价信息!\n", 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 的乘坐地铁线路信息!\n", start_station, end_station);
return;
}
printf("%s 到 %s 的乘坐地铁线路信息如下:\n", 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)\n", end_station, train[end_index].end_time);
printf("共乘坐 %d 站,票价为 %d 元\n", 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("线路编号\t日期\t起点站\t终点站\t发车时间\t到达时间\n");
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\t\t%s\t%s\t\t%s\t\t%s\t\t%s\n", 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\n", station, date, count);
原文地址: https://www.cveoy.top/t/topic/hhFL 著作权归作者所有。请勿转载和采集!