电梯模拟程序设计报告DOC.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
电梯模拟程序设计报告DOC

一、课程设计题目: 问题 :公司要建立一栋两层的办公大楼,并装上1部新的电梯,每个电梯限载1人,要求开发一个面向对象的模拟程序,模拟电梯的操作,以确定这个电梯能否满足需要,对于发生的每个重要事件显示一个消息。例如:“1人到了2楼”,“人进入了电梯”等等。 为了省电,电梯每天在一楼关门等待。 模拟程序包括一个时钟,每天从时间0开始,每秒滴答一次,模拟程序随机设置每一层第一个人到来的时间,模拟程序生成一个新到的人并将人放在这一层,然后这个人按下该层的按钮,请求电梯开门。这个人的目的地不能与他上电梯的楼层相同。电梯从一层到二层的时间需要5秒。 扩展1:如果楼层为多层,程序应作何改动? 扩展2:如果有多部电梯,程序应如何实现电梯在每一层的载客和下客?而且最省电? 扩展3:如果电梯可搭载多位乘客,程序如何实现? 扩展4:(选做)用动画图形输出,在屏幕上显示电梯上下移动。 评分标准:完成问题1成绩合格 完成扩展1,或2或3之一成绩为中,完成扩展1,2,3中2个成绩为良,完成3个扩展成绩为优。 二、题目需求分析及概要设计: 首先考虑到本题目为模拟电梯的题目,即设计一个电梯类来实现电梯的模拟,该电梯必须能独立运行,能处理外部请求。本人是这样考虑这个电梯类的:本人从真实电梯的角度去模拟设计这个电梯的,于是本人将整个电梯分解。一个完整的电梯可以分解为如下部件: 外部面版:用于接受电梯外的人的进入电梯的请求 内部面版:用于接受电梯内的人的请求,即楼层选择面版 电梯箱(执行者):是执行任务的工具,用于传送客人到达目的工具 任务队列:是电梯箱与外(内)面版的中介,将请求生成任务放入队列,再将任务发给电梯箱,等电梯箱实现乘客们的要求. 控制器:用于控制以上部件以确保电梯运载客人的功能得以实现 以上是对电梯部件的描述,由上,就必须先分别设计出:外部面版类( oPanel ) ,内部面版类 ( iPanel ) ,电梯箱类 ( doer ) ,任务队列类 ( TaskList ) ,而控制器将在电梯类以电梯类的成员函数实现. 当完成了个部件的设计,在考虑设计电梯类( elevator ) ,而设计电梯类实质是一个组装个部件的过程.另外,因为在整个过程出现了"任务"这一对象,因而还必须设计一个任务类 ( comMsg ) ,而任务在设计过程中将被理解为消息,而任务类的名字可以被本人以comMsg(通用消息)命名. 其中外部面版、内部面版、较为容易实现,设计的重点在任务队列类与控制器(即电梯类的各成员函数).其中犹以任务队列类的设计为难点,因为对于内外部消息的进列不同的处理,而对消息的出列有要经一定的选择.以下本人将重点讲解任务队列的设计过程,(其它类设计请参照"三、详细设计" ). 因为考虑到电梯的实用性,电梯将采用优先级队列的想法来构造队列.电梯若正向上(正向下)将优先完成目的楼层在现电梯所处楼层或以上(以下)的楼层的任务为向上运动的任务,而这一类任务中又先完成能最快完成的任务,即目的楼层距离现电梯所处楼层最近的任务.当这一类符合要求的(向上)任务全部执行完毕后将执行向下任务.即采取这样一个原则去载客人:如果在电梯运行方向上有人要使用电梯则继续往那个方向运动,如果电梯中的人还没有到达目的地则继续向原方向运动。为了实现这样一个任务队列本人所设计的任务队列在内部是又三个子队列以链表的形式实现的.这三个子队列包括:向上任务队列;向下任务队列;缓冲任务队列;顾名思义:向上队列用于存储符合条件的所有要实现向上运动的任务;向下队列用于存储符合条件的所有向下运动的任务;而缓冲队列则用于存储不符合条件的任务.以上三个队列,其中向上队列以低楼层到高楼层任务排队,低楼层任务在该队列有绝对优先级;反之,高楼层在向下队列有绝对优先级.而缓冲队列则视实际情况而确定队列的优先选择方式.而向上与向下队列之间又存在它们自己的优先级,它们将轮流获得优先级.当向上(向下)获得优先级时,缓冲队列将用于存储在向上(向下)队列夺得优先权则一段时间内,接受所有不符合条件的向上(向下)任务并以向上(向下)任务的优先选择方式进行排队,而此时所有的向下(向上)任务将全部放入向下(向上)任务队列,没有优先级的队列是没有权利将自己属于自己类别的任务放入缓冲队列,即此时所有向下(向上)任务均符合条件进入向下(向上)队列.当向上队列与向下队列交换优先级时,缓冲队列的任务将将队列的任务放入原拥有优先级的队列. 关于如何实现这个队列优先级的装换本人采用了这样一种方法,就是有一个指针记录拥有优先级别队列的头指针,而优先级队列的最后的任务所指向的下一个任务将是令外一个非优先级队列.当优先级队列头节点的下一个任务为与自己属性(向上任务或向下任务)不同时,即说明本优先级队列所有符合条件的任务已经完成,可

文档评论(0)

xy88118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档