停车场管理系统实验设计报告

上传人:新** 文档编号:490193802 上传时间:2023-10-18 格式:DOC 页数:28 大小:373KB
返回 下载 相关 举报
停车场管理系统实验设计报告_第1页
第1页 / 共28页
停车场管理系统实验设计报告_第2页
第2页 / 共28页
停车场管理系统实验设计报告_第3页
第3页 / 共28页
停车场管理系统实验设计报告_第4页
第4页 / 共28页
停车场管理系统实验设计报告_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《停车场管理系统实验设计报告》由会员分享,可在线阅读,更多相关《停车场管理系统实验设计报告(28页珍藏版)》请在金锄头文库上搜索。

1、. . . 数据结构实验设计报告题目: 停车场管理系统 : * 学号: 2010211998 班级: 0491002 学院:计算机科学与技术学院目录一、 问题描述03 二、 问题分析03三、 数据结构描述04四、 算法设计04五、 程序优缺点分析与优化05六、 程序源代码07七、 程序运行结果13八、 心得体会15附一、优化后的程序16附二、优化后程序的运行结果23一、 问题描述设计一个停车场管理系统。设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若停车场已停满

2、n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。基本要求以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照以与到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场或便道上的停车位置;若是车辆离去,

3、则输出汽车在停车场停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。选作容(1)两个栈共享空间,思考应开辟数组的空间是多少?(2)汽车可有不同种类,则他们的占地面积不同,收费标准也不同,如1辆客车和1.5辆小汽车的占地面积一样,1辆十轮卡车占地面积相当于3辆小汽车的占地面积。(3)汽车可以直接从便道上开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾。二、问题分析 该问题需要以栈和队列作为基本的存储结构,以顺序栈模拟停车场,以链队列模拟车场外的便道。汽车进入停车场,即是在顺序栈上执行进栈操作,退出停车场即是在顺序栈上执行出栈操作;汽车进入便道,

4、即是在链队列上执行入队操作,退出便道即是在链队列上执行出队操作。当停车场某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场。设要删除的元素在顺序表St中位置为i,则从i到top之间的全部元素进入到一个临时栈St1中, 其次再删除该元素,然后将临栈St1的元素按照“先进后出”的原则重新回到St中。若链队不空,则使队头进栈St,并以当前时刻开始计费。程序需要构造两个顺序栈St和St1,其中St用于模拟停车场,St1用作临时栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车。此外还需要构造一个链队列Qu用于模拟便道。三、 数据结构描述/*定义

5、顺序栈类型*/ typedef struct int CarNoN;/*车牌号*/int CarTimeN;/*进场时间*/int top;/*栈指针*/ SqStack;/*定义顺序栈类型*/*定义链队类型*/typedef struct qnodeint CarNo; /*车牌号*/struct qnode *next; QNode;typedef structQNode *front; /*队首和队尾指针*/QNode *rear; LiQueue;四、 算法设计1. 对于子函数模块,则调用顺序栈的基本操作和链队列的基本操作。如下:/*顺序栈的基本运算算法*/void InitStack

6、(SqStack *&s)int StackEmpty(SqStack *s)int StackFull(SqStack *s)/*S中的插入新元素*/int Push(SqStack *&s,int e1,int e2)/*删除S的栈顶元素,并用e1,e2返回其值*/int Pop(SqStack *&s,int &e1,int &e2)void DispStack(SqStack *s)/*以下为链队列的基本运算算法*/void InitQueue(LiQueue *&q)int QueueLength(LiQueue *q)int QueueEmpty(LiQueue *q)void e

7、nQueue(LiQueue *&q, int e) int deQueue(LiQueue *&q,int &e)void DisplayQueue(LiQueue *q)2.主程序模块 void main() 初始化; do 接受命令; 处理命令; while(命令!=”退出”);五、 程序优缺点分析与优化1.程序的优点在程序中设置了kind变量,用于保存车的类别,便于计算不同类别车的停车费用,如下程序段:printf(n请输入车的类别车的类别:1.代表小汽车 2.代表客车 3.代表卡车:n); scanf(%d,&kind);其中kind可取值1,2,3;若kind取2,则表示一辆客车单

