宁波大红鹰学院
信息工程学院
课
程
设
计
报
告
停车场管理系统
信息工程学院制
项目名称:
项目组长:
项目成员:
班级名称:
专业名称:
完成时间:
目 录
一、案例描述 ........................................................................................................................- 1 -
1、总体描述................................................................................................................. - 1 -
2、模块描述................................................................................................................. - 1 -
二、设计思路 ........................................................................................................................- 1 -
三、概要设计 ........................................................................................................................- 2 -
四、程序设计 ........................................................................................................................- 2 -
1、数据结构描述......................................................................................................... - 2 -
2、主函数及其流程图................................................................................................. - 3 -
3、源程序 ......................................................................................................................- 6 -
五、调试与分析................................................................................................................. - 12 -
1 开始运行程序 .......................................................................................................... - 12 -
2 车辆进入停车场 ...................................................................................................... - 13 -
3 显示停车场信息 ...................................................................................................... - 13 -
4 车辆离开 .................................................................................................................. - 14 -
六、设计总结 ......................................................................................................................- 14 -
1、完成情况............................................................................................................... - 14 -
2、心得体会............................................................................................................... - 14 -
一、案例描述
1、总体描述
设有一个可以停放 n 辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到
达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场
的最里面)。如果停车场已放满 n 辆车,则后来的车辆只能在停车场大门外的便道上等待,
一旦停车场内有车开走,则排以便道上的第一辆车就进入停车场。停车场内如有某辆车要开
走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再
依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。
如果停留在便道上的车未进停车场时,允许其离去,不收停车费,并且仍然保持在便道上等
待的车辆的次序。编制一程序模拟该停车场的管理。
2、模块描述
1)菜单设计:菜单设计的比较简单,最上面是欢迎语和程序开发人员,一
开始不能直接进入菜单,要输入停车场容量和收费标准后才可以进入菜单,上面
会有 4 个选项功能选择你可以输入不同的数字进入不同的模块。
2)停车模块:当一辆车进入停车场时,先输入其车牌号,再判断栈是否已
满,如果栈没满,则将车停入停车场,若栈已满,则车就停在便道上,此时只有
当停车场里的某辆车要开走时,便道上的车才可以进入停车场,否则就得和后面
进来的车一样停在便道上。
3)出车模块:当停车场内某辆车要离开时,先判断这辆车是否是开入停车
场的最后一辆车,若是,则直接离开,若不是,则在它之后开入的车辆必须先退
出车场为它让路,待该辆车开出大门外,其它的车辆在按原次序进入车场,此时
便道上的车才可以进入停车场,每辆停放在车场的车在它离开停车场时必须按它
停留的时间长短缴纳费用。
二、设计思路
由于停车场是一个狭窄通道,而且只有一个大门可供汽车进出,问题要求
汽车停车场内按车辆到达时间的先后顺序,依次由北向南排列。由此很容易联
想到数据结构中的堆栈模型,因此可首先设计一个堆栈,以堆栈来模拟停车场,
又因为每个汽车的车牌号都不一样,这样一来可以根据车牌号准确找到汽车,
所以堆栈里的数据元素设计成汽车的车牌号。当停车场内某辆车要离开时,在
它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆
再按原次序进入停车场。这是个一退一进的过程,而且让道的汽车必须保持原
有的先后顺序,因此可再设计一个堆栈,以之来暂时存放为出站汽车暂时让道
的汽车车牌号。当停车场满后,继续进来的汽车需要停放在停车场旁边的便道
上等候,若停车场有汽车开走,则按排队的先后顺序依次进站,最先进入便道
的汽车将会最先进入停车场,这完全是一个先进先出模型,因此可设计一个队
- 1 -
列来模拟便道,队列中的数据元素仍然设计成汽车的车牌号。另外,停车场根
据汽车在停车场内停放的总时长来收费的,在便道上的时间不计费,因此必须
记录车辆进入停车场时的时间和车辆离开停车场时的时间。
三、概要设计
1、用栈模拟停车场,用队列模拟车场外的便道,按照从终端读入的输入数
据序列进行模拟管理。
2、每一组输入数据包括三个数据项:汽车到达或离去的信息,汽车牌照号
码以及到达或离去的时刻。
3、每次输入完进行输出操作:若是车辆到达,输出汽车在停车场内或便道
上的停车位置;若是车辆离去,输出停留时间和应缴纳的费用(在便道上停留的
时间不收费)。
4、其中栈以顺序结构实现,队列以链表结构实现。
四、程序设计
1、数据结构描述
本程序定义了五个结构体,一个结构体作为时间结点,定义了时间的小时和
分;一个结构体作为车辆信息结点,定义了车辆信息的车牌号,车辆到达时间和
车辆离开时间;一个结构体作为模拟停车站的栈,定义了栈的大小的栈顶指针;
一个结构体作为模拟通道的队列,定义了队列的头指针和尾指针。详细定义如下:
typedef struct time
{
int hour;
int min;
}Time; /*时间结点*/
typedef struct node
{
char num[10];
Time reach;
Time leave;
}Car; /*车辆信息结点*/
typedef struct NODE
{
Car *stack[100];
int top;
}SqStack; /*停车站*/
typedef struct car
{
- 2 -
Car *data;
struct car *next;
}QNode;
typedef struct Node
{
QNode *head;
QNode *rear;
}LinkQueue; /*通道*/
2、主函数及其流程图
1)停车模块:当一辆车进入停车场时,先输入其车牌号,再判断栈是否已
满,如果栈没满,则将车停入停车场,若栈已满,则车就停在便道上,此时只有
当停车场里的某辆车要开走时,便道上的车才可以进入停车场,否则就得和后面
进来的车一样停在便道上。这里有两种情况,当车库未满的程序流程图如图 1 所
示:
start
车场未满
找到车位
记录车辆信息
去便道函数
栈顶指针加 1
break
返回主函数
图 1
- 3 -
车辆停在便道上的程序流程图如图 2 所示:
start
初始化
便道上有车
记录便道车位
车库和便道都已满
记录车辆信息
break
返回主函数
图 2
2)出车模块:当停车场内某辆车要离开时,先输入车在停车场的位置,然
后判断这辆车是否是开入停车场的最后一辆车,若是,则直接离开,若不是,则
在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它的车
辆在按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的
时间长短缴纳费用。程序流程图如图 3 所示:
- 4 -
start
输入离开车的车牌号
找到结构体
车是最后一辆
计算时间和费用
是便道上的第一辆车
便道上的第一辆车驶入停车场,记录时间
便道上的车向前移动
返回主函数
图 3
3)信息保存模块:当停车场或便道上有某辆车进入时,系统就要对车辆的一些
信息进行存储,先定义一个变量,然后存储信息,再使这个变量自增,然后存储
信息,如此循环,只有当这个变量的长度大于停车场和便道的总长度时才退出,
程序流程图如图 4 所示:
- 5 -
start
定义 i,并赋值 i=0
以‘写’的形式打开文件 car.txt
i