//включаем необходимые заголовочные файлы
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include "main.h"

//конструктор объекта Person
Person::Person(int ID, char FIO[30], int SEX, float AGE)
{
//инициализируем данные
id = ID;
strcpy(fio, FIO);
sex = SEX;
age = AGE;
}

//конструктор объекта Person по умолчанию
Person::Person()
{
//инициализируем данные
id = 0;
strcpy(fio, "");
sex = 0;
age = 0;
}

//функция вывода на экран данных объекта Person
void Person::Print()
{
std::cout << "ID: " << id << std::endl;
std::cout << "FIO: " << fio << std::endl;
std::cout << "Sex: " << sex << std::endl;
std::cout << "Age: " << age << std::endl;
}

//функция ввода данных с клавиатуры в объект Person
void Person::Input()
{
std::cout << "ID -> ";
std::cin >> id;
std::cout << "FIO -> ";
std::cin >> fio;
std::cout << "Sex -> ";
std::cin >> sex;
std::cout << "Age -> ";
std::cin >> age;
}

//конструктор объекта SchoolPerson
SchoolPerson::SchoolPerson(int ID, char FIO[30], int SEX, float AGE, int GRADE, char PARENT_FIO[30], char PHONE[10]) : 
Person(ID, FIO, SEX, AGE)
{
grade = GRADE;
strcpy(parent_fio, PARENT_FIO);
strcpy(phone, PHONE);
}

//функция вывода на экран данных объекта SchoolPerson
void SchoolPerson::Print()
{
Person::Print(); //вызываем функцию объекта Person
std::cout << "Grade: " << grade << std::endl;
std::cout << "Parent FIO: " << parent_fio << std::endl;
std::cout << "Phone: " << phone << std::endl;
}

//главная функция программы
int main()
{
char name[] = "ivanov a.b.";
class Person pers(1, name, 0, 10); //создаём объект класса Person
pers.Print(); //выводим данные объекта на экран
class Person *pers1;
char name1[] = "petroff p.p.";
pers1 = new Person(2, name1, 0, 11); //создаём динамический объект класса Person
pers1->Print(); //выводим данные объекта на экран
delete pers1; //удаляем динамический объект из памяти
class Person pers2; //создаём объект класса Person
pers2.Input(); //вызываем функцию ввода данных в объект
pers2.Print(); //выводим данные объекта на экран
//определяем имя и телефон родителя
char name2[] = "ivanov b.v.";
char phone[] = "12-34-56";
class SchoolPerson pers3(1, name, 0, 10, 3, name2, phone); //создаём объект класса SchoolPerson
//выводим данные объекта pers3 через функцию базового класса Person
std::cout << std::endl << "like a person:" << std::endl;
pers3.Person::Print();
//выводим данные объекта pers3 через функцию производного класса SchoolPerson
std::cout << std::endl << "like a schoolperson:" << std::endl;
pers3.Print();
//вызываем функцию увеличения класса и возраста ребёнка и выводим данные объекта на экран
pers3.NextGrade();
std::cout << std::endl << "next grade:" << std::endl;
pers3.Print();
return(0);
}