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

5 Реализация для одного не абстрактного класса-группы всех методов

Реализация методов, определённых в классе WorkShop:

void WorkShop::Show()

{

PrintDividingRow();

printf("\nЦех %s, с начальником: ", _name);

_head->Show();

if (_listHead == NULL) printf("\nУ которого нет подчинённых.\n");

else

{

printf("\nКоторому подчиняются:\n");

TItem* cur = _listHead;

while(cur != NULL)

{

cur->_item->Show();

printf("\n");

cur = cur->_nextItem;

}

}

PrintDividingRow();

}

А это – методы, определённые в предках класса WorkShop (которые Workshop не переопределяет):

TPerson* TDepartment::GetHead()

{

return _head;

}

void TDepartment::SetHead( TPerson* person )

{

if (person != NULL)

{

if (_head != NULL) delete _head;

_head = person;

}

}

void TDepartment::PushBack( TObject* obj )

{

if (obj == NULL)

{

return;

}

TItem* item = new TItem;

item->_item = obj;

item->_nextItem = NULL;

if (_listHead == NULL) _listHead = item;

else

{

TItem* cur = _listHead;

while(cur->_nextItem != NULL)

cur = cur->_nextItem;

cur->_nextItem = item;

}

}

void TDepartment::ForEach( PF action, int minExp )

{

if (_head != NULL) action(_head, minExp);

if (_listHead == NULL) return;

TItem* cur = _listHead;

while(cur != NULL)

{

action(cur->_item, minExp);

cur = cur->_nextItem;

}

}

char* TObject::GetName()

{

return _name;

}

void TObject::SetName( char* name )

{

if (name != NULL) // Если переданная строка не является NULL-значением

{

_name = new char[strlen(name) + 1];

strcpy(_name, name);

}

else _name = NULL;

}

6 Реализация итератора

void TDepartment::ForEach( PF action, int minExp )

{

if (_head != NULL) action(_head, minExp);

if (_listHead == NULL) return;

TItem* cur = _listHead;

while(cur != NULL)

{

action(cur->_item, minExp);

cur = cur->_nextItem;

}

}

7 Реализация передаваемой итератору функции

void PrintName(TObject* obj, int minExp)

{

if (typeid(*obj) == typeid(Worker))

{

Worker* temp = (Worker*) obj;

if (temp->GetWorkExp() >= minExp) temp->Show();

}

else if (typeid(*obj) == typeid(Employee))

{

Employee* temp = (Employee*) obj;

if (temp->GetWorkExp() >= minExp) temp->Show();

}

else if(typeid(*obj) == typeid(Engineer))

{

Engineer* temp = (Engineer*) obj;

if (temp->GetWorkExp() >= minExp) temp->Show();

}

else return;

printf("\n");

}

8 Подключаемые библиотеки и метод main

#include <stdio.h>

#include <typeinfo.h>

#include <Windows.h>

#include "Branch.h"

#include "Department.h"

#include "Employee.h"

#include "Engineer.h"

#include "Factory.h"

#include "HelperMethods.h"

#include "Person.h"

#include "TObject.h"

#include "Worker.h"

#include "WorkShop.h"

void main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

Engineer* engineerFactory;

Worker* workerFactory;

Employee* employeeFactory;

printf("Создаём завод под названием СибСФУНефть с директором-служащим Иваном возраста 50 лет со стажем работы 30 лет");

employeeFactory = new Employee("Иван", 50, 30);

Factory factory("СибСФУНефть", employeeFactory);

printf("\nСоздаём филиал, находящийся в подчинении у СибСФУНефть под названием ИКИТГаз с директором-рабочим Василием возраста 29 лет со стажем работы 10 лет");

workerFactory = new Worker("Василий", 29, 10);

Branch* branchISIT = new Branch("ИКИТГаз", workerFactory);

factory.PushBack(branchISIT);

printf("\nСоздаём цех, находящийся в подчинении у СибСФУНефть под названием НиГ с директором-рабочим Николаем возраста 40 лет со стажем работы 13 лет");

workerFactory = new Worker("Николай", 40, 13);

WorkShop* wsNIG = new WorkShop("НиГ", workerFactory);

factory.PushBack(wsNIG);

printf("\nСоздаём филиал, находящийся в подчинении у НиГ под названием СибГАУНикель с директором-инженером Дмитрием возраста 30 лет со стажем работы 5 лет\n");

engineerFactory = new Engineer("Дмитрий", 30, 5);

Branch* branchSIBGAU = new Branch("СибГАУНикель", engineerFactory);

branchISIT->PushBack(branchSIBGAU);

printf("Теперь заполним каждое подразделение рабочими, инженерами, и служащими");

factory.PushBack(new Engineer("Юлия", 24, 2));

factory.PushBack(new Employee("Владислав", 41, 10));

factory.PushBack(new Employee("Николай", 31, 7));

branchISIT->PushBack(new Worker("Евгений", 30, 2));

branchISIT->PushBack(new Worker("Анатолий", 39, 10));

branchISIT->PushBack(new Engineer("Алёна", 45, 21));

wsNIG->PushBack(new Worker("Алексей", 23, 1));

wsNIG->PushBack(new Employee("Михаил", 29, 7));

wsNIG->PushBack(new Engineer("Екатерина", 35, 10));

branchSIBGAU->PushBack(new Employee("Олег", 35, 2));

branchSIBGAU->PushBack(new Employee("Глеб", 50, 15));

branchSIBGAU->PushBack(new Engineer("Виталий", 32, 7));

branchSIBGAU->PushBack(new Worker("Юлия", 38, 12));

factory.Show();

printf("\n\nВсе рабочие, служащие и инженеры, работающие в СибСФУНефть, рабочий стаж которых выше 7 лет:\n");

factory.ForEach(PrintName, 8);

printf("\n\nВсе рабочие, служащие и инженеры, работающие в СибГАУНикель, рабочий стаж которых выше 2 лет:\n");

branchSIBGAU->ForEach(PrintName, 3);

}

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