elevator  0.7
Симулятор пассажирского лифта
Elevator.h
См. документацию.
1 // Проект elevator
2 // (c) И.К. Марчевский, 2021-2022
3 
12 #pragma once
13 
14 #include <string>
15 #include <vector>
16 
17 #include "Passenger.h"
18 
36 enum class ElevatorIndicator {
37  both,
38  up,
39  down,
40 };
41 
42 
46 enum class ElevatorStatus {
47  staying,
48  movingUp,
49  movingDn,
50 };
51 
52 
57  breaking,
58  accelerating,
59  uniform,
60 };
61 
62 
66 enum class ElevatorDoorsStatus {
67  opening,
70  closing,
71  closed,
72  waiting,
73 };
74 
75 
79 class Elevator
80 {
81  friend class Control;
82 
83 private:
85  std::vector<Passenger> passengers;
86 
88  std::vector<bool> buttons;
89 
91  const size_t capacity;
92 
94  ElevatorIndicator indicator;
95 
97  size_t position;
98 
100  size_t destinationFloor;
101 
103  size_t myid;
104 
106  ElevatorStatus status;
107 
109  ElevatorAcceleration acceleration;
110 
112  ElevatorDoorsStatus doorsStatus;
113 
114 
115  void setIndicator(ElevatorIndicator indicator);
116 
117  ElevatorIndicator getIndicator() const
118  {
119  return indicator;
120  }
121 
122  bool isGoingButtonPressed() const;
123 
124  size_t lastChechedPassenger;
125  size_t timeToSelfProgramme;
126 
127  size_t getNumberOfPassengers() const
128  {
129  return passengers.size();
130  }
131 
132  std::string getStateString() const;
133 
134  bool isEmpty() const
135  {
136  return (passengers.size() == 0);
137  }
138 
139  bool isEmptyAfterUnloading() const
140  {
141  return ((doorsStatus == ElevatorDoorsStatus::openedUnloading) && (isEmpty()));
142  }
143 
144  bool isDestinationAchieved(const std::vector<bool>& upButtons, const std::vector<bool>& dnButtons) const;
145 
146  bool isStaying() const
147  {
148  return (status == ElevatorStatus::staying);
149  }
150 
151  bool isGoingUp() const
152  {
153  return (status == ElevatorStatus::movingUp);
154  }
155 
156  bool isGoingDn() const
157  {
158  return (status == ElevatorStatus::movingDn);
159  }
160 
161  bool isGoingUniformly() const
162  {
163  return ((status == ElevatorStatus::movingDn || status == ElevatorStatus::movingUp) && (acceleration == ElevatorAcceleration::uniform));
164  }
165 
166  bool isAccelerating() const
167  {
168  return ((status == ElevatorStatus::movingDn || status == ElevatorStatus::movingUp) && (acceleration == ElevatorAcceleration::accelerating));
169  }
170 
171  bool isBreaking() const
172  {
173  return ((status == ElevatorStatus::movingDn || status == ElevatorStatus::movingUp) && (acceleration == ElevatorAcceleration::breaking));
174  }
175 
176  bool isDoorsOpening() const
177  {
178  return ((status == ElevatorStatus::staying) && (doorsStatus == ElevatorDoorsStatus::opening));
179  }
180 
181  bool isDoorsClosing() const
182  {
183  return ((status == ElevatorStatus::staying) && (doorsStatus == ElevatorDoorsStatus::closing));
184  }
185 
186  bool isDoorsOpened() const
187  {
188  return ((status == ElevatorStatus::staying) && (doorsStatus == ElevatorDoorsStatus::openedLoading || doorsStatus == ElevatorDoorsStatus::openedUnloading || doorsStatus == ElevatorDoorsStatus::waiting));
189  }
190 
191  bool isStayingDoorsClosed() const
192  {
193  return ((status == ElevatorStatus::staying) && ((position % 100) == 0) && (doorsStatus == ElevatorDoorsStatus::closed));
194  }
195 
196  double getPosition() const
197  {
198  return position / 100 + 0.01 * (position % 100);
199  }
200 
201  void setDestination(size_t i);
202 
203  size_t getDestination() const
204  {
205  return destinationFloor;
206  }
207 
208  const std::vector<bool>& getButtons() const
209  {
210  return buttons;
211  }
212 
213  bool getButton(size_t i) const
214  {
215  return buttons[i];
216  }
217 
218 
219 public:
225  Elevator(size_t numberOfFloors, size_t maxCapacity, size_t id);
226 };
227 
стрелочки в обоих направлениях
Класс — кабина лифта
Definition: Elevator.h:79
const size_t numberOfFloors
Общее число этажей
Definition: main.cpp:67
ElevatorIndicator
Состояния лампочки (индикатора направления движения) кабины лифта
Definition: Elevator.h:36
ElevatorDoorsStatus
Состояние дверей кабины лифта (не может быть использовано напрямую в системе управления, внутренний параметр)
Definition: Elevator.h:66
движется вниз
движется равномерно или стоит
движется вверх
стрелочка вверх
открыты (идет посадка пассажиров)
открыты (лифт ожидает отправления)
ElevatorStatus
Definition: Elevator.h:46
открыты (идет высадка пассажиров)
стоит (не движется)
открываются
Основной класс — симулятор пассажирского лифта
Definition: Control.h:25
Заголовочный файл с описанием класса Passenger и сопутствующих структур
ElevatorAcceleration
Ускорение лифта (не может быть использовано напрямую в системе управления, внутренний параметр) ...
Definition: Elevator.h:56
закрываются
замедляется (тормозит)
ускоряется (разгоняется)
стрелочка вниз