diff --git a/PracticalTrain/DataStructure/include/bus.h b/PracticalTrain/DataStructure/include/bus.h new file mode 100644 index 0000000..9afbba8 --- /dev/null +++ b/PracticalTrain/DataStructure/include/bus.h @@ -0,0 +1,87 @@ +// include/bus.h +#ifndef BUS_H +#define BUS_H + +#include +#include "route.h" +#include "station.h" + +#define MAX_BUSES 50 + +// 巴士状态枚举 +typedef enum +{ + BUS_MOVING, // 行驶中 + BUS_STOPPING, // 停靠中 + BUS_IDLE // 空闲/未启动 +} BusStatus; + +// 巴士方向枚举 +typedef enum +{ + DIRECTION_FORWARD, // 正向(起点到终点) + DIRECTION_BACKWARD // 反向(终点到起点) +} BusDirection; + +// 巴士结构体 +typedef struct Bus +{ + int id; // 巴士编号 + int routeId; // 所属线路ID + BusStatus status; // 当前状态 + BusDirection direction; // 行驶方向 + + int currentStationIndex; // 当前站点索引(在线路站点数组中的位置) + double progress; // 在两站之间的进度(0.0-1.0) + + double speed; // 速度(km/h) + double stopTimeRemaining; // 剩余停靠时间(分钟) + + double totalDistance; // 总行驶距离(km) + double totalTime; // 总运行时间(分钟) +} Bus; + +// 巴士管理系统 +typedef struct BusSystem +{ + Bus buses[MAX_BUSES]; + int busCount; + double systemTime; // 系统运行时间(分钟) +} BusSystem; + +// 巴士系统初始化 +BusSystem *createBusSystem(); +void destroyBusSystem(BusSystem *system); + +// 巴士管理 +int addBus(BusSystem *system, int routeId, int startStationIndex, + BusDirection direction, double speed); +Bus *getBus(BusSystem *system, int busId); +void removeBus(BusSystem *system, int busId); + +// 巴士模拟 +void updateBusSystem(BusSystem *system, const BusRoute routes[], int routeCount, + const Station stations[], int stationCount, double deltaTime); +void updateSingleBus(Bus *bus, const BusRoute *route, const Station stations[], + int stationCount, double deltaTime); + +// 显示功能 +void displayBus(const Bus *bus, const BusRoute routes[], int routeCount, + const Station stations[], int stationCount); +void displayAllBuses(const BusSystem *system, const BusRoute routes[], int routeCount, + const Station stations[], int stationCount); + +// 查询功能 +void queryBusesOnRoute(const BusSystem *system, int routeId, + const BusRoute routes[], int routeCount, + const Station stations[], int stationCount); +void queryBusesAtStation(const BusSystem *system, int stationId, + const BusRoute routes[], int routeCount, + const Station stations[], int stationCount); + +// 自动模拟 +void runSimulation(BusSystem *system, const BusRoute routes[], int routeCount, + const Station stations[], int stationCount, + double duration, double timeStep); + +#endif \ No newline at end of file diff --git a/PracticalTrain/DataStructure/setup.sh b/PracticalTrain/DataStructure/setup.sh new file mode 100644 index 0000000..8434853 --- /dev/null +++ b/PracticalTrain/DataStructure/setup.sh @@ -0,0 +1,57 @@ +#!/bin/bash +# 椤圭洰鍒濆鍖栬剼鏈 + +echo "==========================================" +echo " 宸村+璺嚎绠$悊绯荤粺 - 鍒濆鍖栬剼鏈" +echo "==========================================" + +# 鍒涘缓鐩綍缁撴瀯 +echo "鍒涘缓鐩綍缁撴瀯..." +mkdir -p include src data obj bin + +# 鍒涘缓 stations.csv +echo "鍒涘缓 data/stations.csv..." +cat > data/stations.csv << 'EOF' +id,name,latitude,longitude,stopTime +0,鐏溅绔,39.9042,116.4074,60 +1,甯備腑蹇,39.9100,116.4100,45 +2,澶у鍩,39.9200,116.4200,45 +3,绉戞妧鍥,39.9300,116.4300,45 +4,鍟嗕笟琛,39.9150,116.4250,60 +5,浣撹偛棣,39.9250,116.4350,45 +6,鍏洯,39.9180,116.4180,30 +7,鏈哄満,39.9400,116.4400,90 +8,鍖婚櫌,39.9050,116.4150,50 +9,鍥句功棣,39.9280,116.4280,40 +EOF + +# 鍒涘缓 routes.csv +echo "鍒涘缓 data/routes.csv..." +cat > data/routes.csv << 'EOF' +id,routeName,stationCount +0,1鍙风嚎,4 +0,1,2,3 +5.0,6.0,7.0 +1,2鍙风嚎,5 +0,4,5,7,9 +8.0,6.0,10.0,5.0 +2,3鍙风嚎,4 +1,6,4,2 +4.0,5.0,6.0 +3,4鍙风嚎,3 +8,1,3 +7.0,12.0 +EOF + +echo "" +echo "鉁 鐩綍缁撴瀯鍒涘缓瀹屾垚" +echo "鉁 鏁版嵁鏂囦欢鍒涘缓瀹屾垚" +echo "" +echo "鐜板湪鍙互杩愯浠ヤ笅鍛戒护锛" +echo " make # 缂栬瘧椤圭洰" +echo " make run # 杩愯绋嬪簭" +echo "" +echo "鏁版嵁鏂囦欢浣嶇疆锛" +echo " - data/stations.csv (绔欑偣鏁版嵁)" +echo " - data/routes.csv (绾胯矾鏁版嵁)" +echo "==========================================" \ No newline at end of file diff --git a/PracticalTrain/DataStructure/src/bus.c b/PracticalTrain/DataStructure/src/bus.c new file mode 100644 index 0000000..5a5e03c --- /dev/null +++ b/PracticalTrain/DataStructure/src/bus.c @@ -0,0 +1,338 @@ +// src/bus.c +#include +#include +#include +#include +#include "../include/bus.h" + +// 创建巴士系统 +BusSystem* createBusSystem() { + BusSystem* system = (BusSystem*)malloc(sizeof(BusSystem)); + system->busCount = 0; + system->systemTime = 0.0; + + for (int i = 0; i < MAX_BUSES; i++) { + system->buses[i].id = -1; + system->buses[i].status = BUS_IDLE; + } + + return system; +} + +// 销毁巴士系统 +void destroyBusSystem(BusSystem* system) { + if (system) { + free(system); + } +} + +// 添加巴士 +int addBus(BusSystem* system, int routeId, int startStationIndex, + BusDirection direction, double speed) { + if (system->busCount >= MAX_BUSES) { + printf("错误: 巴士数量已达上限\n"); + return -1; + } + + int busId = system->busCount; + Bus* bus = &system->buses[busId]; + + bus->id = busId; + bus->routeId = routeId; + bus->status = BUS_STOPPING; // 初始在站点停靠 + bus->direction = direction; + bus->currentStationIndex = startStationIndex; + bus->progress = 0.0; + bus->speed = speed; + bus->stopTimeRemaining = 0.0; + bus->totalDistance = 0.0; + bus->totalTime = 0.0; + + system->busCount++; + printf("巴士 #%d 已添加到线路 %d\n", busId, routeId); + + return busId; +} + +// 获取巴士 +Bus* getBus(BusSystem* system, int busId) { + if (busId >= 0 && busId < system->busCount) { + return &system->buses[busId]; + } + return NULL; +} + +// 移除巴士 +void removeBus(BusSystem* system, int busId) { + if (busId >= 0 && busId < system->busCount) { + system->buses[busId].status = BUS_IDLE; + printf("巴士 #%d 已移除\n", busId); + } +} + +// 计算两点之间的距离(简化版,使用欧氏距离) +double calculateDistance(double lat1, double lon1, double lat2, double lon2) { + double dx = (lon2 - lon1) * 111.0; // 1度经度约111km + double dy = (lat2 - lat1) * 111.0; // 1度纬度约111km + return sqrt(dx * dx + dy * dy); +} + +// 更新单个巴士状态 +void updateSingleBus(Bus* bus, const BusRoute* route, const Station stations[], + int stationCount, double deltaTime) { + if (bus->status == BUS_IDLE) return; + + // 如果正在停靠 + if (bus->status == BUS_STOPPING) { + bus->stopTimeRemaining -= deltaTime; + + if (bus->stopTimeRemaining <= 0) { + // 停靠结束,开始移动 + bus->status = BUS_MOVING; + bus->stopTimeRemaining = 0.0; + + // 检查是否到达终点 + if (bus->direction == DIRECTION_FORWARD) { + if (bus->currentStationIndex >= route->stationCount - 1) { + // 到达终点,掉头 + bus->direction = DIRECTION_BACKWARD; + } + } else { + if (bus->currentStationIndex <= 0) { + // 到达起点,掉头 + bus->direction = DIRECTION_FORWARD; + } + } + } + return; + } + + // 如果正在行驶 + if (bus->status == BUS_MOVING) { + int fromIdx = bus->currentStationIndex; + int toIdx; + + if (bus->direction == DIRECTION_FORWARD) { + toIdx = fromIdx + 1; + if (toIdx >= route->stationCount) { + bus->status = BUS_STOPPING; + return; + } + } else { + toIdx = fromIdx - 1; + if (toIdx < 0) { + bus->status = BUS_STOPPING; + return; + } + } + + // 计算这一段的行驶时间 + int segmentIdx = (bus->direction == DIRECTION_FORWARD) ? fromIdx : toIdx; + double segmentTime = route->segmentTimes[segmentIdx]; + + // 计算进度增量 + double progressDelta = deltaTime / segmentTime; + bus->progress += progressDelta; + + // 计算行驶距离 + int fromStationId = route->stations[fromIdx]; + int toStationId = route->stations[toIdx]; + int fromStIdx = findStationById(stations, stationCount, fromStationId); + int toStIdx = findStationById(stations, stationCount, toStationId); + + if (fromStIdx != -1 && toStIdx != -1) { + double distance = calculateDistance( + stations[fromStIdx].latitude, stations[fromStIdx].longitude, + stations[toStIdx].latitude, stations[toStIdx].longitude + ); + bus->totalDistance += distance * progressDelta; + } + + // 如果到达下一站 + if (bus->progress >= 1.0) { + bus->progress = 0.0; + bus->currentStationIndex = toIdx; + bus->status = BUS_STOPPING; + + // 设置停靠时间 + int stationId = route->stations[toIdx]; + int stIdx = findStationById(stations, stationCount, stationId); + if (stIdx != -1) { + bus->stopTimeRemaining = stations[stIdx].stopTime / 60.0; + } + } + + bus->totalTime += deltaTime; + } +} + +// 更新整个巴士系统 +void updateBusSystem(BusSystem* system, const BusRoute routes[], int routeCount, + const Station stations[], int stationCount, double deltaTime) { + system->systemTime += deltaTime; + + for (int i = 0; i < system->busCount; i++) { + Bus* bus = &system->buses[i]; + if (bus->status != BUS_IDLE && bus->routeId >= 0 && bus->routeId < routeCount) { + updateSingleBus(bus, &routes[bus->routeId], stations, stationCount, deltaTime); + } + } +} + +// 显示巴士状态 +void displayBus(const Bus* bus, const BusRoute routes[], int routeCount, + const Station stations[], int stationCount) { + if (bus->status == BUS_IDLE) return; + + printf("\n--- 巴士 #%d ---\n", bus->id); + + if (bus->routeId >= 0 && bus->routeId < routeCount) { + printf("线路: %s\n", routes[bus->routeId].routeName); + } + + printf("方向: %s\n", bus->direction == DIRECTION_FORWARD ? "正向" : "反向"); + + const char* statusStr; + switch (bus->status) { + case BUS_MOVING: statusStr = "行驶中"; break; + case BUS_STOPPING: statusStr = "停靠中"; break; + default: statusStr = "空闲"; break; + } + printf("状态: %s\n", statusStr); + + if (bus->routeId >= 0 && bus->routeId < routeCount) { + int stationId = routes[bus->routeId].stations[bus->currentStationIndex]; + int stIdx = findStationById(stations, stationCount, stationId); + if (stIdx != -1) { + printf("当前位置: %s", stations[stIdx].name); + + if (bus->status == BUS_MOVING) { + int nextIdx; + if (bus->direction == DIRECTION_FORWARD) { + nextIdx = bus->currentStationIndex + 1; + } else { + nextIdx = bus->currentStationIndex - 1; + } + + if (nextIdx >= 0 && nextIdx < routes[bus->routeId].stationCount) { + int nextStationId = routes[bus->routeId].stations[nextIdx]; + int nextStIdx = findStationById(stations, stationCount, nextStationId); + if (nextStIdx != -1) { + printf(" -> %s (进度: %.1f%%)", + stations[nextStIdx].name, bus->progress * 100); + } + } + } else if (bus->status == BUS_STOPPING) { + printf(" (停靠中, 剩余 %.1f 秒)", bus->stopTimeRemaining * 60); + } + printf("\n"); + } + } + + printf("速度: %.1f km/h\n", bus->speed); + printf("总行驶距离: %.2f km\n", bus->totalDistance); + printf("总运行时间: %.1f 分钟\n", bus->totalTime); +} + +// 显示所有巴士 +void displayAllBuses(const BusSystem* system, const BusRoute routes[], int routeCount, + const Station stations[], int stationCount) { + printf("\n========== 巴士实时状态 ==========\n"); + printf("系统时间: %.1f 分钟\n", system->systemTime); + printf("运行中巴士数: %d\n", system->busCount); + + int activeBuses = 0; + for (int i = 0; i < system->busCount; i++) { + if (system->buses[i].status != BUS_IDLE) { + displayBus(&system->buses[i], routes, routeCount, stations, stationCount); + activeBuses++; + } + } + + if (activeBuses == 0) { + printf("\n当前没有运行中的巴士\n"); + } + + printf("==================================\n"); +} + +// 查询指定线路上的巴士 +void queryBusesOnRoute(const BusSystem* system, int routeId, + const BusRoute routes[], int routeCount, + const Station stations[], int stationCount) { + printf("\n========== 线路 %s 上的巴士 ==========\n", routes[routeId].routeName); + + int found = 0; + for (int i = 0; i < system->busCount; i++) { + if (system->buses[i].routeId == routeId && system->buses[i].status != BUS_IDLE) { + displayBus(&system->buses[i], routes, routeCount, stations, stationCount); + found++; + } + } + + if (found == 0) { + printf("该线路上没有巴士\n"); + } + printf("==================================\n"); +} + +// 查询指定站点的巴士 +void queryBusesAtStation(const BusSystem* system, int stationId, + const BusRoute routes[], int routeCount, + const Station stations[], int stationCount) { + int stIdx = findStationById(stations, stationCount, stationId); + if (stIdx == -1) return; + + printf("\n========== %s 站的巴士 ==========\n", stations[stIdx].name); + + int found = 0; + for (int i = 0; i < system->busCount; i++) { + Bus* bus = (Bus*)&system->buses[i]; + if (bus->status == BUS_IDLE || bus->routeId < 0 || bus->routeId >= routeCount) + continue; + + int currentStationId = routes[bus->routeId].stations[bus->currentStationIndex]; + + // 检查是否在该站点或即将到达 + if (currentStationId == stationId && bus->status == BUS_STOPPING) { + displayBus(bus, routes, routeCount, stations, stationCount); + found++; + } + } + + if (found == 0) { + printf("该站点当前没有巴士\n"); + } + printf("==================================\n"); +} + +// 运行模拟 +void runSimulation(BusSystem* system, const BusRoute routes[], int routeCount, + const Station stations[], int stationCount, + double duration, double timeStep) { + printf("\n========== 开始模拟 ==========\n"); + printf("模拟时长: %.1f 分钟\n", duration); + printf("时间步长: %.1f 分钟\n", timeStep); + printf("==============================\n\n"); + + double elapsedTime = 0.0; + int updateCount = 0; + + while (elapsedTime < duration) { + updateBusSystem(system, routes, routeCount, stations, stationCount, timeStep); + elapsedTime += timeStep; + updateCount++; + + // 每5次更新显示一次状态 + if (updateCount % 5 == 0) { + printf("\n[时间: %.1f 分钟]\n", system->systemTime); + displayAllBuses(system, routes, routeCount, stations, stationCount); + printf("\n按 Enter 继续..."); + getchar(); + } + } + + printf("\n========== 模拟结束 ==========\n"); + printf("总运行时间: %.1f 分钟\n", system->systemTime); + displayAllBuses(system, routes, routeCount, stations, stationCount); +} \ No newline at end of file diff --git a/PracticalTrain/DataStructure/src/main.c b/PracticalTrain/DataStructure/src/main.c index e431952..e1021c6 100644 --- a/PracticalTrain/DataStructure/src/main.c +++ b/PracticalTrain/DataStructure/src/main.c @@ -5,6 +5,7 @@ #include "../include/station.h" #include "../include/route.h" #include "../include/graph.h" +#include "../include/bus.h" #define MAX_ROUTES 20 @@ -13,158 +14,340 @@ Station stations[MAX_STATIONS]; BusRoute routes[MAX_ROUTES]; int stationCount = 0; int routeCount = 0; -Graph* graph = NULL; +Graph *graph = NULL; +BusSystem *busSystem = NULL; // 函数声明 void printMenu(); void queryRoute(); -void saveQueryResult(const char* filename, const char* startName, const char* endName, - PathNode* path, double totalTime); +void manageBuses(); +void startSimulation(); +void saveQueryResult(const char *filename, const char *startName, const char *endName, + PathNode *path, double totalTime); // 打印菜单 -void printMenu() { +void printMenu() +{ printf("\n╔════════════════════════════════╗\n"); printf("║ 巴士路线管理系统 ║\n"); printf("╠════════════════════════════════╣\n"); printf("║ 1. 查询最短路径 ║\n"); printf("║ 2. 显示所有站点 ║\n"); printf("║ 3. 显示所有线路 ║\n"); - printf("║ 4. 退出系统 ║\n"); + printf("║ 4. 巴士管理 ║\n"); + printf("║ 5. 启动实时模拟 ║\n"); + printf("║ 6. 退出系统 ║\n"); printf("╚════════════════════════════════╝\n"); - printf("请选择功能 (1-4): "); + printf("请选择功能 (1-6): "); } -// 查询路线 -void queryRoute() { +// 巴士管理菜单 +void manageBuses() +{ + int choice; + + while (1) + { + printf("\n╔════════════════════════════════╗\n"); + printf("║ 巴士管理菜单 ║\n"); + printf("╠════════════════════════════════╣\n"); + printf("║ 1. 添加巴士 ║\n"); + printf("║ 2. 查看所有巴士 ║\n"); + printf("║ 3. 查询线路上的巴士 ║\n"); + printf("║ 4. 查询站点的巴士 ║\n"); + printf("║ 5. 手动更新一次(1分钟) ║\n"); + printf("║ 6. 返回主菜单 ║\n"); + printf("╚════════════════════════════════╝\n"); + printf("请选择 (1-6): "); + + if (scanf("%d", &choice) != 1) + { + while (getchar() != '\n') + ; + printf("无效输入\n"); + continue; + } + + switch (choice) + { + case 1: + { + // 添加巴士 + printf("\n可用线路:\n"); + for (int i = 0; i < routeCount; i++) + { + printf(" %d. %s\n", i, routes[i].routeName); + } + + int routeId, startIdx, direction; + double speed; + + printf("选择线路ID: "); + scanf("%d", &routeId); + + if (routeId < 0 || routeId >= routeCount) + { + printf("无效的线路ID\n"); + break; + } + + printf("选择起始站点索引 (0-%d): ", routes[routeId].stationCount - 1); + scanf("%d", &startIdx); + + printf("选择方向 (0-正向, 1-反向): "); + scanf("%d", &direction); + + printf("输入速度(km/h): "); + scanf("%lf", &speed); + + addBus(busSystem, routeId, startIdx, + direction == 0 ? DIRECTION_FORWARD : DIRECTION_BACKWARD, speed); + break; + } + + case 2: + { + // 查看所有巴士 + displayAllBuses(busSystem, routes, routeCount, stations, stationCount); + break; + } + + case 3: + { + // 查询线路上的巴士 + int routeId; + printf("输入线路ID: "); + scanf("%d", &routeId); + + if (routeId >= 0 && routeId < routeCount) + { + queryBusesOnRoute(busSystem, routeId, routes, routeCount, + stations, stationCount); + } + else + { + printf("无效的线路ID\n"); + } + break; + } + + case 4: + { + // 查询站点的巴士 + char stationName[MAX_NAME]; + printf("输入站点名称: "); + scanf("%s", stationName); + + int stationId = findStationByName(stations, stationCount, stationName); + if (stationId != -1) + { + queryBusesAtStation(busSystem, stationId, routes, routeCount, + stations, stationCount); + } + else + { + printf("找不到站点 '%s'\n", stationName); + } + break; + } + + case 5: + { + // 手动更新 + printf("更新巴士位置(1分钟)...\n"); + updateBusSystem(busSystem, routes, routeCount, stations, stationCount, 1.0); + displayAllBuses(busSystem, routes, routeCount, stations, stationCount); + break; + } + + case 6: + return; + + default: + printf("无效选择\n"); + } + } +} + +// 启动模拟 +void startSimulation() +{ + if (busSystem->busCount == 0) + { + printf("\n错误: 请先添加巴士\n"); + return; + } + + double duration; + printf("\n输入模拟时长(分钟): "); + scanf("%lf", &duration); + + printf("开始自动模拟...\n"); + printf("提示: 每5次更新会暂停显示状态\n"); + + // 清空输入缓冲 + while (getchar() != '\n') + ; + + runSimulation(busSystem, routes, routeCount, stations, stationCount, duration, 1.0); +} +void queryRoute() +{ char startName[MAX_NAME], endName[MAX_NAME]; - + printf("\n请输入起点站名称: "); scanf("%s", startName); printf("请输入终点站名称: "); scanf("%s", endName); - + int startId = findStationByName(stations, stationCount, startName); int endId = findStationByName(stations, stationCount, endName); - - if (startId == -1) { + + if (startId == -1) + { printf("错误: 找不到站点 '%s'\n", startName); return; } - if (endId == -1) { + if (endId == -1) + { printf("错误: 找不到站点 '%s'\n", endName); return; } - + double totalTime; - PathNode* path = dijkstra(graph, startId, endId, &totalTime); - - if (!path || totalTime < 0) { + PathNode *path = dijkstra(graph, startId, endId, &totalTime); + + if (!path || totalTime < 0) + { printf("\n没有找到从 %s 到 %s 的路线\n", startName, endName); return; } - + printf("\n========== 最短路径查询结果 ==========\n"); printf("起点: %s\n", startName); printf("终点: %s\n", endName); printf("总时间: %.2f 分钟\n", totalTime); printf("\n详细路线:\n"); - + displayPath(path, stations, stationCount, routes, routeCount); - + printf("=====================================\n\n"); - + // 保存结果 saveQueryResult("data/query_results.txt", startName, endName, path, totalTime); - + freePath(path); } // 保存查询结果 -void saveQueryResult(const char* filename, const char* startName, const char* endName, - PathNode* path, double totalTime) { - FILE* fp = fopen(filename, "a"); - if (!fp) { +void saveQueryResult(const char *filename, const char *startName, const char *endName, + PathNode *path, double totalTime) +{ + FILE *fp = fopen(filename, "a"); + if (!fp) + { printf("警告: 无法保存查询结果到文件\n"); return; } - + fprintf(fp, "================================\n"); fprintf(fp, "起点: %s\n", startName); fprintf(fp, "终点: %s\n", endName); fprintf(fp, "总时间: %.2f 分钟\n", totalTime); fprintf(fp, "路径: "); - - PathNode* curr = path; - while (curr) { + + PathNode *curr = path; + while (curr) + { int stationIdx = findStationById(stations, stationCount, curr->stationId); - if (stationIdx != -1) { + if (stationIdx != -1) + { fprintf(fp, "%s", stations[stationIdx].name); - if (curr->next) { + if (curr->next) + { fprintf(fp, " -> "); } } curr = curr->next; } fprintf(fp, "\n"); - + fclose(fp); } // 主函数 -int main() { +int main() +{ printf("========================================\n"); printf(" 巴士路线管理系统 v1.0\n"); printf("========================================\n\n"); - + // 加载数据 printf("正在加载系统数据...\n"); stationCount = loadStations("data/stations.csv", stations, MAX_STATIONS); - if (stationCount == 0) { + if (stationCount == 0) + { printf("错误: 无法加载站点数据\n"); return 1; } - + routeCount = loadRoutes("data/routes.csv", routes, MAX_ROUTES); - if (routeCount == 0) { + if (routeCount == 0) + { printf("错误: 无法加载线路数据\n"); return 1; } - + // 创建图 graph = createGraph(stationCount); buildGraphFromRoutes(graph, routes, routeCount, stations, stationCount); - + + // 创建巴士系统 + busSystem = createBusSystem(); + printf("巴士系统初始化完成\n"); + printf("\n系统初始化完成!\n"); - + // 主循环 int choice; - while (1) { + while (1) + { printMenu(); - - if (scanf("%d", &choice) != 1) { - while (getchar() != '\n'); - printf("无效输入,请输入数字1-4\n"); + + if (scanf("%d", &choice) != 1) + { + while (getchar() != '\n') + ; + printf("无效输入,请输入数字1-6\n"); continue; } - - switch (choice) { - case 1: - queryRoute(); - break; - case 2: - displayAllStations(stations, stationCount); - break; - case 3: - displayAllRoutes(routes, routeCount, stations, stationCount); - break; - case 4: - printf("\n感谢使用巴士路线管理系统!\n"); - destroyGraph(graph); - return 0; - default: - printf("无效选择,请输入1-4\n"); + + switch (choice) + { + case 1: + queryRoute(); + break; + case 2: + displayAllStations(stations, stationCount); + break; + case 3: + displayAllRoutes(routes, routeCount, stations, stationCount); + break; + case 4: + manageBuses(); + break; + case 5: + startSimulation(); + break; + case 6: + printf("\n感谢使用巴士路线管理系统!\n"); + destroyGraph(graph); + destroyBusSystem(busSystem); + return 0; + default: + printf("无效选择,请输入1-6\n"); } } - + return 0; } \ No newline at end of file