数据结构课程设计报告(模拟电梯).doc

上传人:仙人指路1688 文档编号:2988868 上传时间:2023-03-07 格式:DOC 页数:21 大小:227.50KB
返回 下载 相关 举报
数据结构课程设计报告(模拟电梯).doc_第1页
第1页 / 共21页
数据结构课程设计报告(模拟电梯).doc_第2页
第2页 / 共21页
数据结构课程设计报告(模拟电梯).doc_第3页
第3页 / 共21页
数据结构课程设计报告(模拟电梯).doc_第4页
第4页 / 共21页
数据结构课程设计报告(模拟电梯).doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《数据结构课程设计报告(模拟电梯).doc》由会员分享,可在线阅读,更多相关《数据结构课程设计报告(模拟电梯).doc(21页珍藏版)》请在三一办公上搜索。

1、山东理工大学计算机学院课 程 设 计(数据结构)班 级姓 名学 号 指导教师二一二年一月十日课程设计任务书及成绩评定课题名称电 梯 模 拟、题目的目的和要求: 巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。此程序是一个简单的模拟电梯升降的系统。在现实中,电梯系统要由乘客和电梯相互作用而形成的一个灵活的系统,电梯升降需要人的指令,而人也可以在等待时间过长而离开。虽然

2、他们的行为可能受对方的作用,但是他们的行为是基本独立的。所以在这个程序模拟中,我将其分成几个抽象数据类型,并且做好每一部份的相互联系。在程序运行中输入乘客所进入的楼层,将要去的楼层,等待最长时间等数据可以完成其模拟。而这个系统可以很好的模拟现实中的电梯运行的状态。、设计进度及完成情况日 期内 容1.2-1.3选取参考书,查阅有关文献资料,完成资料搜集和系统分析工作。1.41.5创建相关数据结构,录入源程序。1.61.7调试程序并记录调试中的问题,初步完成课程设计报告。1.9上交课程设计报告打印版并进行课程设计答辩,要求每个同学针对自己的设计回答指导教师3-4个问题。1.10考核结束后将课程设计

3、报告和源程序的电子版交班长统一刻光盘上交。、主要参考文献及资料1 严蔚敏 数据结构(C语言版)清华大学出版社 19992 严蔚敏 数据结构题集(C语言版)清华大学出版社 19993 谭浩强 C语言程序设计 清华大学出版社4 与所用编程环境相配套的C语言或C+相关的资料5 徐孝凯 数据结构课程实验. 北京:清华大学出版社,2002.6 郭翠英 C语言课程设计案例精编. 北京:中国水利水电出版社,2004.03.网站:CSDN.NET;程序员、成绩评定:设计成绩: (教师填写)指导老师: (签字)二一二年 一 月 十 日目 录第一章 概述1第二章 系统分析2第三章 概要设计4第四章 详细设计8第五

4、章 运行与测试13第六章 总结与心得16参考文献 17第一章 概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。数据结构是一门重要的专业基础课,是计算机理论和应用的核心基础课程。数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。在这次的课程设计中我选择的题目是电梯模拟。现代社会水平发展

5、迅速,楼房越建越高,电梯就成为了人们生活中必不可少的工具,因此对电梯的运行系统进行了解研究是有一定意义的。本文用在c+的环境下模拟了电梯的运行情况,对电梯的运行情况有了一定的了解。第二章 系统分析1.模拟某校五层教学楼的电梯系统。该楼有一个自动电梯,能在每层停留。五个楼层由下至上依次称为地下层、第一层、第二层、第三层和第四层,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来该层候命。五个楼层从下到上的编号为:0、1、2、3、4。除了地下层外,每一层都有一个要求向下的按钮除了第四层外,每一层都有一个要求向上的按钮。对应的变量为:CallUp0.3和CallDown1.4。电梯

6、内的五个目标层按钮对应的变量为:CallCar0.4。2.电梯一共有七个状态,即正在开门(Opening)、已开门(Opened)、正在关门(Closing)、已关门(Closed)、等待(Waiting)、移动(Moving)、减速(Decelerate)。3.乘客可随机地进出于任何层。对每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。对于在楼层内等待电梯的乘客,将插入在等候队列里,每一层有两个等候队列,一队要求向上,一队要求向下,用链队列来实现。对于在电梯内的乘客,用五个乘客栈来实现,该乘客要去哪一层,就把他放在相应编号的栈中,对应变量为EleStack04。4.

7、模拟时钟从0开始,时间单位为0.1秒。人和电梯的各种动作均要耗费一定的时间单位(简记为t):有人进出时,电梯每隔40t测试一次,若无人进出,则关门关门和开门各需要20t每个人进出电梯均需要25t电梯加速需要15t上升时,每一层需要51t,减速需要14t下降时,每一层需要61t,减速需要23t如果电梯在某层静止时间超过300t,则驶回1层候命。5.按时序显示系统状态的变化过程:发生的全部人和电梯的动作序列。以堆栈Lift模拟电梯,以队Qup,Qdnow两个数组模拟等候电梯的人排的队。进入系统的人进入队列,进入电梯的人从队列中删除并且进入栈中,离开系统的人也从队列中删除。6.用户输入楼的的层数,运

8、行的时间,以及进入电梯中人的信息,系统将自动运行,直到把所有的人送到要去的地方,或者到运行的时间为止。7.系统有自动与手动两种操作方式,由用户自己选择,系统中的显示均是以图形模拟的方式显示的。8.系统能够在运行时输出相关的人的各种信息,如来自哪一层,要去哪一层,用了多少时间等等。9.主要模块:主程序电梯模块乘客栈模块等待队列模块乘客模块高楼模块第三章 概要设计1.乘客类型反映乘客的所有属性。ADT Client数据对象:D=ai乘客信息,I=1,2,n,n0数据关系:R=|ai-1,aiD,i=2,n基本操作:PrintClientInfo(Client const &e,ClientStat

9、us s)操作结果:输出乘客信息。CreatClient(Client *&p)操作结果:生成新的乘客。DestoryClient(Client *&p)操作结果:该乘客离开系统。GoAbove(Client const &e)操作结果:判断该乘客是否去往高层。CInfloor(Client const &e)操作结果:返回乘客进入的楼层。CInTime(Client const &e)操作结果:返回乘客进入时间。COutfloor(Client const &e)操作结果:返回乘客进入时间。2.乘客栈类型电梯内的乘客用乘客栈表示,去不同楼层的乘客放在不同的栈中。ADT Estack数据对象:

10、D=ai乘客信息,I=1,2,n,n0数据关系:R=|ai-1,aiD,i=2,n基本操作:略。3.等候队列类型在电梯外等待的乘客用等待队列表示。每层各有两个等待队列,分别为上楼队列和下楼队列。与一般队列不同的是在基本操作中加入了放弃操作CGiveUp(WQueue &Q,int floor)。4.电梯类型表示电梯的各个属性和所有动作。ADT Elevator数据对象:D=ai电梯信息,I=1,2,n,n0基本操作:InitEle(Elevator &E)操作结果:初始化电梯类型。DestoryEle(Elevator &E)操作结果:销毁电梯类型。EleDecide(Elevator &E,

11、WQueue wMaxfloor+12)操作结果:电梯动作决策。ElevatorRun(Elevator &E,WQueue wMaxfloor+12)操作结果:电梯状态转换。CountOver(Elevator &E)操作结果:判断电梯计时是否完成。EleFloor(Elevator const &E)操作结果:返回电梯所在的层。EleStatus(Elevator const &E)操作结果:返回电梯状态。RequireAbove(Elevator const &E)操作结果:判断是否有高层请求。RequireBelow(Elevator const &E)操作结果:判断是否有低层请求。E

12、leAchieved(Elevator &E)操作结果:判断电梯是否要停于当前层。EleOpenDoor(Elevator &E)操作结果:判断电梯是否要开门。5.高楼模块实现电梯和乘客之间的互交功能。包括:InOut(Elevator &E,WQueue wMaxfloor+12)操作结果:进行乘客的进出电梯活动。NewClient(Elevator &E,WQueue w52)操作结果:进入新乘客。PrintStatus(Elevator &E,WQueue w52)操作结果:输出当前状态。Print(Elevator &E,Action a)操作结果:输出电梯动作信息。6.主程序主程序主

