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