Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_4_отчёт.doc
Скачиваний:
4
Добавлен:
29.08.2019
Размер:
2.22 Mб
Скачать

6 Реализация методов обработки событий

void MyApplication::GetEvent()

{

char* input = new char[128];

printf("\n>");

scanf("%s", input);

if (strcmp(input, "AddWorker") == 0) _currentEvent->_commandID = cmAddWorker;

else if (strcmp(input, "AddEmployee") == 0) _currentEvent->_commandID = cmAddEmployee;

else if (strcmp(input, "AddEngineer") == 0) _currentEvent->_commandID = cmAddEngineer;

else if (strcmp(input, "DelWorker") == 0) _currentEvent->_commandID = cmDelWorker;

else if (strcmp(input, "DelEmployee") == 0) _currentEvent->_commandID = cmDelEmployee;

else if (strcmp(input, "DelEngineer") == 0) _currentEvent->_commandID = cmDelEngineer;

else if (strcmp(input, "ShowList") == 0) _currentEvent->_commandID = cmShowList;

else if (strcmp(input, "Quit") == 0) _currentEvent->_commandID = cmQuit;

else if(strcmp(input, "Commands") == 0) _currentEvent->_commandID = cmCommands;

else _currentEvent->_commandID = cmUnknown;

_currentEvent->_evType = evCommand;

}

void MyApplication::Execute()

{

do

{

GetEvent();

HandleEvent();

} while (_currentEvent->_commandID != cmQuit);

}

7 Реализация всех методов HandleEvent

void MyApplication::HandleEvent()

{

if (_currentEvent->_evType == evCommand)

{

char* name = new char[128];

int age;

int workExp;

if (_currentEvent->_commandID == cmAddEmployee || _currentEvent->_commandID == cmAddEngineer || _currentEvent->_commandID == cmAddWorker ||

_currentEvent->_commandID == cmDelEmployee || _currentEvent->_commandID == cmDelEngineer || _currentEvent->_commandID == cmDelWorker)

{

printf("Введите имя: ");

scanf("%s", name);

printf("Введите возраст: ");

scanf("%d", &age);

printf("Введите трудовой стаж: ");

scanf("%d", &workExp);

if (_currentEvent->_commandID == cmAddEmployee || _currentEvent->_commandID == cmAddEngineer || _currentEvent->_commandID == cmAddWorker)

{

printf("Введите название отдела, к которому добавляется человек: ");

scanf("%s", _currentEvent->_param2);

}

}

switch(_currentEvent->_commandID)

{

case cmDelEmployee:

case cmAddEmployee:

_currentEvent->_param1 = new Employee(name, age, workExp);

break;

case cmDelEngineer:

case cmAddEngineer:

_currentEvent->_param1 = new Engineer(name, age, workExp);

break;

case cmDelWorker:

case cmAddWorker:

_currentEvent->_param1 = new Worker(name, age, workExp);

break;

case cmShowList:

_head->Show();

_currentEvent->ClearEvent();

break;

case cmCommands:

ShowCommands();

_currentEvent->ClearEvent();

break;

case cmQuit:

_currentEvent->ClearEvent();

break;

default:

printf("Такой команды не существует.\n");

ShowCommands();

_currentEvent->ClearEvent();

break;

}

if (_currentEvent->_evType == evCommand)

{

_head->HandleEvent(_currentEvent);

}

}

}

void TDepartment::HandleEvent(TEvent* ev)

{

if (ev->_evType == evCommand)

{

switch(ev->_commandID)

{

case cmAddEmployee:

case cmAddEngineer:

case cmAddWorker:

if (strcmp(ev->_param2, _name) == 0)

{

PushBack(ev->_param1);

ev->ClearEvent();

}

break;

case cmDelEmployee:

case cmDelEngineer:

case cmDelWorker:

if (Remove(ev->_param1)) ev->ClearEvent();

break;

case cmShowList:

Show();

ev->ClearEvent();

break;

}

if (ev->_evType == evCommand && _listHead != NULL)

{

TItem* cur = _listHead;

do

{

if (typeid(*cur->_item) == typeid(Branch) || typeid(*cur->_item) == typeid(WorkShop) || typeid(*cur->_item) == typeid(Factory))

((TDepartment*)(cur->_item))->HandleEvent(ev);

cur = cur->_nextItem;

} while (cur != NULL && ev->_evType != evNothing);

}

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]