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

Д/З к семинару 1 #7

Open
wants to merge 29 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 28 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
2187841
- Добавил классы Main, Human, Tree;
Saidjalol-Sodikov Mar 28, 2024
3e326d8
- Добавил классы Main, Human, Tree;
Saidjalol-Sodikov Mar 28, 2024
b08e36c
Merge remote-tracking branch 'origin/master'
Saidjalol-Sodikov Mar 28, 2024
86905da
Удалил файлы компиляции?
Saidjalol-Sodikov Mar 28, 2024
33583f6
Добавил класс Tree
Saidjalol-Sodikov Mar 28, 2024
4933e0e
- Добавил gitignore
Saidjalol-Sodikov Mar 28, 2024
4e9aef6
- Добавил в Human возможность добавления детей и родителя. В зависимо…
Saidjalol-Sodikov Mar 29, 2024
350c8ed
- Довёл до ума отображения списка членов семьи и одного человека;
Saidjalol-Sodikov Mar 29, 2024
829f5e6
Исправил код по комментариям из PR.
Saidjalol-Sodikov Apr 4, 2024
e297685
+ FileHandler только сохраняет;
Saidjalol-Sodikov Apr 4, 2024
a49ff96
Доведено до уровня Семинара 2.
Saidjalol-Sodikov Apr 4, 2024
e2f34fc
Доведено до уровня Семинара 2.
Saidjalol-Sodikov Apr 4, 2024
64e3b61
Новая ветка для версии 3.0
Saidjalol-Sodikov Apr 4, 2024
5ccd101
Идентификатор и сохранение в файле
Saidjalol-Sodikov Apr 4, 2024
483a340
Д/З к семинару 3
Saidjalol-Sodikov Apr 4, 2024
0f77290
Merge branch 'version-3.0'
Saidjalol-Sodikov Apr 10, 2024
2f96921
Урок 4:
Saidjalol-Sodikov Apr 10, 2024
b432cf3
Д/З к семинару 4
Saidjalol-Sodikov Apr 17, 2024
7297628
Д/З к уроку 5:
Saidjalol-Sodikov Apr 18, 2024
9faee60
Д/З к уроку 5:
Saidjalol-Sodikov Apr 18, 2024
b32fdd2
Исправил замечание 1.
Saidjalol-Sodikov Apr 20, 2024
a75651f
Д/З к семинару 5
Saidjalol-Sodikov Apr 21, 2024
5a3e3d6
Д/З к семинару 5
Saidjalol-Sodikov Apr 21, 2024
b98d947
Д/З к семинару 6
Saidjalol-Sodikov Apr 21, 2024
e01447a
Д/З финал:
Saidjalol-Sodikov Apr 22, 2024
ac0c0bf
Д/З финал:
Saidjalol-Sodikov Apr 22, 2024
e133392
Д/З финал:
Saidjalol-Sodikov Apr 22, 2024
5ce4099
Финальная версия.
Saidjalol-Sodikov Apr 22, 2024
c664659
Финальная версия.
Saidjalol-Sodikov Apr 24, 2024
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
35 changes: 35 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Default ignored files
/shelf/
/workspace.xml
/out/
*.iml
*.xml

# Compiled class file
*.class

# Log file
*.log

# BlueJ files
*.ctxt

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
replay_pid*

# custom file or directories
/.idea
*.out
13 changes: 13 additions & 0 deletions src/ru/gb/family_tree/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package ru.gb.family_tree;

import ru.gb.family_tree.view.ConsoleUI;
import ru.gb.family_tree.view.View;

public class Main {

public static void main(String[] args) {

View view = new ConsoleUI();
view.start();
}
}
5 changes: 5 additions & 0 deletions src/ru/gb/family_tree/model/human/Gender.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package ru.gb.family_tree.model.human;

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

