⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 elevator.h

📁 电梯仿真系统的实现
💻 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 + -