13、要处理两类事件:乘客事件和电梯事件。除此之外,主程序还处理各个模块的初始化和销毁工作,以及电梯状态的输出。乘客事件包括新乘客到达事件,乘客放弃等待事件,乘客进出电梯事件。电梯事件包括电梯运行事件。7.本程序包含6个模块:(1) 主程序模块(2) 乘客模块(3) 乘客栈模块(4) 电梯模块(5) 等待队列模块(6) 高楼模块:实现电梯和乘客之间的互交。设定栈的抽象数据类型定义:ADT Stack 数据对象: 数据关系: 约定端为栈顶,端为栈底。ADT Stack设定队的抽象数据类型定义:ADT Queue 数据对象: 数据关系: 约定端为队列头,端为队列尾。ADT Queue编程序前要了解电梯的

14、运行情况,作出具体的流程图,以便更好的编写程序。下面给出的是电梯简单的运行模拟图。 图1电梯的模拟运行流程图第四章 详细设计1.全局变量的定义对于全局来说,需知道最多楼层和某一时间电梯所在楼层、电梯状态 ,首先定义出这些变量,Floor_now定义电梯所在楼层,state定义电梯状态,MaxF定义最多楼层,t1、t2定义时间变量。int id;int R_W;int imgF;int Floor_now;/电梯所在楼层int state;/电梯状态int t1;/时间变量int t2;int MaxF;/最多楼层int t;int tt;char hand_auto;2.人具体情况的定义使用电

15、梯的人要求有具体的所在楼层和目的楼层,根据具体情况乘坐电梯的人都有一定的容忍时间,一旦等电梯花费时间超过限度,人将放弃坐电梯,maxwaittime定义最长容忍时间,Nfloor定义所在楼层,ToFloor定义为乘坐电梯者的目的楼层。 typedef struct popint maxwaittime;/最长容忍时间int NFloor;/所在楼层int ToFloor;/目的楼层int ID;int ontim;people;3.队、栈的类型电梯内的乘客用乘客栈表示,去不同楼层的乘客放在不同的栈中。ADT Estack数据对象:D=ai乘客信息,I=1,2,n,n0数据关系:R=|ai-1,

16、aiD,i=2,n等候队列类型在电梯外等待的乘客用等待队列表示。每层各有两个等待队列,分别为上楼队列和下楼队列。与一般队列不同的是在基本操作中加入了放弃操作CGiveUp(WQueue &Q,int floor)。#defineSTACK_INIT_SIZE10#defineSTACKINCREMENT5Status InitStack(ClientStack &S);Status DestroyStack(ClientStack &S);Status ClearStack(ClientStack &S);Status StackEmpty(ClientStack S);int StackLe

17、ngth(ClientStack S);Status GetTop(ClientStack S,SElemType &e);Status Push(ClientStack &S,SElemType e);Status Pop(ClientStack &S,SElemType &e);void PrintStack(ClientStack &S);4.电梯类型每个使用电梯的人都在一个固定的层等待电梯,都有一个目标层。电梯有最大的承载数,电梯停下的时候有人出入,也需要记录。电梯何时停下需要有函数判断,Maxman定义最大承载数,Liftman定义为电梯里的人,stop50定义需要停的楼层,run(

18、)是关于电梯运行的函数,wait()是关于电梯是否静止等待的函数,Stop()是关于电梯在楼层间停靠的函数,open_shut()是电梯开门关门的函数。在run()运行函数中调用Stop()函数判断是否有停靠的楼层,如果有在调用open_shut()电梯开门关门的函数。class lift/电梯类public:int Maxman;/最大承载数int Liftman;/电梯里的人int stop50;/需要停的楼层void run();/电梯运行void wait();/电梯静止等待void Stop();/电梯在楼层间停靠void open_shut();/电梯开门关门;lift Lift;

19、void lift:open_shut()/电梯开关门函数void lift:Stop()/判断电梯停靠的函数void lift:wait()/电梯等待函数void lift:run()/运行函数5.系统类的定义先对系统进行初始化定义,在模拟系统中,可以系统随机产生,也可以人为的设定。initQ()函数初始化上下行队列,initF()初始化楼层,initL()初始化电梯,void leave(people*)函数表示人离开系统。syst:State()函数首先判断电梯状态,电梯停或向上,从高层开始判断,判断是否有人去高层或高层有人想上 若高层无人等待乘电梯也没人去高层电梯向下,电梯停靠在目标层

