《数据结构课设修改.doc》由会员分享,可在线阅读,更多相关《数据结构课设修改.doc(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
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-
13、3所示 图4-3显示候车场信息界面(4)汽车离开停车场界面如图4-4所示 图4-4汽车离开停车场界面(5)汽车离开停车场后停车场与候车场信息界面如图4-5所示 图4-5汽车离开停车场后停车场与候车场信息界面(6)退出系统界面如图4-6所示 图4-6退出系统界面5心得体会经过两个星期的课程设计,过程曲折可谓一语难尽。整天都是对着电脑,不然就是翻阅资料。在此期间我失落过,也曾一度热情高涨。点点滴滴令我回味无长。这次课程设计使我体会到只有做到细心耐心,恒心才能做好事情。这次的课程设计,加强了我们动手、思考和解决问题的能力。巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。培养了我选用参
14、考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。通过课程设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。而且做课程设计同时也是对课本知识的巩固和加强,平时看课本时,有些问题就不是很能理解,做完课程设计,那些问题就迎刃而解了。而且还可以记住很多东西。认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准。所以这个期末测试之后的课程设计对我们的作用是非常大的。这次的课程设计使我懂得了理论与实际相结合是很非常重要的,只有理论知识是远远不够的,只有把
15、所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在整个设计过程中,构思是很花费时间的。调试时经常会遇到这样那样的错误,有的是因为粗心造成的语法错误。当然,很多也时用错了方法,总是实现不了。同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。6附录6.1源代码#include #include #define N 3 /停车场内最多的停车数#define M 4 /候车场内最多的停车数#define Price 0.2 /每分钟停车费用typedef struct int CarNoN; /车
16、牌号int CarhN; /进入停车场时刻 int CarmN; /进入停车场分钟int top; /栈指针 SqStack; /定义顺序栈typedef struct int CarNoM;/车牌号int front,rear; /队首和队尾指针 SqQueue;/定义循环队类型void InitStack(SqStack * &s) /初始化栈 s=(SqStack *)malloc(sizeof(SqStack);s-top=-1;int StackEmpty(SqStack *s) /判断栈是否没空return(s-top=-1);int StackFull(SqStack *s) /
17、判断栈满return(s-top=N-1);int Push(SqStack * &s,int e1,int e2,int e3) /进栈if (s-top=N-1)return 0;s-top+;s-CarNos-top=e1;s-Carhs-top=e2;s-Carms-top=e3;return 1;int Pop(SqStack * &s,int &e1,int &e2,int &e3) /出栈 if (s-top=-1)return 0;e1=s-CarNos-top;e2=s-Carhs-top;e3=s-Carms-top;s-top-;return 1;void DispSta
18、ck(SqStack *s) /显示栈中的元素int i;for (i=0;itop;i+)printf(%d,i+1); printf( %d ,s-CarNoi);printf( %d:%dn,s-Carhi,s-Carmi);void InitQueue(SqQueue * &q) /初始化便道 q=(SqQueue *)malloc (sizeof(SqQueue);q-front=q-rear=0;int QueueEmpty(SqQueue *q) /判断队空return(q-front=q-rear);int QueueFull(SqQueue *q) /判断队满 return
19、(q-rear+1)%M=q-front);int enQueue(SqQueue * &q,int e) /进队 if (q-rear+1)%M=q-front)/队满 return 0;q-rear=(q-rear+1)%M;q-CarNoq-rear=e;return 1;int deQueue(SqQueue * &q,int &e)/出队 if (q-front=q-rear) /队空的情况 return 0;q-front=(q-front+1)%M;e=q-CarNoq-front;return 1;void DispQueue(SqQueue *q) /输出队中元素int i;
20、i=(q-front+1)%M;printf( %d ,q-CarNoi);while (q-rear-i+M)%M0) i=(i+1)%M;printf( %d ,q-CarNoi); printf(n);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:显示候车
21、场信息5:退出n);scanf(%d,&order);switch(order)case 1: /汽车进入停车场指令printf(请输入车牌号:);scanf(%d,&no);printf(请输入进入停车场时间: ); /输入进入停车场时刻scanf(%d:%d,&h,&m);if (!StackFull(St)Push(St,no,h,m);printf(-%d车停在停车场%d号位置n,no,St-top+1);else /停车场满if (!QueueFull(Qu) /候车场不满enQueue(Qu,no);printf(-%d车停在候车场%d号位置n,no,Qu-rear);elsepr
22、intf(-候车场已满,不能停车n);break;case 2: /汽车离开停车场printf(请输入离开车辆车牌号:); scanf(%d,&no);printf(请输入离开时间: );scanf(%d:%d,&h,&m);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); /倒车到临时栈St1中Pop(St,e1,e2,e3); /该汽车离开printf(-%d汽车离开,其停车费用为:%fn,no
23、,(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: /显示停车场信息 if (!StackEmpty(St) printf(-停车场中的车辆信息为:n); DispStack(St);elseprintf(-停车场中无车辆n);break;case 4: /显示侯车场
24、信息if (!QueueEmpty(Qu)printf(-候车场中的车辆信息为:);DispQueue(Qu);elseprintf(-候车场中无车辆n);break;case 5: /退出 if (!StackEmpty(St)printf(-停车场中的车辆车牌号为:n);DispStack(St); /显示停车场信息if (!QueueEmpty(Qu)printf(-候车场中的车辆车牌号为:);DispQueue(Qu); /显示侯车场信息 break;default: /其他指令printf(-输入的命令错误n);break; while(order!=0);6.2参考文献1 李春葆,尹为民,李蓉蓉,蒋晶珏,喻丹丹,安杨数据结构教程M北京:清华大学出版社,20092 李春葆,尹为民,李蓉蓉,蒋晶珏,喻丹丹,安杨数据结构实验教程M北京:清华大学出版社,20093 严蔚敏,吴伟民. 数据结构(C语言版)M. 北京:清华大学出版社,20027评分表计算机与通信学院课程设计评分表课程名称: 数 据 结 构 项 目评 价设计方案的合理性与创造性设计与调试结果设计说明书的质量答辩陈述与回答问题情况课程设计周表现情况综合成绩 教师签名: 日 期: