《数据结构》课程设计
停
车
场
管
理
班 级:
姓 名:
学 号:
指导老师:
日
期: 2 0 1 0 – 6 – 18
目录
(一)设计目的…………………………………………2
(二)问题描述及要求…………………………………2
1、问题描述…………………………..…………..2
2、基本要求………………………………………2
3、实现要求………………………………………3
(三)总体设计…………………………………………3
1、设计思想………………………………………3
2、相关函数及其作用……………………….…….3
(四)详细设计…………………………………………4
1、数据类型及相关函数:……………….……….4
2、模块间的关系及流程图………………………..5
(五)测试与调试……………………………………..10
1、调试过程中的主要问题…………………………10
2、测试结果……………………………………….11
(六)源程序清单…………………………………..…13
(七)心得体会……………………………………..…21
1
一、设计目的
1、 通过课程设计,加深对《数据结构》这一课程所学内容的进一步
理解与巩固。
2、 通过课程设计,加深对结构化设计思想的理解,能对系统功能进
行分析,并设计合理的模块化结构。
3、 通过课程设计,提高程序开发功能,能运用合理的控制流程编写
清晰高效的程序。
4、 通过课程设计,训练 C 程序调试能力
5、 通话课程设计,培养分析问题、解决实际问题的能力。
二、问题描述及要求
1、问题描述:
设停车场内只有一个可停放 n 辆汽车的狭长通道,且只有一个大
门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次
由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最
北端),若车场内已停满 n 辆汽车,则后来的汽车只能在门外的便道
上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车
场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,
待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车
场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停
车场编制按上述要求进行管理的模拟程序。
2、基本要求:
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的
输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车
“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每
一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车
在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场
内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以
顺序结构实现,队列以链表实现。
3、实现要求
设 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’表示到达;‘D’表示离去,‘E’表示输入结束。
2
三、总体设计
1、 设计思想:
由于停车场是一个狭窄通道,而且只有一个大门可供汽车进出,
问题要求汽车停车场内按车辆到达时间的先后顺序,依次由北向南排
列因此可首先设计一个顺序栈,以顺序栈来模拟停车场,我设计的停
车场管理系统首先初始化栈模拟车场的容量,车辆到达时实现入栈操
作,在栈中加入一个新元素,然后为新元素设置变量保存车辆的信息。
车辆的信息包括:车牌号、汽车到达/离去标志、到达/离去时刻等。
由于每个汽车的车牌号都不一样,可以根据车牌号准确找到汽车
位置,利用顺序栈里的数据元素设计成汽车的车牌号。当停车场内某
辆车要离开时,在他之后进入的车辆必须先退出车场为它让路,待该
辆车开出大门外,其他车辆再按原次序进入停车场。这是个一退一进
的过程,而且让道的汽车必须保持原有的先后顺序,因此可再设计一
个顺序栈,以之来暂时存放为出站汽车暂时让道的汽车车牌号。当停
车场满后,继续进来的汽车需要停放在停车场旁边的便道上等候,若
停车场有汽车开走,则按排队的先后顺序依次进站,最先进入便道的
汽车将会最先进入停车场,这完全是一个先进先出模型,因此可设计
一个队列来模拟便道,队列中的数据元素仍然设计成汽车的车牌号。
另外,停车场根据汽车在停车场内停放的总时长来收费的,在便道上
的时间不计费,因此必须记录车辆进入停车场时的时间,车辆离开停
车场时的时间不需要记录,当从终端输入时可直接使用。由于时间不
象汽车一样需要让道,我设计了一个顺序表来存放时间。又用顺序表
用派生法设计了一个顺序栈,恰好满足上面模拟停车场的需要。
2、相关函数及其作用:
void InitStack(SeqStackCar *s)
初始化栈
int InitQueue(LinkQueueCar *Q) 初始化便道
int Arrival(SeqStackCar *Enter,LinkQueueCar *W) 车辆到达
操作
void Leave(SeqStackCar *Enter,SeqStackCar
*Temp,LinkQueueCar *W) 车辆离开操作
void List(SeqStackCar S,LinkQueueCar W)
显示存车信息
void PRINT(CarNode *p)
打印出站车的信息
3
四、详细设计
1、数据类型及相关函数:
CarNode-建立车辆信息结点
SeqStackCar-模拟车站
LinkQueueCar-模拟便道
typedef struct node
{
int num;
int reachtime;
int leavetime;
}CarNode; /*车辆信息结点*/
typedef struct NODE
{
CarNode *stack[MAX+1];
int top;
}SeqStackCar; /*模拟车站*/
typedef struct car
{
CarNode *data;
struct car *next;
}QueueNode;
typedef struct Node
{
QueueNode *front;
QueueNode *rear;
}LinkQueueCar; /*模拟通道*/
2、模块间的关系及流程图:
(1)模块见的关系:
4
开始
主函数
系统界面
Arrival
Leave
List
Exist
PRINT
Leave
List1
List2
AddRemoveParking
List
(2)流程图:
界面 Option 函数:
主函数
结束
5
Char choice
choice=='N'||choice=='n'
Y
Exist(0)
N
Arrival 函数:
CarNode*P
Enter->toptop++
N
输出车场满,便道上等
Return(TRUE)
Return(TRUE)
Leave 函数
6
int flag,tag;
Flag
选择 1|2|3
Y
N
N
1
Y
Scanf(“%d”,&tag)
Tag>=1||tag<=3
Y
Break
N
Break
Tag=1
List1(S)
Break
Y
Tag=2
N
Y
List2(W)
N
Tag=2
N
Break
Flag=0
Break
Y
Break
7