请使用C语言解决这个问题
时间: 2023-09-02 16:06:25 浏览: 77
好的,以下是一个简单的C语言实现停车场管理系统的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_CARS 10 // 停车场最大容量
#define MAX_WAITING_CARS 10 // 边道最大容量
#define FEE_RATE 1 // 停车费用:每分钟1元
// 车辆结构体
typedef struct {
int id; // 车辆编号
time_t enter_time; // 进入停车场时间
time_t leave_time; // 离开停车场时间
} Car;
// 停车场结构体
typedef struct {
Car cars[MAX_CARS]; // 车辆数组
int num_cars; // 当前停放的车辆数量
} ParkingLot;
// 边道结构体
typedef struct {
Car cars[MAX_WAITING_CARS]; // 车辆数组
int num_cars; // 当前等待的车辆数量
} SideRoad;
// 初始化停车场
void init_parking_lot(ParkingLot *parking_lot) {
parking_lot->num_cars = 0;
}
// 初始化边道
void init_side_road(SideRoad *side_road) {
side_road->num_cars = 0;
}
// 进入停车场
void enter_parking_lot(ParkingLot *parking_lot, SideRoad *side_road, int car_id) {
if (parking_lot->num_cars < MAX_CARS) { // 停车场有空余车位
// 将车辆停放在车场最北端
Car car = {car_id, time(NULL), 0};
parking_lot->cars[parking_lot->num_cars] = car;
parking_lot->num_cars++;
printf("车辆 %d 进入停车场,停放在第 %d 个位置\n", car_id, parking_lot->num_cars);
} else { // 停车场已满,将车辆停放在边道上
if (side_road->num_cars < MAX_WAITING_CARS) { // 边道有空余车位
Car car = {car_id, time(NULL), 0};
side_road->cars[side_road->num_cars] = car;
side_road->num_cars++;
printf("车辆 %d 进入边道,等待停车场空余车位\n", car_id);
} else { // 边道也已满,无法停放车辆
printf("车辆 %d 无法停放,停车场和边道均已满\n", car_id);
}
}
}
// 离开停车场
void leave_parking_lot(ParkingLot *parking_lot, SideRoad *side_road) {
if (parking_lot->num_cars > 0) { // 停车场有车辆
// 计算停车费用
Car car = parking_lot->cars[0];
car.leave_time = time(NULL);
int duration = (int)(car.leave_time - car.enter_time) / 60; // 停车时间(分钟)
int fee = duration * FEE_RATE; // 停车费用
printf("车辆 %d 离开停车场,停车时间为 %d 分钟,停车费用为 %d 元\n", car.id, duration, fee);
// 调整车辆数组
for (int i = 0; i < parking_lot->num_cars - 1; i++) {
parking_lot->cars[i] = parking_lot->cars[i + 1];
}
parking_lot->num_cars--;
// 将边道上的车辆停放在车场
if (side_road->num_cars > 0) {
Car waiting_car = side_road->cars[0];
enter_parking_lot(parking_lot, side_road, waiting_car.id);
// 调整车辆数组
for (int i = 0; i < side_road->num_cars - 1; i++) {
side_road->cars[i] = side_road->cars[i + 1];
}
side_road->num_cars--;
}
} else { // 停车场没有车辆
printf("停车场没有车辆\n");
}
}
// 显示停车场状态
void display_parking_lot_status(ParkingLot *parking_lot, SideRoad *side_road) {
printf("停车场状态:\n");
printf("停车场容量:%d,已停车辆:%d,空余车位:%d\n", MAX_CARS, parking_lot->num_cars, MAX_CARS - parking_lot->num_cars);
printf("边道容量:%d,等待车辆:%d\n", MAX_WAITING_CARS, side_road->num_cars);
printf("停车场车辆信息:\n");
for (int i = 0; i < parking_lot->num_cars; i++) {
Car car = parking_lot->cars[i];
printf("车辆 %d,进入时间:%ld\n", car.id, car.enter_time);
}
printf("边道车辆信息:\n");
for (int i = 0; i < side_road->num_cars; i++) {
Car car = side_road->cars[i];
printf("车辆 %d,进入时间:%ld\n", car.id, car.enter_time);
}
}
int main() {
ParkingLot parking_lot;
SideRoad side_road;
init_parking_lot(&parking_lot);
init_side_road(&side_road);
int choice, car_id;
while (1) {
printf("请选择操作:\n");
printf("1. 进入停车场\n");
printf("2. 离开停车场\n");
printf("3. 显示停车场状态\n");
printf("4. 退出程序\n");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入车辆编号:\n");
scanf("%d", &car_id);
enter_parking_lot(&parking_lot, &side_road, car_id);
break;
case 2:
leave_parking_lot(&parking_lot, &side_road);
break;
case 3:
display_parking_lot_status(&parking_lot, &side_road);
break;
case 4:
exit(0);
default:
printf("输入错误,请重新输入!\n");
break;
}
}
return 0;
}
```
这个程序使用了结构体来表示车辆、停车场和边道,并实现了进入停车场、离开停车场和显示停车场状态等功能。在进入停车场时,如果停车场已满,会将车辆停放在边道上等待;在离开停车场时,会按照先进先出的原则让排在它后面的车辆先退出停车场,等待该车辆开出大门后,其他车辆再按照原次序进入停车场,并计算停车费用。用户可以通过控制台界面来选择操作并输入车辆编号,程序会根据用户的选择执行相应的功能,并实时显示停车场状态。
阅读全文