#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
typedef struct stack {
char** car_position;
int top;
}park;
typedef struct queue {
char** car_number;
int head, tail, count;
}road;
park* car_park(int n) {
park* car_park = (park*)malloc(sizeof(park));
car_park->car_position = (char**)malloc(sizeof(char*) * n);
for (int i = 0; i < n; i++) {
car_park->car_position[i] = (char*)malloc(sizeof(char) * 10);
}
car_park->top = -1;//初始化停车场;
return car_park;
}//停车场
road* car_road(int n) {
road* car_road = (road*)malloc(sizeof(road));
car_road->car_number = (char**)malloc(sizeof(char*) * n);
for (int i = 0; i < n; i++) {
car_road->car_number[i] = (char*)malloc(sizeof(char) * 10);
}
car_road->head = 0;
car_road->tail = 0;//初始化便道;
car_road->count = 0;//初始化便道车辆数;
return car_road;
}//便道
int is_full(park* car_park, int n) {
if (car_park->top == n - 1) {
return 1;
}
else {
return 0;
}
}//判断停车场是否已满,返回1表示已满,返回0表示未满;
int is_empty(park* car_park, int n) {
if (car_park->top == -1) {
return 1;
}
else {
return 0;
}
}
void car_in(park* car_park, char* car_number, int n) {
if (is_full(car_park, n)) {
printf("停车场已满,请将车辆沿便道依次排队等候\n\n");
return;
}
car_park->top++;
strcpy(car_park->car_position[car_park->top], car_number);//车辆驶入停车场;
}
void car_out(park* car_park, int n) {
if (is_empty(car_park, n)) {
printf("停车场为空,无车辆驶出\n\n");//判断停车场是否为空,为空则无车辆驶出;
return;
}
car_park->top--;//车辆驶出;
}
int is_full_road(road* car_road, int n) {
if (car_road->count == n) {
return 1;
}
else {
return 0;
}
}
int is_empty_road(road* car_road, int n) {
if (car_road->count == 0) {
return 1;
}
else {
return 0;
}
}
void car_in_road(road* car_road, char* car_number, int n) {
if (car_road->count == n) {
printf("便道已满\n\n");//判断便道是否已满
}
car_road->count++;//车辆驶入便道;
strcpy(car_road->car_number[car_road->tail++], car_number);
if (car_road->tail == n) {
car_road->tail = 0;
}
}
void car_out_road(road* car_road, int n) {
if (car_road->count == 0) {
printf("便道为空\n\n");//判断便道是否为空,为空则无车辆驶出;
}
car_road->count--;
car_road->car_number[car_road->head++];
if (car_road->head == n) {
car_road->head = 0;
}
}
void show_park(park* car_park, int n) {
if (is_empty(car_park, n)) {
printf("停车场为空\n\n");
return;
}
printf("停车场:\n");//显示停车场;
for (int i = 0; i <= car_park->top; i++) {
printf("%d号停车位:%s\n", i + 1, car_park->car_position[i]);
}
}
void show_road(road* car_road, int n) {
if (is_empty_road(car_road, n)) {
printf("便道为空\n\n");
return;
}
printf("便道:\n");//显示便道;
int i = car_road->head;
int j = 0;
while (j < car_road->count) {
if (i == n)i = 0;
printf("%d号便道:%s\n", j + 1, car_road->car_number[i]);
i++, j++;
}
}
int main() {
int n = 3;
park* main_park = car_park(n);//停车场;
park* temp_park = car_park(n);
road* road = car_road(n);//便道;
int* time = (int*)malloc(sizeof(int) * n);
int* start_time = (int*)malloc(sizeof(int) * n);
int* end_time = (int*)malloc(sizeof(int) * n);
for (int i = 0; i < n; i++) {
time[i] = 0;
start_time[i] = 0;
end_time[i] = 0;//初始化时间;
}
int choice;
do {
printf("欢迎使用停车场管理系统\n");
printf("【1】停车\n");
printf("【2】出车并结算价钱\n");
printf("【3】显示停车场状况\n");
printf("【4】显示便道状况\n");
printf("【0】退出\n");
printf("请输入你的操作:\n");
scanf("%d", &choice);
if (choice == 1) {
char car_number[10];
printf("请输入车牌号:\n");
scanf("%s", car_number);
if (!is_full(main_park, n)) {
car_in(main_park, car_number, n);
int index=main_park->top;//记录车辆进入的时间;
start_time[index] = clock();
}
else {
printf("停车场已满,请将车辆沿便道依次排队等候\n\n");
if (!is_full_road(road, n)) {
car_in_road(road, car_number, n);//车辆进入便道;
}
else {
printf("便道已满,请稍后\n\n");
}
}
}
if (choice == 2) {
char car_number[10];
printf("请输入要出去的车牌号:\n");//输入车牌号;
scanf("%s", car_number);
int flag = 0;
for (int i = 0; i <= main_park->top; i++) {
if (strcmp(main_park->car_position[i], car_number) == 0) {
flag = 1;
int j = i + 1;
int k = main_park->top;
int count = main_park->top;
while (j <= count) {
car_out(main_park, n);//车辆驶出
car_in(temp_park, main_park->car_position[k], n);//车辆驶入;
j++;
k--;
}//找到要驶出的车辆位置,将后面的车驶入临时停车场
int index = main_park->top;
end_time[index] = clock();//记录结束时间
time[index]=(end_time[index] - start_time[index]) / CLOCKS_PER_SEC;//计算停车时间;
printf("停车时间:%d小时\n", time[index]);
printf("每小时停车费为2元钱\n");
printf("停车费用:%d元钱\n", time[index] * 2);
car_out(main_park, n);//将要出去的车辆驶出
int l = temp_park->top;
while (!is_empty(temp_park, n)) {
car_out(temp_park, n);//车辆驶出;
car_in(main_park, temp_park->car_position[l], n);//车辆驶入;
l--;
}//将临时停车场中的车驶入停车场
break;
}
if (!flag) {
printf("停车场中没有该车辆,请重新输入\n\n");
}
}
if (!is_empty_road(road, n)) {
char car_number_road[10];//输入车牌号;
strcpy(car_number_road, road->car_number[road->head]);
car_out_road(road, n);//便道车辆驶出;
car_in(main_park, car_number_road, n);//车辆驶入;
}
}
if (choice == 3) {
show_park(main_park, n);//显示停车场;
}
if (choice == 4) {
show_road(road, n);//显示便道;
}
if (choice == 0) {
return 0;//退出程序
}
} while (choice != 0);
return 0;
}
停车场管理系统
最新推荐文章于 2024-06-13 10:13:20 发布