8、位时间的停车费用是一辆小汽车的2倍,若kind取3,则表示一辆卡车单位时间的停车费用是一辆小汽车的3倍。当然printf(n请输入车的类别车的类别:1.代表小汽车 2.代表客车 3.代表卡车:n);中的1.2.3也可以根据实际情况改变。比如,若实际中,一辆小汽车单位时间的停车费用是一辆客车的2倍,一辆卡车单位时间的停车费用是一辆客车的4倍,则可以改成:printf(n请输入车的类别车的类别:1.代表客车2.代表小汽车 4.代表卡车:n); 则kind可取值1,2,4; kind取1时对应的是客车,表示计算停车费用时以一辆客车单位时间的停车费用为基数,若kind取2,则表示一辆小汽车单位时间的停

9、车费用是一辆客车的2倍,若kind取4,则表示一辆卡车单位时间的停车费用是一辆客车的4倍。 2.程序的缺点(1)输入时间时,程序没有检测错误功能程序的输入形式如下:设n=2,输入数据为:(A,1,5),(A,2,10),(D,1,15),(A,3,20),(A,4,25),(A5,30),(D,2,35),(D,4,40),(E,0,0)。其中:A表示到达(arrival);D表示离去(departure);E表示输出结束(end)。设每个输入项的形式为(Choose, CarNumber, Time),其中Choose表示每个括号中的第一项数据,即A/D/E; CarNumber表示每个括号

10、中的第二项,即1/2/3;Time表示每个括号中的第三项,即5/10/15。设前后两次输入的数据中的第三项分别为Time1, Time2;则必须满足Time2Time1。而在实际输入过程中用户可能会忽略这一点,所以应该在输入Time是设置一个判断语句,若前后两次输入的Time不满足Time2Time1,则要求用户重新输入,直至满足要求为止。(2)程序的界面不够清晰,一次性输入的数据项比较多,容易出错。3.改进思想(1)为了保证前后两次输入的Time必须满足Time2Time1,使程序具有错误检测功能,在程序输入部分添加了如下代码:printf(输入现在的时刻:n); scanf(%d,&tim

11、e2);while(time2time1)printf(时间输入错误,请重新输入:n); scanf(%d,&time2);time1=time2; /time1定义为静态变量(2)为了使程序有更清晰的界面,可在主函数中加入菜单的显示方式。且数据可以采用一次输入一个数据项,分步输入的方式,使输入过程少出错。于是可以将主函数进行修改。(见附录一)六、 程序源代码#include #include #define N 2/*停车场最多的停车数*/#define Price 2/*每单位停车费用*/typedef struct int CarNoN;/*车牌号*/int CarTimeN;/*进场时

12、间*/int top;/*栈指针*/ SqStack;/*定义顺序栈类型*/*定义链队类型*/typedef struct qnodeint CarNo; /*车牌号*/struct qnode *next; QNode;typedef structQNode *front; /*队首和队尾指针*/QNode *rear; LiQueue;/*顺序栈的基本运算算法*/void InitStack(SqStack *&s)s=(SqStack *)malloc(sizeof(SqStack);s-top=-1;int StackEmpty(SqStack *s)return(s-top=-1);int StackFull(SqStack *s)return(s-top=N-1);/*S中的插入新元素*/int Push(SqStack *&s,int e1,int e2)if (s-top=N-1)return 0;s-top+;s-CarNos-top=e1;s-CarTimes-top=e2;return 1;/*删除S的栈顶元素,并用e1,e2返回其值*/int Pop(SqStack *&s,int &e1,int &e2)if (s-top=-1)return 0;e1=s-CarNos-top;e2=s-CarTimes-top;s-top-;re

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号