www.pudn.com > Elevators.rar > 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:  
//## 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:  
//## Persistence: Transient 
//## Cardinality/Multiplicity: n 
 
//## Uses: %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