- •Отчет по лабораторной работе №4 Обработка событий. Простейший интерфейс программы.
- •1 Техническое задание
- •Введение
- •Основание для разработки
- •Назначение
- •Требования к программе
- •Требования к функциональным характеристикам
- •Требования к надёжности
- •Требования к составу и параметрам технических средств
- •Требования к информационной и программной совместимости
- •5 Определения классов
- •6 Реализация методов обработки событий
- •7 Реализация всех методов HandleEvent
- •8 Подключаемые библиотеки и метод main
- •9 Скриншот, иллюстрирующий результат работы программы
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);
}
}
}