同安街办丽阳社区安置房一期弱电工程
一标段停车场管理系统调试报告
检测人:______
日 期:______
四川汉隆智能科技股份有限公司
1 目的
检验硬件设备安装质量、软件配置的正确性和设备功能的有效性。
满足合同配置。
设备实现正常功能。
2 测试范围
对本次项目所涉及的所有停车场管理子系统进行测试。
3 系统功能
(√)智能停车场收费管理系统;
(√) 门禁管理系统;
(√) 智能通道管理系统;
(√) 闭路监视系统;
4 参考文档
钱乐秋等,《软件工程》,青还大学出版社;
张害藩,《软件工程导论》(第四版),清华大学出版社;
王珊等,《数据库原理及设计》,清华大学出版社
5 测试策略
通过现场测试、数据对比,验证各个子系统所实现功能是否与合同、设计要求相符且能正常工作。
6 自检步骤及结果
7 测试结论
同安街办丽阳社区安置房一期弱电工程一标段停车场管理系统测试结果正常,符合设计、合同的要求,测试合格。
确 认 人: 日 期:
第二篇:《停车场管理系统》实验设计报告
《数据结构》实验设计报告
题目: 停车场管理系统
姓名: **
学号: 2010211998
班级: 0491002
学院:计算机科学与技术学院
目录
一、 问题描述………………………………………………………03
二、 问题分析………………………………………………………03
三、 数据结构描述…………………………………………………04
四、 算法设计………………………………………………………04
五、 程序优缺点分析及优化………………………………………05
六、 程序源代码……………………………………………………07
七、 程序运行结果…………………………………………………13
八、 心得体会………………………………………………………15
附一、优化后的程序…………………………………………………16
附二、优化后程序的运行结果………………………………………23
一、 问题描述
设计一个停车场管理系统。
设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若停车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。
【基本要求】
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。
【选作内容】
(1)两个栈共享空间,思考应开辟数组的空间是多少?
(2)汽车可有不同种类,则他们的占地面积不同,收费标准也不同,如1辆客车和1.5辆小汽车的占地面积相同,1辆十轮卡车占地面积相当于3辆小汽车的占地面积。
(3)汽车可以直接从便道上开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾。
二、问题分析
该问题需要以栈和队列作为基本的存储结构,以顺序栈模拟停车场,以链队列模拟车场外的便道。汽车进入停车场,即是在顺序栈上执行进栈操作,退出停车场即是在顺序栈上执行出栈操作;汽车进入便道,即是在链队列上执行入队操作,退出便道即是在链队列上执行出队操作。
当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场。设要删除的元素在顺序表St中位置为i,则从i到top之间的全部元素进入到一个临时栈St1中, 其次再删除该元素,然后将临栈St1的元素按照“先进后出”的原则重新回到St中。若链队不空,则使队头进栈St,并以当前时刻开始计费。
程序需要构造两个顺序栈St和St1,其中St用于模拟停车场,St1用作临时栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车。此外还需要构造一个链队列Qu用于模拟便道。
三、 数据结构描述
/*定义顺序栈类型*/
typedef struct
{
int CarNo[N]; /*车牌号*/
int CarTime[N]; /*进场时间*/
int top; /*栈指针*/
} SqStack; /*定义顺序栈类型*/
/*定义链队类型*/
typedef struct qnode
{
int CarNo; /*车牌号*/
struct qnode *next;
} QNode;
typedef struct
{
QNode *front; /*队首和队尾指针*/
QNode *rear;
} LiQueue;
四、 算法设计
1. 对于子函数模块,则调用顺序栈的基本操作和链队列的基本操作。
如下:
/*顺序栈的基本运算算法*/
void InitStack(SqStack *&s)
int StackEmpty(SqStack *s)
int StackFull(SqStack *s)
/*S中的插入新元素*/
int Push(SqStack *&s,int e1,int e2)
/*删除S的栈顶元素,并用e1,e2返回其值*/
int Pop(SqStack *&s,int &e1,int &e2)
void DispStack(SqStack *s)
/*以下为链队列的基本运算算法*/
void InitQueue(LiQueue *&q)
int QueueLength(LiQueue *q)
int QueueEmpty(LiQueue *q)
void enQueue(LiQueue *&q, int e)
}
int deQueue(LiQueue *&q,int &e)
void DisplayQueue(LiQueue *q)
2.主程序模块
void main()
{
初始化;
do {
接受命令;
处理命令;
} while(命令!=”退出”);
}
五、 程序优缺点分析及优化
1.程序的优点
在程序中设置了kind变量,用于保存车的类别,便于计算不同类别车的停车费用,如下程序段:
printf("\n请输入车的类别【车的类别:1.代表小汽车 2.代表客车 3.代表卡车】:\n");
scanf("%d",&kind);
其中kind可取值1,2,3;若kind取2,则表示一辆客车单位时间内的停车费用是一辆小汽车的2倍,若kind取3,则表示一辆卡车单位时间内的停车费用是一辆小汽车的3倍。
当然printf("\n请输入车的类别【车的类别:1.代表小汽车 2.代表客车 3.代表卡车】:\n");中的1.2.3也可以根据实际情况改变。比如,若实际中,一辆小汽车单位时间内的停车费用
是一辆客车的2倍,一辆卡车单位时间内的停车费用是一辆客车的4倍,则可以改成:
printf("\n请输入车的类别【车的类别:1.代表客车2.代表小汽车 4.代表卡车】:\n");
则kind可取值1,2,4; kind取1时对应的是客车,表示计算停车费用时以一辆客车单位时间内的停车费用为基数,若kind取2,则表示一辆小汽车单位时间内的停车费用是一辆客车的2倍,若kind取4,则表示一辆卡车单位时间内的停车费用是一辆客车的4倍。
2.程序的缺点
(1)输入时间时,程序没有检测错误功能
程序的输入形式如下:
设n=2,输入数据为:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),(‘A’,4,25),(‘A’5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。其中:‘A’表示到达(arrival);‘D’表示离去(departure);‘E’表示输出结束(end)。
设每个输入项的形式为(Choose, CarNumber, Time),其中Choose表示每个括号中的第一项数据,即A/D/E; CarNumber表示每个括号中的第二项,即1/2/3;Time表示每个括号中的第三项,即5/10/15。设前后两次输入的数据中的第三项分别为Time1, Time2;则必须满足Time2≧Time1。而在实际输入过程中用户可能会忽略这一点,所以应该在输入Time是设置一个判断语句,若前后两次输入的Time不满足Time2≧Time1,则要求用户重新输入,直至满足要求为止。
(2)程序的界面不够清晰,一次性输入的数据项比较多,容易出错。
3.改进思想
(1)
为了保证前后两次输入的Time必须满足Time2≧Time1,使程序具有错误检测功能,在程序输入部分添加了如下代码:
printf("输入现在的时刻:\n");
scanf("%d",&time2);
while(time2<time1)
{
printf("时间输入错误,请重新输入:\n");
scanf("%d",&time2);
}
time1=time2; //time1定义为静态变量
(2)为了使程序有更清晰的界面,可在主函数中加入菜单的显示方式。且数据可以采用一次输入一个数据项,分步输入的方式,使输入过程少出错。
于是可以将主函数进行修改。(见附录一)
六、 程序源代码
#include <stdio.h>
#include <malloc.h>
#define N 2 /*停车场内最多的停车数*/
#define Price 2 /*每单位停车费用*/
typedef struct
{
int CarNo[N]; /*车牌号*/
int CarTime[N]; /*进场时间*/
int top; /*栈指针*/
} SqStack; /*定义顺序栈类型*/
/*定义链队类型*/
typedef struct qnode
{
int CarNo; /*车牌号*/
struct qnode *next;
} QNode;
typedef struct
{
QNode *front; /*队首和队尾指针*/
QNode *rear;
} LiQueue;
/*顺序栈的基本运算算法*/
void InitStack(SqStack *&s)
{
s=(SqStack *)malloc(sizeof(SqStack));
s->top=-1;
}
int StackEmpty(SqStack *s)
{
return(s->top==-1);
}
int StackFull(SqStack *s)
{
return(s->top==N-1);
}
/*S中的插入新元素*/
int Push(SqStack *&s,int e1,int e2)
{
if (s->top==N-1)
return 0;
s->top++;
s->CarNo[s->top]=e1;
s->CarTime[s->top]=e2;
return 1;
}
/*删除S的栈顶元素,并用e1,e2返回其值*/
int Pop(SqStack *&s,int &e1,int &e2)
{
if (s->top==-1)
return 0;
e1=s->CarNo[s->top];
e2=s->CarTime[s->top];
s->top--;
return 1;
}
void DispStack(SqStack *s)
{
int i;
for (i=0;i<=s->top;i++)
printf("%d ",s->CarNo[i]);
printf("\n");
}
/*以下为链队列的基本运算算法*/
void InitQueue(LiQueue *&q)
{
q=(LiQueue *)malloc(sizeof(LiQueue));
q->front=q->rear=NULL;
}
int QueueLength(LiQueue *q)
{
int n=0;
QNode *p=q->front;
while (p!=NULL)
{
n++;
p=p->next;
}
return(n);
}
int QueueEmpty(LiQueue *q)
{
if (q->rear==NULL)
return 1;
else
return 0;
}
void enQueue(LiQueue *&q, int e)
{
QNode *s;
s=(QNode *)malloc(sizeof(QNode));
s->CarNo=e;
s->next=NULL;
if (q->rear==NULL) /*若链队为空,则新结点是队首结点又是队尾结点*/
q->front=q->rear=s;
else
{
q->rear->next=s; /*将*s结点链到队尾,rear指向它*/
q->rear=s;
}
}
int deQueue(LiQueue *&q,int &e)
{
QNode *t;
if (q->rear==NULL) /*队列为空*/
return 0;
if (q->front==q->rear) /*队列中只有一个结点时*/
{
t=q->front;
q->front=q->rear=NULL;
}
else /*队列中有多个结点时*/
{
t=q->front;
q->front=q->front->next;
}
e=t->CarNo;
free(t);
return 1;
}
void DisplayQueue(LiQueue *q)
{
QNode *p=q->front;
while (p!=NULL)
{
printf("%d ",p->CarNo);
p=p->next ;
}
}
void main()
{
char choose; /*用于选择命令*/
int no,e1,time,e2,kind; /*用于存放车牌号、当前停车时刻*/
int i,j;
SqStack *St,*St1; /*临时栈St1,当停车场中间的车要推出去时,用于倒车*/
LiQueue *Qu;
InitStack(St);
InitStack(St1);
InitQueue(Qu);
printf("##############################################################################");
printf("\n# #");
printf("\n# 欢迎使用停车场管理系统 #");
printf("\n# #");
printf("\n# 【输入提示】:汽车状态由A、D、E 表示。其中,A:表示汽车到达 D:表示汽车离去, #");
printf("\n# E:表示输出结束。每次输入的数据由三项构成,即:(汽车状态,车牌号,当前时刻) #");
printf("\n# 数据项之间以逗号分开。 例如输入示范:A,1,5 #");
printf("\n##############################################################################\n");
printf("\n正在读取汽车信息...\n");
do
{
printf("\n*****************************************************************");
printf("\n请分别输入汽车状态(A/D/E)、车牌号和当前时刻(数据之间以逗号分开):\n");
scanf(" %c,%d,%d",&choose,&no,&time);
switch(choose)
{
/*************************** 汽车到达 ******************************/
case 'A':
case 'a':
if (!StackFull(St)) /*停车场不满*/
{
Push(St,no,time);
printf("该车在停车场中的位置是:%d\n",St->top+1);
}
else /*停车场满*/
{ enQueue(Qu,no);
printf("\n停车场已满,该车进入便道,在便道中的位置是:%d\n",QueueLength(Qu));
}
break;
/************************* 汽车离开 ********************************/
case 'D':
case 'd':
printf("\n请输入车的类别【车的类别:1.代表小汽车 2.代表客车 3.代表卡车】:\n");
scanf("%d",&kind);
for (i=0;i<=St->top && St->CarNo[i]!=no;i++);
if (i>St->top) /*要离开的汽车在便道上*/
{ /*汽车可以直接从便道上开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾*/
while (Qu->front->CarNo!=no )
{
enQueue(Qu,Qu->front->CarNo );
// deQueue(Qu,Qu->front->CarNo );
Qu->front = Qu->front->next ;
}
deQueue(Qu,no);
printf("\n便道上车牌号为%d的汽车已离开!\n",no);
printf("\n当前便道中的车辆的车牌号分别是:");
DisplayQueue(Qu);
printf("\n");
}
else /*要离开的汽车在停车场中*/
{
for (j=i;j<=St->top;j++)
{
Pop(St,e1,e2); /*e1,e2用来返回被删元素的车牌号和停车时刻*/
Push(St1,e1,e2); /*倒车到临时栈St1中,将e1,e2插入到临时栈中*/
}
Pop(St,e1,e2); /*该汽车离开*/
printf("\n车牌号为%d的汽车停车时间为:%d。停车费用为:%d\n",no,time-e2,(time-e2)*Price*kind);
/*对小汽车而言:当前时刻 减去 该车当时停车的时刻,再乘以价格就是费用,而对于客车和卡车而言,就要乘以kind倍小汽车的价格*/
while (!StackEmpty(St1)) /*将临时栈St1重新回到St中*/
{
Pop(St1,e1,e2);
Push(St,e1,e2);
}
if (!QueueEmpty(Qu)) /*队不空时,将队头进栈St*/
{
deQueue(Qu,e1);
Push(St,e1,time); /*以当前时间开始计费*/
}
printf("\n当前停车场中的车辆的车牌号分别是:"); //输出停车场中的车辆
DispStack(St);
}
break;
/************************ 结束 *********************************/
case 'E':
case 'e':
printf("\n正在退出系统...\n");
if (!StackEmpty(St)) //显示停车场情况
{
printf("\n当前停车场中的车辆的车牌号分别是:"); //输出停车场中的车辆
DispStack(St);
printf("\n");
}
else printf("\n当前停车场中无车辆\n\n");
break;
/************************ 结束 *********************************/
default: /*其他情况*/
printf("输入的命令错误!\n");
break;
}
} while(choose!='E'&&choose!='e');
}
七、 程序运行结果
取N=2,即停车场内最多的停车数为2
取 Price=2,即每单位停车费用为2
输入数据为:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),(‘A’,4,25),(‘A’5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。
程序演示结果如下图所示:
八、心得体会
(1) 该实验涉及到顺序栈的建立、插入、删除等操作,涉及到了链队列的建立、插入、删除等操作。 做这个实验,加深了我对以上知识点的认识和理解。
(2) 提高了 C 语言编程的能力。在程序设计过程中,需要经过反复地编写,调试,运行,发现问题并解决问题,在这次实验的设计中,我加深对程序的了解,提高自己的实际动手能力和独立思考的能力同时我也学会了综合以前学到的基本知识来解决较大问题的方法。
(3) 一方面我养成了注重程序细节的意识。例如:
printf("\n请分别输入汽车状态(A/D/E)、车牌号和当前时刻(数据之间以逗号分开):\n");
scanf(" %c,%d,%d",&choose,&no,&time);
%c,前面必须留一个空格,否则程序在显示的时候就会有一些问题。
(4)另一方面我也深刻地认识到了《数据结构》这门课程的重要性。“数据结构”在计算机科学中是一门综合性的专业基础课。数据结构的研究不仅涉及到计算机硬件的研究,而且和计算机软件的研究有着更密切的关系,无论是编译程序还是操作系统,都涉及到数据元素在存储器中的分配问题。在研究信息检索时也必须 考虑如何组织数据,以便使查找和存取数据元素更为方便。可以认为数据结构是介于数学、计算机硬件和计算机软件三者之间的一个核心内容,是从事计算机科学研究及其应 用的科技工作者必须掌握的重要内容
附一、优化后的程序
#include <stdio.h>
#include <malloc.h>
#define N 2 /*停车场内最多的停车数*/
#define Price 2 /*每单位停车费用*/
typedef struct
{
int CarNo[N]; /*车牌号*/
int CarTime[N]; /*进场时间*/
int top; /*栈指针*/
} SqStack; /*定义顺序栈类型*/
/*定义链队类型*/
typedef struct qnode
{
int CarNo; /*车牌号*/
struct qnode *next;
} QNode;
typedef struct
{
QNode *front; /*队首和队尾指针*/
QNode *rear;
} LiQueue;
/*顺序栈的基本运算算法*/
void InitStack(SqStack *&s)
{
s=(SqStack *)malloc(sizeof(SqStack));
s->top=-1;
}
int StackEmpty(SqStack *s)
{
return(s->top==-1);
}
int StackFull(SqStack *s)
{
return(s->top==N-1);
}
/*S中的插入新元素*/
int Push(SqStack *&s,int e1,int e2)
{
if (s->top==N-1)
return 0;
s->top++;
s->CarNo[s->top]=e1;
s->CarTime[s->top]=e2;
return 1;
}
/*删除S的栈顶元素,并用e1,e2返回其值*/
int Pop(SqStack *&s,int &e1,int &e2)
{
if (s->top==-1)
return 0;
e1=s->CarNo[s->top];
e2=s->CarTime[s->top];
s->top--;
return 1;
}
void DispStack(SqStack *s)
{
int i;
for (i=0;i<=s->top;i++)
printf("%d ",s->CarNo[i]);
printf("\n");
}
/*以下为链队列的基本运算算法*/
void InitQueue(LiQueue *&q)
{
q=(LiQueue *)malloc(sizeof(LiQueue));
q->front=q->rear=NULL;
}
int QueueLength(LiQueue *q)
{
int n=0;
QNode *p=q->front;
while (p!=NULL)
{
n++;
p=p->next;
}
return(n);
}
int QueueEmpty(LiQueue *q)
{
if (q->rear==NULL)
return 1;
else
return 0;
}
void enQueue(LiQueue *&q, int e)
{
QNode *s;
s=(QNode *)malloc(sizeof(QNode));
s->CarNo=e;
s->next=NULL;
if (q->rear==NULL) /*若链队为空,则新结点是队首结点又是队尾结点*/
q->front=q->rear=s;
else
{
q->rear->next=s; /*将*s结点链到队尾,rear指向它*/
q->rear=s;
}
}
int deQueue(LiQueue *&q,int &e)
{
QNode *t;
if (q->rear==NULL) /*队列为空*/
return 0;
if (q->front==q->rear) /*队列中只有一个结点时*/
{
t=q->front;
q->front=q->rear=NULL;
}
else /*队列中有多个结点时*/
{
t=q->front;
q->front=q->front->next;
}
e=t->CarNo;
free(t);
return 1;
}
void DisplayQueue(LiQueue *q)
{
QNode *p=q->front;
while (p!=NULL)
{
printf("%d ",p->CarNo);
p=p->next ;
}
printf("\n");
}
void main()
{
int choose; /*用于选择命令*/
int no,e1,time2,e2,no_away; /*no_away:汽车离开时输入车牌号; time2:当前停车时刻;*/
static int time1; /*静态变量time1用于存放上次时刻*/
int i,j;
int kind; /*车的类别*/
time1=time2=0;
SqStack *St,*St1; /*临时栈St1,当停车场中间的车要推出去时,用于倒车*/
LiQueue *Qu;
InitStack(St);
InitStack(St1);
InitQueue(Qu);
printf("########################################################");
printf("\n# #");
printf("\n# 欢迎使用停车场管理系统 #");
printf("\n# #");
printf("\n########################################################\n");
do
{
printf("\n******************** 主菜单 ****************************\n");
printf("** 1:车辆到达 **\n");
printf("** 2:车辆离开 **\n");
printf("** 3:显示停车场的车辆 **\n");
printf("** 4:显示便道中的车辆 **\n");
printf("** 0:退出 **\n");
printf("********************************************************\n");
printf("请选择:");
scanf("%d",&choose);
switch(choose)
{
case 1:
//######################汽车到达###########################
printf("输入输入车牌号、当前时刻(数据之间以逗号隔开):\n");
scanf("%d,%d",&no,&time2); /*依次输入车牌号、当前停车时刻*/
while(time2<time1)
{
printf("时间输入错误,请重新输入当前时刻:\n");
scanf("%d",&time2);
}
time1=time2;
if (!StackFull(St)) /*停车场不满*/
{
Push(St,no,time1);
printf("该车在停车场中的位置是:%d\n",St->top+1);
}
else /*停车场满*/
{ enQueue(Qu,no);
printf("\n停车场已满,该车进入便道,在便道中的位置是:%d\n",QueueLength(Qu));
}
break;
case 2:
//#######################汽车离开#########################
printf("输入车牌号:\n");
scanf("%d",&no_away);
printf("请输入车的类别【车的类别:1.代表小汽车 2.代表客车 3.代表卡车】:\n");
scanf("%d",&kind);
printf("输入现在的时刻:\n"); /*现在的时刻time1得大于之前的时刻time1*/
scanf("%d",&time2);
while(time2<time1)
{
printf("时间输入错误,请重新输入:\n");
scanf("%d",&time2);
}
time1=time2;
for (i=0;i<=St->top && St->CarNo[i]!=no_away;i++);
if (i>St->top) /*汽车可以直接从便道上开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾*/
{
while (Qu->front->CarNo!=no_away )
{
enQueue(Qu,Qu->front->CarNo );
Qu->front = Qu->front->next ;
}
deQueue(Qu,no_away);
printf("\n便道上车牌号为%d的汽车已离开!\n",no_away);
printf("\n当前便道中的车辆的车牌号分别是:");
DisplayQueue(Qu);
printf("\n");
}
else
{
for (j=i;j<=St->top;j++)
{
Pop(St,e1,e2); /*e1,e2用来返回被删元素的车牌号和停车时刻*/
Push(St1,e1,e2); /*倒车到临时栈St1中,将e1,e2插入到临时栈中*/
}
Pop(St,e1,e2); /*该汽车离开*/
printf("\n车牌号为%d的汽车停车费用为:%d\n",no_away,(time2-e2)*Price*kind); /*对小汽车而言:当前时刻 减去 该车当时停车的时刻,再乘以价格就是费用,而对于客车和卡车而言,就要乘以kind倍小汽车的价格*/
while (!StackEmpty(St1)) /*将临时栈St1重新回到St中*/
{
Pop(St1,e1,e2);
Push(St,e1,e2);
}
if (!QueueEmpty(Qu)) /*队不空时,将队头进栈St*/
{
deQueue(Qu,e1);
Push(St,e1,time1); /*以当前时间开始计费*/
}
}
break;
case 3:
//###################显示停车场情况############################
if (!StackEmpty(St))
{
printf("当前停车场中的车辆的车牌号分别是:"); /*输出停车场中的车辆*/
DispStack(St);
}
else
printf("停车场中无车辆!\n");
break;
case 4:
//####################显示便道情况#############################
if (!QueueEmpty(Qu))
{
printf(" 当前便道中的车辆的车牌号分别是:"); /*输出便道中的车辆*/
DisplayQueue(Qu);
}
else
printf("便道中无车辆!\n");
break;
case 0:
//###################### 结束 ###############################
printf("\n正在退出系统...\n");
if (!StackEmpty(St))
{
printf("当前停车场中的车辆的车牌号分别是:"); /*输出停车场中的车辆*/
DispStack(St);
}
if (!QueueEmpty(Qu))
{
printf(" 当前便道中的车辆的车牌号分别是:"); /*输出便道中的车辆*/
DisplayQueue(Qu);
}
break;
/**********************************************************/
default: /*其他情况*/
printf("输入的命令错误!\n");
break;
}
} while(choose!=0);
}
附二、优化后程序的运行结果
取N=2,即停车场内最多的停车数为2
取 Price=2,即每单位停车费用为2
输入数据为:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),(‘A’,4,25),(‘A’5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。
程序演示结果如下图所示: