停车场文档格式.docx
《停车场文档格式.docx》由会员分享,可在线阅读,更多相关《停车场文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
![停车场文档格式.docx](https://file1.bdocx.com/fileroot1/2022-10/27/12287926-bd44-4cb3-a79c-92e44c2be25d/12287926-bd44-4cb3-a79c-92e44c2be25d1.gif)
P)
操作结果:
构造一个空栈P。
Push(&
P,e)
初始条件:
栈P已经存在
在栈的栈顶插入新的栈顶元素e。
Pop(&
P,Car&
e)
删除P的栈顶元素,并以e返回其值。
}ADTStack;
2、设定队列的抽象数据类型定义为:
ADTQueue{
D={ai|ai∈Shortcut,i=1,2,……,n,n>
InitQueue(&
S)
构造一个空队列S
EnQueue(&
S,*number,ar_time)
队列S已经存在
插入元素e为S新的队尾元素
DeQueue(&
S,&
w)
删除队列的队头元素w
}ADTQueue;
3.本程序包括四个模块
1)主程序模块
Voidmain()
{
声明定义
调用栈与队列的函数
主信息(输入初始操作信息)
}
2)栈模块---实现栈抽象数据类型
3)队列模块---实现队列抽象数据类型
4)结构体模块---用于对对象及变量的管理
各模块之间的调用关系如下:
主程序模块
↓
结构体模块
栈模块
队列模块
4.设计停车管理程序的要求
按照从终端读入的输入数据进行模拟管理,每一组输入数据包括三个数据项:
汽车“进站”或“出站”信息、汽车牌照号码以及进站或出站的时刻,对每一组输入数据进行操作后的输出信息为:
若是车辆到达,则输出汽车在停车场内或便道上的停车位置;
若是车辆离去,则输出汽车在停车场内逗留的时间和应交纳的费用(在便道上停留不收费),按以顺序结构实现,队列以链表结构实现。
三、详细设计
1、结点类型及部分数据定义
a、停车场的车
typedefstructCar1
charnumber[20];
//汽车车牌号
intar_time;
//汽车到达时间
}CarNode;
b、停车场
typedefstruct
{
CarNode*base;
//停车场的堆栈底
CarNode*top;
//停车场的堆栈顶
intstacksize;
}Park;
c、便道上的车
typedefstructCar2
structCar2*next;
}*CarPtr;
d、便道
typedefstruct
CarPtrfront;
//便道的队列的队头
CarPtrrear;
//便道的队列的队尾
intlength;
}Shortcut;
2、主函数和其他函数的算法分析
StatusArrival(Park&
P,Shortcut&
//对进站车辆的处理,若停车场不满,对进站车辆,输入车牌号及进站
//时刻,并显示出其所在的车道,若停车场满,将其停在便道上(不计费)
StatusLeave(Park&
P,Park&
Q,Shortcut&
//对离站车辆的处理,输入车牌号,显示出场时刻,并计算费用,若便
//道上有车,将其移到停车场并开始计时
四、调试分析
1、在调用栈与队列的函数时遇到一些问题,比如我想通过键盘输入来确定停车场的停车数,所以初始化时那些操作函数必须带有停车数这个参数。
2、在设计Leave函数时,我想设计两个形参,但调试后总出现错误。
3、刚开始设计的程序输入车牌号时只能是整型,后来改了一下,使得输入的车牌号为字符串型。
4、在本程序中,时间只能是整点,可以将时间设计一个结构体,由于时间原因,在本程序中没有进行改进。
五、用户手册
1、本程序的运行环境为DOS操作系统,执行文件为:
停车场管理系统.exe。
2、进入演示程序后即显示文本方式的用户界面:
3、看到“请选择您要进行的操作(A,D,E):
”提示后,按提示依次输入车辆信息,按回车键结束。
4、接受其他命令后即执行相应运算和显示相应结果,在此不再一一演示。
六、测试结果
1、车辆进站:
车牌号w34进站时刻4输出如下:
当停车场满时,输出如下:
3、车辆出站车牌号:
w34
附录
源程序:
//头文件
#include<
stdio.h>
stdlib.h>
malloc.h>
string.h>
//函数返回状态代码
#defineOK1
#defineERROR0
#defineTRUE1
#defineFALSE0
#defineINFEASIBLE-1
#defineOVERFLOW-2
#defineSIZE2//停车场位置数
typedefintStatus;
//栈,模拟停车场
typedefstructCar1//停车场的车
charnumber[20];
intar_time;
typedefstruct//停车场
CarNode*base;
CarNode*top;
intstacksize;
//队列,模拟便道,以链表形式实现
typedefstructCar2//便道上的车
structCar2*next;
typedefstruct//便道
CarPtrfront;
CarPtrrear;
intlength;
StatusInitStack(Park&
P)//初始化停车场
P.base=(CarNode*)malloc(SIZE*sizeof(Car1));
if(!
P.base)
exit(OVERFLOW);
P.top=P.base;
P.stacksize=0;
returnOK;
StatusPush(Park&
P,CarNodee)//车进入停车场
*P.top++=e;
++P.stacksize;
StatusPop(Park&
P,CarNode&
e)//车离开停车场
if(P.top==P.base)
returnERROR;
else
e=*(--P.top);
--P.stacksize;
}
StatusInitQueue(Shortcut&
S)//初始化便道
S.front=S.rear=(CarPtr)malloc(sizeof(Car2));
S.front||!
S.rear)
S.front->
next=NULL;
S.length=0;
StatusEnQueue(Shortcut&
S,char*number,intar_time)//车进入便道
CarPtrp;
p=(CarPtr)malloc(sizeof(Car2));
p)
strcpy(p->
number,number);
p->
ar_time=ar_time;
S.rear->
next=p;
S.rear=p;
++S.length;
StatusDeQueue(Shortcut&
S,CarPtr&
w)//车离开便道
if(S.length==0)
w=S.front->
next;
next=S.front->
next->
--S.length;
StatusArrival(Park&
S)//对进站车辆的处理
printf("
请输入车牌号:
"
);
scanf("
%s"
number);
进场的时刻:
%d"
&
ar_time);
if(P.stacksize<
SIZE)
CarNodec;
strcpy(c.number,number);
c.ar_time=ar_time;
Push(P,c);
该车应停在第%d号车道!
\n"
P.stacksize);
EnQueue(S,number,ar_time);
停车场已满,请暂时停在便道的第%d个位置!
S.length);
StatusLeave(Park&
S)//对离站车辆的处理
intle_time,flag=1,fee,ar_time;
//getchar();
出场的时刻:
le_time);
CarNodee,m;
CarPtrw;
while(P.stacksize)
Pop(P,e);
if(strcmp(e.number,number)==NULL)
flag=0;
fee=(le_time-e.ar_time)*2;
//计算费用
ar_time=e.ar_time;
break;
}