编写停车场管理程序内容:编写一个完整的可运行的c语言。设停车场内只有一个可停放n辆汽车的狭长通道且只有一个大门可供汽车进出。 汽车在停车场内按车辆到达时间的先后顺序依次由南向北排列大门在最北端最先到达的第一辆车停放在停车场的最南端若停车场内已停满n辆车则后来的汽车只能在门的便道即候车场上等候一旦有车开走则排在便道上的第一辆车即可开人;当停车场内某辆车要离开时在它之后进人的车辆必须先退出停车场为它让
#include <stdio.h> #include <stdlib.h> #include <string.h>
#define MAX_SIZE 10 // 停车场最多可停车数量为10 #define PRICE_PER_HOUR 10 // 每小时停车费用为10元
struct Car { char plate_num[10]; // 车牌号 int arrival_time; // 到达时间 int stay_time; // 停留时间 };
struct Car parking_lot[MAX_SIZE]; // 停车场 struct Car waiting_queue[MAX_SIZE]; // 便道
int parked_cars = 0; // 停车场内已停车数量 int waiting_cars = 0; // 便道上等待的车辆数量
// 显示菜单 void show_menu() { printf("停车场管理系统\n"); printf("1. 停车\n"); printf("2. 取车\n"); printf("3. 显示停车场情况\n"); printf("4. 显示便道情况\n"); printf("5. 退出\n"); }
// 获取当前时间(小时) int get_current_time() { time_t now; time(&now); return localtime(&now)->tm_hour; }
// 判断停车场是否已满 int is_parking_lot_full() { return parked_cars == MAX_SIZE; }
// 判断便道上是否有等待的车辆 int is_waiting_queue_empty() { return waiting_cars == 0; }
// 将车辆停入停车场 void park_car(struct Car car) { if (!is_parking_lot_full()) { parking_lot[parked_cars] = car; parked_cars++; printf("车辆 %s 成功停入停车场\n", car.plate_num); } else { waiting_queue[waiting_cars] = car; waiting_cars++; printf("车辆 %s 已停满,已停入便道等待\n", car.plate_num); } }
// 计算停车费用 int calculate_fee(int stay_time) { return stay_time * PRICE_PER_HOUR; }
// 将车辆从停车场取出 void retrieve_car(char plate_num[]) { int i; for (i = 0; i < parked_cars; i++) { if (strcmp(parking_lot[i].plate_num, plate_num) == 0) { int fee = calculate_fee(parking_lot[i].stay_time); printf("车辆 %s 已取出,停留时间为 %d 小时,停车费用为 %d 元\n", plate_num, parking_lot[i].stay_time, fee); parked_cars--; // 将后面的车辆依次往前移动 for (; i < parked_cars; i++) { parking_lot[i] = parking_lot[i + 1]; } // 如果便道上有等待的车辆,则将其停入停车场 if (!is_waiting_queue_empty()) { park_car(waiting_queue[0]); // 将后面的车辆依次往前移动 int j; for (j = 0; j < waiting_cars; j++) { waiting_queue[j] = waiting_queue[j + 1]; } waiting_cars--; } return; } } // 如果车辆不在停车场内,则在便道上查找 for (i = 0; i < waiting_cars; i++) { if (strcmp(waiting_queue[i].plate_num, plate_num) == 0) { printf("车辆 %s 在便道上等待,无法取出\n", plate_num); return; } } printf("车辆 %s 未找到\n", plate_num); }
// 显示停车场情况 void show_parking_lot() { int i; printf("停车场内共有 %d 辆车,最多可停放 %d 辆车\n", parked_cars, MAX_SIZE); for (i = 0; i < parked_cars; i++) { printf("车辆 %s 在停车场内,停留时间为 %d 小时\n", parking_lot[i].plate_num, parking_lot[i].stay_time); } }
// 显示便道情况 void show_waiting_queue() { int i; printf("便道上共有 %d 辆车\n", waiting_cars); for (i = 0; i < waiting_cars; i++) { printf("车辆 %s 在便道上等待\n", waiting_queue[i].plate_num); } }
int main() { int choice; do { show_menu(); scanf("%d", &choice); switch (choice) { case 1: { char plate_num[10]; printf("请输入车牌号:"); scanf("%s", plate_num); struct Car car; strcpy(car.plate_num, plate_num); car.arrival_time = get_current_time(); car.stay_time = 0; park_car(car); break; } case 2: { char plate_num[10]; printf("请输入车牌号:"); scanf("%s", plate_num); retrieve_car(plate_num); break; } case 3: { show_parking_lot(); break; } case 4: { show_waiting_queue(); break; } case 5: { printf("谢谢使用!\n"); exit(0); } default: { printf("输入错误,请重新输入\n"); break; } } } while (1); return 0;
原文地址: https://www.cveoy.top/t/topic/fKSj 著作权归作者所有。请勿转载和采集!