diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..0cbf9cd
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ae3c172
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/.project b/.project
new file mode 100644
index 0000000..a153cdf
--- /dev/null
+++ b/.project
@@ -0,0 +1,17 @@
+
+
+ FamilyTree
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/familyTree.txt b/familyTree.txt
new file mode 100644
index 0000000..5f04365
Binary files /dev/null and b/familyTree.txt differ
diff --git a/src/ru/GeekBrains/Voronyuk00/Family/App.java b/src/ru/GeekBrains/Voronyuk00/Family/App.java
new file mode 100644
index 0000000..a2cccb0
--- /dev/null
+++ b/src/ru/GeekBrains/Voronyuk00/Family/App.java
@@ -0,0 +1,73 @@
+package ru.GeekBrains.Voronyuk00.Family;
+
+import java.io.IOException;
+
+import ru.GeekBrains.Voronyuk00.Family.mvp.ConsoleUI;
+import ru.GeekBrains.Voronyuk00.Family.mvp.View;
+
+public class App {
+
+ public static void main(String[] args) throws IOException, ClassNotFoundException {
+ // TODO Auto-generated method stub
+ Human person1 = new Human("Анна", "Воронюк",1971,7,29,Gender.female);
+ Human person2 = new Human("Евгений","Воронюк",1967,5,9,Gender.male);
+ Human person3 = new Human("Алексей","Воронюк",2000,4,12,Gender.male);
+ Human person4 = new Human("Марина", "Воронюк",2000,10,5,Gender.female);
+ Human person5 = new Human("Галина","Агафонова", 1940,8,14,2017,9,11,Gender.female);
+
+
+ // Создание семейного дерева
+ FamilyTree familyList = new FamilyTree<>();
+ familyList.addElement(person1);
+ familyList.addElement(person2);
+ familyList.addElement(person3);
+ familyList.addElement(person4);
+ familyList.addElement(person5);
+
+
+ person1.addChild(person3);
+ person1.addChild(person4);
+ person2.addChild(person3);
+ person2.addChild(person4);
+
+ person3.addFather(person1);
+ person3.addMother(person2);
+ person4.addFather(person1);
+ person4.addMother(person2);
+ person1.addMother(person5);
+
+// System.out.println(person5 + " Возраст " + person5.getAge());
+
+ person5.addChild(person1);
+ person5.showChildren();
+
+// System.out.println(familyList.searchPerson("Алексей","Воронюк"));
+// System.out.println(familyList.searchPerson("Иван","Высоцкий"));
+// System.out.println(familyList.getById(1));
+ Writable fileHandler = new FileHandler();
+ fileHandler.saveInFile(familyList);
+ System.out.println(familyList);
+
+ System.out.println("---------------------");
+
+// FamilyTree familyList2 = (FamilyTree) fileHandler.loadFromFile();
+// System.out.println(familyList2);
+
+ // Урок 3 !!!!!!!!!!!
+// familyList.sortByName();
+// System.out.println(familyList);
+//
+// System.out.println("---------------------");
+//
+// familyList.sortByBirthDate();
+// System.out.println(familyList);
+
+ // Урок 5 !!!!!!!!!!!!111111111111111111
+
+ View view = new ConsoleUI();
+ view.start();
+
+ }
+
+
+}
diff --git a/src/ru/GeekBrains/Voronyuk00/Family/ElementComparatorByBirthDate.java b/src/ru/GeekBrains/Voronyuk00/Family/ElementComparatorByBirthDate.java
new file mode 100644
index 0000000..27459d2
--- /dev/null
+++ b/src/ru/GeekBrains/Voronyuk00/Family/ElementComparatorByBirthDate.java
@@ -0,0 +1,13 @@
+package ru.GeekBrains.Voronyuk00.Family;
+
+import java.util.Comparator;
+
+public class ElementComparatorByBirthDate> implements Comparator{
+
+ @Override
+ public int compare(E o1, E o2) {
+
+ return o1.getdob().compareTo(o2.getdob());
+ }
+
+}
diff --git a/src/ru/GeekBrains/Voronyuk00/Family/ElementComparatorByName.java b/src/ru/GeekBrains/Voronyuk00/Family/ElementComparatorByName.java
new file mode 100644
index 0000000..d3f926b
--- /dev/null
+++ b/src/ru/GeekBrains/Voronyuk00/Family/ElementComparatorByName.java
@@ -0,0 +1,13 @@
+package ru.GeekBrains.Voronyuk00.Family;
+
+import java.util.Comparator;
+
+public class ElementComparatorByName > implements Comparator {
+
+ @Override
+ public int compare(E o1, E o2) {
+ // TODO Auto-generated method stub
+ return o1.getName().compareTo(o2.getName());
+ }
+
+}
diff --git a/src/ru/GeekBrains/Voronyuk00/Family/FamilyItem.java b/src/ru/GeekBrains/Voronyuk00/Family/FamilyItem.java
new file mode 100644
index 0000000..eca10df
--- /dev/null
+++ b/src/ru/GeekBrains/Voronyuk00/Family/FamilyItem.java
@@ -0,0 +1,28 @@
+package ru.GeekBrains.Voronyuk00.Family;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+public interface FamilyItem extends Serializable {
+
+ public String getName();
+ public String getSurname();
+ ////
+ public void addMother(E h);
+ public void addFather(E h);
+ //////
+ public E showMother();
+ public E showFather();
+ /////
+ public LocalDate getdob();
+ ///
+ public String showChildren();
+ ////
+ public void setId(int id);
+ public int getId();
+ public void setSpouse(E h);
+ public E getSpouse();
+
+
+
+}
diff --git a/src/ru/GeekBrains/Voronyuk00/Family/FamilyTree.java b/src/ru/GeekBrains/Voronyuk00/Family/FamilyTree.java
new file mode 100644
index 0000000..1f28d25
--- /dev/null
+++ b/src/ru/GeekBrains/Voronyuk00/Family/FamilyTree.java
@@ -0,0 +1,113 @@
+package ru.GeekBrains.Voronyuk00.Family;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+/**
+ * Класс для создания семейного дерева
+ */
+public class FamilyTree> implements Serializable, Iterable{
+
+ private List familyList;
+ private int Id;
+ /**
+ * Конструктор для создания семейного дерева
+ */
+ public FamilyTree(){
+ familyList = new ArrayList<>();
+ }
+
+ public void addElement(T h) {
+ if(!familyList.contains(h)) {
+ familyList.add(h);
+ h.setId(Id++);
+ }
+
+ }
+
+ public void setWidding(int id1, int id2) {
+
+ if(checkId(id1) && checkId(id2)) {
+ if(getById(id1).getSpouse() == null && getById(id2).getSpouse() == null) {
+ getById(id1).setSpouse(getById(id2));
+ getById(id2).setSpouse(getById(id2));
+ }
+ }else {
+ return;
+ }
+ }
+
+ public List showFamilyList(){
+ return familyList;
+ }
+
+ /**
+ *
+ * @param name имя человека
+ * @param surname фамилия человека
+ * @return информация о человеке
+ */
+ public T searchElement(String name, String surname) {
+ for(T h : familyList) {
+ if(h.getName().equalsIgnoreCase(name) && h.getSurname().equalsIgnoreCase(surname)) {
+ return h;
+ }
+ }
+ return null;
+
+ }
+
+ public T getById(int id) {
+ for(T h : familyList) {
+ if(h.getId() == id) {
+ return h;
+ }
+ }
+ return null;
+ }
+
+ private boolean checkId(int id) {
+ return id>= 0 && id < Id;
+ }
+
+ public boolean equals(Object obj) {
+ // TODO Auto-generated method stub
+ if(obj == this) {
+ return true;
+ }
+ if(!((T)obj instanceof T)) {
+ return false;
+ }
+ T human = (T) obj;
+ return human.getId() != Id;
+ }
+
+
+ public String toString() {
+ StringBuilder str = new StringBuilder();
+ for(T h : familyList) {
+ str.append(h);
+ str.append("\n");
+ }
+ return str.toString();
+
+ }
+
+ @Override
+ public Iterator iterator() {
+ // TODO Auto-generated method stub
+ return new FamilyTreeIterator<>(familyList);
+ }
+
+ public void sortByName() {
+ Collections.sort(familyList, new ElementComparatorByName<>());
+ }
+
+ public void sortByBirthDate() {
+ Collections.sort(familyList ,new ElementComparatorByBirthDate<>());
+ }
+
+
+}
diff --git a/src/ru/GeekBrains/Voronyuk00/Family/FamilyTreeIterator.java b/src/ru/GeekBrains/Voronyuk00/Family/FamilyTreeIterator.java
new file mode 100644
index 0000000..8dc7fd7
--- /dev/null
+++ b/src/ru/GeekBrains/Voronyuk00/Family/FamilyTreeIterator.java
@@ -0,0 +1,26 @@
+package ru.GeekBrains.Voronyuk00.Family;
+
+import java.util.Iterator;
+import java.util.List;
+
+public class FamilyTreeIterator implements Iterator{
+
+ private int familyId;
+ private List familyList;
+
+ public FamilyTreeIterator(List familyList) {
+ this.familyList = familyList;
+ }
+ @Override
+ public boolean hasNext() {
+ return familyList.size() > familyId;
+ }
+
+ @Override
+ public E next() {
+ // TODO Auto-generated method stub
+ return familyList.get(familyId++);
+ }
+
+
+}
diff --git a/src/ru/GeekBrains/Voronyuk00/Family/FileHandler.java b/src/ru/GeekBrains/Voronyuk00/Family/FileHandler.java
new file mode 100644
index 0000000..6ffa656
--- /dev/null
+++ b/src/ru/GeekBrains/Voronyuk00/Family/FileHandler.java
@@ -0,0 +1,35 @@
+package ru.GeekBrains.Voronyuk00.Family;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.util.List;
+
+public class FileHandler implements Writable{
+
+ /*
+ * Метод для сохранения в файл;
+ */
+ @Override
+ public void saveInFile(Serializable serializable) throws IOException {
+ ObjectOutputStream objectOutputStream = new ObjectOutputStream(
+ new FileOutputStream("familyTree.txt"));
+ objectOutputStream.writeObject(serializable);
+ objectOutputStream.close();
+ }
+
+ @Override
+ public Object loadFromFile() throws IOException, ClassNotFoundException {
+ ObjectInputStream objectInputStream = new ObjectInputStream(
+ new FileInputStream("familyTree.txt"));
+ Object obj = objectInputStream.readObject();
+ objectInputStream.close();
+ return obj;
+
+ }
+
+}
diff --git a/src/ru/GeekBrains/Voronyuk00/Family/Gender.java b/src/ru/GeekBrains/Voronyuk00/Family/Gender.java
new file mode 100644
index 0000000..f1aafdb
--- /dev/null
+++ b/src/ru/GeekBrains/Voronyuk00/Family/Gender.java
@@ -0,0 +1,5 @@
+package ru.GeekBrains.Voronyuk00.Family;
+
+public enum Gender {
+ male,female;
+}
diff --git a/src/ru/GeekBrains/Voronyuk00/Family/Human.java b/src/ru/GeekBrains/Voronyuk00/Family/Human.java
new file mode 100644
index 0000000..79552ed
--- /dev/null
+++ b/src/ru/GeekBrains/Voronyuk00/Family/Human.java
@@ -0,0 +1,198 @@
+package ru.GeekBrains.Voronyuk00.Family;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.Period;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * Класс для создания человека
+ */
+public class Human implements Serializable,FamilyItem, Comparable{
+
+ private int id;
+ private String name;
+ private String surname;
+ private LocalDate dob, dod;
+ private Gender gender;
+ private List children;
+ private Human father, mother;
+ private Human spouse;
+ /**
+ * Конструктор для создания человека
+ * @param name - имя человека
+ * @param surname - фамилия человека
+ * @param year - год рождения человека
+ * @param month - месяц рождения человека
+ * @param day - день рождения человека
+ * @param gender - пол человека
+ */
+ public Human(String name, String surname, int year, int month,int day,Gender gender){
+ this.name = name;
+ this.surname = surname;
+ this.dob = LocalDate.of(year, month, day);
+ this.gender = gender;
+ children = new ArrayList<>();
+ this.id = -1;
+ }
+ /**
+ * Конструктор для создания человека
+ * @param name - имя человека
+ * @param surname - фамилия человека
+ * @param year - год рождения человека
+ * @param month - месяц рождения человека
+ * @param day - день рождения человека
+ @param year2 - год смерти человека
+ * @param month2 - месяц смерти человека
+ * @param day2 - день смерти человека
+ * @param gender - пол человека
+ */
+ public Human(String name, String surname, int year, int month,int day,int year2, int month2, int day2,Gender gender){
+ this(name,surname, year, month,day,gender);
+ this.dod = LocalDate.of(year2, month2, day2);
+ }
+
+ /**
+ * Метод для получения имени
+ * @return имя
+ */
+ public String getName() {
+ return this.name;
+ }
+ /**
+ * Метод для получения фамилии
+ * @return фамилия
+ */
+ public String getSurname() {
+ return this.surname;
+ }
+
+ /**
+ * Добавление матери человека
+ * @param h - мать человека
+ */
+ public void addMother(Human h) {
+ if(mother == null) {
+ this.mother = h;
+ }
+ }
+ /**
+ * Добавление отца человека
+ * @param h - отец человека
+ */
+ public void addFather(Human h) {
+ if(father == null) {
+ this.father = h;
+ }
+ }
+ /**
+ * Метод для вывода матери человека
+ * @return мать человека
+ */
+ public Human showMother() {
+ return this.mother;
+ }
+ /**
+ * Метод для вывода отца человека
+ * @return отец человека
+ */
+ public Human showFather() {
+ return this.mother;
+ }
+
+ @Override
+ public LocalDate getdob() {
+ return this.dob;
+ }
+ /**
+ * Метод для получения возраста
+ * @return возраст
+ */
+ public int getAge() {
+ if(dod == null) {
+ return Period.between(this.dob, LocalDate.now()).getYears();
+ }
+ else {
+ return Period.between(dob, dod).getYears();
+ }
+ }
+
+ public Gender getGender() {
+ return this.gender;
+ }
+
+ /**
+ * Метод для добавления ребенка
+ * @param child - добавляемый ребёнок
+ */
+ public boolean addChild(Human child) {
+ if(!children.contains(child)) {
+ children.add(child);
+ return true;
+ }
+ return false;
+
+ }
+ /**
+ * Метод для демонстрации детей
+ */
+ public String showChildren() {
+ StringBuilder txt = new StringBuilder();
+ boolean hasChildren = false;
+
+ for(Human h : children) {
+ txt.append(h);
+ txt.append("\n");
+ hasChildren = true;
+ }
+
+ if(hasChildren) {
+ return txt.toString();
+ }
+ else return null ;
+
+ }
+ @Override
+ public String toString() {
+ return "Id: " + this.id +" Имя = " + name + ", фамилия = " + surname + ", дата рождения = " + dob + ", пол = " + gender ;
+
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+ @Override
+ public boolean equals(Object obj) {
+ // TODO Auto-generated method stub
+ if(obj == this) {
+ return true;
+ }
+ if(!(obj instanceof Human)) {
+ return false;
+ }
+ Human human = (Human) obj;
+ return human.getId() == getId();
+ }
+
+ public int getId() {
+ return this.id;
+ }
+
+ public void setSpouse(Human h) {
+ if(spouse == null) {
+ this.spouse = h;
+ }
+ }
+
+ public Human getSpouse() {
+ return this.spouse;
+ }
+ @Override
+ public int compareTo(Human o) {
+ // TODO Auto-generated method stub
+ return this.name.compareTo(o.getName());
+ }
+
+
+
+}
diff --git a/src/ru/GeekBrains/Voronyuk00/Family/Writable.java b/src/ru/GeekBrains/Voronyuk00/Family/Writable.java
new file mode 100644
index 0000000..136d020
--- /dev/null
+++ b/src/ru/GeekBrains/Voronyuk00/Family/Writable.java
@@ -0,0 +1,10 @@
+package ru.GeekBrains.Voronyuk00.Family;
+
+import java.io.IOException;
+import java.io.Serializable;
+
+
+public interface Writable {
+ void saveInFile(Serializable serialazable) throws IOException;
+ Object loadFromFile() throws IOException, ClassNotFoundException;
+}
diff --git a/src/ru/GeekBrains/Voronyuk00/Family/familyTree.txt b/src/ru/GeekBrains/Voronyuk00/Family/familyTree.txt
new file mode 100644
index 0000000..e69de29
diff --git a/src/ru/GeekBrains/Voronyuk00/Family/mvp/Commands/AddPerson.java b/src/ru/GeekBrains/Voronyuk00/Family/mvp/Commands/AddPerson.java
new file mode 100644
index 0000000..bfba420
--- /dev/null
+++ b/src/ru/GeekBrains/Voronyuk00/Family/mvp/Commands/AddPerson.java
@@ -0,0 +1,18 @@
+package ru.GeekBrains.Voronyuk00.Family.mvp.Commands;
+
+import ru.GeekBrains.Voronyuk00.Family.mvp.ConsoleUI;
+
+public class AddPerson extends Commands {
+
+ public AddPerson(ConsoleUI consoleUI) {
+ super("Добавить члена семьи",consoleUI);
+ }
+
+
+ @Override
+ public void execute() {
+ // TODO Auto-generated method stub
+ getConsoleUI().addPerson();
+ }
+
+}
diff --git a/src/ru/GeekBrains/Voronyuk00/Family/mvp/Commands/Commands.java b/src/ru/GeekBrains/Voronyuk00/Family/mvp/Commands/Commands.java
new file mode 100644
index 0000000..6a732b8
--- /dev/null
+++ b/src/ru/GeekBrains/Voronyuk00/Family/mvp/Commands/Commands.java
@@ -0,0 +1,26 @@
+package ru.GeekBrains.Voronyuk00.Family.mvp.Commands;
+
+import ru.GeekBrains.Voronyuk00.Family.mvp.ConsoleUI;
+/*
+ * Класс для создания команд
+ */
+public abstract class Commands {
+
+ private String description;
+ private ConsoleUI consoleUI;
+
+ public Commands(String description, ConsoleUI consoleUI) {
+ this.description = description;
+ this.consoleUI = consoleUI;
+ }
+
+ public String getDescription() {
+ return this.description;
+ }
+
+ ConsoleUI getConsoleUI() {
+ return consoleUI;
+ }
+
+ public abstract void execute();
+}
diff --git a/src/ru/GeekBrains/Voronyuk00/Family/mvp/Commands/Exit.java b/src/ru/GeekBrains/Voronyuk00/Family/mvp/Commands/Exit.java
new file mode 100644
index 0000000..87aab6b
--- /dev/null
+++ b/src/ru/GeekBrains/Voronyuk00/Family/mvp/Commands/Exit.java
@@ -0,0 +1,16 @@
+package ru.GeekBrains.Voronyuk00.Family.mvp.Commands;
+
+import ru.GeekBrains.Voronyuk00.Family.mvp.ConsoleUI;
+
+public class Exit extends Commands{
+
+ public Exit(ConsoleUI consoleUI) {
+ super("Выход из программы", consoleUI);
+ }
+
+ @Override
+ public void execute() {
+ // TODO Auto-generated method stub
+ getConsoleUI().exitProgram();
+ }
+}
diff --git a/src/ru/GeekBrains/Voronyuk00/Family/mvp/Commands/GetFamilyList.java b/src/ru/GeekBrains/Voronyuk00/Family/mvp/Commands/GetFamilyList.java
new file mode 100644
index 0000000..c414eea
--- /dev/null
+++ b/src/ru/GeekBrains/Voronyuk00/Family/mvp/Commands/GetFamilyList.java
@@ -0,0 +1,16 @@
+package ru.GeekBrains.Voronyuk00.Family.mvp.Commands;
+
+import ru.GeekBrains.Voronyuk00.Family.mvp.ConsoleUI;
+
+public class GetFamilyList extends Commands{
+
+ public GetFamilyList(ConsoleUI consoleUI) {
+ super("Вывести список всех членов семьи", consoleUI);
+ }
+
+ @Override
+ public void execute() {
+ getConsoleUI().getFamilyList();
+ }
+
+}
diff --git a/src/ru/GeekBrains/Voronyuk00/Family/mvp/Commands/MainMenu.java b/src/ru/GeekBrains/Voronyuk00/Family/mvp/Commands/MainMenu.java
new file mode 100644
index 0000000..4b2c876
--- /dev/null
+++ b/src/ru/GeekBrains/Voronyuk00/Family/mvp/Commands/MainMenu.java
@@ -0,0 +1,33 @@
+package ru.GeekBrains.Voronyuk00.Family.mvp.Commands;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import ru.GeekBrains.Voronyuk00.Family.mvp.ConsoleUI;
+
+public class MainMenu {
+ List commands;
+
+ public MainMenu(ConsoleUI consoleUI) {
+ commands = new ArrayList<>();
+ commands.add(new AddPerson(consoleUI));
+ commands.add(new GetFamilyList(consoleUI));
+ commands.add(new SortByName(consoleUI));
+ commands.add(new SortByBirthDate(consoleUI));
+ commands.add(new Exit(consoleUI));
+ }
+
+ public String menu() {
+ StringBuilder stringBuilder = new StringBuilder();
+ for(int i = 0;i < commands.size();i++) {
+ stringBuilder.append(i + 1 + ". ");
+ stringBuilder.append(commands.get(i).getDescription());
+ stringBuilder.append("\n");
+ }
+ return stringBuilder.toString();
+ }
+
+ public void execute(int choice) {
+ commands.get(choice-1).execute();
+ }
+}
diff --git a/src/ru/GeekBrains/Voronyuk00/Family/mvp/Commands/SortByBirthDate.java b/src/ru/GeekBrains/Voronyuk00/Family/mvp/Commands/SortByBirthDate.java
new file mode 100644
index 0000000..70ec692
--- /dev/null
+++ b/src/ru/GeekBrains/Voronyuk00/Family/mvp/Commands/SortByBirthDate.java
@@ -0,0 +1,16 @@
+package ru.GeekBrains.Voronyuk00.Family.mvp.Commands;
+
+import ru.GeekBrains.Voronyuk00.Family.mvp.ConsoleUI;
+
+public class SortByBirthDate extends Commands{
+
+ public SortByBirthDate(ConsoleUI consoleUI) {
+ super("Отсортировать по дате рождения", consoleUI);
+ }
+
+ @Override
+ public void execute() {
+ getConsoleUI().sortByBirthDate();
+ }
+
+}
diff --git a/src/ru/GeekBrains/Voronyuk00/Family/mvp/Commands/SortByName.java b/src/ru/GeekBrains/Voronyuk00/Family/mvp/Commands/SortByName.java
new file mode 100644
index 0000000..184d1a4
--- /dev/null
+++ b/src/ru/GeekBrains/Voronyuk00/Family/mvp/Commands/SortByName.java
@@ -0,0 +1,15 @@
+package ru.GeekBrains.Voronyuk00.Family.mvp.Commands;
+
+import ru.GeekBrains.Voronyuk00.Family.mvp.ConsoleUI;
+
+public class SortByName extends Commands {
+
+ public SortByName(ConsoleUI consoleUI) {
+ super("Отсортировать по имени", consoleUI);
+ }
+
+ @Override
+ public void execute() {
+ getConsoleUI().sortByName();
+ }
+}
diff --git a/src/ru/GeekBrains/Voronyuk00/Family/mvp/ConsoleUI.java b/src/ru/GeekBrains/Voronyuk00/Family/mvp/ConsoleUI.java
new file mode 100644
index 0000000..5881d49
--- /dev/null
+++ b/src/ru/GeekBrains/Voronyuk00/Family/mvp/ConsoleUI.java
@@ -0,0 +1,93 @@
+package ru.GeekBrains.Voronyuk00.Family.mvp;
+
+import java.util.Scanner;
+import ru.GeekBrains.Voronyuk00.Family.Gender;
+import ru.GeekBrains.Voronyuk00.Family.mvp.Commands.MainMenu;
+/**
+ * Класс для взаимодействия с пользователем
+ */
+public class ConsoleUI implements View{
+
+ private Presenter presenter;
+ private Scanner scan;
+ private boolean work;
+ private MainMenu mainMenu;
+
+ public ConsoleUI() {
+ this.presenter = new Presenter(this);
+ this.scan = new Scanner(System.in);
+ this.work = true;
+ this.mainMenu = new MainMenu(this);
+ }
+
+ @Override
+ public void start() {
+ System.out.println("Добро пожаловать в программу!!!");
+ while(work) {
+ System.out.print(mainMenu.menu());
+ int choice = Integer.parseInt(scan.nextLine());
+ mainMenu.execute(choice);
+ }
+ }
+
+
+
+ /**
+ * Метод добавления члена семьи
+ */
+ public void addPerson() {
+ // TODO Auto-generated method stub
+ System.out.println("Ввидите имя: ");
+ String name = scan.nextLine();
+ System.out.println("Ввидите фамилию: ");
+ String surname = scan.nextLine();
+ System.out.println("Ввидите дату рождения формата гггг.м.д: ");
+ String dob = scan.nextLine();
+ System.out.println("Ввидите дату смерти формата гггг.м.д(если нет нажмите Enter): ");
+ String dod = scan.nextLine();
+ System.out.println("Введите пол: female, male");
+ String genderStr = scan.nextLine().toLowerCase();
+
+ if(dod != null) {
+ if(genderStr.equals("male")) {
+ presenter.addPerson1(name, surname, dob, dod, Gender.male);
+ }
+ else if(genderStr.equals("female")) {
+ presenter.addPerson1(name, surname, dob, dod, Gender.female);
+ }
+ else {
+ System.out.println("Неправильный пол");
+ }
+ }
+ else {
+ presenter.addPerson2(name, surname, dob, Gender.male);
+ }
+
+ }
+ /*
+ * Метод для вывода списка студентов
+ */
+ public void getFamilyList() {
+ // TODO Auto-generated method stub
+ presenter.getFamilyList();
+ }
+
+ public void sortByName() {
+ presenter.sortByName();
+ }
+
+ public void sortByBirthDate() {
+ presenter.sortByBirthDate();
+ }
+
+ @Override
public void printAnswer(String str) {
+ System.out.println(str);
+ }
+
+ public void exitProgram() {
+ // TODO Auto-generated method stub
+ work = false;
+ System.out.println("Программа завершена");
+ }
+
+}
diff --git a/src/ru/GeekBrains/Voronyuk00/Family/mvp/Presenter.java b/src/ru/GeekBrains/Voronyuk00/Family/mvp/Presenter.java
new file mode 100644
index 0000000..ba9ab88
--- /dev/null
+++ b/src/ru/GeekBrains/Voronyuk00/Family/mvp/Presenter.java
@@ -0,0 +1,58 @@
+package ru.GeekBrains.Voronyuk00.Family.mvp;
+import ru.GeekBrains.Voronyuk00.Family.Gender;
+
+public class Presenter {
+
+ private View view;
+ private Service service;
+
+ public Presenter(View view) {
+ this.view = view;
+ this.service = new Service();
+ }
+
+ public void addPerson1(String name, String surname, String dob, String dod,Gender gender) {
+ // TODO Auto-generated method stub
+ String[] dobElements = dob.split("\\.");
+ String[] dodElements = dob.split("\\.");
+
+ int year1 = Integer.parseInt(dobElements[0]);
+ int month1 = Integer.parseInt(dobElements[1]);
+ int day1 = Integer.parseInt(dobElements[2]);
+ int year2 = Integer.parseInt(dodElements[0]);
+ int month2 = Integer.parseInt(dodElements[1]);
+ int day2 = Integer.parseInt(dodElements[2]);
+
+ service.addPerson1(name, surname, year1, month1,day1,year2,month2,day2,gender);
+ getFamilyList();
+ }
+
+ public void addPerson2(String name, String surname, String dob,Gender gender) {
+ // TODO Auto-generated method stub
+ String[] dobElements = dob.split("\\.");
+
+ int year1 = Integer.parseInt(dobElements[0]);
+ int month1 = Integer.parseInt(dobElements[1]);
+ int day1 = Integer.parseInt(dobElements[2]);
+
+ service.addPerson2(name, surname, year1, month1,day1,gender);
+ getFamilyList();
+ }
+
+ public void getFamilyList() {
+
+ String familyList = service.getFamilyList();
+ view.printAnswer(familyList);
+
+ }
+
+ public void sortByName() {
+ service.sortByName();
+ getFamilyList();
+ }
+
+ public void sortByBirthDate() {
+ service.sortByBirthDate();
+ getFamilyList();
+ }
+}
diff --git a/src/ru/GeekBrains/Voronyuk00/Family/mvp/Service.java b/src/ru/GeekBrains/Voronyuk00/Family/mvp/Service.java
new file mode 100644
index 0000000..ca835b0
--- /dev/null
+++ b/src/ru/GeekBrains/Voronyuk00/Family/mvp/Service.java
@@ -0,0 +1,47 @@
+package ru.GeekBrains.Voronyuk00.Family.mvp;
+import ru.GeekBrains.Voronyuk00.Family.Human;
+
+import java.time.LocalDate;
+
+import ru.GeekBrains.Voronyuk00.Family.FamilyTree;
+import ru.GeekBrains.Voronyuk00.Family.Gender;
+
+public class Service {
+
+ private FamilyTree familyList;
+
+ public Service() {
+ familyList = new FamilyTree<>();
+ }
+
+ public void addPerson1(String name, String surname, int year, int month,int day,int year2, int month2, int day2,Gender gender) {
+ Human human = new Human(name, surname, year, month, day,year2, month2,day2, gender);
+ familyList.addElement(human);
+ }
+
+ public void addPerson2(String name, String surname, int year, int month,int day,Gender gender) {
+ Human human = new Human(name, surname, year, month, day, gender);
+ familyList.addElement(human);
+ }
+
+ public String getFamilyList() {
+ return familyList.toString();
+ }
+
+ public void sortByName() {
+ familyList.sortByName();
+ }
+
+ public void sortByBirthDate() {
+ familyList.sortByBirthDate();
+ }
+
+ public boolean addMother(int child,int mother) {
+ if(familyList.showFamilyList().get(child).showMother() == null) {
+ familyList.showFamilyList().get(child).addMother(familyList.showFamilyList().get(mother));
+ return true;
+ }
+ return false;
+ }
+
+}
diff --git a/src/ru/GeekBrains/Voronyuk00/Family/mvp/View.java b/src/ru/GeekBrains/Voronyuk00/Family/mvp/View.java
new file mode 100644
index 0000000..9a49fac
--- /dev/null
+++ b/src/ru/GeekBrains/Voronyuk00/Family/mvp/View.java
@@ -0,0 +1,6 @@
+package ru.GeekBrains.Voronyuk00.Family.mvp;
+
+public interface View {
+ void start();
+ void printAnswer(String str);
+}
diff --git a/src/ru/gb/vending_machine/Main.java b/src/ru/gb/vending_machine/Main.java
deleted file mode 100644
index abfd7ac..0000000
--- a/src/ru/gb/vending_machine/Main.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package ru.gb.vending_machine;
-
-import ru.gb.vending_machine.products.Bottle;
-import ru.gb.vending_machine.products.Product;
-import ru.gb.vending_machine.vending.VendingMachine;
-
-public class Main {
- public static void main(String[] args) {
- VendingMachine vendingMachine = new VendingMachine(123);
-
- Product product1 = new Bottle("coca-cola", 150, 1.5);
- Product product2 = new Product("milko", 100);
-
- vendingMachine.addProduct(product1);
- vendingMachine.addProduct(product2);
-
- System.out.println(vendingMachine.getProductsInfo());
- }
-}
diff --git a/src/ru/gb/vending_machine/products/Bottle.java b/src/ru/gb/vending_machine/products/Bottle.java
deleted file mode 100644
index 6c657de..0000000
--- a/src/ru/gb/vending_machine/products/Bottle.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package ru.gb.vending_machine.products;
-
-public class Bottle extends Product {
- private double volume;
-
- public Bottle(String name, double price, double volume) {
- super(name, price);
- this.volume = volume;
- }
-
- public double getVolume() {
- return volume;
- }
-
- @Override
- public String toString() {
- return super.toString() + ", volume: " + volume + "л.";
- }
-}
diff --git a/src/ru/gb/vending_machine/products/Product.java b/src/ru/gb/vending_machine/products/Product.java
deleted file mode 100644
index 2fbd604..0000000
--- a/src/ru/gb/vending_machine/products/Product.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package ru.gb.vending_machine.products;
-
-public class Product {
- private int id;
- private String name;
- private double price;
-
- public Product(String name, double price) {
- this.name = name;
- this.price = price;
- }
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public double getPrice() {
- return price;
- }
-
- public void setPrice(double price) {
- this.price = price;
- }
-
- @Override
- public String toString() {
- return "id: " + id + ", name: " + name + ", price: " + price + "р.";
- }
-}
diff --git a/src/ru/gb/vending_machine/vending/VendingMachine.java b/src/ru/gb/vending_machine/vending/VendingMachine.java
deleted file mode 100644
index 01a63ca..0000000
--- a/src/ru/gb/vending_machine/vending/VendingMachine.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package ru.gb.vending_machine.vending;
-
-import ru.gb.vending_machine.products.Product;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class VendingMachine {
- private int id;
- private int productId;
- private List productList;
-
- public VendingMachine(int id) {
- this.id = id;
- productList = new ArrayList<>();
- }
-
- public void addProduct(Product product){
- product.setId(productId++);
- productList.add(product);
- }
-
- public String getProductsInfo(){
- StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.append("Список продуктов:\n");
- for (Product product: productList){
- stringBuilder.append(product);
- stringBuilder.append("\n");
- }
- return stringBuilder.toString();
- }
-}