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

📄 elevator1.h

📁 常考设计题
💻 H
字号:
// Elevator1.h: interface for the CElevator class.
//
//    自定义的电梯基类
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_ELEVATOR1_H__7A1E60E5_BF5A_476F_9181_214905F2F226__INCLUDED_)
#define AFX_ELEVATOR1_H__7A1E60E5_BF5A_476F_9181_214905F2F226__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class CElevator  //:CWnd
{
public:
	CElevator();
	virtual ~CElevator();

    //定时器相关
public:
	static void CALLBACK MyTimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime);
	void KillMyTimer();
	void SetMyTimer(UINT nElapse);

	//用于定时器的ID
	UINT m_timerID;
	static CElevator* pThis;      //指向本类的指针

	//方法声明
public:
	int IsStay();                 //是否处于停留状态
	void CentralControl();        //中央控制逻辑
	int GetStatus();              //获取电梯当前运行状态
	float GetLocation();          //获取电梯当前的位置
	void Move();                  //电梯的运行逻辑
	void CloseDoor();             //当用户按下“Go”之后,电梯关门
	void RequestDest(int floor);  //接收用户发出的去往某个楼层的请求
	void RequestDown(int floor);  //接收某个楼层发出的向下的请求
	void RequestUp(int floor);    //接收某个楼层发出的向上的请求


	//属性声明
private:
	float m_location;       //指示电梯轿厢在电梯内部所处的位置
	int m_direction;        //指示电梯运动的方向
	                        //0表示停止
	                        //1表示向上
	                        //-1表示向下
	int m_aim;              //指示电梯向下一个目标楼层运行的目的
	                        //0表示响应该楼层的dest请求
	                        //1表示响应该楼层的up请求
	                        //-1表示响应该楼层的down请求
	int m_nextFloor;        //下一个目的楼层
	int m_stayTime;         //在某个楼层的停留时间计数值
	bool m_bStay;           //是否处于停留状态

	int m_upRequestTime;    //所有向上请求的次数
	int m_upRequest[8];     //保存所有发出向上请求的楼层号

	int m_downRequestTime;  //所有向下请求的次数
	int m_downRequest[8];   //保存所有发出向下请求的楼层号

	int m_destRequestTime;  //所有目标楼层的次数 
	int m_destRequest[8];   //保存所有被选择的目标楼层号
	//注:所有的请求按照顺便服务的策略进入队列

	
	//常量声明
private:
	const int m_stayAtFloor;      //电梯在一个楼层的停留时间,包括开门和关门时间,初始化为16
	const int m_door;             //电梯开门和关门的时间,初始化为4
	const int m_move;             //电梯在两个楼层之间的运行时间,初始化为8
	//注:这里所有的运行时间均为该时间所包含电梯控制周期的次数
	//    电梯控制周期设为0.25s=250ms。

	const float m_space;          //在一个电梯控制周期内,电梯可以运行的最大距离
	                              //为了运算简便,可以假设每个楼层代表一个座标点
	                              //如楼层1代表座标1,楼层2代表座标2。。。
	                              //电梯的运行即不断改变其自身的座标,
	                              //当其座标恰好在某一个整数座标点时,即表示电梯停靠在该楼层
	                              //电梯在两个楼层之间运行时,其经过的距离为1
	                              //由于电梯在两个楼层之间运行需要8个电梯控制周期
	                              //则每一个电梯周期内,电梯走过的座标距离=1/8=0.125;


};

#endif // !defined(AFX_ELEVATOR1_H__7A1E60E5_BF5A_476F_9181_214905F2F226__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -