停车场管理系统

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

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值