电梯调度程序2

C与C++

C语言实现思路

定义:乘客结构体(from, to, status), 电梯运行函数, 决策函数
全局变量:电梯状态,世界状态,乘客数组

在主函数中,首先读入输入,并初始化电梯和世界状态,填充乘客数组,然后进入电梯运行函数

电梯运行函数:循环:检查已递送乘客数量,遍历乘客数组并更新乘客状态(已触发,未触发),调用决策函数并根据结果运行电梯(上、下、停靠),更新状态,若为停靠则更新乘客状态(出入厢)
其实也可以通过给函数加一个参数模拟面向对象吧

C++实现类图

1329642-20180504224801885-822890865.png

区别

面向过程需要分析解决问题所需要的子步骤,并把一些子步骤组合起来成为函数,然后按照解决问题的过程互相调用来解决问题

而面向对象可以把现实中的一类实体抽象成类,并用对象表示一个实体,对象的成员表示实体的状态,对象的方法表示实体能执行的操作。这样抽象使程序结构更清晰,扩展性也更好,且降低了名称污染。面向对象的封装性使程序模块内聚性更好,继承和多态使热插拔更加便捷

电梯类

Elevator.h

#ifndef SIMPLE_ELEVATOR_ELEVATOR_H
#define SIMPLE_ELEVATOR_ELEVATOR_H

#include <queue>

using namespace std;

class Elevator {
private:
    int currentFloor;
    queue<int> destinstionQueue;
    int time;
public:
    int getTime() const;

public:
    Elevator();

    virtual ~Elevator();

    int getCurrentFloor() const;

    const queue<int> &getDestinstionQueue() const;

    void goToFloor(const int destinstion);

    int getDirection() const;

    void run();
};


#endif //SIMPLE_ELEVATOR_ELEVATOR_H

Elevator.cpp

#include <cmath>
#include <cstdlib>
#include "Elevator.h"

Elevator::Elevator() : time(0) {}

Elevator::~Elevator() {

}

int Elevator::getCurrentFloor() const {
    return currentFloor;
}

const queue<int> &Elevator::getDestinstionQueue() const {
    return destinstionQueue;
}

void Elevator::goToFloor(const int destinstion) {
    this->destinstionQueue.push(destinstion);
}

int Elevator::getTime() const {
    return time;
}

int Elevator::getDirection() const {
    if (destinstionQueue.front() > currentFloor) {
        return 1;
    }
    if (destinstionQueue.front() < currentFloor) {
        return -1;
    }
    if (destinstionQueue.front() == currentFloor) {
        return 0;
    }
}

void Elevator::run() {
    time += abs(destinstionQueue.front() - currentFloor);
    currentFloor = destinstionQueue.front();
    destinstionQueue.pop();
}

转载于:https://www.cnblogs.com/rtxux/p/8992964.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值