import ru.gb.family_tree.model.tree.TreeElement;

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, Comparable<Human>, TreeElement {
private int id;
private String name;
private LocalDate dob, dod;
private Gender gender;
private List<Human> children;
private Human mother, father;

// # Конструкторы

/**
* Конструктор класса Human для семейного древа.
* Для умершего человека
* @param name Имя
* @param dob Дата рождения
* @param dod Дата смерти
* @param gender Пол
* @param children Список детей
* @param mother Мать
* @param father Отец
*/
public Human(String name, LocalDate dob, LocalDate dod , Gender gender, List<Human> children, Human mother, Human father) {
this.id = -1;
this.name = name;
this.dob = dob;
this.dod = dod;
this.gender = gender;
this.children = children;
this.mother = mother;
this.father = father;
}


public Human(String name, LocalDate dob, Gender gender) {
this(name, dob, null, gender, null, null, null);
}

// # Геттеры

public int getId() {
return id;
}

public String getName() {
return name;
}

public LocalDate getDob() {
return dob;
}

public LocalDate getDod() {
return dod;
}

public Gender getGender() {
return gender;
}

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

public String getChildrenNames(){
StringBuilder childrenString = new StringBuilder();
childrenString.append("{");
if (this.getChildren()!=null){
for (Human child : this.getChildren()) {
childrenString.append(child.name);
childrenString.append(", ");
}
childrenString.deleteCharAt(childrenString.length()-1);
childrenString.deleteCharAt(childrenString.length()-1);
childrenString.append("}");
}
else {
return null;
}
return childrenString.toString();
}
public Human getMother() {
return mother;
}

public Human getFather() {
return father;
}

private int getPeriod(LocalDate start, LocalDate end) {
Period diff = Period.between(start,end);
return diff.getYears();
}

public int getAge() {
if (dod == null) {
return getPeriod(dob, LocalDate.now());
} else {
return getPeriod(dob, dod);
}
}



// # Сеттеры


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

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

public void setDob(LocalDate dob) {
this.dob = dob;
}

public void setDod(LocalDate dod) {
this.dod = dod;
}

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

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

public void setMother(Human mother) {
this.mother = mother;
}

public void setFather(Human father) {
this.father = father;
}

public void addChild(Human child){
if (this.gender==gender.MALE){
child.setFather(this);
}
if (this.gender==gender.FEMALE){
child.setMother(this);
}
if (this.children == null) {
children = new ArrayList<>();
}
this.children.add(child);
}

public void addParent(Human parent){
if (parent.gender==gender.MALE){
this.setFather(parent);
}
if (parent.gender==gender.FEMALE){
this.setMother(parent);
}
parent.addChild(this);
}

@Override
public String toString() {
return getInfo();
}

private String getInfo() {
StringBuilder stringBuilder = new StringBuilder();

stringBuilder.append("ID: ");
stringBuilder.append(id);

stringBuilder.append(") Имя: ");
stringBuilder.append(name);

stringBuilder.append(", дата рождения: ");
stringBuilder.append(dob);

stringBuilder.append(", пол: ");
stringBuilder.append(gender);

stringBuilder.append(", дата смерти: ");
if (dod != null) {
stringBuilder.append(dod);
} else {
stringBuilder.append("неизвестна");
}

stringBuilder.append(", отец: ");
if (father != null) {
stringBuilder.append(getFather().getName());
} else {
stringBuilder.append("неизвестен");
}

stringBuilder.append(", мать: ");
if (mother != null) {
stringBuilder.append(getMother().getName());
} else {
stringBuilder.append("неизвестна");
}

stringBuilder.append(", дети: ");
if (children != null) {
stringBuilder.append(getChildrenNames());
} else {
stringBuilder.append("отсутствуют;");
}

return stringBuilder.toString();
}

@Override
public int compareTo(Human o) {
return this.name.compareTo(o.name);
}
}

26 changes: 26 additions & 0 deletions src/ru/gb/family_tree/model/iterators/ElementIterator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package ru.gb.family_tree.model.iterators;

import ru.gb.family_tree.model.tree.TreeElement;

import java.util.Iterator;
import java.util.List;

public class ElementIterator<T extends TreeElement> implements Iterator<T> {

private int index;
private List<T> familyList;

public ElementIterator(List<T> familyList) {
this.familyList = familyList;
}

@Override
public boolean hasNext() {
return index < familyList.size();
}

@Override
public T next() {
return familyList.get(index++);
}
}
19 changes: 19 additions & 0 deletions src/ru/gb/family_tree/model/service/FamilyTreeService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package ru.gb.family_tree.model.service;

import java.time.LocalDate;

public interface FamilyTreeService {
void addObject(String name, LocalDate dob, String viewGender);

String getTreeInfo();

void sortByAge();

void sortByName();

boolean save();

void read();

void addParentByID(int parentID, int childID);
}
Loading