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

Task1_HW_KozlovNE #1193

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions homeWork2.iml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
2 changes: 0 additions & 2 deletions src/Test.java

This file was deleted.

46 changes: 46 additions & 0 deletions src/ru/gb/FamilyTree/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package ru.gb.FamilyTree;

import ru.gb.FamilyTree.family_tree.FamilyTree;
import ru.gb.FamilyTree.person.Gender;
import ru.gb.FamilyTree.person.Person;

import java.time.LocalDate;

public class Main {

public static void main(String[] args) {
FamilyTree ft = new FamilyTree();

Person ivan = new Person("Иванов", "Иван", Gender.Male, LocalDate.parse("1989-10-31"));
Person petr = new Person("Иванов", "Петр", Gender.Male, LocalDate.parse("1962-05-15"));
Person anna = new Person("Смирнова", "Анна", Gender.Female, LocalDate.parse("1964-06-28"));
Person ekaterina = new Person("Иванова", "Екатерина", Gender.Female, LocalDate.parse("1991-11-02"), petr, anna);

ft.addPerson(petr);
ft.addPerson(anna);
ft.setAddSpouses(petr, anna);

ft.addPerson(ivan);
ivan.setFather(petr);
ivan.setMother(anna);

petr.addChild(ivan);
anna.addChild(ivan);

ft.addPerson(ekaterina);

Person sveta = new Person("Волкова", "Светлана", Gender.Female, LocalDate.parse("1990-02-21"));

ft.addPerson(sveta);
ft.setAddSpouses(ivan, sveta);

Person gleb = new Person("Иванов", "Глеб", Gender.Male, LocalDate.parse("2017-11-01"), ivan,sveta);

ft.addPerson(gleb);


System.out.println(ft);

}

}
196 changes: 196 additions & 0 deletions src/ru/gb/FamilyTree/family_tree/FamilyTree.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
package ru.gb.FamilyTree.family_tree;

import ru.gb.FamilyTree.person.Gender;
import ru.gb.FamilyTree.person.Person;

import java.util.ArrayList;
import java.util.List;

public class FamilyTree {
// private String nameTree;
private long personId;
private final List<Person> familyMembersList;

public FamilyTree() {
familyMembersList = new ArrayList<>();
}

public FamilyTree(List<Person> familyMembersList) {
this.familyMembersList = familyMembersList;
}

public boolean addPerson(Person person) {
if (person == null) {
return false;
}
if (!familyMembersList.contains(person)) {
familyMembersList.add(person);
person.setId(personId++);

addToParents(person);
addToChildren(person);
return true;
}
return false;
}

private void addToParents(Person person) {
for (Person parent: person.getParents()) {
parent.addChild(person);
}
}

private void addToChildren(Person person) {
for (Person child: person.getChildren()) {
if (person.getGender().equals(Gender.Male.toString())) {
child.setFather(person);
} else if (person.getGender().equals(Gender.Female.toString())) {
child.setMother(person);
}
}
}

public List<Person> getSiblings(long personId) {
Person person = getById(personId);
if (person == null) {
return null;
}
List<Person> siblings = new ArrayList<>();
for (Person parent: person.getParents()) {
for (Person child: parent.getChildren()) {
if (!child.equals(person)) {
siblings.add(child);
}
}
}
return siblings;
}

public Person getById(long personId) {
for (Person person: familyMembersList) {
if (person.getId() == personId) {
return person;
}
}
return null;
}

public List<Person> getByName(String name) {
List<Person> persons = new ArrayList<>();
for (Person person: familyMembersList) {
if (person.getName().equals(name)) {
persons.add(person);
}
}
return persons;
}

public boolean setAddSpouses(long personId1, long personId2) {
if (checkId(personId1) && checkId(personId2)) {
Person person1 = getById(personId1);
Person person2 = getById(personId2);
setAddSpouses(person1, person2);
return true;
}
return false;
}

public boolean setAddSpouses(Person person1, Person person2) {
if (person1 != null && person2 != null) {
person1.setSpouse(person2);
person2.setSpouse(person1);
return true;
} else {
return false;
}
}

public boolean removeSpouses(Person person1, Person person2) {
if (person1 != null && person2 != null) {
person1.setSpouse(null);
person2.setSpouse(null);
return true;
} else {
return false;
}
}

public boolean removeSpouses(long personId1, long personId2) {
if (checkId(personId1) && checkId(personId2)) {
Person person1 = getById(personId1);
Person person2 = getById(personId2);
removeSpouses(person1, person2);
return true;
} else {
return false;
}
}

public boolean remove(long personId) {
if (checkId(personId)) {
Person person = getById(personId);
return familyMembersList.remove(person);
}
return false;
}

private boolean checkId(long id) {
return id < personId && id >=0;
}

@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("Количество членов семьи: ").append(familyMembersList.size()).append("\n");
for (Person person: familyMembersList) {
sb.append(person.toString()).append("\n");
}
return sb.toString();
}



// public String showAllFamilyMembers() {
// StringBuilder sb = new StringBuilder();
// for (Person person : familyMembersList) {
// sb.append(person.toString()).append("\n");
// }
// return sb.toString();
// }
//
// public List<Person> getFamilyMembers() {
// return familyMembersList;
// }
//
// public Person getFamilyMember(String name) {
// for (Person person : familyMembersList) {
// if (person.getName().equals(name)) {
// return person;
// }
// }
// return null;
// }
//
// public void setFatherForPerson(Person father, Person child) {
// if (father != child) {
// if (father.getGender().equals("Male")) {
// if (father.getAge() - child.getAge() >= 16) {
// father.addChild(child);
// child.setFather(father);
// System.out.println("Добавлена связь: " + father + " отец -> " + child);
// if (!familyMembersList.contains(father)) {
// familyMembersList.add(father);
// }
// if (!familyMembersList.contains(child)) {
// familyMembersList.add(child);
// }
// } else {
// System.out.println("Маленькая разница в возрасте. Не могут быть отцом и ребенком");
// }
// } else {
// System.out.println("Отец должен быть мужчиной");
// }
//
// }
// }
}
5 changes: 5 additions & 0 deletions src/ru/gb/FamilyTree/person/Gender.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package ru.gb.FamilyTree.person;

public enum Gender {
Male, Female
}
Loading