logo资料库

数据结构课程设计报告.doc

第1页 / 共22页
第2页 / 共22页
第3页 / 共22页
第4页 / 共22页
第5页 / 共22页
第6页 / 共22页
第7页 / 共22页
第8页 / 共22页
资料共22页,剩余部分请下载后查看
《数据结构》课程设计 停 车 场 管 理 班 级: 姓 名: 学 号: 指导老师: 日 期: 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
分享到:
收藏