数据结构课程设计报告-某校九层教学楼的电梯系统x.docx

数据结构课程设计报告-某校九层教学楼的电梯系统x.docx

  1. 1、本文档共80页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课程设计报告-某校九层教学楼的电梯系统x

一、需求分析1.题目描述模拟某校九层教学楼的电梯系统。该楼有一个自动电梯,能在每层停留。九个楼层由下至上依次称为地下层、第一层、第二层、……第八层,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。乘客可随机地进出于任何层。对每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。模拟时钟从0开始计时,时间单位t=0.1秒。人和电梯的各种动作均要消耗一定的时间单位,规定:有人进出时,电梯每隔40t测试一次,若无人进出,则关门;关门和开门各需要20t;每个人进出电梯均需要25t;如果电梯在某层静止时间超过300t,则驶回1层侯命。电梯调度规则:就近原则:电梯的主要调度策略是首先响应沿当前行进方向上最近端的请求直到满足最远端请求。若该方向上无请求时,就改变移动方向。在就近原则无法满足的情况下,首先满足更高层的请求。电梯的最大承载人数为12人,电梯人数达到12人后,在有人出电梯之前,不接受进入电梯的请求。乘客上下电梯时先出后进。出电梯的时间固定是25t(与人数无关),进电梯时乘客是按队列的顺序依次进入,每次只能进入一人且每个人花费的时间都为25t。电梯在关门期间(电梯离开之前)所在层提出请求的乘客同样允许进入。电梯的运行速度为2t/层。2、需求描述根据题目要求,实现电梯模拟系统要解决以下几点问题:(1)需要设置一个系统时钟,模拟电梯运行中的时钟变化,该时钟贯穿系统运行的始终。(2)需要若干计时器,在电梯运行过程中来计算各个动作的时间。(3)需要设置几个状态,用状态来表明电梯的情况。具体有以下七个状态:上楼中,下楼中,开门中,门开着(无人进出),进人中,出人中,空闲等待状态,无人乘坐返回一楼。(4)需要设置总的等待队列和电梯内人的需求队列两个队列。综上所述,实现该系统的关键是实现时钟、计时器、状态和等待队列的联系及交互。二、设计思想1、数据与操作的特性数据由文件输入,结果从文件输出。输入文件格式为“等待楼层目标楼层申请时间”,输出格式为“某时刻事件”。由输入文件输入数据存在内存当中以备使用,程序根据输入的数据来控制内部逻辑和输出。2、存储结构设计:根据题目要求,本着简化设计逻辑的原则只设置了两个存储结构,并且由于涉及的数据量很小,都采用了链表的设计结构。3、逻辑结构设计(1)设计一个乘客类,用来构造乘客。/*人员类*//*属性:id:添加人员时id顺序增加,是人员的唯一标识startfloor:该人的起始楼层endfloor:该人的目标楼层starttime:该人提出申请的时间*/class Person{public:int Id;int Startfloor;int Endfloor;int Starttime;Person(int sf, int ef, int st);Person();//默认构造函数,构造头结点时使用;int ReturnStartFloor();int ReturnEndfloor();};(2)设计一个链表的类模板template class Tclass LinList{friend class LinListWithRearT;private:ListNodeT *head;//头指针,指向第一个结点int size;//单链表当前结点个数ListNode T *Index(const int i) const;//定位,返回第i个结点的地址public:LinList(void);//构造函数~LinList(void);//析构函数int Size(void) const;//返回单链表当前结点个数T GetData(const int pos) const; //返回第pos个结点的data域值void Insert(const T item, const int pos);//在第pos个结点前插入一个元素值为item的新结点T Delete(const int pos);//删除第pos个结点,返回被删节点的数据域值void OrderInsert(const T item); //有序插入:将x插入到单链表,且插入后单链表所有结点按值从小到大有序。ListNodeT * Head() const; //取单链表头结点int IsEmpty(void) const; //链表空否,空返回1,否则返回0void Print() const; //输出单链表void InsertEnd(const T item); //在单链表的表尾插入值为item的新结点void MoreDelete(const T item); //删除单链表中所有值为item的结点void Merge(const LinListT La, const LinListT L

文档评论(0)

almm118 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档