20、,打开电梯门。在判断电梯状态,电梯开始循环工作。在电梯的模拟系统中用syst:img(int os)函数通过图形模拟输出,用syst:Word(int con=1)输出状态语句,使得模拟结果更加形象易懂。lass systpublic:void rand_man(int);/随即产生人void initQ();/初始化上下行队列void initF();/初始化楼层void initL();/初始化电梯void initAll();/构造函数void leave(people*);/人离开系统void out_in();void State();void help();void Cout_S(

21、);void img(int);void Word(int);syst() f=0; man=0;void syst:leave(people*p)void syst:out_in()void syst:rand_man(int n=8)void syst:initAll()void syst:initF()void syst:initL()void syst:initQ()void syst:Cout_S()void syst:img(int os)/图形模拟输出void syst:Word(int con=1)/输出语句void main ()/主函数system(pause);sys.h

22、elp();sys.initAll();sys.rand_man();while(1)Lift.run();Lift.wait();第五章 运行与测试程序运行后输入程序的运行时间,电梯开始运行。在本设计中,用04分别表示地下一楼至四楼,用户只要按照提示依次输入正确的数值,每次按下回车键即认为已经输入信息。此后只需等待系统自行进行处理,若未显示乘客放弃乘坐电梯即认为该乘客已达目的楼层。此间程序会一直运行到开始时输入的运行时间,此时整个程序运行结束,按任意键退出。此操作可参考测试成果中的效果图。调试过程中遇见的测试数据和理论数据不相符,返回源代码查询,例如:在计算开门时间和上升时间这里把上升减速时

23、间加到了E.Count=UpTime+Accelerate里导致以后每一层都加上减速阶段的时间,改正,从新设定一个到达目的层减速语句if(EleAchieved(E)这样电梯在到达指定层后再减速,减速同时也分上下减速。还有主函数里面每进行一次乘客事件和电梯事件,time+,这样就会使时间统一往后退,所以在计算时间时应该特别注意这个问题。从测试结果看,乘客放弃数的大小和平均等待时间的长短还与乘客出现的密度和乘客的平均容忍时间有关系。实际运行效果图:数据较大时运行结果图51整个程序完全运行,时间短,放弃和等待时间一目了然。可以进行理论和实际时间测试分析。数据较大时的运行结果:图52当数据比较大时运

24、行的时间比较长,电梯内的具体运行情况相对明显直观,比如每一个时刻电梯的运行状态就比较明显了。第六章 总结与心得本文电梯模拟系统的设计主要运用了队列和栈的部分知识,电梯系统看似简单但具体的运行却很麻烦,需要考虑到很多的细节。不过只要掌握了电梯的具体流程,写起程序才可以顺利一些。写完一部分程序后,试着去运行,有缺陷在修改,再加入具体函数,使程序更加完美。课程设计使我学到了很多书本以外的东西,同时也提高了查阅资料的能力以及解决问题的能力,培养培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。也懂得了理论与实际相结合的重要性,只

25、有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。在做这次课程设计的时候,遇到这样那样的麻烦,因此,我也得到了许多宝贵的经验:1、在设计程序之前,务必要对你所设计的题目和内容有一个系统的了解,知道所设计的题目和内容包含那些资源。2、设计程序关键要有一个清晰的思路和一个完整的流程图,因而,要先把设计原理与思路搞清楚,再把流程图

26、画出来,这样设计起来就简单多了。3、在设计程序时,不能妄想一次就将整个程序设计好,“反复修改,不断改进”是程序设计的必经之路,发现错误也是取得成绩的一种。4、要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便。5、在设计程序过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。主要参考文献及资料1 严蔚敏 数据结构(C语言版)清华大学出版社 19992 严蔚敏 数据结构题集(C语言版)清华大学出版社 19993 谭浩强 C语言程序设计 清华大学出版社4 与所用编程环境相配套的C语言或C+相关的资料5 徐孝凯 数据结构课程实验.(page72) 北京:清华大学出版社,2002.6 郭翠英 C语言课程设计案例精编.(page35) 北京:中国水利水电出版社,2004.03.网站:CSDN.NET;程序员

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教育教学 > 成人教育


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号