电梯仿真系统报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);