Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <string>//Импорт библиотеки string для использования класса string и его методов
- #include <vector>//Импорт библиотеки vector для использования класса vector и его методов
- #include <iostream>//Импорт библиотеки iostream для использования объектов потока ввода и вывода cin и cout
- #include <iomanip>//Импорт библиотеки iostream для использования объектов потока ввода и вывода cin и cout
- #include <sstream>
- #include <map>
- using namespace std;//Использование пространства имен Standart
- class System;
- #define def_signal(s) void(System::*s)(string&)
- #define def_handler(h) void(System::*h)(string)
- typedef def_signal(type_signal);
- typedef def_handler(type_handler);
- class System {//Класс System - Базовый класс
- string obj_name = "";//Объявление закрытого свойства строкового типа- имя объекта
- System* head_obj, * curr_obj, * root_obj;//Объявление закрытого свойства типа указатель на объект System - указатель на головной объек
- int state = 0, class_id = 1;//Объявление закрытого свойства типа класс Status - статус готовности объекта
- vector <System*> sub_objs;//Объявление закрытого свойства типа массив вектор типа указатель на System - массив подчиненных объектов
- struct Connection {//Структура Connection - структура, которая хранит данные о соездинении объектов
- System* source, * destination;
- string message;
- type_signal signal;
- type_handler handler;
- };
- vector<Connection*> connections;
- public:
- //Особые методы класса (конструктор и деструктор)
- System(System* head_obj = nullptr, string obj_name = "System");//Объявление параметризированного конструктора
- ~System();//Объявление деструктора
- //Взаимодействие со свойствами объектов
- void set_obj_name(string obj_name);//Объявление метода set_obj_name - установка имени объекта
- string get_obj_name();//Объявление метода get_obj_name - получение имени объекта
- void set_state(int state);//Объявление метода set_state - установка состояния объекта
- int get_state();//Объявление метода get_state - получение состояние объекта
- //void set_class_id(int class_id);
- //int get_class_id();
- //Взаимодействие с полями-объектами класса System
- void set_head_obj(System* head_obj);//Объявление метода set_head_obj - установка головного объекта
- System* get_head_obj();//Объявление метода get_head_obj - получение головного объекта
- System* get_root_obj();
- void set_curr_obj(System* obj);
- System* get_curr_obj();
- //Взамодействие с координатами объектов
- System* find_obj(string path);
- System* get_obj_by_name(string obj_name);//Объвление метода get_obj_by_name- получение объекта по имени
- System* get_obj_by_absolute_path(string path);
- string get_absolute_path(System* obj);
- System* get_obj_by_relative_path(string path);
- //Взаимодействие с древом объектов и их готовностью
- bool up_tree_ready();
- void set_tree_as_ready();
- void print_tree(int level_ie = 0);//Объявлние метода print_tree - печать дерева
- void print_status_tree(int level_ie = 0);//Объявлние метода print_tree - печать дерева
- //Взаимодействие с сигналами-обработчиками объектов
- void set_connect(def_signal(s), System* target_obj, def_handler(h));
- void delete_connect(def_signal(s), System* target_obj, def_handler(h));
- void output_signal(def_signal(s), string message);
- };
- //------------------------------------//
- //Особые методы класса (конструктор и деструктор)
- //------------------------------------//
- System::System(System* head_obj, string obj_name)//Реализация конструктора с параметрами
- :head_obj(head_obj), obj_name(obj_name), state(0), curr_obj(this), root_obj(this)//Присваивание закрым полям значнеия параметров
- {
- if (head_obj) head_obj->sub_objs.push_back(this);//Если у переданного объекта есть головной объект, то добавляем текущий объект к подчиненным объектам переданного объекта
- root_obj = get_root_obj();
- }
- System::~System() {//Реализация деструктора
- delete head_obj;//Удаляем головной объект
- sub_objs.clear();//Очищаем подчиенные объекты
- connections.clear();
- }
- //------------------------------------//
- //Взаимодействие со свойствами объектов
- //------------------------------------//
- void System::set_obj_name(string obj_name) {//Реализация set_obj_name
- this->obj_name = obj_name;//Присваивание закрытому полю класса имя объекта параметру
- }
- string System::get_obj_name() {//Реализация get_obj_name
- return obj_name;//Возврат имени объекта
- }
- void System::set_state(int state) {//Реализация set_state
- if (state != 0) {
- if (!up_tree_ready()) return;
- this->state = state;
- }
- else {
- this->state = state;
- for (int i = 0; i < sub_objs.size(); i++) {
- sub_objs[i]->set_state(0);
- }
- }
- }
- int System::get_state() {//Реализация get_state
- return state;
- }
- //void System::set_class_id(int class_id) {
- // this->class_id = class_id;
- //}
- //int System::get_class_id() {
- // return class_id;
- //}
- //------------------------------------//
- //Взаимодействие с полями-объектами класса System
- //------------------------------------//
- void System::set_head_obj(System* head_obj) {//Реализация set_head_obj
- if (head_obj) {
- this->head_obj = head_obj;//Присваивание закрытому полю класса головной объект параметру
- head_obj->sub_objs.push_back(this);
- }
- }
- System* System::get_head_obj() {//Реализация get_obj_name
- return head_obj;//Возврат головного объекта
- }
- System* System::get_root_obj() {
- //if(!root_obj->head_obj) return root_obj;
- while (root_obj->head_obj) {
- root_obj = root_obj->head_obj;
- }
- return root_obj;
- }
- void System::set_curr_obj(System* obj) {
- if (obj) curr_obj = obj;
- }
- System* System::get_curr_obj() {
- return curr_obj;
- }
- //------------------------------------//
- //Взамодействие с координатами объектов
- //------------------------------------//
- vector<string> split_string(string s, char dec = '/') {
- vector<string> array_words;
- stringstream strstream(s);
- string el;
- while (getline(strstream, el, dec))
- if (!el.empty())array_words.push_back(el);
- return array_words;
- }
- System* System::find_obj(string path) {
- if (path[0] == '/') {
- if (path.size() == 1) return root_obj;
- if (path[1] == '/') return get_obj_by_name(path.substr(2));
- return get_obj_by_absolute_path(path);
- }
- if (path[0] == '.') return curr_obj;
- return get_obj_by_relative_path(path);
- }
- System* System::get_obj_by_name(string obj_name) {//Реализация get_obj_name
- //Если подчиненных объектов нет, то нет смысла искать дальше
- if (this->obj_name == obj_name) return this;
- for (int i = 0; i < sub_objs.size(); i++) {//Цикл для перебора подчиненных объектов
- if (sub_objs[i]->get_obj_by_name(obj_name)->get_obj_name() == obj_name) {
- return sub_objs[i]->get_obj_by_name(obj_name);
- }
- }
- return this;
- }
- System* System::get_obj_by_absolute_path(string path) {
- System* obj_find = this;
- vector<string> path_vector = split_string(path);
- for (int i = 0; i < path_vector.size(); i++) {
- System* prev = obj_find;
- for (int j = 0; j < obj_find->sub_objs.size(); j++) {
- if (obj_find->sub_objs[j]->get_obj_name() == path_vector[i]) {
- obj_find = obj_find->sub_objs[j];
- break;
- }
- }
- if (prev == obj_find) return nullptr;
- }
- return obj_find;
- }
- string System::get_absolute_path(System* obj) {
- if (!obj) return string();
- string path = "";
- vector<string> path_vector;
- while (obj->head_obj) {
- path_vector.push_back(obj->obj_name);
- obj = obj->head_obj;
- }
- for (int i = path_vector.size() - 1; i >= 0; i--) path += path_vector[i] + ((i > 0) ? "/" : "");
- return "/" + path;
- }
- System* System::get_obj_by_relative_path(string path) {
- System* obj_find = curr_obj;
- vector<string> path_vector = split_string(path);
- for (int i = 0; i < path_vector.size(); i++) {
- System* prev = obj_find;
- for (int j = 0; j < obj_find->sub_objs.size(); j++) {
- if (obj_find->sub_objs[j]->get_obj_name() == path_vector[i]) {
- obj_find = obj_find->sub_objs[j];
- break;
- }
- }
- if (prev == obj_find) return nullptr;
- }
- return obj_find;
- }
- //------------------------------------//
- //Взаимодействие с древом объектов и их готовностью
- //------------------------------------//
- string inline operator*(string s, int count) {
- string res;
- for (int i = 0; i < count; i++) res += s;
- return res;
- }
- bool System::up_tree_ready() {
- if (head_obj) {
- if (head_obj->state == 0) return false;
- head_obj->up_tree_ready();
- }
- return true;
- }
- void System::set_tree_as_ready() {
- this->set_state(1);
- if (sub_objs.empty()) return;
- for (int i = 0; i < sub_objs.size(); i++)
- sub_objs[i]->set_tree_as_ready();
- }
- void System::print_tree(int level_ie) {//Реализация print_tree
- cout << '\n';
- cout << string(" ") * (level_ie * 4);
- cout << this->obj_name;
- if (sub_objs.empty()) return;
- for (int i = 0; i < sub_objs.size(); i++)
- sub_objs[i]->print_tree(level_ie + 1);
- }
- void System::print_status_tree(int level_ie) {//Реализация print_tree
- cout << '\n';
- cout << string(" ") * (level_ie * 4);
- cout << this->obj_name;
- (this->state != 0) ? cout << " is ready" : cout << " is not ready";
- if (sub_objs.empty()) return;
- for (int i = 0; i < sub_objs.size(); i++)
- sub_objs[i]->print_status_tree(level_ie + 1);
- }
- //------------------------------------//
- //Взаимодействие с сигналами-обработчиками объектов
- //------------------------------------//
- void System::set_connect(def_signal(s), System* target_obj, def_handler(h))
- {
- /*for (auto it = root_obj->connections.begin(); it < root_obj->connections.end(); ++it)
- {
- if ((*it)->signal == s && (*it)->handler == h && (*it)->destination == target_obj) {
- return;
- }
- }*/
- root_obj->connections.push_back(new Connection{ this,target_obj,"",s,h });
- }
- void System::delete_connect(def_signal(s), System* target_obj, def_handler(h))
- {
- for (auto it = root_obj->connections.begin(); it < root_obj->connections.end(); ++it)
- {
- if ((*it)->signal == s && (*it)->handler == h && (*it)->destination == target_obj) {
- root_obj->connections.erase(it);
- //break;
- }
- }
- }
- void System::output_signal(def_signal(s), string message) {
- if (state == 0 || root_obj->connections.empty()) return;
- message = message.substr(1);
- (this->*s)(message);
- for (Connection* con : root_obj->connections) {
- if (con->signal == s)
- {
- if (con->destination->state != 0) {
- con->message = message;
- (con->destination->*(con->handler))(con->message);
- }
- }
- }
- }
- //------------------------------------//
- //------------SUB'S------------//
- //------------------------------------//
- class DataProcessor;
- class ControlPanel;
- class CardValidator;
- class MoneyAccepting;
- class MoneyIssuing;
- class ATM_console;
- class CardValidator : public System {//Класс CardValidator - наследник System
- struct card
- {
- string id;
- unsigned short password;
- unsigned long money;
- };
- vector<card*> cards_storage;
- public:
- CardValidator(System* head_obj = nullptr, string obj_name = "card_validator");//Конструктор
- void signal(string& message);
- void handler(string message);
- void add_card(string id, unsigned short password, unsigned long money)
- {
- cards_storage.push_back(new card{ id,password,money });
- }
- bool check_number_card(string id);
- bool check_password(string id, unsigned short password);
- };
- CardValidator::CardValidator(System* head_obj, string obj_name) : System(head_obj, obj_name) {};//>=AB@C:B>@
- void CardValidator::signal(string& message)
- {
- cout << "\nSignal from " << get_root_obj()->get_absolute_path(this);
- message += " (class: 3)";
- }
- void CardValidator::handler(string message)
- {
- cout << "\nSignal to " << get_root_obj()->get_absolute_path(this) << " Text: " << message;
- }
- class MoneyAccepting : public System {//Класс MoneyAccepting - наследник System
- int amount = 0;
- public:
- MoneyAccepting(System* head_obj = nullptr, string obj_name = "money_accepting");//Конструктор
- void signal(string& message);
- void handler(string message)
- {
- }
- int sum_money(int rubles=0)
- {
- static int amount = 0;
- if(rubles == 5000 || rubles == 2000 || rubles == 1000 || rubles == 500 || rubles == 100)
- {
- amount += rubles;
- }
- return amount;
- }
- void confirm_payment()
- {
- amount = sum_money();
- }
- };
- class MoneyIssuing : public System {//Класс MoneyIssuing - наследник System
- struct banknotes
- {
- unsigned int _5000, _2000, _1000, _500, _100;
- };
- banknotes* count;
- public:
- MoneyIssuing(System* head_obj = nullptr, string obj_name = "money_issuing");//Конструктор
- void signal(string& message);
- void handler(string message);
- void set_count(unsigned int _5000, unsigned int _2000, unsigned int _1000, unsigned int _500, unsigned int _100)
- {
- count = new banknotes{ _5000, _2000, _1000, _500, _100 };
- }
- };
- MoneyIssuing::MoneyIssuing(System* head_obj, string obj_name) : System(head_obj, obj_name) {};//>=AB@C:B>@
- void MoneyIssuing::signal(string& message)
- {
- cout << "\nSignal from " << get_root_obj()->get_absolute_path(this);
- message += " (class: 5)";
- }
- void MoneyIssuing::handler(string message)
- {
- cout << "\nSignal to " << get_root_obj()->get_absolute_path(this) << " Text: " << message;
- }
- class ControlPanel : public System {//Класс ControlPanel - наследник System
- public:
- ControlPanel(System* head_obj = nullptr, string obj_name = "control_panel");//Конструктор
- void signal(string& message);
- void handler(string message);
- void fill_bank(vector <string> data_vec, MoneyIssuing* money_issuing)
- {
- money_issuing->set_count(stoi(data_vec[0]), stoi(data_vec[1]), stoi(data_vec[2]), stoi(data_vec[3]), stoi(data_vec[4]));
- }
- void append_new_card(vector <string> data_vec, CardValidator* card_validator)
- {
- card_validator->add_card(data_vec[0] + " " + data_vec[1] + " " + data_vec[2] + " " + data_vec[3], stoi(data_vec[4]), stoi(data_vec[5]));
- }
- };
- ControlPanel::ControlPanel(System* head_obj, string obj_name) : System(head_obj, obj_name) {};//>=AB@C:B>@
- void ControlPanel::signal(string& message)
- {
- cout << "\nSignal from " << get_root_obj()->get_absolute_path(this);
- message += " (class: 2)";
- }
- void ControlPanel::handler(string message)
- {
- cout << "\nSignal to " << get_root_obj()->get_absolute_path(this) << " Text: " << message;
- }
- class DataProcessor : public System {//Класс DataProcessor - наследник System
- public:
- DataProcessor(System* head_obj = nullptr, string obj_name = "data_processor");
- void signal(string& message);
- void handler(string message);
- void preparation_ATM(string data_input,System* root, ControlPanel* control_panel,CardValidator* card_validator, MoneyIssuing* money_issuing)
- {
- static bool isCardLoadingEnd = false;
- if (data_input == "End card loading") isCardLoadingEnd = true;
- vector<string> card_data = split_string(data_input, ' ');
- if (isCardLoadingEnd) {
- control_panel->fill_bank(card_data, money_issuing);
- root->set_state(1);
- root->output_signal(static_cast<void(System::*)(string&)>(&DataProcessor::signal), "Ready to work");
- }
- else control_panel->append_new_card(card_data, card_validator);
- }
- void call_system(System* root, ControlPanel* control_panel, CardValidator* card_validator, MoneyIssuing* money_issuing)
- {
- string data_input, n_card;
- bool isCardInsert = false, isCardValid = false;
- getline(cin, data_input);
- while(data_input!="Turn off the ATM")
- {
- vector<string> command_vector = split_string(data_input, ' ');
- if(command_vector[0]=="Identification")
- {
- if (root->get_state() == 1) {
- n_card = command_vector[1] + " " + command_vector[2] + " " + command_vector[3] + " " + command_vector[4];
- if (card_validator->check_number_card(n_card))
- {
- root->set_state(2);
- isCardInsert = true;
- cout << "\nEnter the PIN code";
- }
- else
- root->set_state(1);
- }
- }
- else if(command_vector[0]=="PIN-code")
- {
- if(isCardInsert)
- {
- card_validator->check_password(n_card, stoi(command_vector[1]));
- isCardValid = true;
- }
- }
- else if(command_vector[0]=="Deposit")
- {
- if(data_input=="Deposit money to the card")
- {
- //add money on card
- }
- else
- {
- banknote = stoi(command_vector[command_vector.size() - 1]);
- if (banknote == 5000 || banknote == 2000 || banknote == 1000 || banknote == 500 || banknote == 100) {
- sum += banknote;
- cout << "\nThe amount: " << sum;
- }
- }
- }
- }
- }
- };
- DataProcessor::DataProcessor(System* head_obj, string obj_name) : System(head_obj, obj_name) {};//>=AB@C:B>@
- void DataProcessor::signal(string& message)
- {
- cout << "\nSignal from " << get_root_obj()->get_absolute_path(this);
- message += " (class: 1)";
- }
- void DataProcessor::handler(string message)
- {
- cout << "\nSignal to " << get_root_obj()->get_absolute_path(this) << " Text: " << message;
- }
- class ATM_console : public System {//Класс ATM_console - наследник System
- public:
- ATM_console(System* head_obj = nullptr, string obj_name = "atm_console");//Конструктор
- void signal(string& message);
- void handler(string message);
- };
- ATM_console::ATM_console(System* head_obj, string obj_name) : System(head_obj, obj_name) {};//>=AB@C:B>@
- void ATM_console::signal(string& message)
- {
- cout << "\nSignal from " << get_root_obj()->get_absolute_path(this);
- message += " (class: 6)";
- }
- void ATM_console::handler(string message)
- {
- cout << "\n" << message;
- }
- class App : public System {//Класс App - приложение для строения дерева и его вывода
- System* root = nullptr;
- DataProcessor* data_processor = nullptr;
- ControlPanel* control_panel = nullptr;
- CardValidator* card_validator = nullptr;
- MoneyAccepting* money_accepting = nullptr;
- MoneyIssuing* money_issuing = nullptr;
- ATM_console* atm_console = nullptr;
- public:
- App(System* head = nullptr);//Объявление параметризированного конструктора
- void build_tree_objs();//Объявление метода build_tree_objs - построение дерева объектов
- void set_state_tree();
- void call_system();
- void call_signal_handler_system();
- void set_connect_by_class_id(System* s, System* d, int class_id);
- void delete_connect_by_class_id(System* s, System* d, int class_id);
- int exec_app();//Объявление метода exec_app - запуск приложения
- };
- App::App(System* head) {
- root = new System(head);
- //root->set_class_id(1);
- }//Присваивание закрым полям значения параметров
- void App::build_tree_objs() {//Реализация методов build_tree_objs
- data_processor = new DataProcessor(root);
- control_panel = new ControlPanel(root);
- card_validator = new CardValidator(root);
- money_accepting = new MoneyAccepting(root);
- money_issuing = new MoneyIssuing(root);
- atm_console = new ATM_console(root);
- root->set_connect(static_cast<void(System::*)(string&)>(&DataProcessor::signal), data_processor, static_cast<void(System::*)(string)>(&DataProcessor::handler));
- root->set_connect(static_cast<void(System::*)(string&)>(&ControlPanel::signal), data_processor, static_cast<void(System::*)(string)>(&ControlPanel::handler));
- root->set_connect(static_cast<void(System::*)(string&)>(&CardValidator::signal), data_processor, static_cast<void(System::*)(string)>(&CardValidator::handler));
- root->set_connect(static_cast<void(System::*)(string&)>(&MoneyAccepting::signal), data_processor, static_cast<void(System::*)(string)>(&MoneyAccepting::handler));
- root->set_connect(static_cast<void(System::*)(string&)>(&MoneyIssuing::signal), data_processor, static_cast<void(System::*)(string)>(&MoneyIssuing::handler));
- root->set_connect(static_cast<void(System::*)(string&)>(&ATM_console::signal), data_processor, static_cast<void(System::*)(string)>(&ATM_console::handler));
- }
- void App::set_state_tree() {
- string obj_name;
- int class_number;
- while (cin >> obj_name >> class_number) {
- root->get_obj_by_name(obj_name)->set_state(class_number);
- }
- }
- void App::call_system() {
- string system_command, obj_path;
- cin >> system_command;
- while (system_command != "END") {
- cin >> obj_path;
- System* f = root->find_obj(obj_path);
- if (system_command == "SET") {
- if (f) {
- cout << "\nObject is set: " << f->get_obj_name();
- root->set_curr_obj(f);
- }
- else cout << "\nObject is not found: " << f->get_curr_obj()->get_obj_name() << " " << obj_path;
- }
- else if (system_command == "FIND") {
- cout << '\n' << obj_path << string(" ") * 5;
- if (f) cout << "Object name: " << f->get_obj_name();
- else cout << "Object is not found";
- }
- cin >> system_command;
- }
- }
- void App::set_connect_by_class_id(System* s, System* d, int class_id) {
- void (System:: * signal_par)(string&) = NULL;
- void (System:: * handler_par)(string) = NULL;
- switch (class_id)
- {
- case 1:
- signal_par = static_cast<void(System::*)(string&)>(&DataProcessor::signal);
- handler_par = static_cast<void(System::*)(string)>(&DataProcessor::handler);
- break;
- case 2:
- signal_par = static_cast<void(System::*)(string&)>(&ControlPanel::signal);
- handler_par = static_cast<void(System::*)(string)>(&ControlPanel::handler);
- break;
- case 3:
- signal_par = static_cast<void(System::*)(string&)>(&CardValidator::signal);
- handler_par = static_cast<void(System::*)(string)>(&CardValidator::handler);
- break;
- case 4:
- signal_par = static_cast<void(System::*)(string&)>(&MoneyAccepting::signal);
- handler_par = static_cast<void(System::*)(string)>(&MoneyAccepting::handler);
- break;
- case 5:
- signal_par = static_cast<void(System::*)(string&)>(&MoneyIssuing::signal);
- handler_par = static_cast<void(System::*)(string)>(&MoneyIssuing::handler);
- break;
- case 6:
- signal_par = static_cast<void(System::*)(string&)>(&ATM_console::signal);
- handler_par = static_cast<void(System::*)(string)>(&ATM_console::handler);
- break;
- default:
- break;
- }
- s->set_connect(signal_par, d, handler_par);
- }
- void App::delete_connect_by_class_id(System* s, System* d, int class_id) {
- void (System:: * signal_par)(string&) = NULL;
- void (System:: * handler_par)(string) = NULL;
- switch (class_id)
- {
- case 1:
- signal_par = static_cast<void(System::*)(string&)>(&DataProcessor::signal);
- handler_par = static_cast<void(System::*)(string)>(&DataProcessor::handler);
- break;
- case 2:
- signal_par = static_cast<void(System::*)(string&)>(&ControlPanel::signal);
- handler_par = static_cast<void(System::*)(string)>(&ControlPanel::handler);
- break;
- case 3:
- signal_par = static_cast<void(System::*)(string&)>(&CardValidator::signal);
- handler_par = static_cast<void(System::*)(string)>(&CardValidator::handler);
- break;
- case 4:
- signal_par = static_cast<void(System::*)(string&)>(&MoneyAccepting::signal);
- handler_par = static_cast<void(System::*)(string)>(&MoneyAccepting::handler);
- break;
- case 5:
- signal_par = static_cast<void(System::*)(string&)>(&MoneyIssuing::signal);
- handler_par = static_cast<void(System::*)(string)>(&MoneyIssuing::handler);
- break;
- case 6:
- signal_par = static_cast<void(System::*)(string&)>(&ATM_console::signal);
- handler_par = static_cast<void(System::*)(string)>(&ATM_console::handler);
- break;
- default:
- break;
- }
- s->delete_connect(signal_par, d, handler_par);
- }
- void App::call_signal_handler_system()
- {
- /*string system_command, obj_path, add_string;
- void (System:: * signal_par)(string&) = NULL;
- void (System:: * handler_par)(string) = NULL;
- cin >> system_command;
- while (system_command != "END") {
- cin >> obj_path;
- System* f = root->find_obj(obj_path);
- if (system_command == "EMIT")
- {
- getline(cin, add_string);
- if (f)
- {
- switch (f->get_class_id())
- {
- case 1:
- signal_par = static_cast<void (System::*)(string&)>(&DataProcessor::signal);
- break;
- case 2:
- signal_par = static_cast<void (System::*)(string&)>(&ControlPanel::signal);
- break;
- case 3:
- signal_par = static_cast<void (System::*)(string&)>(&CardValidator::signal);
- break;
- case 4:
- signal_par = static_cast<void (System::*)(string&)>(&MoneyAccepting::signal);
- break;
- case 5:
- signal_par = static_cast<void (System::*)(string&)>(&MoneyIssuing::signal);
- break;
- case 6:
- signal_par = static_cast<void (System::*)(string&)>(&ATM_console::signal);
- break;
- default:
- break;
- }
- f->output_signal(signal_par, add_string);
- }
- else cout << "\nObject " << obj_path << " not found";
- }
- else if (system_command == "SET_CONNECT")
- {
- cin >> add_string;
- if (f) {
- System* d = root->find_obj(add_string);
- if (d)set_connect_by_class_id(f, d, f->get_class_id());
- else cout << "\nHandler object " << add_string << " not found";
- }
- else cout << "\nObject " << obj_path << " not found";
- }
- else if (system_command == "DELETE_CONNECT")
- {
- cin >> add_string;
- if (f) {
- System* d = root->find_obj(add_string);
- if (d)delete_connect_by_class_id(f, d, f->get_class_id());
- else cout << "\nHandler object " << add_string << " not found";
- }
- else cout << "\nObject " << obj_path << " not found";
- }
- else if (system_command == "SET_CONDITION")
- {
- cin >> add_string;
- if (f)f->set_state(stoi(add_string));
- else cout << "\nObject " << obj_path << " not found";
- }
- cin >> system_command;
- }*/
- }
- int App::exec_app() {//Реализация exec_app
- cout << "Object tree";
- root->print_tree();//Печать дерева
- //root->set_tree_as_ready();
- //call_signal_handler_system();
- ////cout<<"\nThe tree of objects and their readiness";
- ////root->print_status_tree();
- return 0;
- }
- int main()
- {
- App ob_cl_application(nullptr);//Объявление объекта класса App c начальными параметрами
- ob_cl_application.build_tree_objs();//Построения дерева с помощью метода build_tree_objs
- return ob_cl_application.exec_app();//Запуск приложения по построению дерева
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement