Files
2025-12-24 08:43:01 +08:00

87 lines
2.6 KiB
C

// include/bus.h
#ifndef BUS_H
#define BUS_H
#include <stdbool.h>
#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