电梯模拟程序设计报告DOC.doc_第1页
电梯模拟程序设计报告DOC.doc_第2页
电梯模拟程序设计报告DOC.doc_第3页
电梯模拟程序设计报告DOC.doc_第4页
电梯模拟程序设计报告DOC.doc_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

时间就是金钱,效率就是生命!一、课程设计题目:问题 :公司要建立一栋两层的办公大楼,并装上1部新的电梯,每个电梯限载1人,要求开发一个面向对象的模拟程序,模拟电梯的操作,以确定这个电梯能否满足需要,对于发生的每个重要事件显示一个消息。例如:“1人到了2楼”,“人进入了电梯”等等。为了省电,电梯每天在一楼关门等待。模拟程序包括一个时钟,每天从时间0开始,每秒滴答一次,模拟程序随机设置每一层第一个人到来的时间,模拟程序生成一个新到的人并将人放在这一层,然后这个人按下该层的按钮,请求电梯开门。这个人的目的地不能与他上电梯的楼层相同。电梯从一层到二层的时间需要5秒。扩展1:如果楼层为多层,程序应作何改动?扩展2:如果有多部电梯,程序应如何实现电梯在每一层的载客和下客?而且最省电?扩展3:如果电梯可搭载多位乘客,程序如何实现?扩展4:(选做)用动画图形输出,在屏幕上显示电梯上下移动。评分标准:完成问题1成绩合格 完成扩展1,或2或3之一成绩为中,完成扩展1,2,3中2个成绩为良,完成3个扩展成绩为优。 二、题目需求分析及概要设计:首先考虑到本题目为模拟电梯的题目,即设计一个电梯类来实现电梯的模拟,该电梯必须能独立运行,能处理外部请求。本人是这样考虑这个电梯类的:本人从真实电梯的角度去模拟设计这个电梯的,于是本人将整个电梯分解。一个完整的电梯可以分解为如下部件:1、 外部面版:用于接受电梯外的人的进入电梯的请求2、 内部面版:用于接受电梯内的人的请求,即楼层选择面版3、 电梯箱(执行者):是执行任务的工具,用于传送客人到达目的工具4、 任务队列:是电梯箱与外(内)面版的中介,将请求生成任务放入队列,再将任务发给电梯箱,等电梯箱实现乘客们的要求5、 控制器:用于控制以上部件以确保电梯运载客人的功能得以实现以上是对电梯部件的描述,由上,就必须先分别设计出:外部面版类( oPanel ) ,内部面版类 ( iPanel ) ,电梯箱类 ( doer ) ,任务队列类 (TaskList ),而控制器将在电梯类以电梯类的成员函数实现当完成了个部件的设计,在考虑设计电梯类( elevator ),而设计电梯类实质是一个组装个部件的过程另外,因为在整个过程出现了任务这一对象,因而还必须设计一个任务类 ( comMsg ) ,而任务在设计过程中将被理解为消息,而任务类的名字可以被本人以comMsg(通用消息)命名其中外部面版、内部面版、较为容易实现,设计的重点在任务队列类与控制器(即电梯类的各成员函数)其中犹以任务队列类的设计为难点,因为对于内外部消息的进列不同的处理,而对消息的出列有要经一定的选择以下本人将重点讲解任务队列的设计过程,(其它类设计请参照三、详细设计)因为考虑到电梯的实用性,电梯将采用优先级队列的想法来构造队列电梯若正向上(正向下)将优先完成目的楼层在现电梯所处楼层或以上(以下)的楼层的任务为向上运动的任务,而这一类任务中又先完成能最快完成的任务,即目的楼层距离现电梯所处楼层最近的任务当这一类符合要求的(向上)任务全部执行完毕后将执行向下任务即采取这样一个原则去载客人:如果在电梯运行方向上有人要使用电梯则继续往那个方向运动,如果电梯中的人还没有到达目的地则继续向原方向运动。为了实现这样一个任务队列本人所设计的任务队列在内部是又三个子队列以链表的形式实现的这三个子队列包括:向上任务队列;向下任务队列;缓冲任务队列;顾名思义:向上队列用于存储符合条件的所有要实现向上运动的任务;向下队列用于存储符合条件的所有向下运动的任务;而缓冲队列则用于存储不符合条件的任务以上三个队列,其中向上队列以低楼层到高楼层任务排队,低楼层任务在该队列有绝对优先级;反之,高楼层在向下队列有绝对优先级而缓冲队列则视实际情况而确定队列的优先选择方式而向上与向下队列之间又存在它们自己的优先级,它们将轮流获得优先级当向上(向下)获得优先级时,缓冲队列将用于存储在向上(向下)队列夺得优先权则一段时间内,接受所有不符合条件的向上(向下)任务并以向上(向下)任务的优先选择方式进行排队,而此时所有的向下(向上)任务将全部放入向下(向上)任务队列,没有优先级的队列是没有权利将自己属于自己类别的任务放入缓冲队列,即此时所有向下(向上)任务均符合条件进入向下(向上)队列当向上队列与向下队列交换优先级时,缓冲队列的任务将将队列的任务放入原拥有优先级的队列关于如何实现这个队列优先级的装换本人采用了这样一种方法,就是有一个指针记录拥有优先级别队列的头指针,而优先级队列的最后的任务所指向的下一个任务将是令外一个非优先级队列当优先级队列头节点的下一个任务为与自己属性(向上任务或向下任务)不同时,即说明本优先级队列所有符合条件的任务已经完成,可以转交优先权,此时只需要将记录优先级头节点的指针指向现优先级的头节点NEXT指针(此时NEXT指针指向非优先级队列的头节点)即可完成移交优先权的任务以上是任务队列的概要设计及一些实现的想法的考虑,具体实现请看三、详细设计最后,为了实现可视化即动态展示电梯,还需要一个演示类(show),其中主要是一些API函数的调用具体看详细设计,以及附录里show类的实现.三、详细设计/本电梯由三部分组成:SimBox , iPanel , oPanel(多个) , Controlclass SimBox ;class iPanel ;class oPanel ;/控制类class TaskList ;class tnode ;/考虑本电梯用于20层楼高的大厦/通用信号class comMsgpublic :/内部信号经过运算均可转换为等价的外部信号msg state ;/期望状态int level ;/目的楼层或信号发出楼层comMsg ( msg s = CLOSED , int l = 0 ) state = s ; level = l ; ;/*/*/以下为SimBox类class SimBoxfriend class elevator ;protected :comMsg task ; /任务comMsg NowState ; /实时状态public :SimBox ( ) ; /初始化bool open ( ) ; /打开BOX门bool close ( ) ; /关闭BOX门并静候bool up ( ) ; /使BOX门上升bool down ( ) ; /使BOX门下降comMsg getns ( )return NowState ; /返回BOX现在状态 ;/*/*/以下为iPanel类:class iPanel friend class elevator ;protected :int button N ;/内部按扭信号public :iPanel ( ) ;void select ( int level ) ; /选择面版上的层数void cancel ( int level ) ; /取消面版已选项 ;/*/*/以下是oPanel类:class oPanel friend class elevator ;protected :int up ;/向上按扭信号int down ;/向下按扭信号public :oPanel ( ) up = 0 ; down = 0 ;/初始化外部面版void selup ( )up = 1 ;/产生向上信息void seldown ( ) down = 1 ;/产生向下信息void canup ( ) up = 0 ;/取消向上信息void candown ( ) down = 0 ;/取消向下信息 ;/以上为电梯的三个组成部分的类/*/*/以下为电梯的控制/首先电梯控制需要一个任务队列用于分派任务/任务结点class tnodefriend class TaskList ;protected :comMsg task ;tnode * next ;public :tnode ( )next = NULL ;tnode ( msg s , int l , tnode * n = NULL ) task.state = s ; task.level = l ; next = NULL ;tnode ( comMsg t , tnode * n = NULL )task = t ; next = n ;/设置任务内容void settask ( comMsg t )task = t ;void settask ( msg s , int l )task.state = s ;task.level = l ; ;/以下任务队列类class TaskList protected :comMsg NowState ;/电梯现时状态,队列无法修改电梯状态,只能查看/电梯任务可分为两类:上升及下降tnode * UpHead ;tnode * DownHead ;/由于考虑到电梯在上升(下降)过程接受的某些上升(下降)任务可能无法在一次/上升过程中执行,于是设置一任务缓冲区用于存放,待下降(上升)任务结束后/再将其放入上升(下降)队列中tnode * buffer ;/任务缓冲区tnode * OutHead ;/任务又此队列输出public :TaskList ( ) ;/将初始化为空队列TaskList ( ) ;/销毁任务队列TaskList ( TaskList & t ) ;/复制函数bool IsBufferEmpty ( )/判断缓冲区是否空的if ( buffer - next != NULL )return 0 ;return 1 ;void AddTask ( comMsg t , comMsg nstate ) ;/添加任务进列,必须把电梯现时状态一齐传入void AddUpTask ( comMsg t );/将上升任务加进上升任务队列void AddDownTask ( comMsg t ) ;/将下降任务加入下降任务队列void InBuffer ( comMsg t ) ;/将任务放进缓冲任务队列comMsg TaskOut ( comMsg nstate ) ;/任务出列void UpDateNowState ( comMsg newstate ) ;/更新电梯状态bool IsEmpty ( ) ;/检查是否有任务在非缓冲区,否则置OutHead为NULLbool nIsEmpty ( ) ;/同IsEmpty( ),但无权置OutHead为NULL ;/*/以下为一部完整电梯的组装/*/电梯类:class elevator friend class DoubleLift ;protected :iPanel in_need ;/内部控制面版oPanel out_need N ;/外部控制面版comMsg NotRealSignal ;/虚拟请求SimBox doer ;/执行者,执行任务的载体int weight ;/电梯现在载重多少TaskList task_box ;/任务箱,用于存储任务,以及派送任务int mask ;/电梯标号,与另一电梯区分的标志int CtlStep ;/记录control()请求次数,到达一定次数后才执行一次int DoorStep ;/记录开关门过程control()请求次数,到达一定次数回到/CtlStep计算过程public :elevator ( int m ) ;/初始化电梯类elevator ( ) ;show view ;void GetInNeed ( int level ) ;/接受内部请求void GetOutNeed ( int level , msg UpOrDown ) ;/接受外部请求void SetInNeed ( int level ) ;/设置内部请求void SetOutNeed ( int level , msg UpOrDown ) ;/设置外部请求void TaskInBox ( ) ;/发送任务给任务箱void TaskToDoer ( ) ;/命令任务箱分派任务给执行者bool DoerCarryUp ( ) ;/命令执行者执行任务void control ( ) ;/电梯的控制器,用于调控所要任务及控件bool OverWeight ( ) ;/判断是否超重,超重则返回1,否返回0bool GetDummyNeed ( int Inp , int Outp ) ;/产生虚拟请求,1/inp,1/outp为几率,inp|outp=1时几率为0void GetHdcToVeiw ( HDC h , RECT c ) ;/设置画台void UpdateView ( ) ; ;/*/本类为20层楼的电梯类专门度身定做,只适用于本人写的电梯类,可演示至多两个电梯/*/以下是演示类的具体定义class show friend class elevator ;protected :HDC hdc ;RECT client ;POINT max ;/记录box最近一次的位置int place 2 ;/最新消息的行数int Nmsg ;/鼠标当前位置POINT Np ;/有些演示只能演示一个电梯,此标识将标识显示电梯对象int dMask ;/梯门标识:0:为电梯1 ; 1:为电梯2; ;3 :为两电梯分别显示int mMask ;/信息版标识 : 0 : 为电梯1的详细信息 ; 1: 为电梯2的详细信息HPEN hRedPen ;/红色画笔HPEN hBluePen ;/蓝色画笔HPEN hGreenPen ;/绿色画笔HBRUSH hBlackBrush ;/黑色SOLID刷子HBRUSH hGreyBrush ;/灰色SOLID刷子HBRUSH hWhiteBrush ;/白色SOLID刷子HBRUSH hYellowBrush ;/黄色SOLID刷子int lMask ;/标识自己所属的电梯public :/标识是否已经开始模拟,即时钟是否在跳动,为则已经开始,为则未开始或暂停bool Start ;show ( ) ;/获得绘图DCvoid SetCon ( HDC h , RECT c ) ;/映射坐标int x ( int cx ) ;int y ( int cy ) ;/画内部面版按钮,n为按钮标号,r为按钮半径 , mask为按钮选否选择,height为电梯选择void InButton ( int n , int mask , int height , int r ) ;/ow为梯门打开程度,mask为电梯选择void door ( int ow , int mask ) ;/画日字框格,主要用于外部面版绘制void drawrect ( int cx , int cy , int dx , int dy ) ;/画外部面版按钮,n为按钮标号,r为三角形底边长度,mask为电梯选择/n为0:无按下按钮,1:按下向上按钮,2:按下向下按钮 3:取消向上 4:取消向下void OutButton ( int n , int mask , int r ) ;/背景绘制void base ( ) ;/显示楼层void ShowLevel ( int n ) ;/重写矩形函数void Rect ( int cx , int cy , int dx , int dy ) ;/4To1,四个整数生成一个RECT结构RECT itor ( int cx , int cy , int dx , int dy ) ;/视图control按钮画制/n:绘制按钮的标识,mask :鼠标是否在按钮上,在为非0,不在为0void CtlButton ( int n , int mask ) ;/在消息面版的第n行显示长度为len的字符串LiftMsgvoid ShowMsg ( char * LiftMsg , int len ) ;/绘制电梯箱void ShowBox ( int level , int mask ) ;/画一个空心矩形,打上字母,用于电梯箱子的上下演示void SinBox ( int level , int mask ) ;/鼠标在控制按钮上时void MouseOnCtl ( int cx , int cy ) ;/判断给定的点是否在指定区域,在返回1,不在返回0bool IsInRect ( POINT np , RECT nr ) ;/当鼠标在区域发生事件执行任务void MouseClickCtl ( int cx , int cy ) ;/画消息面版void MsgBoard ( int mask ) ; ;类的详细实现请看附录(Elevator.h)(LiftShow.h):除了show类的所有类的定义及实现均放在文件Elevator.h中而show类的定义及实现将放在LiftShow.h里.四、算法分析本模拟的算法的重点主要在任务队列里:关于任务入列的算法:()获得要入列的任务()判断任务属于何种类别()若为向上(向下)任务类()判断任务向上(向下)任务队列是否获得优先级别()是,则判断任务是否符合进入向上(向下)队列条件,即其目的楼层大于(小于)现在电梯所处楼层符合则入列,不符合则入缓冲()不是(对于4的判断)则进入向上(向下)队列以上算法为具体实现的主要思想,具体实现与其还有一些出入,例如:关于队列优先级的初始设置条件及实现在以上算法并没有体现出来以及其它一些修补漏洞的算法均没有被以上算法提到,以上仅就针对入列这一操作进行大概的算法描述关于任务出列的算:此算法是本程序设计的难点,仅次于任务队列中数据结构的设计具体如下:获得任务出列要求后,算法开始:首先考虑若任务队列为空时,且有任务存在缓冲队列,则将考虑将缓冲任务导入到符合类别的队列,如果缓冲队列的第一任务不符合条件则产生一个虚拟任务并输出虚拟任务,使电梯运行到符合条件的情况;如果符合条件则将所考虑的实现若不为空,考虑任务队列的优先级的转让是否符合条件,即考虑原优先级队列是否还有任务未完成,是则从原优先级队列中出任务反之,则考虑将缓冲任务导入到符合类别的队列,并将优先权交及非优先级队列,若非优先级队列的第一任务不符合执行条件,则产生虚拟任务以获得需要符合的条件,并输出虚拟任务若符合则交换优先级,并从新的优先队列里输出任务,并移交缓冲队列任务到原优先级队列此上算法并没有考虑到一些与具体情况会产生的漏洞并引发的问题,但这些问题均在具体实现中得以解决以上算法仅代表大概的一个思考过程五、课程设计中出现的问题及解决方法:本次程序设计编写过程产生了主要产生了以下的问题:如何实现向上任务队列与向下任务队列优先级交换的过程解决方法:将向上任务队列最后任务指向向下任务队列的头,向下任务队列指向向上任务队列的头,形成了以环,这样当向上任务完成时,就可以通过其NEXT指针来达到优先级的装换,同理,向上任务队列为优先队列时亦采用同样的手法这样的一种设计十分适合处理电梯向上向下任务交替执行的当任务队列里只只有向向下任务时,而电梯处于最底层,要如何实现这样一个任务解决方法:电梯处于最底层,而产生一个向下任务,只有一中可能,就是这个任务是由外部请求触发的:即在目的楼层有人希望到目的楼层以下的楼层而按了按钮产生请求那电梯要完成任务必须到达目的楼层,而本人采取的方法是产生一个虚拟楼层使得电梯向上,知道电梯到达符合执行任务的楼层就取消虚拟楼层任务,转而执行真实的任务当在执行虚拟任务的过程中如果接受到比虚拟楼层优先的的任务,将执行该任务这可以用来解决其它在电梯里出现的同理的问题如何将电梯的动作与时钟结合具体方案:每一个时钟,电梯上升(下降)一层楼每运动一层楼,就判断一次电梯是否完成任务这样就不用计算完成一个任务要用的时间,而且避免在执行任务过程中接受到新的任务带来了距电梯停止时间的重新计算这样思考较为简单,易于控制当程序执行了次任务后出错,很难查错,因为如果用跟踪调试,如果n过大那么跟踪却要一段很长的时间,才能到达出错的地方,查看究竟,如何有更为便捷的方法解决这一类调试问题呢解决方法:这样的问题困扰我很久,而且非常恼人,这样我整个设计进程变得十分的慢但终于我找到了一种很有效的方法,就系设置时钟数使之间隔非常小,然后程序就可以运行得非常快,在流程的第一步加入时钟计算,并在每个时钟中把它输出,即在程序出错时,我可以了解到它是在第几步出错的,假设是在第步出错的,那么我们可以设一个语句当到达第步时就执行一个无效语句(对程序不造成任何影响的语句),然后在此设一个断点,那么在调试时就可以在错误的前一个时钟停下,然后观察错误的地方,因为时钟间隔设置的非常小(这只有在设计阶段才如此小),所以可以很快到达我们出错的前一时钟去逐步跟踪调试当然,设计一个程序不仅仅只有以上四个问题,以上的四个问题只是较为主要的,因为有些问题会随着以上的问题的解决,而变得不像是一个问题即变得十分简单六、总结:分析所用方法的优、缺点,存在的问题,以及个人的一些总结:缺点:首先,在演示上,暂时没法实现两个梯门在同一层楼的同时开关闭合,虽然两电梯在实质上有这功能,即只有在显示上却无法做到,这是本人在将程序可视化过程中遇到的一个难题由于时间的仓促,所以没有太多的时间去考虑这样一个问题其次,在任务队列上的存储方式上采用了链表的存储的方式,这样造成了一定的内存的浪费,如果用数组能更好的节省空间,这是本人在写完任务队列后才发现的,已经没有太多的时间去修改,而且列表在这里也有一定的优势优点:首先,采用链表而不用数组,虽然在空间上产生了一定的开销,但却在时间获得了一定的优势,链表让任务的输出和加入得到更为低的时间复杂度其次,本次采用了可视化,较为直观,容易理解再次,本电梯可以实现了多人多层的运载方式再次,个人对自己的算法还是蛮有信心的,觉得关于任务队列的中的数据结构做的犹为出色存在的问题:本电梯的所有信号均为模拟信号,所以其灵活性相对比较低而其解决方法是:将模拟信号改成客户输入,由适用该模拟程序的人用鼠标点击产生个人的一些总结:本程序的设计的时间花费主要在两部分的设计:一为对任务队列类的设计,由构想到实现都耗费了本人不小时间及精力,而且本人以构造出这样一个类而感到十分自豪,本人自以为程序的精华集中在这个类中另外就是调试所带来的时间耗费也是十分大的,其中没有掌握适当的方法是导致时间耗费的主要原因,在找到适当的方法后,调试的效率变得犹为高另外,模拟这样一个类,使得本人对类又有了更深一层的理解,将一个要构造的类分解成一些小类,再由小类组装成要得到的大类,并不是本人一开始就想到的本人是在直接编写电梯类一段时间后,发现类内结构的杂乱无章后,郁闷及思考了几天后得到的一个较为好的处理方法而先前的工作并不是无用工,先前的错误设计,为后来的大类分小类也提供了一定的经验,将小类以小黑箱的形式来思考,这样就形成了比较条理的设计,使得小类之间没有太大的关联这些诸如此类的思考在本次程序设计中,都多次被用到,整体提高了本人对一个程序的理解设计一个程序就像建造一栋楼或制造一辆车必须有一个整体的规划,有一个较好的蓝图,然后依照蓝图完成设计以将大设计分解为小设计为原则来作为完成设计的整体思想总而言之,无论在编程能力还是处理问题的能力上,我都有所提升本次程序设计的整体过程,本人受获非浅本来还打算把其它两个项目也做了,但由于时间的限制,本人精力又不如本人所料,所以没有把这样一个想法付诸行动但本人觉得编写一个完整的程序还是能给个人各方面素质带来一定程度上的提升的,而对思考能力的提升犹为显著七、用户使用说明:本程序为虚拟电梯的操作,因为信号由电脑随机产生,所以用户所能操作的并多,而且非常简单,具体如下:打开程序如下从上图可以看到,电梯有五个按钮键:跟踪电梯A(B)开关门,及开始模拟,还有显示电梯A(B)详细信息还有两个内部面版,用于分别显示两电梯内部楼层选择的情况在电梯B的内部面版右边是一个消息面版,用于显示电梯A(B)的运行的文字描述信息,由右下角两按钮确定显示哪个电梯信息,默认为A电梯首先,客户可以点击鼠标右键或者点击开始按钮启动电梯模拟开始模拟后可以见到如下图(下图为开始模拟后的一段时间的情形):从上图左边的两个电梯概况可以动态看到电梯的上下落情况,有两个梯状矩形,每层楼以字母标识,由a开始一直到t电梯门在任何时刻只跟踪一个电梯,即电梯门所处楼层与所跟踪电梯永远同层,并显示其开关门情况.程序开始默认为跟踪电梯A,要装换则选择跟踪电梯B开门则可,开关门情况由下图可见效果:上图为跟踪电梯A,下图为跟踪电梯B此上两幅图中消息面版均显示电梯A的文字描述,下图将为选择了右下角的“显示电梯B详细信息”后的消息面版显示从以上个图可以看到当内部面版被选择后,会显示为黄色,而当外部面版被选择后将被显示为红色,而请求被实现后将恢复原来的色泽。本程序有两个菜单:一个为File:用于推出程序;一个为Help:用于本人的信息。如下图所示:本程序为版,因为本人在设计过程中备份了,第次完成。Inotseeyou为本人通用网名,多谢欣赏本程序_附录1(Elevator.h)#ifndef elevator_h#define elevator_h#include math.h/#include iostream.h#include windows.h#include LiftShow.h#define N 20/大厦楼高层数#define M 500/时间间隔#define MaxWeight 9/电梯最大载重量(仅模拟量而已)#define MaxDStep 5/电梯开关门占用时钟数#define MaxStep 5/电梯上升下降一层楼占用时钟数enum msg CLOSED , OPEN , UP , DOWN ;/state Message:CLOSED ; OPEN ; UP ; DOWN enum ErrorMsg STATEERROR ;/出错信息class elevator ;/电梯类声明class comMsg ;/本电梯由三部分组成:SimBox , iPanel , oPanel(多个) , Controlclass SimBox ;class iPanel ;class oPanel ;/控制类class TaskList ;class tnode ;/考虑本电梯用于20层楼高的大厦/通用信号class comMsgpublic :/内部信号经过运算均可转换为等价的外部信号msg state ;/期望状态int level ;/目的楼层或信号发出楼层comMsg ( msg s = CLOSED , int l = 0 ) state = s ; level = l ; ;/*/*/以下为SimBox类定义class SimBoxfriend class elevator ;protected :comMsg task ; /任务comMsg NowState ; /实时状态public :SimBox ( ) ; /初始化bool open ( ) ; /打开BOX门bool close ( ) ; /关闭BOX门并静候bool up ( ) ; /使BOX门上升bool down ( ) ; /使BOX门下降comMsg getns ( )return NowState ; /返回BOX现在状态 ;/以下为SimBox类实现SimBox :SimBox ( )task.level = 0 ;task.state =CLOSED ;NowState.level = 0 ;NowState.state = CLOSED ;bool SimBox : open ( ) if ( NowState.state = CLOSED | task.level = NowState.level )NowState.state = OPEN ;return 1; return 0 ;bool SimBox : close ( )if ( NowState.state = OPEN )NowState.state = CLOSED ;return 1 ;return 0 ;bool SimBox : up ( )if ( NowState.state = CLOSED | NowState.state = UP )if ( task.level = NowState.level )task.state = CLOSED ;NowState.state = CLOSED ;return 1 ;if ( NowState.state = CLOSED )NowState.state = UP ; NowState.level + ;if ( task.level = NowState.level )task.state = CLOSED ;NowState.state = CLOSED ;return 1 ;return 1 ; return 0 ;bool SimBox : down ( ) if ( NowState.state = CLOSED | NowState.state = DOWN )if ( task.level = NowState.level )task.state = CLOSED ;NowState.state = CLOSED ;return 1 ;if ( NowState.state = CLOSED )NowState.state = DOWN ; NowState.level - ;if ( task.level = NowState.level )task.state = CLOSED ;NowState.state = CLOSED ;return 1 ;return 1 ;return 0 ;/*/*/以下为iPanel类定义:class iPanel friend class elevator ;protected :int button N ;/内部按扭信号public :iPanel ( ) ;void select ( int level ) ; /选择面版上的层数void cancel ( int level ) ; /取消面版已选项 ;/以下为iPanel实现iPanel : iPanel ( )int i ;for ( i = 0 ; i next != NULL )return 0 ;return 1 ;void AddTask ( comMsg t , comMsg nstate ) ;/添加任务进列,必须把电梯现时状态一齐传入void AddUpTask ( comMsg t );/将上升任务加进上升任务队列void AddDownTask ( comMsg t ) ;/将下降任务加入下降任务队列void InBuffer ( comMsg t ) ;/将任务放进缓冲任务队列comMsg TaskOut ( comMsg nstate ) ;/任务出列void UpDateN

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论