#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;

C语言停车场管理系统:实现停车位分配和收费功能

原文地址: https://www.cveoy.top/t/topic/opUs 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录