数据结构课设修改.doc
《数据结构课设修改.doc》由会员分享,可在线阅读,更多相关《数据结构课设修改.doc(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 目录 1系统需求分析11.1问题描述11.2 功能描述22概要设计22.1系统总体设计22.2总体设计流程图32.3各模块功能42.4相关数据结构定义53详细设计53.1数据类型定义53.2主要模块算法设计64系统调试及运行结果114.1系统调试114.2运行结果115心得体会156附录156.1源代码156.2参考文献227评分表231系统需求分析1.1问题描述 设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次从停车厂最里面向大门口停放(最先到达的第一辆车停放在车场的最里面),若车场内一停满n辆汽车,则后来的汽车只能在门外的便
2、道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场内的车在它离开时必须按它停留时间长短交纳费用。如果停留在便道上的车未进车场就要离去,允许其离去,不收停车费,并且其他在便道上等待的车辆的次序不变试设计这样一个停车场模拟管理程序。1.2 功能描述(1)单个车辆入站。 当系统正常投入运行后,会有零散的车辆进进出出,因此,设计一个函数实现单个车辆入站。(2)车站内信息实时显示。 车站内信息包括两个部分:停车场内停放的车辆以及在外面通道上等停的车辆。(3)车辆出站。
3、当停车场内车辆出站后,检查通道上是否有车等停,如果有,则要把排在最前面的车调入停车场内。(4)如果有车辆离去,计算其停车费用。2概要设计2.1系统总体设计 停车场总体设计如图2-1所示停车场管理退出系统候车场中的信息停车场中的信息汽车离开停车场汽车进入停车场 图2-1停车场总体设计 2.2总体设计流程图如图2-2所示开始输入停车场最多停车数N=3,输入候车场最多停车数M=4当停车场停车数N N 进入候车场进入停车场 Y输出停车场车辆信息包括车牌号及进栈时间停车场车数M输出车牌号,离开时间和停车费 N 结束退出系统 Y 图2-2总体设计流程图 2.3各模块功能(1)主程序模块void main(
4、)初始化停车栈; /汽车进入停车场初始化让路的临时栈; /汽车离开停车场初始化通道; /汽车进入候车场输出主菜单:汽车进入停车场指令,汽车离开候车场指令,显示停车场信息, 显示候车场信息,退出系统;(2)栈模块 SqStack停车场中车辆的车牌号;车辆进入停车场;车辆出停车辆;(3)队列模块SqQueue停车场满,车辆进入候车场;停车场车辆离开,候车场车进入停车场;2.4相关数据结构定义(1) 定义栈类型如下表 表2-1车牌号停车花费/小时停车花费/分钟栈顶int CarNoNint CarhourNint CarminNint top(2) 定义队列类型如下表 表2-2车牌号队头队尾int
5、CarNoMint frontint rear3详细设计3.1数据类型定义#define N 3 /停车场内最多的停车数#define M 4 /候车场内最多的停车数#define price 0.4 /每分钟停车费用typedef struct int CarNoN; /车牌号 int CarhourN; /进入停车场时刻 int CarminN; /进入停车场分钟 int top; /栈指针 SqStack; /定义顺序栈typedef struct int CarNoM; /车牌号 int front,rear; /队首和队尾指针 SqQueue; /定义循环队类型 3.2主要模块算法设
6、计(1)主函数设计void main()int order;int no,e1,e2,e3;int h,m;int i,j;SqStack *St,*St1;SqQueue *Qu;InitStack(St);InitStack(St1);InitQueue(Qu); printf(-欢迎使用停车场管理系统-n);doprintf(输入指令 1:汽车进入停车场2:汽车离开停车场3:显示停车场信息4:显示候车场信息5:退出n);scanf(%d,&order);switch(order)case 1: /汽车进入停车场指令输出车牌号; 输出汽车进入停车场的时间;if (!StackFull(St
7、)/判断停车场是否满调用函数Push(St,no,h,m);输出车停在停车场%d号位置;else /停车场满if (!QueueFull(Qu) /候车场不满调用函数enQueue(Qu,no);输出车停在候车场%d号位置;elseprintf(-候车场已满,不能停车n);break;case 2: /汽车离开停车场输出汽车车牌号; 输出离开时的时间;for (i=0;itop & St-CarNoi!=no;i+);if (iSt-top)printf(-未找到该编号的汽车n);elsefor (j=i;jtop;j+)Pop(St,e1,e2,e3);Push(St1,e1,e2,e3);
8、 /倒车到临时栈St1中Pop(St,e1,e2,e3); /该汽车离开printf(-%d汽车离开,其停车费用为:%fn,no,(h*60+m)-(e2*60+e3)*Price);while (!StackEmpty(St1) /将临时栈St1重新回到St中Pop(St1,e1,e2,e3);Push(St,e1,e2,e3);if (!QueueEmpty(Qu) /队不空时,将队头进栈StdeQueue(Qu,e1);Push(St,e1,h,m); /以当前时间开始计费break;case 3: /显示停车场信息 判断停车场是否有车辆 有则输出停车场信息;调用函数DispStack(
9、St); 无则显示停车场无车辆;case 4: /显示侯车场信息 判断停车场是否有车辆;候车场中的车辆信息为;调用函数DispQueue(Qu);否则输出候车场无车辆;case 5: /退出 停车场有车辆;输出停车场中的车辆车牌号为;调用函数DispStack(St); /显示停车场信息候车场有车辆输出候车场中的车辆车牌号为;调用函数DispQueue(Qu); /显示侯车场信息 break;default: /其他指令printf(-输入的命令错误n); break; while(order!=0);实现程序要实现的命令,包括汽车进入停车场,汽车离开停车场,停车场中信息,候车场中信息,退出系
10、统。(2)进停车场设计调用函数栈,判断停车场是否满(s-top=N-1),如果栈不满,则输出进入停车场汽车的车牌号和汽车到达的时间。如图3-2流程图所示开始s-top=N-1? Y N输出车牌号CarNo输出时间Carh,Carm退出系统结束 图3-2进停车场设计流程图(3)出停车场设计调用栈函数,判断停车场是否为空(s-top=-1),如果不为空,则汽车出停车场并输出汽车车牌号和汽车离开的时间。如图3-3流程图所示开始s-top=-1? Y N输出车牌号CarNo输出时间Carh,Carm退出系统结束 图3-3出停车场设计流程图(4)进候车场设计调用循环队列,判断候车场是否满(q-rear+
11、1)%M=q-front),如果队列不满,则未进入停车场的汽车进入候车场,并且候车场显示汽车的车牌号。如图3-4流程图所示开始q-rear+1)%M=q-front Y N输出车牌号CarNo N退出系统结束 图3-4进候车场设计流程图 (5)出候车场设计调用循环队列,判断候车场是否为空(q-front=q-rear),如果不为空,停车场有车辆出去则候车场中最先停入的汽车进入停车场,并且显示进入停车场汽车的车牌号。如图3-5流程图所示开始q-front=q-rear Y N 输出车牌号CarNo N退出系统结束 图3-5出候车场设计流程图4系统调试及运行结果4.1系统调试(1) 在调试过程中,
12、离开一号停车场的车辆后,在显示停车场信息时,依然能够显示刚离开的一号停车场的车辆信息。(2) 在计算车辆离开停车场在停车场停留所要的花费时,经常计算的不是要离开车辆所要付的费用,而是计算的是后一辆进入停车场的费用,但是离开的车牌号却是要离开的那辆车。(3) 因为我们定义的时间中的时刻和分钟都是整型,所以在调试过程中当我们输入的时间是整时,系统可能计算时间出现问题。(4) 在显示停车场信息时,显示不到车辆所停的停车场号。4.2运行结果(1)汽车进入停车场界面如图4-1所示 图4-1汽车进入停车场界面(2)显示停车场信息界面如图4-2所示 图4-2显示停车场信息界面(3)显示候车场信息界面如图4-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 修改
限制150内