Ⅳ. 车辆离开模块
主要流程。
1) 输入2个驶离车辆的信息(车牌号、车辆驶离时间)。 2) 判断停车场是否为空。
3) 如果停车场为空,提示用户停车场未停放车辆。
4) 如果停车场不为空,且不为满,根据车牌号查找车辆,如果存在,计算停车所用费
用,打印车辆信息,该车辆驶离停车场,让便道上的第一辆车辆驶入停车场;如果 不存在,提示用户车辆未在停车场停放。
5) 如果停车场已满,根据车牌号查找车辆,如果停车场内部不存在,继续在便道查询, 如果存在于便道上,直接驶离便道即可;如果存在于停车场内,计算停车所用费 用,打印车辆信息,该车辆驶离停车场,让便道上的第一辆车辆驶入停车场。
Ⅴ. 停车场车辆停放情况
主要流程。
1) 输入该命令所对应的选择(3)。 2) 打印停车场的车位的停放情况。
Ⅵ. 设计中用到的一些函数定义(栈、队列的定义)。
①设定链式栈的抽象数据类型为: InitStack(&S)
操作结果:构造一个空栈S。 DestroyStack(&S)
初始条件:栈S已经存在。 操作结果:销毁栈S。 ClearStack(&S)
初始条件:栈S已经存在。 操作结果:将S清空为空栈。 StackLength(&S)
初始条件:栈S已经存在。 操作结果:返回栈S的长度。 StackEmpty(&S)
初始条件:栈S已经存在。
操作结果:若S为空栈,则返回TURE,否则返回FALSE。 GetTop(S,&e)
初始条件:栈S已经存在。
操作结果:若栈S不空,则以e返回栈顶元素。 Push(&S,e)
初始条件:栈S已经存在。
操作结果:在栈S的栈顶插入新的栈顶元素e。 Pop(&S,&e)
初始条件:栈S已经存在。
操作结果:删除S的栈顶元素,并以e返回其值。 StackTraverse(S,visit()) 初始条件:栈S已经存在。
操作结果:从栈底到栈顶一次对S中的每个元素调用函数visit()。 }ADT stack
②设定链式队列的抽象数据类型为: typedef struct Qnode{
QelemType data; Struct Qnode *next; }Qnode,*QueuePtr;
typedef struct{
QueuePtr front; QueuePtr teat; }
ADT Queue{
数据对象:D={ai|ai∈ElemSet,i=1,2,?,n,n>=0} 数据关系:R1={/ai-1,ai∈D,i=2,?,n} 约定其中一端为队列头,一端为队列尾。 基本操作 InitQueue(&Q)
操作结果:构造一个空队列Q。 DestroyQueue(&Q)
初始条件:队列Q已经存在。
操作结果:队列Q被销毁,不再存在。 ClearQueue(&Q)
初始条件:队列Q已经存在。 操作结果:将Q清空为空队列。 QueueLength(Q)
初始条件:队列Q已经存在。
操作结果:返回Q的元素个数,即队列的长度。 QueueEmpty(Q)
初始条件:队列Q已经存在。
操作结果:若Q为空队列,则返回TURE,否则返回FALSE。 GetHead(Q,&e)
初始条件:Q为非空队列。
操作结果:用e返回Q队列头元素。 EnQueue(&Q,e)
初始条件:队列Q已经存在。
操作结果:插入元素e为Q的新队尾元素。 DeQueue(&Q,&e)
初始条件:Q为非空队列。
操作结果:删除Q的队头元素,并以e返回其值。 QueueTraverse(Q,visit()) 初始条件:队列Q已经存在。 操作结果:从队头到队尾,依次对Q的每一个数据元素调用函数visit()。一旦visit()失败,则操作失败。 }ADT Queue
Ⅶ. 总的程序设计流程图 开始 初始化两个栈Stack和 Stack2及一个队列Queue 进入主菜单 车到达 列表显示 车离开 车场内信息 车场是否为空 让前方车辆进入临时栈 对车量进行计费 判断便道是否有车 判断栈是否为满 元素进栈Stack 元素进队列Queue 队列Queue中元素出队 栈Stack元素出栈 队列中元素进栈
图4.1 停车场管理系统流程图
退出 便道信息 退出列表显示 便道车进车场 结束 5 程序运行数据及其结果
1.主界面:四个选项(到达、离开、显示停车场信息和退出程序)
2.选择数字1后,点击回车,界面会提示请输入车牌号和车辆进站时间。