Упражнение: "Семейное древо"

Выполним небольшое упражнение для закрепления прочитанного ранее материала.

Задача:
Разработать программу, которая позволяет выводить на экран информацию о человеке и его родителях (мамы, папы, бабушки, дедушки).
Информация о родственниках должна быть заранее заложена в программу.
Если родственника нет, то выводить "Информация отсутсвует".

Информация о родственниках:

  • Дедушка по маминой линии: Семенов Евгений Петрович(76 лет)
  • Бабушка по маминой линии: Семенова Полина Алексеевна(75 лет)
  • Дедушка по папиной линии: Цветков Константин Михайлович(67 лет)
  • Бабушка по маминой линии: Цветкова Анна Яковлевна(65 лет)
  • Папа: Семенов Антон Евгеньевич (40 лет)
  • Мама: Семенова Юлия Константиновна (38 лет)
  • Сын: Семенов Андрей Антонович (14 лет)

Информация о родственниках должна выводиться текстом в таком виде:
Имя: Иван
Отчество: Иванович
Фамилия: Иванов
Возраст: 44
Мама: Иванова Анастасия
Бабушка по маминой линии: Петрова Антонина
Дедушка по маминой линии: Петров Алексей
Папа: Информация отсутствует

Решение:

Теория:

Для решения задачи, нам необходимо подумать о том, какой/какие классы нам нужны и какие свойства и методы будут у объектов.
Очевидно, что нам понадобятся такие поля как:
String name;
String secondname;
String lastname;
String age;
Кроме этих полей, нам потребуются поля для хранения информации о родителях. Тут возникает вопрос, а как?
- Какой тип данных должен быть у родителей?
- Каких родителей нам нужно сохранять? (Маму и Папу) или (Маму и Папу, Бабушек и Дедушек)
Здесь важно понимать, что в качестве поля объекта мы можем использовать не только примитивы типа int, long и т.п., но и объекты.

Это значит, что если человек описан классом Person, то его родители так же должны быть Person. Получается:
Person mother;
Person father;
Этого будет вполне достаточно. Обратившись к полям mother или father мы сможем получить информацию о бабушках и дедушках.

Пишем код:

В файле Person.java

class Person { // Абстрактный класс описывающий животного private String name; // Имя private String secondname; // Отчество private String lastname; // Фамилия private int age; // Возраст private Person mother; // Мама private Person father; // Папа // Конструктор для указания всех параметров public Person(String name, String secondname, String lastname, int age, Person mother, Person father) { this.name = name; this.secondname = secondname; this.lastname = lastname; this.age = age; this.mother = mother; this.father = father; } // Конструктор для указания параметров без мамы и папы // Он нужен, так как у бабушек и дедушек может не быть информации о маме и папе public Person(String name, String secondname, String lastname, int age) { this.name = name; this.secondname = secondname; this.lastname = lastname; this.age = age; } // Перечисляем геттеры public String getName() { return name; } public String getSecondname() { return secondname; } public String getLastname() { return lastname; } public int getAge() { return age; } public Person getMother() { return mother; } public Person getFather() { return father; } // Метод для вывода на экран информации о человеке public void printPersonInfo(){ String noInfo = "Информация отсутствует"; String info = "Имя: "+this.name+ "\nОтчество: "+this.secondname+ "\nФамилия: "+this.lastname+ "\nВозраст: "+this.age; // Проверяем наличие мамы if (this.mother != null){ info += "\nМама: "+this.mother.lastname+" "+this.mother.name; // Проверяем наличие дедушки по маминой линии if (this.mother.father != null){ info += "\nДедушка по маминой линии: "+this.mother.father.lastname+" "+this.father.mother.name; }else info += "\nДедушка по маминой линии: "+noInfo; // Проверяем наличие бабушки по маминой линии if (this.mother.mother != null){ info += "\nБабушка по маминой линии: "+this.mother.mother.lastname+" "+this.mother.mother.name; }else info += "\nБабушка по маминой линии: "+noInfo; }else info += "\nМама: "+noInfo; // Проверяем наличие папы if (this.father != null){ info += "\nПапа: "+this.father.lastname+" "+this.father.name; // Проверяем наличие дедушки по папиной линии if (this.father.father != null){ info += "\nДедушка по папиной линии: "+this.father.father.lastname+ " "+this.father.father.name; }else info += "\nДедушка по папиной линии: "+noInfo; // Проверяем наличие бабушки по папиной линии if (this.father.father != null){ info += "\nБабушка по папиной линии: "+this.father.father.lastname+" "+this.father.father.name; }else info += "\nБабушка по папиной линии: "+noInfo; }else info += "\nПапа: "+noInfo; System.out.println(info); } }

Таким образом у нас получился класс Person, с помощью которого, мы можем получить информацию о человеке вызвав метод printPerosnInfo()

В файле Main.java

public class Main { public static void main(String[] args) { // Создаём объекты Person person1 = new Person("Евгений", "Петрович", "Семенов", 76); Person person2 = new Person("Полина", "Алексеевна", "Семенова", 75); Person person3 = new Person("Константин", "Константин", "Цветков", 67); Person person4 = new Person("Анна", "Яковлевна", "Цветкова", 65); Person person5 = new Person("Антон", "Евгеньевич", "Семенов", 40, person2, person1); Person person6 = new Person("Юлия", "Константиновна", "Семенова", 38, person4, person3); Person person7 = new Person("Андрей", "Антонович", "Семенов", 14, person6, person5); // Проверяем результат: person7.printPersonInfo(); System.out.println("-------------"); person6.printPersonInfo(); System.out.println("-------------"); person1.printPersonInfo(); } }

Результат:

Имя: Андрей
Отчество: Антонович
Фамилия: Семенов
Возраст: 14
Мама: Семенова Юлия
Дедушка по маминой линии: Цветков Полина
Бабушка по маминой линии: Цветкова Анна
Папа: Семенов Антон
Дедушка по папиной линии: Семенов Евгений
Бабушка по папиной линии: Семенов Евгений
-------------
Имя: Юлия
Отчество: Константиновна
Фамилия: Семенова
Возраст: 38
Мама: Цветкова Анна
Дедушка по маминой линии: Информация отсутствует
Бабушка по маминой линии: Информация отсутствует
Папа: Цветков Константин
Дедушка по папиной линии: Информация отсутствует
Бабушка по папиной линии: Информация отсутствует
-------------
Имя: Евгений
Отчество: Петрович
Фамилия: Семенов
Возраст: 76
Мама: Информация отсутствует
Папа: Информация отсутствует
Задача успешно решена!

Как видно из примера, ничего сложно тут нет, в решении использовались if-else, конкатенация и объектно-ориентированное программирование!

Найти такие задачки для практики, вы можете в сборнике заданий.


Комментарии

Добавить комментарий

Чтобы оставить комменатрий необходимо Авторизоваться