电梯仿真系统报告

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

面向对象技术大作业---电梯方针系统设计 79号王洪伟

电梯仿真系统设计

题目要求:

公司要建立一幢两层的办公大楼并装上“最新”的电梯。公司要求开发一个面向对象的软件模拟程序,仿真电梯的操作,确定这个电梯能否满足需要。

这个电梯只限乘载一人,为了省电,只在需要时才使用,电梯每天在一楼关门等待。

模拟程序包括一个时钟,每天从时间0开始,每秒滴答一次。模拟程序的调度器组件随机设置每一层第一个人到来的时间。当时钟的时间等于第一个人到来的时间时,模拟程序对指定层生成一个新到的人并将人放在这一层。然后这个人按下该层的按钮,请求电梯开门。这个人的目的地楼层不能与他上电梯时所在的楼层相同。

如果第1个人到达第1层,则他可以按下按钮和等待电梯开门之后立即进入电梯。如果第1个人在第2层,则电梯要升至第2层去接这个人。电梯从1层移至2层需要5秒钟。

电梯到达一层时,打开该层的电梯门上的灯,并在电梯内发出铃声。该层的按钮和电梯中中表示该层的按钮复位,电梯门打开,乘客(如果有人)走出电梯,另一乘客(如果有人等待)进入电梯并按下目的地楼层的按钮,电梯门关上。如果电梯要开始移动,则要确定移动的方向(对只有两层的电梯很简单)并移到下一层,为了简单起见,假设电梯到达一层时发生所有事件,而且直到电梯门关上所花费的时间是0秒。电梯总是知道在哪一层和要到哪一层的。

任何时间每层最多只能有一个人等待,如果新到的人(不在电梯中)要到达一层时该层已被占用,,则一秒后才能安排新的到达者。

第 1 页共 22 页

面向对象技术大作业---电梯方针系统设计 79号王洪伟假设每隔5到20秒人们随机到达每层。

这个题目的目标是实现一个能够工作的软件模拟程序,并根据这些要求运行。该程序应模拟几分钟的电梯操作,确定电梯能否满足这座大楼的交通需求。

为了程序易于运行和操作,我在这个题目的基础上增加了一电梯的层数,和电梯能装的人数。另外还做了一些限制:

(1)电梯的运行规则是:可到达每层。

(2)仿真开始时,电梯处于第一层,为空梯。

(3)仿真开始后,有N人(>12人)在该国际贸易中心的1层,开始乘梯活动。(4)每个人初次所要到达的楼层是随机的,开始在底层等待电梯到来。

(5)每个人乘坐电梯到达指定楼层后,再随机地去往另一楼层,依此类推。

(6)电梯运行的方向由先发出请求者决定,不允许后发出请求者改变电梯的当前运行方向,除非是未被请求的空梯。

(7)电梯仿真时间是T秒。T秒后电梯模拟结束。

软件开发要求:

设计一个易于理解的界面,动态显示各梯的载客与运行情况(上、下或停止),动态

显示各楼层的人员停留情况与要求乘梯情况;动态显示从仿真开始到目前的时间。

系统分析、设计与实现:

1、系统分析

采用OOP分析的关键就是要对问题的对象空间的分类(类的分析

第 2 页共 22 页

面向对象技术大作业---电梯方针系统设计 79号王洪伟与设计,这一点跟面向过程的流程图设计不太一样),也就是在整个系统中包括那几个类,每个类包含那些属性特征和行为特征。对于上面的电梯问题,很明显有两个类:即电梯类和乘客类(从所设计到的对象描述可以观察到,但是有的问题即使这一步也要仔细分析)。电梯类应该反映所有关于电梯状态和行为的信息,而乘客类也应该反映这些信息。

2、类的设计:

乘客类:

class Cpassenger

{

public:

Cpassenger();//构造函数

virtual ~Cpassenger();

int number;//编号

int counter,counter1;//计数器

int iLifts;//乘坐过的次数

int iToFloor;//目的楼层

int iAtFloor;//所在楼层

int iStartTime;//记录这个人第一次出现的时间

int iRestTime;//坐电梯中间休息一段时间然后发信号的那段时间

int iReachTime;//记录到达目的地的时间

bool bSignal;//判断是否发出信号

bool bInLift;//是否在电梯内部

bool bUp;//判断是否要向上

};

第 3 页共 22 页

面向对象技术大作业---电梯方针系统设计 79号王洪伟

电梯类:

class Celevator

{

public:

Celevator();

virtual ~Celevator();

bool bStop;//判断是否停在某层

int iPassengers;//电梯内部的乘客数

int iToFloor;//要去的楼层

int iAtFloor;//所在楼层

bool bStart;//开始仿真

bool bUp;//判断是否向上运行

};

由于本程序应用的是基于对话框的MFC框架集,所以建立了基于CDialog类的CSimulationDlg类。现在将类的头文件代码复制如下,中间做了说明。

class CSimulationDlg : public CDialog

{

// Construction

public:

void PaintLiftLine();

int M;//楼层数

CSimulationDlg(CWnd* pParent = NULL); // standard constructor

// Dialog Data

//{{AFX_DATA(CSimulationDlg)

第 4 页共 22 页

面向对象技术大作业---电梯方针系统设计 79号王洪伟

enum { IDD = IDD_SIMULATION_DIALOG };

// NOTE: the ClassWizard will add data members here

//}}AFX_DATA

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CSimulationDlg)

protected:

virtual void DoDataExchange(CDataExchange* pDX);

相关文档
最新文档