资源简介
c++ 写的电梯调度程序,图形界面,源代码
代码片段和文件信息
#include “stdafx.h“
#include “Monitor.h“
#include “Floor.h“
// Elevator
#include “Elevator.h“
CElevator::CElevator()
: m_enType(ALL)
m_iPassengers(0)
m_enStatus(WAIT)
m_enDirection(DOWN)
m_enDoorState(CLOSED)
m_lTimer(0)
m_lTotalRun(0)
m_lTotalIdle(0)
{
}
CElevator::CElevator(const CElevator &right)
: m_enType(ALL)
m_iPassengers(0)
m_enStatus(WAIT)
m_enDirection(DOWN)
m_enDoorState(CLOSED)
m_lTimer(0)
m_lTotalRun(0)
m_lTotalIdle(0)
{
}
CElevator::~CElevator()
{
delete m_pltPassenger;
}
CElevator & CElevator::operator=(const CElevator &right)
{
return *this;
}
int CElevator::operator==(const CElevator &right) const
{
return 0;
}
int CElevator::operator!=(const CElevator &right) const
{
return 0;
}
bool CElevator::Reachable (int iFloor)
{
// 根据电梯的运行规则判断能否到达某一层
if(iFloor>40||iFloor<1) return false;
if(iFloor==1) return true;
switch(m_enType)
{
//第一种类型每层都可达.
case ALL: return true;break;
//第二种类型除一层外只能到25~40.
case UPPART: if(iFloor<=40 && iFloor>=25) return true;
else return false;
break;
//第三种类型只能到1~25;
case DOWNPART: if(iFloor>0 && iFloor<=25) return true;
else return false;
break;
//第四种类型12~40中的偶数层.
case EVENS: if(iFloor%2==0) return true;
else return false;
break;
//第五种类型1~40中的奇数层.
case ODDS: if(iFloor%2==1) return true;
else return false;
default: TRACE(“Wrong requried floor!\n“);
return false;
break;
}
return false;
}
bool CElevator::IsOverloading ()
{
// 电梯是否超载
if(m_pltPassenger->size()>=m_iCapacity)
return true;
else
return false;
}
void CElevator::Manager ()
{
//电梯自己的管理器对自己状态的转换控制.
int ret;
switch(m_enStatus){
case IDLE: //电梯的空闲状态
m_lTotalIdle++;
m_bFinished = false;
if(m_ltMessages.empty())
{
SetStatus(IDLE);
SetDirection(NONE);
}
else
{
//消息队列不为空检查是否要停.
if(StopOrNot()) Stop();
//否则运行.
else Start();
}
break;
case RUN:
m_bFinished = false;
m_lTotalRun++;
m_iSpeed--;
//速度控制电梯的位置.
if(!m_iSpeed)
{
if(m_enDirection==UP) m_iLocation++;
else m_iLocation--;
m_iSpeed = m_pMonitor->m_S;
if(StopOrNot()) Stop();
}
break;
case WAIT:
m_lTotalWait++;
m_lTotalRun++;
//当电梯处于等待状态的时候认为他仍在工作
//先下后上
if(!--m_iPassUpDown)
{
if(!PassengerOut())
{
ret = PassengerIn();
if(ret!=1) m_bFinished = true;
}
m_iPassUpDown = m_pMonitor->m_T;
}
if(m_bFinished)
{
//在这里加入由于满载而没有满足的乘客的处理
if(ret==2)
{
if(!m_ltWaitMsg.empty()) Overloaded();
}
if(m_ltMessages.empty())
{
SetStatus(IDLE);
SetDirection(NONE);
}
else Start();
}
break;
default:
break;
}
}
void CElevator::Start ()
{
//电梯的启动
SetStatus(RUN);
//判断运行方向.
JudgeDirec
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2009-03-31 08:53 Elevator\
目录 0 2012-03-25 16:40 Elevator\Debug\
文件 147540 2009-01-03 07:05 Elevator\Debug\ESystem.exe
文件 769 2009-01-02 10:56 Elevator\Debug\result.txt
文件 13801 2009-01-03 03:25 Elevator\Elevator.cpp
文件 4571 2009-01-02 14:59 Elevator\Elevator.h
文件 25900 2009-03-25 12:26 Elevator\ESystem.aps
文件 4646 2009-01-03 08:55 Elevator\ESystem.clw
文件 2077 2001-12-10 14:25 Elevator\ESystem.cpp
文件 5230 2002-01-03 14:29 Elevator\ESystem.dsp
文件 537 2001-12-10 11:14 Elevator\ESystem.dsw
文件 1335 2001-12-10 11:14 Elevator\ESystem.h
文件 320512 2009-01-03 08:55 Elevator\ESystem.ncb
文件 55808 2009-01-03 08:55 Elevator\ESystem.opt
文件 1016 2009-01-03 07:05 Elevator\ESystem.plg
文件 11551 2009-01-03 07:05 Elevator\ESystem.rc
文件 12351 2009-01-03 07:02 Elevator\ESystemDlg.cpp
文件 1939 2002-01-03 15:13 Elevator\ESystemDlg.h
文件 630 2009-01-02 14:48 Elevator\Floor.cpp
文件 901 2009-01-02 15:01 Elevator\Floor.h
文件 147 2009-01-02 14:48 Elevator\Global.cpp
文件 266 2009-01-02 15:02 Elevator\Global.h
文件 3823 2009-01-03 03:58 Elevator\Manager.cpp
文件 1644 2009-01-03 04:01 Elevator\Manager.h
文件 4209 2009-01-03 03:02 Elevator\Monitor.cpp
文件 2021 2009-01-03 02:52 Elevator\Monitor.h
文件 810 2009-01-02 14:52 Elevator\MsgList.cpp
文件 595 2001-12-17 12:36 Elevator\MsgList.h
文件 3060 2009-01-02 14:53 Elevator\Passenger.cpp
文件 3461 2009-01-03 03:14 Elevator\Passenger.h
文件 850 2002-01-05 06:52 Elevator\PassengerList.cpp
............此处省略15个文件信息
- 上一篇:C++串口通信类,包含头文件和CPP文件
- 下一篇:EasyX图形库
相关资源
- C++串口通信类,包含头文件和CPP文件
- ADO DATA控件
- Canny 边沿提取算子 C++代码实现
- 拼写纠错 拼写检查 c++
- C++从YUV420序列中获得指定一帧数据(
- 将png格式图片转换成YUV格式,C++
- c++教程网的linux网络编程视频
- SPOOLing算法模拟 C++实现
- 微软官方MFC UDP socket 聊天例程
- 操作系统3种页面置换算法 C++实现
- VC++ 四种进程间通信的完整
- 最小二乘法的曲线拟合最高到6次MFC实
- 基于MFC 的多线程局域网聊天工具源码
- 学生社团管理程序 c++ 课程设计
- Q756748.zip 用VS2010MFC做一道可视化题目
- C++写的家庭小记账本
- 多机调度问题C++语言解决的源代码
- C++ 停车场管理 数据结构 课程设计
- 书店管理系统 C++
- 八数码游戏程序人工智能,c++
- 一个简单的vs c++ socket通讯程序
- 程序流程图生成器支持C/C++
- C++代码转换成C#工具
- 飞行棋c++源码初学者学习用
- MFC小学生速算练习系统VS2017
- xcs 基于遗传算法的自动学习分类器系
- 基于VS2008和IVF11的C/C++和Fortran混合编程
- 使用标准C++库实现的WAV音频文件读写
- C++ 带接口类动态链接库开发
- C++控制播放/插入PPT等操作
评论
共有 条评论