欢迎来到重庆监控安装公司官方网站!
您的位置: 重庆监控安装公司 - 安防百科 - 停车场管理系统详细解析

停车场管理系统详细解析

来源:安防百科 / 时间: 2024-05-28

停车场管理系统详解

问题

请你设计一个停车场方案,停车场只能存放车辆7辆,候车场只能存放车辆3辆。按你所学,以c语言代码设计之。

思路

  1. 候车场是队列结构,先进先出。
  2. 停车场为顺序栈结构,后进先出。
  3. 逻辑思路与进一步整理。

初步设计方案

  1. 指示门结构
  2. 循环队列
  3. 顺序栈
  • 指示门结构
struct Door{
	bool indoor,backdoor;/*---定义便道门和停车场门结构---*/ 
	}door;
  • 循环队列结构

1.InitialQueue()&&enQueue();------初始化并进队操作: 队列指示门开 >进队>------队列指示门关 >反馈停车场&候车场均满载信息

void enQueue(Queue*q,int e){
	//当便道队列满载时 
if((q->rear+1)%QUEUESIZE == q->front){
printf("\t\t >>便道内车辆已经满载!请稍等!\n"); 
}
//进队 
 q->rear =(q->rear+1)%QUEUESIZE;
 q->carNo[q->rear] = e;
 //当进队后队满
 if((q->rear+1)%QUEUESIZE == q->front)
 door.indoor = 0;                /*---将便道门置关状态---*/
}

2.deQueue();------出队操作:队列指示门开>判断非空?反馈 : 元素出队

  void deQueue(Queue*q,int *e){
	if(q->front == q->rear)
	return;                            //没有车辆不执行直接return
	/*---先赋值,再移动指针*/ 
    *e = q->carNo[q->front];
	q->front = (q->front +1)%QUEUESIZE;
	door.indoor = 1;         /*---当有车辆出队时,便道门置开---*/ 
   }

3.DisQueue();------显示候车场信息:由队头开始输出元素直至队尾

void DisQueue(Queue*q)
	{
	//满载反馈 
	if((q->rear+1)%QUEUESIZE == q->front)
	{
	printf("\t\t >>便道车辆已经满载,请换停!!\n");
	}
  	  //空反馈 
	if(q->front == q->rear)
	 {
	printf("\t\t >>候车场为空!!\n");
	return;
  	  }
 		//非空反馈
	int i,count=0;	//count计数 
	i=(q->front)%QUEUESIZE;	//定位队头指针 
     while((q->rear-i+QUEUESIZE)%QUEUESIZE>0)	//当对头指针后面仍然有元素 
	{
		printf("\t\t >>车牌号%d在便道中等待!\n",q->carNo[i]);
		i++;	//指针加1 
		count++;
   	 } 
  	 printf("\t\t **目前候车场车辆为%d辆\n",count); 
	 }
  • 顺序栈

1.InitialStack()&&Push();------------初始化并进栈操作:栈指示门关?>return : 进栈 进栈后判断栈顶是否满载?>栈指示门置1(区别:栈满置1) : return

  int Push(Stack*s,int e1,int e2)
	{   //满载反馈 
	if(door.backdoor ==1)
	 {
	return 0;
 		}
	//非空反馈 
	else
	{
	//先移动头指针
	s->top++; 
		//---依次将车牌号和到达时间记录到到达栈中
	s->carNo[s->top]=e1; 
	s->carTime[s->top]=e2;
	if(s->top  ==(STACKSIZE-1))
	door.backdoor = 1;/*---出站即将停车场指示门置 1(关)---*/
	}	
	}

2.Pop();---------------------------出站操作:栈非空?>出栈 : return

int Pop(Stack *s,int *e1,int *e2)
		{   //空反馈 
 		if(s->top ==-1)
		 {
 		printf("\t\t >>停车场内无车辆!\n");
	   	 return 0;
		 }
		//e1,e2指针记录它的车牌信息和---ARIVETIME--- 
		//先赋值再移动指针
 		*e1 =s->carNo[s->top];
 		*e2 =s->carTime[s->top];
 		s->top--; 
 		door.backdoor = 0;/*---出站即置开---*/ 
		 }

3.DisStack();------------------ 显示停车场:栈空?return : 出栈

void DisStack(Stack*s)
	{
	int i,count=0;
	//满载反馈 
	if(door.back == 1)
	{
  	printf("\t\t >>停车场已经满载!\n");
	}
	//非空反馈 
	if(s->top!=-1){
	for(i=s->top;i>=0;i--){
	printf("\t\t >>车牌号:%d的到达时间是:%d\n",s->carNo[i],s->carTime[i]);
	count++;}//记录到达停车场的车辆个数
	printf("\t\t **目前停车场内车辆为:%d辆\n",count);
 	}
	//空反馈 
	else{
	printf("\t\t >>停车场内无车辆!\n");
	}
	}
	```
  • 主函数

代码演示

结果展示

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

关于代码定义与使用部分,还有很多优化,笔者因为是19年课设,基本照搬课本,当基本的学习~

相关产品

在线客服
微信联系
客服
扫码加微信(手机同号)
电话咨询
返回顶部