停车场管理系统详细解析
来源:安防百科 /
时间: 2024-05-28
停车场管理系统详解
问题
请你设计一个停车场方案,停车场只能存放车辆7辆,候车场只能存放车辆3辆。按你所学,以c语言代码设计之。
思路
- 候车场是队列结构,先进先出。
- 停车场为顺序栈结构,后进先出。
- 逻辑思路与进一步整理。
初步设计方案
- 指示门结构
- 循环队列
- 顺序栈
- 指示门结构
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年课设,基本照搬课本,当基本的学习~
上一篇: 数据结构c语言版课程设计停车场管理系统方案.doc
下一篇: 一、手持移动式停车场收费系统结构图