elevator  0.7
Симулятор пассажирского лифта
Elevator.cpp
См. документацию.
1 // Проект elevator
2 // (c) И.К. Марчевский, 2021-2022
3 
12 #include <iostream>
13 
14 #include "Elevator.h"
15 
16 
17 Elevator::Elevator(size_t numberOfFloors, size_t maxCapacity, size_t id)
18  : buttons(numberOfFloors, false)
19  , capacity(maxCapacity)
20  , myid(id)
21  , timeToSelfProgramme(0)
22  , position(0)
23  , acceleration(ElevatorAcceleration::uniform)
24  , destinationFloor(0)
25  , doorsStatus(ElevatorDoorsStatus::closed)
26  , indicator(ElevatorIndicator::both)
27  , status(ElevatorStatus::staying)
28 {
29 }
30 
31 
32 void Elevator::setDestination(size_t i)
33 {
34  try
35  {
36  if ((i < 0) || (i >= buttons.size()))
37  throw std::exception("incorrect floor");
38  }
39  catch(...)
40  {
41  std::cout << "Exception: incorrect floor = " << i << std::endl;
42  exit(-1);
43  }
44 
45  destinationFloor = i;
46 }//setDestination(...)
47 
48 
49 void Elevator::setIndicator(ElevatorIndicator indicator)
50 {
51  this->indicator = indicator;
52 }//setIndicator(...)
53 
54 
55 bool Elevator::isGoingButtonPressed() const
56 {
57  for (auto& p : passengers)
58  if (p.PerformNoWaitingProbability())
59  return true;
60  return false;
61 }//isGoingButtonPressed
62 
63 
64 std::string Elevator::getStateString() const
65 {
66  std::string strState;
67 
68  std::string strStatus;
69  switch (status)
70  {
72  strStatus = "up, ";
73  break;
75  strStatus = "dn, ";
76  break;
78  strStatus = "stay,";
79  break;
80  }//switch (status)
81 
82  std::string strIndicator;
83  switch (indicator)
84  {
86  strIndicator = "up, ";
87  break;
89  strIndicator = "down,";
90  break;
92  strIndicator = "both,";
93  break;
94  }// switch (indicator)
95 
96  std::string strAccel;
97  switch (acceleration)
98  {
100  strAccel = "acceler.,";
101  break;
103  strAccel = "breaking,";
104  break;
106  strAccel = "uniform, ";
107  break;
108  }//switch (acceleration)
109 
110  std::string strDoors;
111  switch (doorsStatus)
112  {
114  strDoors = "unloading...";
115  break;
117  strDoors = "loading... ";
118  break;
120  strDoors = "opening... ";
121  break;
123  strDoors = "closing... ";
124  break;
126  strDoors = "closed ";
127  break;
129  strDoors = "waiting... ";
130  break;
131  }//switch (doorsStatus)
132 
133  strState += "level = ";
134  strState += std::to_string(position / 100);
135  strState += ".";
136  if ((position % 100) < 10)
137  strState += "0";
138  strState += std::to_string(position % 100);
139 
140  strState += ", dir. = ";
141  strState += strStatus.c_str();
142 
143  strState += " ind. = ";
144  strState += strIndicator.c_str();
145 
146  strState += " acceler. = ";
147  strState += strAccel.c_str();
148  strState += " doors = ";
149  strState += strDoors.c_str();
150 
151  strState += " (pass.: ";
152  for (auto& p : passengers)
153  {
154  strState += std::to_string(p.id);
155  strState += ", ";
156  }//for p
157  strState += ")";
158 
159  return strState;
160 }//getStateString()
161 
162 
163 bool Elevator::isDestinationAchieved(const std::vector<bool>& upButtons, const std::vector<bool>& dnButtons) const
164 {
165  bool b1 = ((position / 100 == destinationFloor) && (position % 100 == 0));
166  bool b2 = ((status == ElevatorStatus::staying) && (!isEmpty()) && (doorsStatus == ElevatorDoorsStatus::openedUnloading || doorsStatus == ElevatorDoorsStatus::openedLoading || doorsStatus == ElevatorDoorsStatus::waiting));
167  bool b3 = ((status == ElevatorStatus::staying) && (isEmpty()) && ( upButtons[position/100] || dnButtons[position / 100] ) && (doorsStatus == ElevatorDoorsStatus::openedUnloading || doorsStatus == ElevatorDoorsStatus::openedLoading || doorsStatus == ElevatorDoorsStatus::waiting));
168  bool b4 = ((status == ElevatorStatus::staying) && (isEmpty()) && (!upButtons[position / 100] && !dnButtons[position / 100]));
169 
170  return (b1 && (b2 || b3 || b4));
171 }//isDestinationAchieved(...)
172 
стрелочки в обоих направлениях
const size_t numberOfFloors
Общее число этажей
Definition: main.cpp:67
ElevatorIndicator
Состояния лампочки (индикатора направления движения) кабины лифта
Definition: Elevator.h:36
ElevatorDoorsStatus
Состояние дверей кабины лифта (не может быть использовано напрямую в системе управления, внутренний параметр)
Definition: Elevator.h:66
движется вниз
движется равномерно или стоит
движется вверх
стрелочка вверх
Заголовочный файл с описанием класса Elevator и сопутствующих структур
открыты (идет посадка пассажиров)
открыты (лифт ожидает отправления)
ElevatorStatus
Definition: Elevator.h:46
открыты (идет высадка пассажиров)
стоит (не движется)
открываются
Elevator(size_t numberOfFloors, size_t maxCapacity, size_t id)
Инициализирующий конструктор
Definition: Elevator.cpp:17
ElevatorAcceleration
Ускорение лифта (не может быть использовано напрямую в системе управления, внутренний параметр) ...
Definition: Elevator.h:56
закрываются
замедляется (тормозит)
ускоряется (разгоняется)
стрелочка вниз