2022停车场管理系统需求报告 (3) .doc
《2022停车场管理系统需求报告 (3) .doc》由会员分享,可在线阅读,更多相关《2022停车场管理系统需求报告 (3) .doc(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、停车场管理系统需求报告 重庆邮电大学计算机科学与技术学院 数据结构实验设计报告 题目:停车场管理系统姓名:*学号:2010211998班级:0491002学院:计算机科学与技术学院 1 重庆邮电大学计算机科学与技术学院 目录 一、问题描述03 二、问题分析03 三、数据结构描述04 四、算法设计04 五、程序优缺点分析及优化05 六、程序源代码07 七、程序运行结果13 八、心得体会15附 一、优化后的程序16附 二、优化后程序的运行结果23 2 重庆邮电大学计算机科学与技术学院 一、问题描述 设计一个停车场管理系统。 设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在
2、停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若停车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。【基本要求】 以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车到达或离去信息、汽车牌照号码
3、以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。【选作内容】 (1)两个栈共享空间,思考应开辟数组的空间是多少。 (2)汽车可有不同种类,则他们的占地面积不同,收费标准也不同,如1辆客车和1.5辆小汽车的占地面积相同,1辆十轮卡车占地面积相当于3辆小汽车的占地面积。 (3)汽车可以直接从便道上开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾。 二、问题分析 该问题需要以栈和队列作为基本的存储结
4、构,以顺序栈模拟停车场,以链队列模拟车场外的便道。汽车进入停车场,即是在顺序栈上执行进栈操作,退出停车场即是在顺序栈上执行出栈操作;汽车进入便道,即是在链队列上执行入队操作,退出便道即是在链队列上执行出队操作。 当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场。设要删除的元素在顺序表st中位置为i,则从i到top之间的全部元素进入到一个临时栈st1中,其次再删除该元素,然后将临栈st1的元素按照先进后出的原则重新回到st中。若链队不空,则使队头进栈st,并以当前时刻开始计费。 程序需要构造两个顺序栈st和st1,其中st用于模拟
5、停车场,st1用作临时栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车。此外还需要构 3 重庆邮电大学计算机科学与技术学院 造一个链队列qu用于模拟便道。 三、数据结构描述 /*定义顺序栈类型*/typedefstructintcarnon; /*车牌号*/intcartimen; /*进场时间*/inttop; /*栈指针*/sqstack; /*定义顺序栈类型*/ /*定义链队类型*/typedefstructqnodeintcarno; /*车牌号*/structqnode*next;qnode;typedefstructqnode*front;/*队首和队尾指针*/qnode*r
6、ear;liqueue; 四、算法设计 1.对于子函数模块,则调用顺序栈的基本操作和链队列的基本操作。如下: /*顺序栈的基本运算算法*/voidinitstack(sqstack*s) intstackempty(sqstack*s) intstackfull(sqstack*s) /*s中的插入新元素*/intpush(sqstack*s,inte1,inte2) 4 重庆邮电大学计算机科学与技术学院 /*删除s的栈顶元素,并用e1,e2返回其值*/intpop(sqstack*s,inte1,inte2) voiddispstack(sqstack*s) /*以下为链队列的基本运算算法*
7、/voidinitqueue(liqueue*q) intqueuelength(liqueue*q) intqueueempty(liqueue*q) voidenqueue(liqueue*q,inte)intdequeue(liqueue*q,inte) voiddisplayqueue(liqueue*q) 2.主程序模块voidmain初始化;do接受命令; 处理命令; while(命令。=退出); 五、程序优缺点分析及优化 1.程序的优点 在程序中设置了kind变量,用于保存车的类别,便于计算不同类别车的停车费用,如下程序段: printf(n请输入车的类别【车的类别: 1.代表小
8、汽车2.代表客车3.代表卡车】 :n);scanf(%d,kind); 其中kind可取值1,2,3;若kind取2,则表示一辆客车单位时间内的停车费用 5 重庆邮电大学计算机科学与技术学院 是一辆小汽车的2倍,若kind取3,则表示一辆卡车单位时间内的停车费用是一辆小汽车的3倍。 当然printf(n请输入车的类别【车的类别: 1.代表小汽车2.代表客车3.代表卡车】 :n);中的1.2.3也可以根据实际情况改变。比如,若实际中,一辆小汽车单位时间内的停车费用 是一辆客车的2倍,一辆卡车单位时间内的停车费用是一辆客车的4倍,则可以改成: printf(n请输入车的类别【车的类别: 1.代表客
9、车2.代表小汽车4.代表卡车】 :n); 则kind可取值1,2,4;kind取1时对应的是客车,表示计算停车费用时以一辆客车单位时间内的停车费用为基数,若kind取2,则表示一辆小汽车单位时间内的停车费用是一辆客车的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表示离去(dep
10、arture);e表示输出结束(end)。 设每个输入项的形式为(choose,carnumber,time),其中choose表示每个括号中的第一项数据,即a/d/e;carnumber表示每个括号中的第二项,即1/2/3;time表示每个括号中的第三项,即5/10/15。设前后两次输入的数据中的第三项分别为time1,time2;则必须满足time2time1。而在实际输入过程中用户可能会忽略这一点,所以应该在输入time是设置一个判断语句,若前后两次输入的time不满足time2time1,则要求用户重新输入,直至满足要求为止。 (2)程序的界面不够清晰,一次性输入的数据项比较多,容易出
11、错。 3.改进思想(1) 为了保证前后两次输入的time必须满足time2time1,使程序具有错误检测功能,在程序输入部分添加了如下代码: printf(输入现在的时刻:n); scanf(%d,time2); while(time2top=-1; 7 重庆邮电大学计算机科学与技术学院 intstackempty(sqstack*s)return(s-top=-1); intstackfull(sqstack*s)return(s-top=n-1); /*s中的插入新元素*/intpush(sqstack*s,inte1,inte2)if(s-top=n-1) return0;s-top+;
12、s-carnos-top=e1;s-cartimes-top=e2;return1; /*删除s的栈顶元素,并用e1,e2返回其值*/intpop(sqstack*s,inte1,inte2)if(s-top=-1) return0;e1=s-carnos-top;e2=s-cartimes-top;s-top-;return1;voiddispstack(sqstack*s)inti;for(i=0;itop;i+) printf(%d,s-carnoi);printf(n); /*以下为链队列的基本运算算法*/ 8 重庆邮电大学计算机科学与技术学院 voidinitqueue(liqueu
13、e*q)q=(liqueue*)malloc(sizeof(liqueue);q-front=q-rear=null; intqueuelength(liqueue*q)intn=0;qnode*p=q-front;while(p。=null) n+; p=p-next;return(n);intqueueempty(liqueue*q)if(q-rear=null) return1;else return0;voidenqueue(liqueue*q,inte)qnode*s;s=(qnode*)malloc(sizeof(qnode);s-carno=e;s-next=null;if(q-
14、rear=null)/*若链队为空,则新结点是队首结点又是队尾结点*/ q-front=q-rear=s;else q-rear-next=s;/*将*s结点链到队尾,rear指向它*/ q-rear=s;intdequeue(liqueue*q,inte)qnode*t;if(q-rear=null)/*队列为空*/ return0; 9 重庆邮电大学计算机科学与技术学院 if(q-front=q-rear)/*队列中只有一个结点时*/ t=q-front; q-front=q-rear=null;else /*队列中有多个结点时*/ t=q-front; q-front=q-front-n
15、ext;e=t-carno;free(t);return1; voiddisplayqueue(liqueue*q) qnode*p=q-front;while(p。=null) printf(%d,p-carno); p=p-next; voidmaincharchoose;/*用于选择命令*/intno,e1,time,e2,kind;/*用于存放车牌号、当前停车时刻*/inti,j;sqstack*st,*st1;/*临时栈st1,当停车场中间的车要推出去时,用于倒车*/liqueue*qu;initstack(st);initstack(st1);initqueue(qu);print
16、f( );printf(nXX);printf(nX欢迎使用停车场管理系统X); 10 重庆邮电大学计算机科学与技术学院 printf(nXX);printf(nX【输入提示】 :汽车状态由a、d、e表示。其中,a:表示汽车到达d:表示汽车离去,X);printf(nXe:表示输出结束。每次输入的数据由三项构成,即:(汽车状态,车牌号,当前时刻)X);printf(nX数据项之间以逗号分开。例如输入示范:a,1,5X);printf(n n);printf(n正在读取汽车信息.n); doprintf(n*);printf(n请分别输入汽车状态(a/d/e)、车牌号和当前时刻(数据之间以逗号分
17、开):n);scanf(%c,%d,%d,choose,no,time); switch(choose) /*汽车到达*/ casea: casea: if(。stackfull(st) /*停车场不满*/ push(st,no,time); printf(该车在停车场中的位置是:%dn,st-top+1); else /*停车场满*/ enqueue(qu,no); printf(n停车场已满,该车进入便道,在便道中的位置是:%dn,queuelength(qu); break;/*汽车离开*/ cased: cased: 11 重庆邮电大学计算机科学与技术学院 printf(n请输入车的类
18、别【车的类别: 1.代表小汽车2.代表客车3.代表卡车】 :n);scanf(%d,kind); for(i=0;itopst-carnoi。=no;i+); if(ist-top)/*要离开的汽车在便道上*/ /*汽车可以直接从便道上开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾*/ while(qu-front-carno。=no) enqueue(qu,qu-front-carno); /dequeue(qu,qu-front-carno); qu-front=qu-front-next; dequeue(qu,no);printf(n便道上车牌号为%d的汽车已离开。n,no
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022停车场管理系统需求报告 3 2022 停车场 管理 系统 需求 报告
限制150内