Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add basic family tree #1

Open
wants to merge 10 commits into
base: master
Choose a base branch
from
55 changes: 55 additions & 0 deletions src/ru/gb/family_tree/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package ru.gb.family_tree;

import ru.gb.family_tree.handler.FileHandler;
import ru.gb.family_tree.human.Gender;
import ru.gb.family_tree.human.Human;
import ru.gb.family_tree.tree.FamilyTree;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;

public class Main {
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
FamilyTree familyTree = new FamilyTree();
Human parent1 = familyTree.addHuman(new Human("Sergei", "Ivanov", LocalDate.parse("20.11.1961", formatter), Gender.Male));
Human parent2 = familyTree.addHuman(new Human("Natalia", "Ivanova", LocalDate.parse("09.03.1961", formatter), Gender.Female));

familyTree.addSpouse(parent1.getId(), parent2.getId());

Human human = familyTree.addHuman(new Human("Alex", "Ivanov", LocalDate.parse("12.06.1986", formatter), Gender.Male));

familyTree.addChildren(parent1.getId(), Arrays.asList(human));
familyTree.addChildren(parent2.getId(), Arrays.asList(human));
familyTree.addParents(human.getId(), Arrays.asList(parent1, parent2));

Human wife = familyTree.addHuman(new Human("Sveta", "Petrova", LocalDate.parse("07.05.1990", formatter), Gender.Female));

familyTree.addSpouse(human.getId(), wife.getId());

Human child1 = familyTree.addHuman(new Human("Olga", "Ivanova", LocalDate.parse("14.09.2021", formatter), Gender.Female));
Human child2 = familyTree.addHuman(new Human("Petr", "Ivanov", LocalDate.parse("22.12.2019", formatter), Gender.Male));

familyTree.addChildren(human.getId(), Arrays.asList(child1, child2));
familyTree.addChildren(wife.getId(), Arrays.asList(child1, child2));
familyTree.addParents(child1.getId(), Arrays.asList(human, wife));
familyTree.addParents(child2.getId(), Arrays.asList(human, wife));

System.out.println("Такое получилось дерево: ");
familyTree.getHumanList().stream().forEach(System.out::println);

FileHandler fileHandler = new FileHandler("data.txt");
fileHandler.save(familyTree);

System.out.println("Проверка сохранения:");
FamilyTree treeAfterSave = fileHandler.read();
treeAfterSave.forEach(System.out::println);
System.out.println("Проверка сортировки по дням рождения:");
treeAfterSave.getHumanWithSortByBirthday().forEach(System.out::println);
System.out.println("Проверка сортировки по количеству детей:");
treeAfterSave.getHumanWithSortByChildren().forEach(System.out::println);
System.out.println("Проверка сортировки по имени:");
treeAfterSave.getHumanWithSortByName().forEach(System.out::println);
}
}
35 changes: 35 additions & 0 deletions src/ru/gb/family_tree/handler/FileHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package ru.gb.family_tree.handler;

import ru.gb.family_tree.tree.FamilyTree;

import java.io.*;

public class FileHandler implements Writable {
private String path;

public FileHandler(String path) {
this.path = path;
}

@Override
public void save(FamilyTree familyTree) {
try (ObjectOutputStream objectOutputStream = new ObjectOutputStream(
new FileOutputStream(path, false))) {
objectOutputStream.writeObject(familyTree);
} catch (IOException e) {
System.out.println(e.getMessage());
}
}

@Override
public FamilyTree read() {
FamilyTree familyTree = null;
try (ObjectInputStream objectInputStream = new ObjectInputStream(
new FileInputStream(path))) {
familyTree = (FamilyTree) objectInputStream.readObject();
} catch (Exception e) {
System.out.println(e.getMessage());
}
return familyTree;
}
}
10 changes: 10 additions & 0 deletions src/ru/gb/family_tree/handler/Writable.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package ru.gb.family_tree.handler;

import ru.gb.family_tree.tree.FamilyTree;

import java.util.List;

public interface Writable {
void save(FamilyTree familyTree);
FamilyTree read();
}
5 changes: 5 additions & 0 deletions src/ru/gb/family_tree/human/Gender.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package ru.gb.family_tree.human;

public enum Gender {
Male, Female
}
122 changes: 122 additions & 0 deletions src/ru/gb/family_tree/human/Human.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
package ru.gb.family_tree.human;

import java.io.Serializable;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

public class Human implements Serializable {
private long id;
private String name;
private String surname;
private LocalDate birthday;
private Gender gender;
private Human spouse;
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Просто улыбки ради пишу, не придирка) странно, что для родителей вы создали список, имея в виду, что неизвестно сколько их будет, но вот для супругов... а как же культуры, где разрешены гаремы?)

private List<Human> parents;
private List<Human> children;

public Human(String name, String surname, LocalDate birthday, Gender gender) {
this.name = name;
this.surname = surname;
this.birthday = birthday;
this.gender = gender;
this.children = new ArrayList<>();
this.parents = new ArrayList<>();
}

public long getId() {
return id;
}

public void setId(long id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getSurname() {
return surname;
}

public void setSurname(String surname) {
this.surname = surname;
}

public Gender getGender() {
return gender;
}

public void setGender(Gender gender) {
this.gender = gender;
}

public List<Human> getParents() {
return parents;
}

public void setParents(List<Human> parents) {
this.parents = parents;
}

public void setChildren(List<Human> children) {
this.children = children;
}

public List<Human> getChildren() {
return children;
}

public Human getSpouse() {
return spouse;
}

public void setSpouse(Human spouse) {
this.spouse = spouse;
}

public LocalDate getBirthday() {
return birthday;
}

@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("Член семьи " +
"№ = " + id +
", Имя -> " + name +
", Фамилия -> " + surname +
", дата рождения -> " + birthday);
if (spouse != null) {
sb.append(", супруг(-а) -> " + spouse.getName() + " " + spouse.getSurname());
} else {
sb.append(", не в браке");
}
if (parents.size() != 0) {
sb.append(", родители ->");
parents.stream().forEach(h -> sb.append(" член семьи № " + h.getId()));
} else {
sb.append(", нет данных о родителях");
}
if (children.size() != 0) {
sb.append(", дети ->");
children.stream().forEach(h -> sb.append(" член семьи № " + h.getId()));
} else {
sb.append(", нет данных о детях");
}
return sb.toString();
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Human)) return false;
Human human = (Human) o;
return getId() == human.getId();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package ru.gb.family_tree.human.comparator;

import ru.gb.family_tree.human.Human;

import java.util.Comparator;

public class HumanComparatorByBirthday implements Comparator<Human> {

@Override
public int compare(Human o1, Human o2) {
if (o1.getBirthday().isAfter(o2.getBirthday())) {
return 1;
} else if (o1.getBirthday().isBefore(o2.getBirthday())) {
return -1;
} else {
return 0;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package ru.gb.family_tree.human.comparator;

import ru.gb.family_tree.human.Human;

import java.util.Comparator;

public class HumanComparatorByChildren implements Comparator<Human> {

@Override
public int compare(Human o1, Human o2) {
return Integer.compare(o2.getChildren().size(), o1.getChildren().size());
}
}
12 changes: 12 additions & 0 deletions src/ru/gb/family_tree/human/comparator/HumanComparatorByName.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package ru.gb.family_tree.human.comparator;

import ru.gb.family_tree.human.Human;

import java.util.Comparator;

public class HumanComparatorByName implements Comparator<Human> {
@Override
public int compare(Human o1, Human o2) {
return o1.getName().compareTo(o2.getName());
}
}
Loading