printf(\出场的时刻:\ scanf(\ CarNode e,m; CarPtr w;
while(P.stacksize) { Pop(P,e);
if(e.number==number) {
flag=0;
money=(le_time-e.ar_time)*2; ar_time=e.ar_time; break; }
Push(P1,e); }
while(P1.stacksize) {
Pop(P1,e); Push(P,e); }
// 车从停车场中出 if (flag == 0) {
if(S.length!=0) {
DeQueue(S,w); m.ar_time=le_time; m.number=w->number; Push(P,m); free(w);
printf(\车牌号为%d的车已由便道进入停车场\\n\ }
printf(\停车费为%d, 占用车位数为%d\\n\ } else {
printf(\停车场不存在牌号为%d的车\\n\ }
return OK; }
功能:对离站车辆的处理,记录离站车辆的车牌号,当P.stacksize!=0,即栈不为
空时进入while循环,Pop(P,e)让栈顶的车出栈,判断车牌号是不是和要离站的车的车牌号相等,若相等,则将标志flag赋值为0,且计算需要交纳的费用,并用break跳出循环;若不相等,则将车停到临时停车场P1,
并继续while循环,直到车牌号与离站车的车牌号相等为止。当P1即临时停车场不为空时,将车开出临时停车场P1并进入停车场P。如果flag==0,即确定有车离开停车场,当便道不为空时,将队头的车离开便道并进入停车场的第P.stacksize个车位。如果flag!=0,则打印“停车场不存在车牌号为number的车。
函数的调用关系图: 主函数 InitQueue Arrival InitStack EnQueue Push Arrival 主函数 Leave Pop Push DeQueue Leave 四、调试分析
1、界面
2、当停车数量小于等于5时,停在停车场内。
3、当停车数量大于5时,按顺序停在便道上
4、车从停车场离开时,统计费用和占用车位数,且停在便道上的最前边的车进入停车场。
5、停车场中不存在车牌号为**的车
五、用户手册
这个程序用来实现对停车场内车辆的管理,整个操作界面为中文,更加符合人性化的标准,使得用户使用方便,而且每一个操作都有提示,使得初次接触该程序的用户也能很快适应程序的操作。
这个程序操作简单,对于车牌号,只需输入车牌号上的数字就行,而且对于进出停车场的时间,也简化了操作,只需输入当时的时刻就行,没有具体到小时和分钟,但也许这也是该程序不足之处所在。而且该程序也给用户提供了选择的机会,当运行该程序后,如果想退出程序,可以输入e或E退出该运行程序。
六、测试结果
利用此程序可以进行最简单的停车场管理,可以统计停车的数量以及所需交纳的费用。但是,该程序也有很多不足的地方。主要表现在车辆的车牌号上,现实中的车牌号是一串字符,可是,在这个程序中,为了简便起见,就把车牌号定义为了整型,这个与现实是有些不符的。还有一个不足地方就是记录车辆进入停车场以及离开停车场的时间,应该精确到小时以及分钟的,但在程序中,为了简便起见,只是设置成了一个时刻,所以,在这方面还是有待改进的。改进的程序中,还应该增加时间的判断功能,即停车场内有可能有车辆停放的时间超过一天。
还有一个很重要的问题,对于停车场内可以停放的最多车辆数,为了测试数据的方便,在程序中,定为了5,在实际使用中,可以改变程序开头的宏定义以增加停车场的容量。