数据结构课程设计实习报告(模拟电梯)-附源代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构课程设计报告

学号:******

班级:******

姓名:******

指导老师:******

日期:2015

题号题目:电梯模拟

1.需求分析

模拟某校九层教学楼的电梯系统。该楼有一个自动电梯,能在每层停留。九个楼层由下至上依

次称为地下层、第一层、第二层、……第八层,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。

乘客可随机地进出于任何层。对每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。

模拟时钟从0开始计时,时间单位t=0.1秒。人和电梯的各种动作均要消耗一定的时间单位,规定:有人进出时,电梯每隔40t测试一次,若无人进出,则关门;关门和开门各需要20t;每个人进

出电梯均需要25t;如果电梯在某层静止时间超过300t,则驶回1层侯命。

电梯调度规则:

●就近原则:电梯的主要调度策略是首先响应沿当前行进方向上最近端的请求直到满足最远端请求。

若该方向上无请求时,就改变移动方向。

●在就近原则无法满足的情况下,首先满足更高层的请求。

●电梯的最大承载人数为12人,电梯人数达到12人后,在有人出电梯之前,不接受进入电梯的请

求。

●乘客上下电梯时先出后进。出电梯的时间固定是25t(与人数无关),进电梯时乘客是按队列的顺

序依次进入,每次只能进入一人且每个人花费的时间都为25t。

●电梯在关门期间(电梯离开之前)所在层提出请求的乘客同样允许进入。

●电梯的运行速度为2t/层。

【基本要求】

根据提供的文本文档(包含随机的乘电梯人数),通过自己编的程序读取文件,获得乘电梯的需求,按时序输出系统状态的变化过程,即发生的全部人和电梯的动作序列。

【选作内容】

电梯模似器具有一个简单的图形用户界面。用动画显示电梯的升降,人进出电梯。设计有下列对象:电梯、人、电梯控制板及其上各种按钮、定时器等。

【实现提示】

每层设置一个队列,用来存储从文件中读取的当前层的乘客信息,并按时间的先后顺序进行排序。

附:测试数据(以txt文档读取)

2.设计

2.1 设计思想

(1)数据与操作的特性

模拟电梯,以实际生活中的电梯为参考,应有两个对象:电梯、乘客。对于人这一对象,应包含乘客自身的信息;对于电梯这一对象,应具备添加乘客、删除乘客、访问乘客信息(获取乘客的去向等)、上升、下降、开关门等基本操作来实现相应的功能。此外,对于等候在电梯外面的乘客队列,应有添加乘客、删除乘客(进入电梯或等待超时离开)、获取乘客信息(如到达时间等)等基本操作以实现相应的功能。

整个系统运行的时间是以电梯的运作为轴,往前推进,知道服务完成,返回本垒层候命,此时程序结束(当然,理论上程序是无期限地执行下去);系统的空间开发与电梯层数、乘客人数成正比,电梯层数确定后,空间开发便与请求服务的乘客数有关,并处于动态开发(“人来人去”,空间的开辟与释放是动态的)。

可见,时空的要求不是特别紧迫,资源的开发不会很大,效率也会有所保证。

(2)数据结构设计

由(1)中的数据与操作的特性分析,应用类与对象、抽象数据类型(ADT)的设计思想,下面详细说明这两点。

电梯与乘客都设计为类,其操作涉及到队列、链表的数据结构。对于乘客,每层设置一个队列,用来存储从文件中读取的当前层的乘客信息,并按先来后到的顺序进行排序。对于电梯里面的乘客,我是用一个链表来存储的。且这些数据结构均采用抽象数据类型,在使用的时候生成需要的实例。

涉及的数据结构:

单链表(存放电梯内的乘客)

队列(存放每层楼等待的乘客)

这两种数据结构大体上是相同的,只是操作上有所!他们的逻辑结构与物理结构图示如下:

逻辑结构(逻辑上连续) 物理结构(物理上不要求连续)

电梯类以及相应的功能函数:

const int FLOORS=9; //总楼层数(一律从标号0开始,至FLOORS-1层)

const int LOAD=12; //电梯载重(人数)

enum states {UP,DOWN,CLOSED,WAIT}; //电梯运作的状态(上升、下降、关门、等待)

enum direct {U,D}; //电梯运作的方向U(上),D(下)

class List{

private:

int curr_floor; //电梯当前所在楼层

int curr_man; //电梯内当前总人数

states state; //电梯当前所处状态

direct dire; //电梯运作的方向

bool request[FLOORS]; //记录有请求的楼层

public:

List();

int GetFloor(); //得到电梯当前楼层

int GetMan(); //得到电梯当前人数

states GetState(); //得到电梯当前状态

direct GetDire(); //得到电梯运行方向

bool* GetReque(); //得到电梯请求数组

void SetState(states sta); //设置电梯状态

void SetDire(direct dir); //设置电梯运行方向

void SetFloor(int i); //设置电梯当前的楼层

void SetMan(int i); //设置电梯当前人数

void SetReque(int i,bool b); //设置请求数组的request[i]值为b(bool类型)

};

相关文档
最新文档