停车场管理(下)

简介: 设停车场是一个可以停放n辆汽车的南北方向的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆车,那么后来的车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。要求程序输出每辆车到达后的停车位置(停车场或便道上)

详细设计

1.车辆到达

if (Enter->top<MAX) /*车场 未满,车进车场*/
{ Enter->top++;
printf ("\n\t\t\t该车辆在停车场的位置是: %\n",Enter->top);
printf(" \n\t\t\t请输入该车辆到达的时间: ") ;
scanf ("%d", & (p->reachtime));
Enter->stack[Enter->top]=p;
return(1) ;
}
else

2.车辆离开

if (Enter->top>0) /*有车*/
{ while(1) /*输入离开车辆的信息*/
{ printf(" \t\t\t停车场里停放的车辆总数: %d", Enter->top) ;
printf(" \n\n\t\t\t请输入要离开车辆的位置: ") ;
scanf ("%d" , &room) ;
if (room>=1&&room<=Enter->top)
break;}
while (Enter->top>room) /*车辆离开*/

3.主函数

while(1)
{ scanf("%d" , &ch) ;
printf("\n") ;
if (ch>= 1&&ch<=4) break;
else
printf("\n\t\t\t错误!请再次做出选择! \n\n\t\t\t");}
switch (ch)
{ case 1:Arrival (&Enter, &Wait) ; break; /*车辆到达*/case 2: Leave (&Enter, &Temp, &Wait) ; break; /*车辆离开
*/
case 3:List (Enter, Wait); break; /*列表打印信息*/
case 4:exit(0) ;
/*退出主程序*/
default: break; }

带注释的源程序:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 2 /*车库容量*/
#define price 3 /*每车每时刻费用*/
typedef struct node
{ int num;
int reachtime;
int leavetime;
}CarNode; /*车辆信息结点*/
typedef struct NODE
{ CarNode *stack [MAX+1];
int top;
} SeqStackCar; /* 模拟车站*/
typedef struct car
{CarNode *data;
struct car *next ;
} QueueNode;
typedef struct Node
{ QueueNode *head;
QueueNode *rear ;
}LinkQueueCar; /*模拟通道*/
/*函数声明部分*/
void InitStack (SeqStackCar *); /*初始化栈*/
int InitQueue (LinkQueueCar *) ; /*初始化便道*/
int Arrival (SeqStackCar *, LinkQueueCar *); /*车辆到达*/
void Leave (SeqStackCar *, SeqStackCar *, LinkQueueCar *); /*车辆离开*/
void List (SeqStackCar, LinkQueueCar); /*显示存车信息*/
void PRINT (CarNode*p) ;
int main()
{ SeqStackCar Enter, Temp;
LinkQueueCar Wait;
int ch;
InitStack (&Enter); /*初始化车站*/
InitStack (&Temp); /*初始化让路的临时栈*/
InitQueue (&Wait); /*初始化通道*/
while(1)
{
printf(" \n\n\t\t\t1.车辆到达请选择1");
printf("\n\n\t\t\t2.车辆离开请选择2");
printf(" \n\n\t\t\t3.车辆信息请选择3");
printf("\n\n\t\t\t4.退出程序请选择4");
printf("\n\n\t\t\t现在请选择以上信息: ");
while(1)
{ scanf("%d" , &ch) ;
printf("\n") ;
if (ch>= 1&&ch<=4) break;
else
printf("\n\t\t\t错误!请再次做出选择! \n\n\t\t\t");}
switch (ch)
{ case 1:Arrival (&Enter, &Wait) ; break; /*车辆到达*/case 2: Leave (&Enter, &Temp, &Wait) ; break; /*车辆离开
*/
case 3:List (Enter, Wait); break; /*列表打印信息*/
case 4:exit(0) ;
/*退出主程序*/
default: break; }
}
}
void InitStack (SeqStackCar *s) /*初始化栈*/
{
int i;
s->top=0;
for(i=0;i<=MAX;i++)
s->stack[s->top]=NULL;
}
int InitQueue (LinkQueueCar *Q) /*初始化便道*/
{Q->head= (QueueNode *) malloc (sizeof (QueueNode)) ;
if (Q->head!=NULL)
{Q->head->next=NULL;
Q->rear=Q->head;
return(1) ;
}
else
return(-1) ;
}
void PRINT (CarNode *p) /*打 印出站车的信息*/
{int A1, A2;
printf ("\n\t\t\t请输入离开时间: ") ;
scanf(" %d" , &(p->leavetime)) ;
printf("\n\t\t\t离开车辆的车牌号: %d",p->num) ;
printf ("\n\n\t\t\t离开车辆到达时间: %d", p->reachtime) ;
printf("\n\n\t\t\t离开车辆离开时间: %d" , p->leavetime) ;
A1=p->reachtime;
A2=p->leavetime;
printf(" \n\n\t\t\t停车场管理费用: %d", (A2- -A1) *price) ;free(p);
}
int Arrival (SeqStackCar *Enter, LinkQueueCar *W) /* 车辆到达*/
{ CarNode *p;
QueueNode *t ;
p= (CarNode *) malloc (sizeof (CarNode)) ;
printf("\t\t\t请输入到达车辆车牌号: ");
scanf ("%d", & (p->num));
if (Enter->top<MAX) /*车场 未满,车进车场*/
{ Enter->top++;
printf ("\n\t\t\t该车辆在停车场的位置是: %\n",Enter->top);
printf(" \n\t\t\t请输入该车辆到达的时间: ") ;
scanf ("%d", & (p->reachtime));
Enter->stack[Enter->top]=p;
return(1) ;
}
else
/*车场已满,车进便道*/
{ printf(" \n\t\t\t停车场已满 该车辆需在便道上等待! ");getchar() ;
t= (QueueNode *) malloc (sizeof (QueueNode)) ;
t->data-p;
t->next-NULL;
W->rear->next=t;W->rear=t;
return(1) ;
}
}
void Leave (SeqStackCar *Enter, SeqStackCar *Temp, LinkQueueCar*W) /*车 辆离开*/
{ int room;
CarNode *p, *t;
QueueNode *q;
/*判断车场内是否有车*/
if (Enter->top>0) /*有车*/
{ while(1) /*输入离开车辆的信息*/
{ printf(" \t\t\t停车场里停放的车辆总数: %d", Enter->top) ;
printf(" \n\n\t\t\t请输入要离开车辆的位置: ") ;
scanf ("%d" , &room) ;
if (room>=1&&room<=Enter->top)
break;}
while (Enter->top>room) /*车辆离开*/
{Temp->top++;
Temp->stack [Temp->top] =Enter->stack [Enter->top];
Enter->stack [Enter->top]=NULL;
Enter->top-- ;
}
p=Enter->stack [Enter->top];
Enter->stack [Enter->top]=NULL;
Enter->top-- ;
while (Temp->top>=1)
{Enter->top++;
Enter->stack[Enter->top]=Temp->stack[Temp->top];
Temp->stack [Temp->top]=NULL;
Temp->top-- ;
}
PRINT(p) ;
/*判断通道上是否有车及车站是否已满*/
if((W->head!=W->rear)&Enter->top<MAX) /*便道的车辆进入车场*/
{ q=W->head->next;
t=q->data;
Enter-> top++;
printf("\n\n\t\t\t便道的%d号车进入车场第%d位置", t->num, Enter->top) ;
printf(" \n\n\t\t\t靖輸入現在的吋同:");
scanf ("%d", & (t->reachtime)) ;
W->head->next=q->next;
if(q==W->rear)
W->rear-W->head;
Enter->stack [Enter->top]=t;
free (q) ;
}
else
printf(" \n\n\t\t\t便道里没有车. \n");
}
else
printf(" \n\n\t\t\t车场里没有车."); /*没车*/
}
void List1 (SeqStackCar *S) /*列表 显示车场信息*/
{ int i;
if(S->top>0) /*判断车站内是否有车*/
{ printf(" \n\t\t\t车场:") ;
printf("\n\n\t\t\t位置到达时间车牌号\n");
for(i=1;i<=S->top;i++)
{printf("%26d", i);
printf("%6d", S->stack[i]->reachtime) ;
printf("%10d", S->stack[i]->num) ;
printf("(n");
}
}
else
printf(" \n\t\t\t车场里没有车");
}
void List2 (LinkQueueCar *W) /*列表显示便道信息*/
{QueueNode *p;
p=W->head->next;
if (W->head!=W->rear) /*判断通道.上是否有车*/
{ printf("\n\t\t\t等待车辆的号码为: ");
while (p!=NULL)
{ printf("%- 10d", p->data->num) ;
p=p->next;
}
printf("\n") ;
}
else
printf("\n\t\t\t便道里没有车.");
}
void List (SeqStackCar S, LinkQueueCar W)
{ int flag, tag;
flag=1;
while(flag)
{ printf("\n\t\t\t请选择 1|2|3:");
printf("\n\n\t\t\t1. 车场\n\n\t\t\t2. 便道\n\n\t\t\t3. 返回\n\n\t\t\t");
while(1)
{scanf("%d" , &tag) ;
if (tag>=1||tag<=3) break;
else printf("\n\t\t\t请选择1|2|3:") ;
}
switch (tag)
{ case 1:List1(&S) ;break; /*列表显示车场信息*/
case 2:List2 (&W) ; break;
 /*列表显示便道信息*/
case 3:flag=0; break;
default: break;
}
}
}
相关文章
|
6月前
|
存储 安全 Java
园区停车管理系统的设计与实现
园区停车管理系统的设计与实现
|
6月前
|
机器学习/深度学习 传感器 监控
智能停车场系统的技术关键
智能停车场系统的技术关键
|
6月前
|
监控 BI
区域云HIS医院信息管理系统 患者管理、号源管理、门诊医生站
医嘱执行、电子病历、病案首页、床位管理、费用管理、住院清单、住院审核、分配入科、住院退药、体温单、住院计费。
173 1
|
6月前
|
传感器 算法 物联网
基于单片机的智能停车场管理系统的设计与实现_kaic
基于单片机的智能停车场管理系统的设计与实现_kaic
|
SQL 前端开发 JavaScript
医疗管理系统-预约管理
医疗管理系统-预约管理
113 0
|
程序员 C# 开发工具
基于C#实现的车辆停车管理系统(毕业设计)
基于C#实现的车辆停车管理系统(毕业设计)
141 0
|
安全 自动驾驶 Java
停车场管理系统的设计与实现_kaic
随着电脑的普及,非常多的事都可以通过电脑来完成。 在这个网络飞速发展的现代,我们对计算机的依赖程度是非常的高的,无论是在哪方面对它的使用频率都很高,这给我们的生活带来了很大的改善,不但丰富了我们的生活,还将我们的工作方式改变了。因此,现代社会的建设,互联网的贡献是非常大的,越来越高科技化。由于现代技术方面的推进步伐太快,我们社会的整个结构以及经济方面的改变是非常大的,不但是在生活层面,在工业方面的改变提升也是很大的,现在这个信息化的时代,无论是从国家层面来说还是行业,甚至是组织乃至个人的生产发展都离不开信息化的帮助,这也是各方面的重要因素。对于停车位管理来说,以前那种效率低下的管理方式,在现在
|
运维 前端开发 关系型数据库
为小区物业开发一个停车位租赁系统
为小区物业开发一个停车位租赁系统
135 5
为小区物业开发一个停车位租赁系统
停车场管理
停车场管理 1.项目简介 设停车场是一个可以停放n辆汽车的南北方向的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆车,那么后来的车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。要求程序输出每辆车到达后的停车位置(停车场或便道上)
155 0
|
SQL 消息中间件 存储