Файл: Лабораторная работа 11 Выполнила Драчева Кристина Проверил Савин Н. И. Тула 2023.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.12.2023
Просмотров: 36
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ
ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО
ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «ТУЛЬСКИЙ
ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Институт Прикладной математики и компьютерных наук
Кафедра Вычислительной техники
Учебная дисциплина
Программирование
Уровень профессионального образования: (высшее образование –
бакалавриат)
Направление подготовки: Информатика и вычислительная техника
Профиль подготовки: Электронно-вычислительные машины, комплексы, системы и сети
Лабораторная работа № 11
Выполнила Драчева Кристина
Проверил Савин Н.И.
Тула 2023
1. Цель работы
Изучить способы перегрузки методов и операторов классов в С++.
2. Задание
Спроектировать класс комплексных чисел (complex). Перегрузить конструкторы и операторы + и -.
3. Ход работы
Для выполнения работы я создал класс
Complex
. В нём организовал два поля для хранения реальной и мнимой части комплексного числа, а также методы доступа к ним. Для перегрузки операторов + и – использовал методы void operator +
(
const
Complex
&
drugoe_chislo
)
и void operator -
(
const
Complex
&
drugoe_chislo
)
. В которых производил сложение и вычитание соответствующих полей с последующим присвоением результата текущему элементу.
4. Листинг
#include
#include
using namespace std; class
Complex
{ public
:
Complex()
{ this
->Real = 0; this
->Imag = 0;
}
Complex(
float
Real
, float
Imag
)
{ this
->Real =
Real
; this
->Imag =
Imag
;
} float
GetReal()
{ return this
->Real;
} float
GetImag()
{ return this
->Imag;
} void
SetReal(
float
Real
)
{ this
->Real =
Real
; } void
SetImag(
float
Imag
)
{ this
->Imag =
Imag
; } void operator +
(
const
Complex
&
drugoe_chislo
)
{ this
->Real = this
->Real + drugoe_chislo
.Real; this
->Imag = this
->Imag + drugoe_chislo
.Imag;
} void operator -
(
const
Complex
&
drugoe_chislo
)
{ this
->Real = this
->Real - drugoe_chislo
.Real; this
->Imag = this
->Imag - drugoe_chislo
.Imag;
} void print()
{ if
(
this
->Imag >= 0)
{ cout
<<
this
->Real
<<
" + "
<<
this
->Imag
<<
"i"
;
} else
{ cout
<<
this
->Real
<<
" - "
<<
this
->Imag * (-1)
<<
"i"
;
}
} private
: float
Real; float
Imag;
}; int main()
{
SetConsoleCP(1251);
// установка кодовой страницы win-cp 1251 в поток ввода
SetConsoleOutputCP(1251);
// установка кодовой страницы win-cp 1251 в поток вывода
Complex a; a.print(); cout
<<
" Задание комплексного числа по умолчанию"
<<
"\n"
;
Complex b(12, -3); b.print(); cout
<<
" Задание комплексного числа явно"
<<
"\n"
; a.SetReal(0.3); a.SetImag(5.4); a.print(); cout
<<
" Присвоение значений вещественной и мнимой части первого комплексного числа"
<<
"\n"
; a
+
b; a.print(); cout
<<
" Результат сложения двух комплексных чисел"
<<
"\n"
; b
- a;
b.print(); cout
<<
" Результат разности двух комплексных чисел"
<<
"\n"
; return
0;
};
5. Результат работы программы
6. Ответы на контрольные вопросы
1.
Перегрузка конструктора класса нужна для возможности реализовать инициализацию объекта класса несколькими способами.
2.
Конструктор копирования – это специальный конструктор, который позволяет получить идентичный к заданному объект.
3.
Что бы перегрузить оператор присваивания нужно присвоить каждое поле присваимого объекта, объекту которому присваивают.
4.
Что бы перегрузить оператор индексирования нужно что бы метод перегрузки возвращал ссылку на требуемый элемент.
5.
Что бы перегрузить оператор вызова функции в классе создается операторная функция operator()(). Эта функция может принимать произвольное количество параметров.
6.
Что бы перегрузить оператор приведения типа нужно что бы метод возвращал требуемый тип. Операции преобразования не должны изменять преобразуемый объект. В зависимости от приведения
(явного/неявного) объявление метода, перегружающего оператор
<<
" Результат разности двух комплексных чисел"
<<
"\n"
; return
0;
};
5. Результат работы программы
6. Ответы на контрольные вопросы
1.
Перегрузка конструктора класса нужна для возможности реализовать инициализацию объекта класса несколькими способами.
2.
Конструктор копирования – это специальный конструктор, который позволяет получить идентичный к заданному объект.
3.
Что бы перегрузить оператор присваивания нужно присвоить каждое поле присваимого объекта, объекту которому присваивают.
4.
Что бы перегрузить оператор индексирования нужно что бы метод перегрузки возвращал ссылку на требуемый элемент.
5.
Что бы перегрузить оператор вызова функции в классе создается операторная функция operator()(). Эта функция может принимать произвольное количество параметров.
6.
Что бы перегрузить оператор приведения типа нужно что бы метод возвращал требуемый тип. Операции преобразования не должны изменять преобразуемый объект. В зависимости от приведения
(явного/неявного) объявление метода, перегружающего оператор
приведения () содержит одно из двух слов. implicit – задает неявное преобразование. Это преобразование можно задавать без риска утраты точности. explicit – задает явное преобразование. Это преобразование используется, если возможна потеря данных или даже возникновение исключительной ситуации.
7.
Что бы перегрузить оператор преобразования производного типа
Нужно что бы метод возвращал этот самый производный тип, остальное как и со стандартными типами.
7.
Что бы перегрузить оператор преобразования производного типа
Нужно что бы метод возвращал этот самый производный тип, остальное как и со стандартными типами.
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ
ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО
ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «ТУЛЬСКИЙ
ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Институт Прикладной математики и компьютерных наук
Кафедра Вычислительной техники
Учебная дисциплина
Программирование
Уровень профессионального образования: (высшее образование –
бакалавриат)
Направление подготовки: Информатика и вычислительная техника
Профиль подготовки: Электронно-вычислительные машины, комплексы, системы и сети
Лабораторная работа № 12
Выполнила Драчева Кристина
Проверил Савин Н.И.
Тула 2023
1. Цель работы.
Ознакомление с механизмом наследования классов и возможностями, которые он предоставляет; получение навыков использования наследования в прикладных программах.
2. Задание.
Разработать иерархию классов, которые позволяют обрабатывать информацию о работниках различного уровня на предприятии (уборщики, рабочие, мастера и инженеры различных подразделений, экономисты, дирекция и т.д.). Реализация должна допускать прием на работу и увольнение сотрудников, их перевод из одного подразделения в другое, начисление ежемесячной зарплаты, учет отпусков, поиск и сортировку информации по различным критериям. Интерфейс должен содержать виртуальные функции.
3. Ход работы.
Для выполнения задания я использовал четыре класса. Абстрактный родительский(
chel
), содержащий основные поля, методы и виртуальные функции. И три наследника(
rabochiy, master, injener
). Класс master содержит в себе массив из элементов rabochiy
. А класс injener в свою очередь содержит массив элементов master
. Для вывода информации, добавления и удаления рабочих, корректировки записей с информацией о конкретных рабочих используются меню и подменю реализованные с помощью бесконечных циклов и конструкции switch
() case
. Для вывода информации о конкретном рабочем, установки оплаты и начисления зарплаты используются виртуальные функции объявленные в родительском классе:
virtual void
Pechat() = 0; virtual void nachZarp() = 0; virtual void ust_oplatu(
float znach
) = 0; и описанные внутри классов наследников.
Работа происходит через вспогательные функции: void vPechat(
chel
* i
) { i
->Pechat(); } void vOplata(
chel
* i
, float y
) { i
->ust_oplatu(
y
); } void vNachZP(
chel
* i
) { i
->nachZarp(); }
4. Листинг.
#include
#include
#include
#include
using namespace std; class chel
{ protected
: static int schet; int vozrast; int otrab_mesyacev; string imya; int tabNo; int otrabSmen; string doljnost; float
ZP; public
: chel(
string imya
, int vozrast
, string doljnost
)
{ this
->imya
=
imya
; this
->vozrast = vozrast
; this
->doljnost
=
doljnost
; schet++; this
->tabNo = schet; this
->otrab_mesyacev = 0; this
->otrabSmen = 0; this
->ZP = 0;
} void
Kratk_info()
{ cout
<<
tabNo
<<
" : "
<<
imya
<<
"\t\t"
<<
vozrast
<<
"\t\t"
<<
doljnost
<<
endl;
} void
UstImya(
string imya
) { this
->imya
=
imya
; } void
UstVozrast(
int vozrast
) { this
->vozrast = vozrast
; } void ust_Kol_smen(
int kollich
) { this
->otrabSmen = kollich
; } int vzyat_tabNo() { return this
->tabNo; } void ust_doljn(
string doljn
) { this
->doljnost
=
doljn
; } virtual void
Pechat() = 0; virtual void nachZarp() = 0;
virtual void ust_oplatu(
float znach
) = 0;
}; int chel
::schet = 0; class rabochiy
: public chel
{ public
: rabochiy (
string imya
, int vozrast
, string podrazdelenie
, string doljnost
) : chel
(
imya
, vozrast
, doljnost
)
{ this
->podrazdelenie
=
podrazdelenie
; this
->stoimost_chasa = 0; this
->otrabSmen = 0;
} void ust_oplatu(
float stoimost_chasa
) override
{ this
->stoimost_chasa = stoimost_chasa
; } void
Pechat() override
{ cout
<<
"___________________________________________________________"
<<
endl
<<
endl; cout
<<
"имя: "
<<
imya
<<
"\tвозраст: "
<<
vozrast
<<
"\tТабНо: "
<<
tabNo
<<
endl
<<
endl; cout
<<
"Подразделение: "
<<
podrazdelenie
<<
endl
<<
endl; cout
<<
"Должность: "
<<
doljnost
<<
endl
<<
endl; cout
<<
"стоимость часа: "
<<
stoimost_chasa
<<
"\tотработанно смен:
"
<<
otrabSmen
<<
endl
<<
endl; cout
<<
"Начисленная зарплата: "
<<
ZP
<<
endl
<<
endl; cout
<<
"___________________________________________________________"
<<
endl
<<
endl;
} void nachZarp() override
{ this
->ZP = this
->stoimost_chasa * (
this
-
>otrabSmen * 8); this
->otrabSmen = 0; } void
ZP_null()
{ this
->ZP = 0; this
->otrabSmen = 0;
} void ust_podrazd(
string podrazd
) { this
->podrazdelenie
=
podrazd
; } protected
: string podrazdelenie; private
: double stoimost_chasa;
}; class master
: public rabochiy
{ public
: master(
string imya
, int vozrast
, string podrazdelenie
, string doljnost
)
: rabochiy
(
imya
, vozrast
, podrazdelenie
, doljnost
)
{ this
->oklad = 0; this
->NormaSmen = 20;
} void ust_oplatu(
float oklad
) override
{ this
->oklad = oklad
; } void nachZarp() override
{ this
->ZP = oklad * (otrabSmen /
(
double
)NormaSmen); otrabSmen = 0; } void
Pechat() override
{
float znach
) = 0;
}; int chel
::schet = 0; class rabochiy
: public chel
{ public
: rabochiy (
string imya
, int vozrast
, string podrazdelenie
, string doljnost
) : chel
(
imya
, vozrast
, doljnost
)
{ this
->podrazdelenie
=
podrazdelenie
; this
->stoimost_chasa = 0; this
->otrabSmen = 0;
} void ust_oplatu(
float stoimost_chasa
) override
{ this
->stoimost_chasa = stoimost_chasa
; } void
Pechat() override
{ cout
<<
"___________________________________________________________"
<<
endl
<<
endl; cout
<<
"имя: "
<<
imya
<<
"\tвозраст: "
<<
vozrast
<<
"\tТабНо: "
<<
tabNo
<<
endl
<<
endl; cout
<<
"Подразделение: "
<<
podrazdelenie
<<
endl
<<
endl; cout
<<
"Должность: "
<<
doljnost
<<
endl
<<
endl; cout
<<
"стоимость часа: "
<<
stoimost_chasa
<<
"\tотработанно смен:
"
<<
otrabSmen
<<
endl
<<
endl; cout
<<
"Начисленная зарплата: "
<<
ZP
<<
endl
<<
endl; cout
<<
"___________________________________________________________"
<<
endl
<<
endl;
} void nachZarp() override
{ this
->ZP = this
->stoimost_chasa * (
this
-
>otrabSmen * 8); this
->otrabSmen = 0; } void
ZP_null()
{ this
->ZP = 0; this
->otrabSmen = 0;
} void ust_podrazd(
string podrazd
) { this
->podrazdelenie
=
podrazd
; } protected
: string podrazdelenie; private
: double stoimost_chasa;
}; class master
: public rabochiy
{ public
: master(
string imya
, int vozrast
, string podrazdelenie
, string doljnost
)
: rabochiy
(
imya
, vozrast
, podrazdelenie
, doljnost
)
{ this
->oklad = 0; this
->NormaSmen = 20;
} void ust_oplatu(
float oklad
) override
{ this
->oklad = oklad
; } void nachZarp() override
{ this
->ZP = oklad * (otrabSmen /
(
double
)NormaSmen); otrabSmen = 0; } void
Pechat() override
{
cout
<<
"___________________________________________________________"
<<
endl
<<
endl; cout
<<
"имя: "
<<
this
->imya
<<
"\tвозраст: "
<<
vozrast
<<
"\tТабНо: "
<<
tabNo
<<
endl
<<
endl; cout
<<
"Подразделение: "
<<
podrazdelenie
<<
endl
<<
endl; cout
<<
"Должность: "
<<
doljnost
<<
endl
<<
endl; cout
<<
"оклад: "
<<
oklad
<<
"\tотработанно смен: "
<<
this
-
>otrabSmen
<<
endl
<<
endl; cout
<<
"Начисленная зарплата: "
<<
ZP
<<
endl
<<
endl; cout
<<
"___________________________________________________________"
<<
endl
<<
endl;
} void
Dob_Rab(
string imya
, int vozrast
, string doljnost
)
{ rabochiy p = rabochiy
(
imya
, vozrast
,
this
->podrazdelenie, doljnost
); baza.push_back(p);
} void vse_rab()
{ for
(
int i = 0; i < baza.size(); i++)
{ baza
[
i
]
.Pechat();
}
} string pokaz_podrazd() { return this
->podrazdelenie; } void perevod_rab(
rabochiy
* rab
)
{ rab
->ust_podrazd(
this
->podrazdelenie); baza.push_back(*
rab
);
} void udal_rab(
int i
)
{ auto iter = baza.cbegin(); baza.erase(iter
+
i
);
} rabochiy
*raboch(
int i
) { return
&baza
[
i
]
; } int rasm_baz_rab() { return baza.size(); } private
: int
NormaSmen; double oklad; vector
<
rabochiy
> baza;
}; class injener
:
public chel
{ public
: injener(
string imya
, int vozrast
, string doljnost
) :
chel
(
imya
, vozrast
, doljnost
)
{ this
->oklad = 0;
} void dob_pdrazd(
string imya
, int vozrast
, string podrazdelenie
, string doljnost
)
{ master x(
imya
, vozrast
, podrazdelenie
, doljnost
); baza.push_back(x);
} void ust_oplatu(
float oklad
) override
{ this
->oklad = oklad
; } void
Pechat() override
{
<<
"___________________________________________________________"
<<
endl
<<
endl; cout
<<
"имя: "
<<
this
->imya
<<
"\tвозраст: "
<<
vozrast
<<
"\tТабНо: "
<<
tabNo
<<
endl
<<
endl; cout
<<
"Подразделение: "
<<
podrazdelenie
<<
endl
<<
endl; cout
<<
"Должность: "
<<
doljnost
<<
endl
<<
endl; cout
<<
"оклад: "
<<
oklad
<<
"\tотработанно смен: "
<<
this
-
>otrabSmen
<<
endl
<<
endl; cout
<<
"Начисленная зарплата: "
<<
ZP
<<
endl
<<
endl; cout
<<
"___________________________________________________________"
<<
endl
<<
endl;
} void
Dob_Rab(
string imya
, int vozrast
, string doljnost
)
{ rabochiy p = rabochiy
(
imya
, vozrast
,
this
->podrazdelenie, doljnost
); baza.push_back(p);
} void vse_rab()
{ for
(
int i = 0; i < baza.size(); i++)
{ baza
[
i
]
.Pechat();
}
} string pokaz_podrazd() { return this
->podrazdelenie; } void perevod_rab(
rabochiy
* rab
)
{ rab
->ust_podrazd(
this
->podrazdelenie); baza.push_back(*
rab
);
} void udal_rab(
int i
)
{ auto iter = baza.cbegin(); baza.erase(iter
+
i
);
} rabochiy
*raboch(
int i
) { return
&baza
[
i
]
; } int rasm_baz_rab() { return baza.size(); } private
: int
NormaSmen; double oklad; vector
<
rabochiy
> baza;
}; class injener
:
public chel
{ public
: injener(
string imya
, int vozrast
, string doljnost
) :
chel
(
imya
, vozrast
, doljnost
)
{ this
->oklad = 0;
} void dob_pdrazd(
string imya
, int vozrast
, string podrazdelenie
, string doljnost
)
{ master x(
imya
, vozrast
, podrazdelenie
, doljnost
); baza.push_back(x);
} void ust_oplatu(
float oklad
) override
{ this
->oklad = oklad
; } void
Pechat() override
{
cout
<<
"имя: "
<<
this
->imya
<<
"\tдолжность: "
<<
this
->doljnost
<<
endl
<<
endl;; cout
<<
"оклад: "
<<
this
->oklad
<<
"\tотработанно смен: "
<<
this
-
>otrabSmen
<<
endl
<<
endl; cout
<<
"начисленная зарплата: "
<<
this
->ZP
<<
endl
<<
endl; cout
<<
"______________________________________________"
<<
endl;
} void nachZarp() override
{ this
->ZP = oklad; } void vse_rab1()
{ for
(
master i : baza)
{ i.Pechat(); i.vse_rab();
}
} void dob_rab(
int podr
, string imya
, int vozrast
, string doljnost
)
{ this
->baza
[
podr
]
.Dob_Rab(
imya
, vozrast
, doljnost
);
} master
*mast(
int index
) { return
&baza
[
index
]
; } int razm_baz() { return this
->baza.size(); } private
: float oklad; vector
<
master
>baza;
}; void vPechat(
chel
* i
) { i
->Pechat(); } void vOplata(
chel
* i
, float y
) { i
->ust_oplatu(
y
); } void vNachZP(
chel
* i
) { i
->nachZarp(); } void vse(
injener
* inj
)
{ inj
->Kratk_info(); for
(
int i = 0; i < inj
->razm_baz(); i++)
{ rabochiy
*p = inj
->mast(i); p->Kratk_info();
} for
(
int i = 0; i < inj
->razm_baz(); i++)
{ for
(
int y = 0; y < inj
->mast(i)->rasm_baz_rab(); y++)
{ rabochiy
*p = inj
->mast(i)->raboch(y); p->Kratk_info();
}
}
} void vibor_Rabochego(
injener
*
inj
, int tab
)
{ if
(
inj
->vzyat_tabNo() == tab
)
{ vPechat(
inj
);
} for
(
int i =0; i < inj
->razm_baz(); i++)
{ if
(
inj
->mast(i)->vzyat_tabNo() == tab
)
{ vPechat(
inj
->mast(i));
}
}
<<
"имя: "
<<
this
->imya
<<
"\tдолжность: "
<<
this
->doljnost
<<
endl
<<
endl;; cout
<<
"оклад: "
<<
this
->oklad
<<
"\tотработанно смен: "
<<
this
-
>otrabSmen
<<
endl
<<
endl; cout
<<
"начисленная зарплата: "
<<
this
->ZP
<<
endl
<<
endl; cout
<<
"______________________________________________"
<<
endl;
} void nachZarp() override
{ this
->ZP = oklad; } void vse_rab1()
{ for
(
master i : baza)
{ i.Pechat(); i.vse_rab();
}
} void dob_rab(
int podr
, string imya
, int vozrast
, string doljnost
)
{ this
->baza
[
podr
]
.Dob_Rab(
imya
, vozrast
, doljnost
);
} master
*mast(
int index
) { return
&baza
[
index
]
; } int razm_baz() { return this
->baza.size(); } private
: float oklad; vector
<
master
>baza;
}; void vPechat(
chel
* i
) { i
->Pechat(); } void vOplata(
chel
* i
, float y
) { i
->ust_oplatu(
y
); } void vNachZP(
chel
* i
) { i
->nachZarp(); } void vse(
injener
* inj
)
{ inj
->Kratk_info(); for
(
int i = 0; i < inj
->razm_baz(); i++)
{ rabochiy
*p = inj
->mast(i); p->Kratk_info();
} for
(
int i = 0; i < inj
->razm_baz(); i++)
{ for
(
int y = 0; y < inj
->mast(i)->rasm_baz_rab(); y++)
{ rabochiy
*p = inj
->mast(i)->raboch(y); p->Kratk_info();
}
}
} void vibor_Rabochego(
injener
*
inj
, int tab
)
{ if
(
inj
->vzyat_tabNo() == tab
)
{ vPechat(
inj
);
} for
(
int i =0; i < inj
->razm_baz(); i++)
{ if
(
inj
->mast(i)->vzyat_tabNo() == tab
)
{ vPechat(
inj
->mast(i));
}
}
for
(
int i =0; i < inj
->razm_baz(); i++)
{ for
(
int y =0; y < inj
->mast(i)->rasm_baz_rab(); y++)
{ if
(
inj
->mast(i)->raboch(y)->vzyat_tabNo() == tab
)
{ vPechat(
inj
->mast(i)->raboch(y));
}
}
} return
;
} void ust_kolSmen(
injener
* inj
, int tab
)
{ int kollich; cout
<<
"введите количество отработанных смен: "
; cin
>>
kollich; if
(
inj
->vzyat_tabNo() == tab
)
{ inj
->ust_Kol_smen(kollich); return
;
} for
(
int i = 0; i < inj
->razm_baz(); i++)
{ if
(
inj
->mast(i)->vzyat_tabNo() == tab
)
{ inj
->mast(i)->ust_Kol_smen(kollich); return
;
}
} for
(
int i = 0; i < inj
->razm_baz(); i++)
{ for
(
int y = 0; y < inj
->mast(i)->rasm_baz_rab(); y++)
{ if
(
inj
->mast(i)->raboch(y)->vzyat_tabNo() == tab
)
{ inj
->mast(i)->raboch(y)->ust_Kol_smen(kollich); return
;
}
}
} return
;
} void ust_oplatu(
injener
* inj
, int tab
)
{ float summa; cout
<<
"введите сумму: "
; cin
>>
summa; if
(
inj
->vzyat_tabNo() == tab
)
{ vOplata(
inj
, summa);
} for
(
int i = 0; i < inj
->razm_baz(); i++)
{ if
(
inj
->mast(i)->vzyat_tabNo() == tab
)
{ vOplata(
inj
->mast(i), summa);
}
} for
(
int i = 0; i < inj
->razm_baz(); i++)
{ for
(
int y = 0; y < inj
->mast(i)->rasm_baz_rab(); y++)
{ if
(
inj
->mast(i)->raboch(y)->vzyat_tabNo() == tab
)
(
int i =0; i < inj
->razm_baz(); i++)
{ for
(
int y =0; y < inj
->mast(i)->rasm_baz_rab(); y++)
{ if
(
inj
->mast(i)->raboch(y)->vzyat_tabNo() == tab
)
{ vPechat(
inj
->mast(i)->raboch(y));
}
}
} return
;
} void ust_kolSmen(
injener
* inj
, int tab
)
{ int kollich; cout
<<
"введите количество отработанных смен: "
; cin
>>
kollich; if
(
inj
->vzyat_tabNo() == tab
)
{ inj
->ust_Kol_smen(kollich); return
;
} for
(
int i = 0; i < inj
->razm_baz(); i++)
{ if
(
inj
->mast(i)->vzyat_tabNo() == tab
)
{ inj
->mast(i)->ust_Kol_smen(kollich); return
;
}
} for
(
int i = 0; i < inj
->razm_baz(); i++)
{ for
(
int y = 0; y < inj
->mast(i)->rasm_baz_rab(); y++)
{ if
(
inj
->mast(i)->raboch(y)->vzyat_tabNo() == tab
)
{ inj
->mast(i)->raboch(y)->ust_Kol_smen(kollich); return
;
}
}
} return
;
} void ust_oplatu(
injener
* inj
, int tab
)
{ float summa; cout
<<
"введите сумму: "
; cin
>>
summa; if
(
inj
->vzyat_tabNo() == tab
)
{ vOplata(
inj
, summa);
} for
(
int i = 0; i < inj
->razm_baz(); i++)
{ if
(
inj
->mast(i)->vzyat_tabNo() == tab
)
{ vOplata(
inj
->mast(i), summa);
}
} for
(
int i = 0; i < inj
->razm_baz(); i++)
{ for
(
int y = 0; y < inj
->mast(i)->rasm_baz_rab(); y++)
{ if
(
inj
->mast(i)->raboch(y)->vzyat_tabNo() == tab
)
{ vOplata(
inj
->mast(i)->raboch(y), summa);
}
}
} return
;
} void menu_osn()
{ system (
"cls"
); cout
<<
"____________________________________________________________________________"
<<
endl; cout
<<
"добавить подразделение: 1"
<<
"\tдобавить рабочего: 2"
<<
endl
<<
endl; cout
<<
"краткая информация о персонале: 4"
<<
"\tвыбор рабочего по таб№: 5"
<<
endl
<<
endl; cout
<<
"\t\tвыход: 9"
<<
endl; cout
<<
"____________________________________________________________________________"
<<
endl;
} void menu_niz()
{ cout
<<
endl
<<
endl; cout
<<
"____________________________________________________________________________"
<<
endl; cout
<<
"очистить экран: 8"
<<
"\tвыход из программы: 9"
<<
endl; cout
<<
"____________________________________________________________________________"
<<
endl;
} void menu_info()
{ cout
<<
"____________________________________________________________________________"
<<
endl; cout
<<
" изменить кол смен: 1"
<<
"\tизменить оклад/стоимость часа: 2"
<<
"\tперевести: 3"
<<
endl; cout
<<
"изменить должность: 4"
<<
"\tначислить зарплату: 5"
<<
endl; cout
<<
"уволить: 6"
<<
"\tвыход в верхнее меню: 9"
<<
endl; cout
<<
"____________________________________________________________________________"
<<
endl;
} void menu_info_niz()
{ cout
<<
endl
<<
endl; cout
<<
"____________________________________________________________________________"
<<
endl; cout
<<
"очистить экран: 8"
<<
"\tвыход в предыдущее меню: 9"
<<
endl; cout
<<
"____________________________________________________________________________"
<<
endl;
} int vibor_podrazd(
injener
* inj
)
{ int vozvrat; cout
<<
"выберите номер подразделения для перевода"
<<
endl;
for
(
int i = 0; i < inj
->razm_baz(); i++)
{ cout
<<
inj
->mast(i)->pokaz_podrazd()
<<
"\t\t\t - "
<<
i
<<
";"
<<
endl;
} cin
>>
vozvrat; return vozvrat;
} void perevod(
injener
* inj
, int tab
, int kuda
)
{ for
(
int i = 0; i < inj
->razm_baz(); i++)
{ for
(
int y = 0; y < inj
->mast(i)->rasm_baz_rab(); y++)
{ if
(
inj
->mast(i)->raboch(y)->vzyat_tabNo() == tab
)
{ inj
->mast(
kuda
)->perevod_rab(
inj
->mast(i)->raboch(y)); inj
->mast(i)->udal_rab(y);
}
}
}
} void uvoln(
injener
* inj
, int tab
)
{ for
(
int i = 0; i < inj
->razm_baz(); i++)
{ for
(
int y = 0; y < inj
->mast(i)->rasm_baz_rab(); y++)
{ if
(
inj
->mast(i)->raboch(y)->vzyat_tabNo() == tab
)
{ inj
->mast(i)->udal_rab(y);
}
}
}
} void izm_doljnost(
injener
* inj
, int tab
)
{ string doljn; cout
<<
"введите новую должность: "
; cin
>>
doljn; if
(
inj
->vzyat_tabNo() == tab
)
{ inj
->ust_doljn(doljn);
} for
(
int i = 0; i < inj
->razm_baz(); i++)
{ if
(
inj
->mast(i)->vzyat_tabNo() == tab
)
{ inj
->mast(i)->ust_doljn(doljn);
}
} for
(
int i = 0; i < inj
->razm_baz(); i++)
{ for
(
int y = 0; y < inj
->mast(i)->rasm_baz_rab(); y++)
{ if
(
inj
->mast(i)->raboch(y)->vzyat_tabNo() == tab
)
{ inj
->mast(i)->raboch(y)->ust_doljn(doljn);
}
}
} return
;
}
(
int i = 0; i < inj
->razm_baz(); i++)
{ cout
<<
inj
->mast(i)->pokaz_podrazd()
<<
"\t\t\t - "
<<
i
<<
";"
<<
endl;
} cin
>>
vozvrat; return vozvrat;
} void perevod(
injener
* inj
, int tab
, int kuda
)
{ for
(
int i = 0; i < inj
->razm_baz(); i++)
{ for
(
int y = 0; y < inj
->mast(i)->rasm_baz_rab(); y++)
{ if
(
inj
->mast(i)->raboch(y)->vzyat_tabNo() == tab
)
{ inj
->mast(
kuda
)->perevod_rab(
inj
->mast(i)->raboch(y)); inj
->mast(i)->udal_rab(y);
}
}
}
} void uvoln(
injener
* inj
, int tab
)
{ for
(
int i = 0; i < inj
->razm_baz(); i++)
{ for
(
int y = 0; y < inj
->mast(i)->rasm_baz_rab(); y++)
{ if
(
inj
->mast(i)->raboch(y)->vzyat_tabNo() == tab
)
{ inj
->mast(i)->udal_rab(y);
}
}
}
} void izm_doljnost(
injener
* inj
, int tab
)
{ string doljn; cout
<<
"введите новую должность: "
; cin
>>
doljn; if
(
inj
->vzyat_tabNo() == tab
)
{ inj
->ust_doljn(doljn);
} for
(
int i = 0; i < inj
->razm_baz(); i++)
{ if
(
inj
->mast(i)->vzyat_tabNo() == tab
)
{ inj
->mast(i)->ust_doljn(doljn);
}
} for
(
int i = 0; i < inj
->razm_baz(); i++)
{ for
(
int y = 0; y < inj
->mast(i)->rasm_baz_rab(); y++)
{ if
(
inj
->mast(i)->raboch(y)->vzyat_tabNo() == tab
)
{ inj
->mast(i)->raboch(y)->ust_doljn(doljn);
}
}
} return
;
}
void nachZp(
injener
* inj
, int tab
)
{ if
(
inj
->vzyat_tabNo() == tab
)
{ vNachZP(
inj
);
} for
(
int i = 0; i < inj
->razm_baz(); i++)
{ if
(
inj
->mast(i)->vzyat_tabNo() == tab
)
{ vNachZP(
inj
->mast(i));
}
} for
(
int i = 0; i < inj
->razm_baz(); i++)
{ for
(
int y = 0; y < inj
->mast(i)->rasm_baz_rab(); y++)
{ if
(
inj
->mast(i)->raboch(y)->vzyat_tabNo() == tab
)
{ vNachZP (
inj
->mast(i)->raboch(y));
}
}
}
} void dobavPodrazd(
injener
* inj
)
{ string podrazd, imya, doljnost; int vozrast; cout
<<
"для создания нового подразделения требуется назначение ответственного"
<<
endl; cout
<<
"введите название подразделения: "
; cin
>>
podrazd; cout
<<
"введите имя начальника подразделения: "
; cin
>>
imya; cout
<<
"введите возраст начальника подразделения: "
; cin
>>
vozrast; cout
<<
"введите должность начальника подразделения: "
; cin
>>
doljnost; inj
->dob_pdrazd(imya, vozrast, podrazd, doljnost);
} void dobavlenie_rabochego(
injener
* inj
)
{ string imya, doljnost; int podr, vozrast; cout
<<
"выберите подразделение: "
<<
endl; for
(
int i = 0; i < inj
->razm_baz(); i++)
{ cout
<<
inj
->mast(i)->pokaz_podrazd()
<<
"\t\ _______________ "
<<
i
<<
";"
<<
endl
<<
endl;
} cin
>>
podr; cout
<<
"\nвведите имя: "
; cin
>>
imya; cout
<<
"\nвведите возраст: "
; cin
>>
vozrast; cout
<<
"\nвведите должность: "
; cin
>>
doljnost; inj
->dob_rab(podr, imya, vozrast, doljnost);
} void pod_menu_info(
injener
*
inj
)
{ int tab,kuda; chel
* p;
injener
* inj
, int tab
)
{ if
(
inj
->vzyat_tabNo() == tab
)
{ vNachZP(
inj
);
} for
(
int i = 0; i < inj
->razm_baz(); i++)
{ if
(
inj
->mast(i)->vzyat_tabNo() == tab
)
{ vNachZP(
inj
->mast(i));
}
} for
(
int i = 0; i < inj
->razm_baz(); i++)
{ for
(
int y = 0; y < inj
->mast(i)->rasm_baz_rab(); y++)
{ if
(
inj
->mast(i)->raboch(y)->vzyat_tabNo() == tab
)
{ vNachZP (
inj
->mast(i)->raboch(y));
}
}
}
} void dobavPodrazd(
injener
* inj
)
{ string podrazd, imya, doljnost; int vozrast; cout
<<
"для создания нового подразделения требуется назначение ответственного"
<<
endl; cout
<<
"введите название подразделения: "
; cin
>>
podrazd; cout
<<
"введите имя начальника подразделения: "
; cin
>>
imya; cout
<<
"введите возраст начальника подразделения: "
; cin
>>
vozrast; cout
<<
"введите должность начальника подразделения: "
; cin
>>
doljnost; inj
->dob_pdrazd(imya, vozrast, podrazd, doljnost);
} void dobavlenie_rabochego(
injener
* inj
)
{ string imya, doljnost; int podr, vozrast; cout
<<
"выберите подразделение: "
<<
endl; for
(
int i = 0; i < inj
->razm_baz(); i++)
{ cout
<<
inj
->mast(i)->pokaz_podrazd()
<<
"\t\ _______________ "
<<
i
<<
";"
<<
endl
<<
endl;
} cin
>>
podr; cout
<<
"\nвведите имя: "
; cin
>>
imya; cout
<<
"\nвведите возраст: "
; cin
>>
vozrast; cout
<<
"\nвведите должность: "
; cin
>>
doljnost; inj
->dob_rab(podr, imya, vozrast, doljnost);
} void pod_menu_info(
injener
*
inj
)
{ int tab,kuda; chel
* p;
cout
<<
"введите таб№ рабочего: "
; cin
>>
tab; system(
"cls"
); vibor_Rabochego(
inj
, tab); menu_info(); int kluch; while
(
true
)
{ cin
>>
kluch; switch
(kluch)
{ case
1: ust_kolSmen(
inj
, tab); system(
"cls"
); vibor_Rabochego(
inj
, tab); menu_info(); break
; case
2: ust_oplatu(
inj
, tab); system(
"cls"
); vibor_Rabochego(
inj
, tab); menu_info(); break
; case
3: kuda = vibor_podrazd(
inj
); perevod(
inj
, tab, kuda); system(
"cls"
); vibor_Rabochego(
inj
, tab); menu_info(); break
; case
4: izm_doljnost(
inj
, tab); system(
"cls"
); vibor_Rabochego(
inj
, tab); menu_info(); break
; case
5: nachZp(
inj
, tab); system(
"cls"
); vibor_Rabochego(
inj
, tab); menu_info(); break
; case
6: uvoln(
inj
, tab); menu_osn(); return
; case
9: menu_osn(); return
;
}
}
} int main()
{
SetConsoleCP(1251);
// установка кодовой страницы win-cp 1251 в поток ввода
SetConsoleOutputCP(1251);
// установка кодовой страницы win-cp 1251 в поток вывода injener inj(
"пётр"
, 65,
"нач_произ"
); inj.dob_pdrazd(
"игорь"
, 56,
"мех участок"
,
"мастер"
); inj.dob_rab(0,
"вася"
, 33,
"токарь"
); inj.dob_rab(0,
"игорян"
, 35,
"фрезеровщик"
); inj.dob_rab(0,
"никифор"
, 53,
"пильщик"
); inj.dob_pdrazd(
"понтилей"
, 60,
"склад"
,
"старший кладовщик"
); inj.dob_rab(1,
"костик"
, 44,
"кладовщик"
); int vibor; menu_osn(); while
(
true
)
{ cin
>>
vibor; switch
(vibor)
{ case
1: dobavPodrazd(&inj); system(
"cls"
); menu_osn(); break
; case
2: dobavlenie_rabochego(&inj); system(
"cls"
); menu_osn(); break
; case
4: vse(&inj); menu_niz(); break
; case
5: pod_menu_info(&inj); break
; case
8: menu_osn(); break
; case
9: exit(0);
}
}
}
5. Результаты работы.
<<
"введите таб№ рабочего: "
; cin
>>
tab; system(
"cls"
); vibor_Rabochego(
inj
, tab); menu_info(); int kluch; while
(
true
)
{ cin
>>
kluch; switch
(kluch)
{ case
1: ust_kolSmen(
inj
, tab); system(
"cls"
); vibor_Rabochego(
inj
, tab); menu_info(); break
; case
2: ust_oplatu(
inj
, tab); system(
"cls"
); vibor_Rabochego(
inj
, tab); menu_info(); break
; case
3: kuda = vibor_podrazd(
inj
); perevod(
inj
, tab, kuda); system(
"cls"
); vibor_Rabochego(
inj
, tab); menu_info(); break
; case
4: izm_doljnost(
inj
, tab); system(
"cls"
); vibor_Rabochego(
inj
, tab); menu_info(); break
; case
5: nachZp(
inj
, tab); system(
"cls"
); vibor_Rabochego(
inj
, tab); menu_info(); break
; case
6: uvoln(
inj
, tab); menu_osn(); return
; case
9: menu_osn(); return
;
}
}
} int main()
{
SetConsoleCP(1251);
// установка кодовой страницы win-cp 1251 в поток ввода
SetConsoleOutputCP(1251);
// установка кодовой страницы win-cp 1251 в поток вывода injener inj(
"пётр"
, 65,
"нач_произ"
); inj.dob_pdrazd(
"игорь"
, 56,
"мех участок"
,
"мастер"
); inj.dob_rab(0,
"вася"
, 33,
"токарь"
); inj.dob_rab(0,
"игорян"
, 35,
"фрезеровщик"
); inj.dob_rab(0,
"никифор"
, 53,
"пильщик"
); inj.dob_pdrazd(
"понтилей"
, 60,
"склад"
,
"старший кладовщик"
); inj.dob_rab(1,
"костик"
, 44,
"кладовщик"
); int vibor; menu_osn(); while
(
true
)
{ cin
>>
vibor; switch
(vibor)
{ case
1: dobavPodrazd(&inj); system(
"cls"
); menu_osn(); break
; case
2: dobavlenie_rabochego(&inj); system(
"cls"
); menu_osn(); break
; case
4: vse(&inj); menu_niz(); break
; case
5: pod_menu_info(&inj); break
; case
8: menu_osn(); break
; case
9: exit(0);
}
}
}
5. Результаты работы.