Theme of my course work in institute is simulation of bus route. Could you determine any faults and defects in this code? I will be very grateful if you give me some advices about one global variable, counters or etc. It's a console version. I have one month to do GUI with help of Qt or Visual C++. I don't use either them until yesterday. I am trying to use Qt now. I think it must be ordinary graph with points as bus stops and lines as roads. What do you select in my shoes? I work in VS 2012 usually. I have pretty much time if I need to remake all code below. Thank you in advance. Autobus.h #pragma once #include "Passenger.h" #include "NecessaryHeaders.h" using namespace std; class Autobus{ private: string brand_; int capacity_; int max_speed_; int bus_numberplate_; bool is_door_open_; int x_bus_; int y_bus_; int current_speed_; static int counter_bus_; static string const mas_brand_buses []; static int const mas_cap_buses []; static int const mas_max_speed_buses []; public: Autobus(string brand, int const capacity, int max_speed) :brand_(brand), capacity_(capacity), max_speed_(max_speed), is_door_open_(false), bus_numberplate_(counter_bus_ + 1), x_bus_(0), y_bus_(0), current_speed_(max_speed){ counter_bus_++; } Autobus(Autobus const &bus) :brand_(bus.brand_), capacity_(bus.capacity_), max_speed_(bus.max_speed_), is_door_open_(false), bus_numberplate_(bus.bus_numberplate_), x_bus_(0), y_bus_(0), current_speed_(bus.current_speed_), salon(bus.salon){ } ~Autobus(){ } vector <Passenger> salon; size_t get_capacity() const; string get_brand() const; int get_max_speed() const; int get_bus_numberplate() const; bool get_door() const; int const get_x_bus() const; int const get_y_bus() const; int get_current_speed() const; int set_x_bus(int temp_x); int set_y_bus(int temp_y); void open_door(); void shut_door(); int set_current_speed(int new_speed); static int get_count_bus(); static void generate_buses(deque <Autobus> &buses); friend ostream & operator << (std::ostream & os, Autobus & bus); }; Autobus.cpp #include "Autobus.h" #include "NecessaryHeaders.h" using namespace std; extern ofstream otchet; string const Autobus::mas_brand_buses [] = {"Paz", "Gazel", "Liaz"}; int const Autobus::mas_cap_buses [] = { 40, 20, 100 }; int const Autobus::mas_max_speed_buses [] = { 90, 110, 70}; int Autobus::counter_bus_ = 0; int Autobus::get_count_bus(){ return counter_bus_; } size_t Autobus::get_capacity() const{ return capacity_; } string Autobus::get_brand() const{ return brand_; } int Autobus::get_max_speed() const{ return max_speed_; } int Autobus::get_bus_numberplate() const{ return bus_numberplate_; } bool Autobus::get_door() const{ return is_door_open_; } int const Autobus::get_x_bus() const{ return x_bus_; } int const Autobus::get_y_bus() const{ return y_bus_; } int Autobus::get_current_speed() const{ return current_speed_; } int Autobus::set_x_bus(int temp_x){ x_bus_ = temp_x; return x_bus_; } int Autobus::set_y_bus(int temp_y){ y_bus_ = temp_y; return y_bus_; } void Autobus::open_door(){ is_door_open_ = true; } void Autobus::shut_door(){ is_door_open_ = false; } int Autobus::set_current_speed(int new_speed){ current_speed_ = new_speed; return current_speed_; } ostream & operator << (std::ostream & os, Autobus & bus){ otchet << "Bus #" << bus.get_bus_numberplate() << " brand " \ << bus.get_brand() << " with capacity " << bus.get_capacity() << endl; /*otchet << "Coordinate x: " << bus.get_x_bus() << endl; otchet << "Coordinate y: " << bus.get_y_bus() << endl;*/ otchet << "Number of passengers: " << bus.salon.size() << endl; otchet << "Full names of passengers:\n"; cout << "Bus #" << bus.get_bus_numberplate() << " brand " \ << bus.get_brand() << " with capacity " << bus.get_capacity() << endl; /*cout << "Coordinate x: " << bus.get_x_bus() << endl; cout << "Coordinate y: " << bus.get_y_bus() << endl;*/ cout << "Number of passengers: " << bus.salon.size() << endl; cout << "Full names of passengers:\n"; for(size_t i = 0; i < bus.salon.size(); ++i){ otchet << bus.salon[i] << endl; cout << bus.salon[i] << endl; } return os; } void Autobus::generate_buses(deque <Autobus> &buses){ for(int i = 0; i < 3; ++i){ int temp_rand = 0; temp_rand = rand() % 5 + 1; for(int j = 0; j < temp_rand; ++j){ buses.push_back( Autobus(mas_brand_buses[i], mas_cap_buses[i], mas_max_speed_buses[i]) ); } } for(size_t i = 0; i < buses.size(); ++i){ cout << buses[i]; } } BusStop.h #pragma once #include "Passenger.h" #include "Autobus.h" #include "NecessaryHeaders.h" using namespace std; class BusStop{ private: string name_bus_stop_; int x_bus_stop_; int y_bus_stop_; int bus_stop_numberplate_; static int counter_bus_stop_; static string mas_names_bus_stops []; deque <Passenger> platform; public: BusStop(string name_bus_stop, int x_bus_stop, int y_bus_stop) :name_bus_stop_(name_bus_stop), x_bus_stop_(x_bus_stop), y_bus_stop_(y_bus_stop), bus_stop_numberplate_(counter_bus_stop_ + 1){ counter_bus_stop_++; } BusStop(BusStop const &bus_stop) :name_bus_stop_(bus_stop.name_bus_stop_), x_bus_stop_(bus_stop.x_bus_stop_), y_bus_stop_(bus_stop.y_bus_stop_), bus_stop_numberplate_(bus_stop.bus_stop_numberplate_){ parking = bus_stop.parking; platform = bus_stop.platform; } ~BusStop(){ } deque <Autobus> parking; int get_x_bus_stop() const; int get_y_bus_stop() const; string get_name_bus_stop() const; int get_bus_stop_numberplate() const; Passenger get_first_passenger() const; int get_count_passengers_on_platform() const; bool is_platform_empty() const; void enter_passenger_on_platform(Passenger temp_pas); void go_out_first_passenger(); void evacuation(); static void generate_bus_stops(vector <BusStop> &bus_stops); static int get_count_bus_stop(); friend ostream & operator << (std::ostream & os, BusStop & bus_stop); BusStop & operator = (BusStop const & temp_bus_stop); }; BusStop.cpp #include "BusStop.h" #include "NecessaryHeaders.h" using namespace std; extern ofstream otchet; string BusStop::mas_names_bus_stops [] = {"Kindergarten", "School", "University", "Factory", \ "Market", "Bank", "Restaurant", "Pharmacy", "Cinema", "Administration"}; int BusStop::counter_bus_stop_ = 0; int BusStop::get_count_bus_stop(){ return counter_bus_stop_; } string BusStop::get_name_bus_stop() const{ return name_bus_stop_; } int BusStop::get_bus_stop_numberplate() const{ return bus_stop_numberplate_; } int BusStop::get_x_bus_stop() const{ return x_bus_stop_; } int BusStop::get_y_bus_stop() const{ return y_bus_stop_; } bool BusStop::is_platform_empty() const{ return platform.empty(); } Passenger BusStop::get_first_passenger() const{ return platform.front(); } int BusStop::get_count_passengers_on_platform() const{ return platform.size(); } ostream & operator << (std::ostream & os, BusStop & bus_stop){ otchet << "Bus stop #" << bus_stop.bus_stop_numberplate_ << endl; otchet << "Name: " << bus_stop.get_name_bus_stop() << endl; otchet << "Coordinate x: " << bus_stop.get_x_bus_stop() << endl; otchet << "Coordinate y: " << bus_stop.get_y_bus_stop() << endl; otchet << "\nNumber people on platform: " << bus_stop.platform.size() << endl; otchet << "Full names of people:\n"; cout << "Bus stop #" << bus_stop.bus_stop_numberplate_ << endl; cout << "Name: " << bus_stop.get_name_bus_stop() << endl; cout << "Coordinate x: " << bus_stop.get_x_bus_stop() << endl; cout << "Coordinate y: " << bus_stop.get_y_bus_stop() << endl; cout << "\nNumber people on platform: " << bus_stop.platform.size() << endl; cout << "Full names of people:\n"; size_t i = 0; for(i = 0; i < bus_stop.platform.size(); ++i){ otchet << bus_stop.platform[i] << endl; cout << bus_stop.platform[i] << endl; } otchet << "Number buses on parking: " << bus_stop.parking.size() << endl; cout << "Number buses on parking: " << bus_stop.parking.size() << endl; if( !bus_stop.parking.empty() ){ otchet << "Full information about buses:\n"; cout << "Full information about buses:\n"; } for(i = 0; i < bus_stop.parking.size(); ++i){ otchet << "Bus #" << bus_stop.parking[i].get_bus_numberplate() << " brand " \ << bus_stop.parking[i].get_brand() << " with capacity " << bus_stop.parking[i].get_capacity() \ << " and " << bus_stop.parking[i].salon.size() << " passengers.\n"; cout << "Bus #" << bus_stop.parking[i].get_bus_numberplate() << " brand " \ << bus_stop.parking[i].get_brand() << " with capacity " << bus_stop.parking[i].get_capacity() \ << " and " << bus_stop.parking[i].salon.size() << " passengers.\n"; otchet << "Full names of passengers:\n"; cout << "Full names of passengers:\n"; for(size_t j = 0; j < bus_stop.parking[i].salon.size(); ++j){ otchet << bus_stop.parking[i].salon[j] << endl; cout << bus_stop.parking[i].salon[j] << endl; } } return os; } BusStop & BusStop::operator = (BusStop const & temp_bus_stop){ if ( this != &temp_bus_stop){ name_bus_stop_ = temp_bus_stop.name_bus_stop_; x_bus_stop_ = temp_bus_stop.x_bus_stop_ ; y_bus_stop_ = temp_bus_stop.y_bus_stop_; bus_stop_numberplate_ = temp_bus_stop.bus_stop_numberplate_; parking = temp_bus_stop.parking; platform = temp_bus_stop.platform; } return *this; } void BusStop::generate_bus_stops(vector <BusStop> &bus_stops){ int n = 10; string temp_str = " "; int temp_x = 0; int temp_y = 0; int temp_n = rand() % 7 + 3; for(int i = 0; i < temp_n; ++i){ temp_x += 100 * ( rand() % 5 + 5); temp_y += 100 * ( rand() % 5 + 5); int temp_index = rand() % n--; bus_stops.push_back( BusStop(mas_names_bus_stops[temp_index], temp_x, temp_y) ); temp_str = mas_names_bus_stops[n]; mas_names_bus_stops[n] = mas_names_bus_stops[temp_index]; mas_names_bus_stops[temp_index] = temp_str; } otchet << "\nNumber of bus stops: " << bus_stops.size() << endl << endl; cout << "\nNumber of bus stops: " << bus_stops.size() << endl << endl; for(size_t i = 0; i < bus_stops.size(); ++i){ cout << bus_stops[i]; otchet << endl; cout << endl; } } void BusStop::enter_passenger_on_platform(Passenger temp_pas){ platform.push_back(temp_pas); } void BusStop::go_out_first_passenger(){ platform.pop_front(); } void BusStop::evacuation(){ platform.clear(); } Passenger.h #pragma once #include "NecessaryHeaders.h" using namespace std; class Passenger{ private: bool is_girl_; string name_; string surname_; static int counter_pas_; static const string female_names []; static const string male_names []; static const string female_surnames []; static const string male_surnames []; public: Passenger(bool is_girl, string name, string surname) :is_girl_(is_girl), name_(name), surname_(surname){ counter_pas_++; } Passenger(Passenger const &pas) :is_girl_(pas.is_girl_), name_(pas.name_), surname_(pas.surname_){ } ~Passenger(){ } string get_name() const; string get_surname() const; bool get_gender() const; static int const get_count_pas(); static void generate_passenger(bool &temp_is_girl, string &temp_name, string &temp_surname); friend ostream & operator << (std::ostream & os, Passenger & temp_pas); }; Passenger.cpp #include "Passenger.h" #include "NecessaryHeaders.h" using namespace std; const string Passenger::female_names [] = {"Anya", "Alla", "Alsu", "Bella", "Camilla", "Carolina", "Clavdia", "Dasha", "Diana", "Dina", "Ella", "Elena", "Faina", "Galya", \ "Ira", "Julya", "Katya", "Kira", "Klara", "Ksenia", "Larisa", "Lera", "Liza", "Lubov", "Ludmila", "Marfa", "Marina", "Masha", "Nadya", "Nastya", "Nelli", "Nonna", \ "Olya", "Polina", "Raisa", "Regina", "Rita", "Snezhana", "Sofia", "Sonya", "Tamara", "Tanya", "Vera", "Yana", "Valya", "Varvara", "Veronika", "Vika", "Zhanna", "Zoya"}; const string Passenger::male_names [] = {"Adolf", "Alexei", "Albert", "Andrej", "Anton", "Arkadij", "Arsenij", "Artyom", "Artur", "Avgust", "Bogdan", "Borya", "Danila", "Denis", \ "Dima", "Efim", "Egor", "Gena", "Gleb", "Igor", "Ilya", "Kirill", "Kolya", "Kostya", "Kuzma", "Leonid", "Lev", "Matvej", "Maxim", "Misha", "Nikita", "Oleg", "Pavel", "Petr", \ "Rodion", "Roman", "Ruslan", "Sasha", "Semen", "Seva", "Slava", "Timoha", "Timur", "Tolya", "Vadim", "Valera", "Vasya", "Vitya", "Yura", "Zhenya"}; const string Passenger::male_surnames [] = {"Alexandrov", "Alexeev", "Andreev", "Barsukov", "Bezrukov", "Bogdanov", "Chebotarev", "Dmitriev", "Dobrynin", "Egorov", "Elizarov", \ "Ermolov", "Gladkov", "Glushkov", "Fedorov", "Fedosov", "Gribov", "Grigoriev", "Ivanov", "Kalachev", "Korolkov", "Kukushkin", "Kuznetsov", "Lebedev", "Mihailov", "Morgunov", \ "Moskvin", "Muratov", "Nikitin", "Nikolaev", "Pavlov", "Petrov", "Polikarpov", "Popov", "Rakov", "Ryabinin", "Semenov", "Smirnov", "Snegirev", "Sokolov", "Soloviev", "Somov", \ "Stepanov", "Sudakov", "Uvarov", "Vasiliev", "Volkov", "Yakovlev", "Zlobin", "Zvagintsev"}; const string Passenger::female_surnames [] = {"Agapova", "Alexandrova", "Anisimova", "Antonova", "Babushkina", "Blinova", "Blohina", "Bolshakova", "Chernyaeva", "Davydova", "Denisova", \ "Dorohova", "Efimova", "Ermilova", "Filippova", "Fomina", "Gorlova", "Grekova", "Gromova", "Gurova", "Gusheva", "Kalinina", "Kalugina", "Kazakova", "Kazantseva", "Kochergina", \ "Kolesnikova", "Konovalova", "Korneeva", "Korshunova", "Lykova", "Markelova", "Markova", "Melnikova", "Mironova", "Nikiforova", "Paramonova", "Petuhova", "Postnikova", "Sherbakova", \ "Shestakova", "Shiryaeva", "Shvetsova", "Suhanova", "Surkova", "Sveshnikova", "Timofeeva", "Usova", "Vdovina", "Veselova"}; int Passenger::counter_pas_ = 0; int const Passenger::get_count_pas(){ return counter_pas_; } string Passenger::get_name() const{ return name_; } string Passenger::get_surname() const{ return surname_; } bool Passenger::get_gender() const{ return is_girl_; } void Passenger::generate_passenger(bool &temp_is_girl, string &temp_name, string &temp_surname){ temp_is_girl = bool(rand() % 2); int i_name = rand() % 50; int j_surname = rand() % 50; if (temp_is_girl){ temp_name = female_names[i_name]; temp_surname = female_surnames[j_surname]; } else{ temp_name = male_names[i_name]; temp_surname = male_surnames[j_surname]; } } ostream & operator << (std::ostream & os, Passenger & temp_pas){ os << temp_pas.get_name() << ' ' << temp_pas.get_surname(); return os; } RandomEvents.h #pragma once #include "NecessaryHeaders.h" #include "Autobus.h" #include "BusStop.h" using namespace std; class Autobus; class BusStop; enum { PEAK_HOUR = 0, CALM = 1, TRAFFIC = 2, BREAKING = 3, FIRE = 4 }; int generate_random_event(vector <BusStop> & bus_stops, int &temp_target_bus_stop); void arrival_of_passengers(vector <BusStop> & bus_stops, int situation, int extra_passenger_flow = 10); // #0 or #1 random event void traffic(Autobus &temp_bus);//#2 random event void breaking_bus(deque <Autobus> &temp_buses, BusStop &temp_bus_stop);//#3 random event void fire_on_bus_stop(vector <BusStop> &temp_bus_stops, int temp_index);//#4 random event RandomEvents.cpp #include "NecessaryHeaders.h" #include "RandomEvents.h" using namespace std; extern ofstream otchet; int generate_random_event(vector <BusStop> & bus_stops, int &temp_target_bus_stop){ static int counter_fire = 0; int divider = 5; if( counter_fire ){ divider = 4; } int temp_event = rand() % divider; if(temp_event == FIRE){ ++counter_fire; } if(temp_event != 0 && temp_event != 1){ temp_target_bus_stop = rand() % bus_stops.size(); cout << "Target bus stop:\n" << bus_stops[temp_target_bus_stop] << endl; } return temp_event; } void arrival_of_passengers(vector <BusStop> & bus_stops, int situation, int extra_passenger_flow){ switch(situation){ case PEAK_HOUR:{ extra_passenger_flow = 15; break; } case CALM:{ extra_passenger_flow = 5; break; } } for(size_t k = 0; k < bus_stops.size() - 1; ++k){ size_t num_pas_on_stop = rand() % 10 + extra_passenger_flow;//10 is default for extra_passenger_flow for (size_t i = 0; i < num_pas_on_stop; ++i){ bool temp_is_girl = false; string temp_name = " "; string temp_surname = " "; Passenger::generate_passenger(temp_is_girl, temp_name , temp_surname); bus_stops[k].enter_passenger_on_platform( Passenger(temp_is_girl, temp_name , temp_surname) ); } cout << num_pas_on_stop << " passengers arrived in bus stop #" \ << bus_stops[k].get_bus_stop_numberplate() << " with name " << bus_stops[k].get_name_bus_stop() << ".\n"; otchet << num_pas_on_stop << " passengers arrived in bus stop #" \ << bus_stops[k].get_bus_stop_numberplate() << " with name " << bus_stops[k].get_name_bus_stop() << ".\n"; cout << bus_stops[k]; } cout << "Last station:\n" << bus_stops [bus_stops.size() - 1]; } void traffic(Autobus &temp_bus){ temp_bus.set_current_speed( temp_bus.get_max_speed() / 2 ); } void breaking_bus(deque <Autobus> &temp_buses, BusStop &temp_bus_stop){ while( !temp_buses[0].salon.empty() ){ Passenger temp_pas = temp_buses[0].salon.back(); temp_buses[0].salon.pop_back(); temp_bus_stop.enter_passenger_on_platform(temp_pas); } temp_buses.pop_front(); } void fire_on_bus_stop(vector <BusStop> &temp_bus_stops, int temp_index){ temp_bus_stops[temp_index].evacuation(); vector <BusStop>::iterator it; temp_bus_stops.erase( temp_bus_stops.begin() + temp_index ); cout << "Bus stop is closed for repair.\n"; otchet << "Bus stop is closed for repair.\n"; if( temp_index == temp_bus_stops.size() ){ cout << "Last bus stop now:\n" << temp_bus_stops[temp_bus_stops.size() - 1] << endl; temp_bus_stops[temp_bus_stops.size() - 1].evacuation(); cout << "All people left new last station.\n" << temp_bus_stops[temp_bus_stops.size() - 1] << endl; } } SimulationFunctions.h #pragma once #include "NecessaryHeaders.h" #include "BusStop.h" using namespace std; class Autobus; void bus_on_route(BusStop & temp_bus_stop, Autobus & temp_bus, int temp_i, int temp_bus_stop_size); void bus_on_station(deque <Autobus> &buses, BusStop &temp_bus_stop, bool &temp_last_station); void arrival_of_bus(BusStop & temp_bus_stop, Autobus & temp_bus, bool last_station); void leaving_of_bus(BusStop & temp_bus_stop, Autobus & temp_bus); int exit_of_passengers_from_bus(BusStop & temp_bus_stop, Autobus & temp_bus, bool last_station); int entrance_of_passengers_on_bus(BusStop & temp_bus_stop, Autobus & temp_bus); double calculate_distance(int dx1, int dx2, int dy1, int dy2, int temp_i, int temp_bus_stop_size); double calculate_time(double temp_dist, int temp_speed); int convert_speed(int temp_speed); SimulationFunctions.cpp #include "NecessaryHeaders.h" #include "SimulationFunctions.h" class Autobus; class BusStop; using namespace std; extern ofstream otchet; void bus_on_route(BusStop & temp_bus_stop, Autobus & temp_bus, int temp_i, int temp_bus_stop_size){ double temp_dist = calculate_distance(temp_bus_stop.get_x_bus_stop(), temp_bus.get_x_bus(), \ temp_bus_stop.get_y_bus_stop(), temp_bus.get_y_bus(), temp_i, temp_bus_stop_size ); cout << "Speed (km/h): " << temp_bus.get_current_speed() << endl; otchet << "Speed (km/h): " << temp_bus.get_current_speed() << endl; double temp_time = calculate_time( temp_dist, convert_speed( temp_bus.get_current_speed() ) ); cout << "Bus on the way to next station...\n\n"; otchet << "Bus on the way to next station...\n\n"; } void bus_on_station(deque <Autobus> &buses, BusStop &temp_bus_stop, bool &temp_last_station){ arrival_of_bus(temp_bus_stop, buses[0], temp_last_station); if( temp_last_station ){ exit_of_passengers_from_bus(temp_bus_stop, buses[0], temp_last_station); leaving_of_bus(temp_bus_stop, buses[0]); cout << "\nBus #" << buses[0].get_bus_numberplate() << " brand " \ << buses[0].get_brand() << " with capacity " << buses[0].get_capacity() << " finished his route!\n"; otchet << "\nBus #" << buses[0].get_bus_numberplate() << " brand " \ << buses[0].get_brand() << " with capacity " << buses[0].get_capacity() << " finished his route!\n"; buses.pop_front(); return; } exit_of_passengers_from_bus(temp_bus_stop, buses[0], false); entrance_of_passengers_on_bus(temp_bus_stop, buses[0]); leaving_of_bus(temp_bus_stop, buses[0]); } int exit_of_passengers_from_bus(BusStop & temp_bus_stop, Autobus & temp_bus, bool last_station){ int pas_out = 0; if( last_station ){ cout << "\nLast station!\n"; otchet << "\nLast station!\n"; pas_out = temp_bus_stop.parking[0].salon.size(); temp_bus_stop.parking[0].salon.clear(); } else{ if( !temp_bus_stop.parking[0].salon.empty() ){ pas_out = rand() % temp_bus_stop.parking[0].salon.size(); for(int i = 0; i < pas_out; ++i){ temp_bus_stop.parking[0].salon.pop_back(); } } } cout << "Number of outgoing passengers from autobus: " << pas_out << endl; otchet << "Number of outgoing passengers from autobus: " << pas_out << endl; if( bool(pas_out) ){ cout << "Some passengers are leaving bus now...\n"; otchet << "Some passengers are leaving bus now...\n"; } temp_bus = temp_bus_stop.parking[0]; //Sleep(pas_out * 2000); system("pause"); cout << endl; otchet << endl; return pas_out; } int entrance_of_passengers_on_bus(BusStop & temp_bus_stop, Autobus & temp_bus){ int pas_in = 0; if( !temp_bus_stop.is_platform_empty() ){ pas_in = rand() % temp_bus_stop.get_count_passengers_on_platform() + 1; for(int i = 0; i < pas_in; ++i){ if( temp_bus_stop.parking[0].salon.size() < temp_bus_stop.parking[0].get_capacity() ){ temp_bus_stop.parking[0].salon.push_back( temp_bus_stop.get_first_passenger() ); temp_bus_stop.go_out_first_passenger(); } else{ pas_in = i; cout << "\nBus is full now!\n"; otchet << "\nBus is full now!\n"; break; } } } cout << "\nNumber of inbox passengers in autobus on bus stop #" << temp_bus_stop.get_bus_stop_numberplate() \ << " with name " << temp_bus_stop.get_name_bus_stop() << ": " << pas_in << endl; otchet << "\nNumber of inbox passengers in autobus on bus stop #" << temp_bus_stop.get_bus_stop_numberplate() \ << " with name " << temp_bus_stop.get_name_bus_stop() << ": " << pas_in << endl; if( bool(pas_in) ){ cout << "Some passengers are entering in bus now...\n"; otchet << "Some passengers are entering in bus now...\n"; } temp_bus = temp_bus_stop.parking[0]; //Sleep(pas_in * 2000); system("pause"); cout << endl; otchet << endl; return pas_in; } void arrival_of_bus(BusStop & temp_bus_stop, Autobus & temp_bus, bool last_station){ if(last_station){ cout << "\n\nLast station!\n"; otchet << "\n\nLast station!\n"; } temp_bus_stop.parking.push_back( temp_bus ); temp_bus_stop.parking[0].open_door(); temp_bus_stop.parking[0].set_x_bus( temp_bus_stop.get_x_bus_stop() ); temp_bus_stop.parking[0].set_y_bus( temp_bus_stop.get_y_bus_stop() ); temp_bus = temp_bus_stop.parking[0]; cout << temp_bus_stop; } void leaving_of_bus(BusStop & temp_bus_stop, Autobus & temp_bus){ temp_bus_stop.parking[0].shut_door(); cout << temp_bus_stop; temp_bus = temp_bus_stop.parking[0]; temp_bus_stop.parking.pop_front(); } double calculate_distance(int dx1, int dx2, int dy1, int dy2, int temp_i, int temp_bus_stop_size){ double temp_dist = sqrt( pow( (dx2 - dx1), 2) + pow( (dy2 - dy1), 2) ); temp_dist = ceil(temp_dist); cout << "\nDistance to next station (m): " << temp_dist << endl; otchet << "\nDistance to next station (m): " << temp_dist << endl; return temp_dist; } double calculate_time(double temp_dist, int temp_speed){ double temp_time = temp_dist / temp_speed; temp_time = ceil(temp_time); cout << "Time to next station (s): " << temp_time << endl; otchet << "Time to next station (s): " << temp_time << endl; return temp_time; } int convert_speed(int temp_speed){ temp_speed /= 3.6; return temp_speed; } Simulation.cpp #include "NecessaryHeaders.h" #include "SimulationFunctions.h" #include "RandomEvents.h" #include "Autobus.h" #include "BusStop.h" using namespace std; ofstream otchet; int main(){ srand( (unsigned)time( NULL ) ); otchet.open( "otchet.doc" ) ; if ( !otchet ){ cout << "Error of opening file!\n" ; system("pause"); return -1; } deque <Autobus> buses; Autobus::generate_buses(buses); vector <BusStop> bus_stops; BusStop::generate_bus_stops(bus_stops); while( !buses.empty() ){ int situation = 0; int target_bus_stop = 0; situation = generate_random_event(bus_stops, target_bus_stop); arrival_of_passengers(bus_stops, situation); system("pause"); for (size_t i = 0; i < bus_stops.size(); ++i ){ bool last_station = ( i == (bus_stops.size() - 1) ); if(situation == TRAFFIC && i == target_bus_stop){ traffic(buses[0]); } system("pause"); if(situation == FIRE && i == target_bus_stop){ if( last_station ){ fire_on_bus_stop(bus_stops, i); buses.pop_front(); system("pause"); break; } else{ fire_on_bus_stop(bus_stops, i); system("pause"); } } bus_on_route( bus_stops[i], buses[0], i, bus_stops.size() ); //Sleep( temp_time * 1000 ); system("pause"); if(situation == BREAKING && i == target_bus_stop){ breaking_bus(buses, bus_stops[i]); break; } bus_on_station(buses, bus_stops[i], last_station); system("pause"); if( last_station ){ break; } } } otchet.close(); return 0; } NecessaryHeaders.h #pragma once #include <string> #include <fstream> #include <iostream> #include <vector> #include <cstdlib> #include <ctime> #include <windows.h> #include <cmath> #include <deque>