📄 elevator.h
字号:
//## begin module%1.3%.codegen_version preserve=yes
// Read the documentation to learn more about C++ code generator
// versioning.
//## end module%1.3%.codegen_version
//## begin module%3C12C4B2005A.cm preserve=no
// %X% %Q% %Z% %W%
//## end module%3C12C4B2005A.cm
//## begin module%3C12C4B2005A.cp preserve=no
//## end module%3C12C4B2005A.cp
//## Module: Elevator%3C12C4B2005A; Package specification
//## Subsystem: <Top Level>
//## Source file: D:\Program\OOP\Elevators\SourceCode\Elevator.h
#ifndef Elevator_h
#define Elevator_h 1
//## begin module%3C12C4B2005A.additionalIncludes preserve=no
//## end module%3C12C4B2005A.additionalIncludes
//## begin module%3C12C4B2005A.includes preserve=yes
//#include "Global.h"
//## end module%3C12C4B2005A.includes
// Floor
#include "Floor.h"
// Monitor
#include "Monitor.h"
// PassengerList
#include "PassengerList.h"
#include "MsgList.h"
//## begin module%3C12C4B2005A.declarations preserve=no
//## end module%3C12C4B2005A.declarations
//## begin module%3C12C4B2005A.additionalDeclarations preserve=yes
typedef enum {ALL=0,UPPART=1,DOWNPART=2,EVENS=3,ODDS=4} ETYPE;
typedef enum {IDLE=0,RUN=1,WAIT=2} ESTATUS;
typedef enum { UP=0,DOWN=1,NONE=2} EDIRECTION;
typedef enum {OPEN=0,CLOSED=1} DOORSTATE ;
class CMonitor;
class CFloor;
//## end module%3C12C4B2005A.additionalDeclarations
//## begin CElevator%3C1206FF0294.preface preserve=yes
//## end CElevator%3C1206FF0294.preface
//## Class: CElevator%3C1206FF0294
// 电梯类
//## Category: <Top Level>
//## Persistence: Transient
//## Cardinality/Multiplicity: n
//## Uses: <unnamed>%3C12C11502EE;friend CFloor { -> }
class CElevator
{
//## begin CElevator%3C1206FF0294.initialDeclarations preserve=yes
//## end CElevator%3C1206FF0294.initialDeclarations
public:
int GetStopNums(CMessage* msg);
int GetLowestToGo(void);
int GetHighestToGo();
bool IsIdle();
bool IsQualifiedForRespondingCall(CMessage* msg);
CMsgList m_ltWaitMsg;
void SetDirection(EDIRECTION dir);
void JudgeDirection(void);
void Overloaded();
void SetStatus(ESTATUS status);
bool m_bFinished;
//## Constructors (generated)
CElevator();
CElevator(const CElevator &right);
//## Destructor (generated)
~CElevator();
//## Assignment Operation (generated)
CElevator & operator=(const CElevator &right);
//## Equality Operations (generated)
int operator==(const CElevator &right) const;
int operator!=(const CElevator &right) const;
//## Other Operations (specified)
//## Operation: Reachable%3C120D2002D0
// 检查该电梯能否到达某层
bool Reachable (int iFloor // 要检查的层数
);
//## Operation: IsOverloading%3C120D83035C
// 电梯是否超载
bool IsOverloading ();
//## Operation: Manager%3C1212D301AE
// 电梯自己的状态管理器
void Manager ();
//## Operation: Start%3C1213200366
// 电梯启动
void Start ();
//## Operation: Stop%3C12133B02DA
// 电梯停止
void Stop ();
//## Operation: StopOrNot%3C130785023A
// 电梯自己判断是否需要停留在某一楼层
bool StopOrNot ();
//## Operation: AskForFloor%3C1308300118
//## Operation: AddMsg%3C13218501B8
void AddMsg (CMessage* msg);
//## Operation: DeleteMsg%3C1321BF01B8
//## Get and Set Operations for Class Attributes (generated)
//## Attribute: m_pFloor%3C12CE780302
const CFloor* get_m_pFloor () const;
void set_m_pFloor (CFloor* value);
//## Get and Set Operations for Associations (generated)
//## Association: 电梯部分%3C12BF7200E6
//## Role: CElevator::m_pMonitor%3C12BF720349
// 保留调度对象的指针:
//
// 用于和某一停留楼层交互的时候获得该楼层的指针.
const CMonitor * get_m_pMonitor () const;
void set_m_pMonitor (CMonitor * value);
//## Association: 乘客所属权%3C12C1930280
//## Role: CElevator::m_pFloor%3C12C194019A
// 在电梯类中保留一个CFloor的指针.
// 用于在电梯停留在某一楼层的时候,满足该楼层等电梯的认得需求
// .
//const CFloor * get_m_pFloor () const;
//void set_m_pFloor (CFloor * value);
//## Association: 乘坐某部电梯%3C12C24F03A2
//## Role: CElevator::m_pltPassenger%3C12C2500320
// 在电梯中包含一个乘客链表,管理处于电梯内部的乘客的需要
const CPassengerList * get_m_pltPassenger () const;
void set_m_pltPassenger (CPassengerList * value);
// Additional Public Declarations
//## begin CElevator%3C1206FF0294.public preserve=yes
CElevator(ETYPE type,int id,int speed,int capacity,int passupdown);
void OpenDoor();
void CloseDoor();
CFloor* GetFloor(int floor);
CMonitor * GetMonitor();
CPassengerList* GetLtPassenger();
int GetLocation();
long GetTotalRun();
long GetTotalIdle();
ESTATUS GetStatus();
EDIRECTION GetDirection();
int PassengerOut();
int PassengerIn();
void ChangeDirection();
//## end CElevator%3C1206FF0294.public
protected:
// Additional Protected Declarations
//## begin CElevator%3C1206FF0294.protected preserve=yes
//## end CElevator%3C1206FF0294.protected
private:
//## Get and Set Operations for Class Attributes (generated)
//## Attribute: m_enType%3C120716023A
// enum ETYPE {ALL=0,UPPART=1,DOWNPART=2,EVENS=3,ODDS=4 };
// 电梯类型:
// 1. ALL : 可以到达每一层.
// 2. UPPART: 可以到达1,25-40层.
// 3. DOWNPART: 可以到达1-25层.
// 4. EVENS: 可以到达1,2-40的偶数层.
// 5. ODDS: 可以到达1-39的奇数层
//## Attribute: m_iCapacity%3C120C4B03DE
// 电梯的容量,就是系统参数电梯最大乘员量K人
//## Attribute: m_iSpeed%3C120D1A0082
// 电梯的速度,系统参数S秒/层
//## Attribute: m_iLocation%3C120E27024E
// 电梯的当前位置
//## Attribute: m_iPassengers%3C120EE90172
// 电梯中的人数,便于判断是否超载
//## Attribute: m_iEID%3C120F2B03AC
// 电梯的标识,在本系统位0-9的整数
//## Attribute: m_enStatus%3C120F9400F0
// 电梯的状态:
// enum ESTATUS{IDLE,RUN,WAIT}
// 空闲状态,运行状态,等待状态;
//## Attribute: m_enDirection%3C121120005A
// enum EDIRECTION{ UP=0,DOWN=1};
// 电梯的运行方向:
// 向上,向下,停止;
//## Attribute: m_enDoorState%3C1211E3015E
// enum DOORSTATE {OPEN=0,CLOSED=1};
// 电梯门的状态; 开,关
//## Attribute: m_lTimer%3C12135302A8
// 电梯内部的时钟
//## Attribute: m_lTotalRun%3C12137A0348
// 电梯的运行时间计时器
//## Attribute: m_lTotalIdle%3C1213F90262
// 电梯的空闲计时器
// Additional Private Declarations
//## begin CElevator%3C1206FF0294.private preserve=yes
//## end CElevator%3C1206FF0294.private
private: //## implementation
// Data Members for Class Attributes
//## begin CElevator::m_enType%3C120716023A.attr preserve=no private: ETYPE {U} ALL
ETYPE m_enType;
//## end CElevator::m_enType%3C120716023A.attr
//## begin CElevator::m_iCapacity%3C120C4B03DE.attr preserve=no private: int {U}
int m_iCapacity;
//## end CElevator::m_iCapacity%3C120C4B03DE.attr
//## begin CElevator::m_iSpeed%3C120D1A0082.attr preserve=no private: int {U}
int m_iSpeed;
//## end CElevator::m_iSpeed%3C120D1A0082.attr
//## begin CElevator::m_iLocation%3C120E27024E.attr preserve=no private: int {U}
int m_iLocation;
//## end CElevator::m_iLocation%3C120E27024E.attr
//## begin CElevator::m_iPassengers%3C120EE90172.attr preserve=no private: int {U} 0
int m_iPassengers;
//## end CElevator::m_iPassengers%3C120EE90172.attr
//## begin CElevator::m_iEID%3C120F2B03AC.attr preserve=no private: int {U}
int m_iEID;
//## end CElevator::m_iEID%3C120F2B03AC.attr
//## begin CElevator::m_enStatus%3C120F9400F0.attr preserve=no private: ESTATUS {U} WAIT
ESTATUS m_enStatus;
//## end CElevator::m_enStatus%3C120F9400F0.attr
//## begin CElevator::m_enDirection%3C121120005A.attr preserve=no private: EDIRECTION {U} STOP
EDIRECTION m_enDirection;
//## end CElevator::m_enDirection%3C121120005A.attr
//## begin CElevator::m_enDoorState%3C1211E3015E.attr preserve=no private: DOORSTATE {U} CLOSED
DOORSTATE m_enDoorState;
//## end CElevator::m_enDoorState%3C1211E3015E.attr
//## begin CElevator::m_lTimer%3C12135302A8.attr preserve=no private: long {U} 0
long m_lTimer;
//## end CElevator::m_lTimer%3C12135302A8.attr
//## begin CElevator::m_lTotalRun%3C12137A0348.attr preserve=no private: long {U} 0
long m_lTotalRun;
//## end CElevator::m_lTotalRun%3C12137A0348.attr
//## begin CElevator::m_lTotalIdle%3C1213F90262.attr preserve=no private: long {U} 0
long m_lTotalIdle;
//## end CElevator::m_lTotalIdle%3C1213F90262.attr
//## begin CElevator::m_pFloor%3C12CE780302.attr preserve=no public: CFloor* {R}
//CFloor* m_pFloor;
//## end CElevator::m_pFloor%3C12CE780302.attr
//## begin CElevator::m_ltMessages%3C12FEB8005A.attr preserve=no public: CMsgList {U}
CMsgList m_ltMessages;
//## end CElevator::m_ltMessages%3C12FEB8005A.attr
// Data Members for Associations
//## Association: 电梯部分%3C12BF7200E6
//## begin CElevator::m_pMonitor%3C12BF720349.role preserve=no public: CMonitor {10 -> 1RHGN}
CMonitor *m_pMonitor;
//## end CElevator::m_pMonitor%3C12BF720349.role
//## Association: 乘客所属权%3C12C1930280
//## begin CElevator::m_pFloor%3C12C194019A.role preserve=no public: CFloor {1 -> 1RHN}
CFloor *m_pFloor;
//## end CElevator::m_pFloor%3C12C194019A.role
//## Association: 乘坐某部电梯%3C12C24F03A2
//## begin CElevator::m_pltPassenger%3C12C2500320.role preserve=no public: CPassengerList {0..10 -> 1RHN}
CPassengerList *m_pltPassenger;
//## end CElevator::m_pltPassenger%3C12C2500320.role
// Additional Implementation Declarations
//## begin CElevator%3C1206FF0294.implementation preserve=yes
long m_lTotalWait;
int m_iPassUpDown;
//## end CElevator%3C1206FF0294.implementation
};
//## begin CElevator%3C1206FF0294.postscript preserve=yes
//## end CElevator%3C1206FF0294.postscript
// Class CElevator
//## Get and Set Operations for Class Attributes (inline)
inline const CFloor* CElevator::get_m_pFloor () const
{
//## begin CElevator::get_m_pFloor%3C12CE780302.get preserve=no
return m_pFloor;
//## end CElevator::get_m_pFloor%3C12CE780302.get
}
inline void CElevator::set_m_pFloor (CFloor* value)
{
//## begin CElevator::set_m_pFloor%3C12CE780302.set preserve=no
m_pFloor = value;
//## end CElevator::set_m_pFloor%3C12CE780302.set
}
//## Get and Set Operations for Associations (inline)
inline const CMonitor * CElevator::get_m_pMonitor () const
{
//## begin CElevator::get_m_pMonitor%3C12BF720349.get preserve=no
return m_pMonitor;
//## end CElevator::get_m_pMonitor%3C12BF720349.get
}
inline void CElevator::set_m_pMonitor (CMonitor * value)
{
//## begin CElevator::set_m_pMonitor%3C12BF720349.set preserve=no
m_pMonitor = value;
//## end CElevator::set_m_pMonitor%3C12BF720349.set
}
inline const CPassengerList * CElevator::get_m_pltPassenger () const
{
//## begin CElevator::get_m_pltPassenger%3C12C2500320.get preserve=no
return m_pltPassenger;
//## end CElevator::get_m_pltPassenger%3C12C2500320.get
}
inline void CElevator::set_m_pltPassenger (CPassengerList * value)
{
//## begin CElevator::set_m_pltPassenger%3C12C2500320.set preserve=no
m_pltPassenger = value;
//## end CElevator::set_m_pltPassenger%3C12C2500320.set
}
//## begin module%3C12C4B2005A.epilog preserve=yes
//## end module%3C12C4B2005A.epilog
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -