diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..df8d7db --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea +.class +/out +/bin \ No newline at end of file diff --git a/11111 b/11111 new file mode 100644 index 0000000..dd6a41e Binary files /dev/null and b/11111 differ diff --git a/HomeWork.iml b/HomeWork.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/HomeWork.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/README(Lesson_1).md b/README(Lesson_1).md new file mode 100644 index 0000000..643fd05 --- /dev/null +++ b/README(Lesson_1).md @@ -0,0 +1,14 @@ +# Урок 1. Принципы ООП: Инкапсуляция, наследование, полиморфизм + + +**Реализовать, с учетом ооп подхода, приложение. +Для проведения исследований с генеалогическим древом. +Идея: описать некоторое количество компонент, например: +модель человека и дерева +Под “проведением исследования” можно понимать например получение всех детей выбранного человека.** + + + +## Группа: Программист - 21.05.2024 + +## Студент: Овчинников Максим Сергеевич diff --git a/README(Lesson_2).md b/README(Lesson_2).md new file mode 100644 index 0000000..9cd5bbe --- /dev/null +++ b/README(Lesson_2).md @@ -0,0 +1,10 @@ +# Урок 2. Принципы ООП Абстракция и интерфейсы. Пример проектирования + +**Дополнить проект методами записи в файл и чтения из файла. Для этого создать отдельный класс и реализовать в нем нужные методы. Для данного класса сделайте интерфейс, который и используйте в своей программе. Пример работы с интерфейсом Serialazable можно найти в материалах к уроку. +Поправить замечания к первому уроку** + + + +## Группа: Программист - 21.05.2024 + +## Студент: Овчинников Максим Сергеевич diff --git a/README(Lesson_3).md b/README(Lesson_3).md new file mode 100644 index 0000000..55701d0 --- /dev/null +++ b/README(Lesson_3).md @@ -0,0 +1,10 @@ +# Урок 3. Некоторые стандартные интерфейсы Java и примеры их использования + +**Продолжаем работать с проектом с семейным деревом. +Реализовать интерфейс Iterable для дерева. +Создать методы сортировки списка людей перед выводом, например по имени или по дате рождения (не менее 2) +Создать пакетную структуру для проекта** + +## Группа: Программист - 21.05.2024 + +## Студент: Овчинников Максим Сергеевич \ No newline at end of file diff --git a/family_tree.ser b/family_tree.ser new file mode 100644 index 0000000..abdcbf2 Binary files /dev/null and b/family_tree.ser differ diff --git a/src/main/java/familytree/Main.java b/src/main/java/familytree/Main.java new file mode 100644 index 0000000..1f5b1c0 --- /dev/null +++ b/src/main/java/familytree/Main.java @@ -0,0 +1,27 @@ +package familytree; + +import familytree.model.FamilyTree; +import familytree.model.FamilyTreeOperations; +import familytree.model.Person; +import familytree.view.ConsoleFamilyTreeView; +import familytree.view.FamilyTreeView; +import familytree.presenter.FamilyTreePresenter; +import familytree.service.*; + +public class Main { + public static void main(String[] args) { + System.setProperty("file.encoding", "UTF-8"); + System.setProperty("console.encoding", "UTF-8"); + + FamilyTreeOperations familyTree = new FamilyTree<>(); + PersonFactory personFactory = new PersonFactory(); + FamilyTreeService service = new FamilyTreeService(familyTree, personFactory); + FamilyTreeView view = new ConsoleFamilyTreeView(); + FileOperations fileOps = new FileOperations(); + FamilyTreeFileManager fileManager = new FamilyTreeFileManager(fileOps); + + FamilyTreePresenter presenter = new FamilyTreePresenter(service, view, fileManager); + + presenter.run(); + } +} \ No newline at end of file diff --git a/src/main/java/familytree/model/FamilyMember.java b/src/main/java/familytree/model/FamilyMember.java new file mode 100644 index 0000000..585a258 --- /dev/null +++ b/src/main/java/familytree/model/FamilyMember.java @@ -0,0 +1,15 @@ +package familytree.model; + +import java.time.LocalDate; +import java.util.List; + +public interface FamilyMember { + String getName(); + LocalDate getDateOfBirth(); + T getFather(); + T getMother(); + void setFather(T father); + void setMother(T mother); + List getChildren(); + void addChild(T child); +} \ No newline at end of file diff --git a/src/main/java/familytree/model/FamilyTree.java b/src/main/java/familytree/model/FamilyTree.java new file mode 100644 index 0000000..f0adfc1 --- /dev/null +++ b/src/main/java/familytree/model/FamilyTree.java @@ -0,0 +1,60 @@ +package familytree.model; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; + +public class FamilyTree> implements FamilyTreeOperations, Serializable, Iterable { + private static final long serialVersionUID = 1L; + private List members; + + public FamilyTree() { + this.members = new ArrayList<>(); + } + + @Override + public void addMember(T member) { + members.add(member); + } + + @Override + public List getMembers() { + return members; + } + + @Override + public T findPerson(String name) { + for (T member : members) { + if (member.getName().equals(name)) { + return member; + } + } + return null; + } + + @Override + public void sortByName() { + members.sort(Comparator.comparing(FamilyMember::getName)); + } + + @Override + public void sortByBirthDate() { + members.sort(Comparator.comparing(FamilyMember::getDateOfBirth)); + } + + @Override + public Iterator iterator() { + return members.iterator(); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + for (T member : members) { + sb.append(member).append("\n"); + } + return sb.toString(); + } +} \ No newline at end of file diff --git a/src/main/java/familytree/model/FamilyTreeOperations.java b/src/main/java/familytree/model/FamilyTreeOperations.java new file mode 100644 index 0000000..ca2433f --- /dev/null +++ b/src/main/java/familytree/model/FamilyTreeOperations.java @@ -0,0 +1,12 @@ +package familytree.model; + +import java.io.Serializable; +import java.util.List; + +public interface FamilyTreeOperations> extends Serializable { + void addMember(T member); + T findPerson(String name); + List getMembers(); + void sortByName(); + void sortByBirthDate(); +} \ No newline at end of file diff --git a/src/main/java/familytree/model/Person.java b/src/main/java/familytree/model/Person.java new file mode 100644 index 0000000..9499c0c --- /dev/null +++ b/src/main/java/familytree/model/Person.java @@ -0,0 +1,73 @@ +package familytree.model; + +import java.io.Serializable; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.nio.charset.StandardCharsets; + +public class Person implements FamilyMember, Serializable { + private static final long serialVersionUID = 1L; + private String name; + private Person father; + private Person mother; + private List children; + private String gender; + private LocalDate dateOfBirth; + + public Person(String name, String gender, LocalDate dateOfBirth) { + this.name = name; + this.gender = gender; + this.dateOfBirth = dateOfBirth; + this.children = new ArrayList<>(); + } + + @Override + public String getName() { + return name; + } + + @Override + public Person getFather() { + return father; + } + + @Override + public void setFather(Person father) { + this.father = father; + } + + @Override + public Person getMother() { + return mother; + } + + @Override + public void setMother(Person mother) { + this.mother = mother; + } + + @Override + public List getChildren() { + return children; + } + + @Override + public void addChild(Person child) { + this.children.add(child); + } + + public String getGender() { + return gender; + } + + @Override + public LocalDate getDateOfBirth() { + return dateOfBirth; + } + + @Override + public String toString() { + return new String(String.format("%s (Пол: %s, Дата рождения: %s)", name, gender, dateOfBirth).getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8); + } +} \ No newline at end of file diff --git a/src/main/java/familytree/presenter/FamilyTreePresenter.java b/src/main/java/familytree/presenter/FamilyTreePresenter.java new file mode 100644 index 0000000..a145a87 --- /dev/null +++ b/src/main/java/familytree/presenter/FamilyTreePresenter.java @@ -0,0 +1,193 @@ +package familytree.presenter; + +import familytree.model.FamilyTreeOperations; +import familytree.model.Person; +import familytree.view.FamilyTreeView; +import familytree.service.FamilyTreeService; +import familytree.service.FamilyTreeFileManager; + +import java.util.List; + +public class FamilyTreePresenter { + private FamilyTreeService service; + private FamilyTreeView view; + private FamilyTreeFileManager fileManager; + + public FamilyTreePresenter(FamilyTreeService service, FamilyTreeView view, FamilyTreeFileManager fileManager) { + this.service = service; + this.view = view; + this.fileManager = fileManager; + } + + public void run() { + while (true) { + view.displayExtendedMenu(); + int choice = view.getMenuChoice(); + + switch (choice) { + case 1: + addPerson(); + break; + case 2: + findPerson(); + break; + case 3: + showAllMembers(); + break; + case 4: + service.sortByName(); + view.displayMessage("Отсортировано по имени"); + break; + case 5: + service.sortByBirthDate(); + view.displayMessage("Отсортировано по дате рождения"); + break; + case 6: + saveToFile(); + break; + case 7: + loadFromFile(); + break; + case 8: + addParentChild(); + break; + case 9: + showChildren(); + break; + case 10: + showParents(); + break; + case 11: + showSiblings(); + break; + case 12: + showAncestors(); + break; + case 13: + showDescendants(); + break; + case 14: + showGenerationCount(); + break; + case 0: + return; + default: + view.displayMessage("Неверный выбор. Попробуйте снова."); + } + } + } + + private void addPerson() { + String name = view.getInput("Введите имя: "); + String gender = view.getInput("Введите пол (М/Ж): "); + String birthDateInput = view.getInput("Введите дату рождения (ГГГГ-ММ-ДД): "); + + service.addPerson(name, gender, birthDateInput); + view.displayMessage("Человек добавлен в семейное дерево."); + } + + private void findPerson() { + String name = view.getInput("Введите имя для поиска: "); + Person person = service.findPerson(name); + if (person != null) { + view.displayMessage("Найдено:"); + view.displayPerson(person); + } else { + view.displayMessage("Человек не найден."); + } + } + + private void showAllMembers() { + view.displayMessage("Все члены семьи:"); + view.displayPersonList(service.getAllMembers()); + } + + private void saveToFile() { + String fileName = view.getInput("Введите имя файла для сохранения: "); + try { + fileManager.saveToFile(fileName, service.getFamilyTree()); + view.displayMessage("Семейное дерево сохранено в файл."); + } catch (Exception e) { + view.displayMessage("Ошибка при сохранении: " + e.getMessage()); + } + } + + private void loadFromFile() { + String fileName = view.getInput("Введите имя файла для загрузки: "); + try { + FamilyTreeOperations loadedTree = (FamilyTreeOperations) fileManager.loadFromFile(fileName); + service.setFamilyTree(loadedTree); + view.displayMessage("Семейное дерево загружено из файла."); + } catch (Exception e) { + view.displayMessage("Ошибка при загрузке: " + e.getMessage()); + } + } + + private void addParentChild() { + String parentName = view.getInput("Введите имя родителя: "); + String childName = view.getInput("Введите имя ребенка: "); + service.addParentChild(parentName, childName); + view.displayMessage("Отношение родитель-ребенок добавлено."); + } + + private void showChildren() { + String name = view.getInput("Введите имя человека: "); + List children = service.getChildren(name); + if (children != null && !children.isEmpty()) { + view.displayMessage("Дети:"); + view.displayPersonList(children); + } else { + view.displayMessage("У этого человека нет детей или человек не найден."); + } + } + + private void showParents() { + String name = view.getInput("Введите имя человека: "); + Person[] parents = service.getParents(name); + if (parents != null) { + view.displayMessage("Родители:"); + if (parents[0] != null) view.displayPerson(parents[0]); + if (parents[1] != null) view.displayPerson(parents[1]); + } else { + view.displayMessage("У этого человека нет родителей или человек не найден."); + } + } + + private void showSiblings() { + String name = view.getInput("Введите имя человека: "); + List siblings = service.getSiblings(name); + if (siblings != null && !siblings.isEmpty()) { + view.displayMessage("Братья/сестры:"); + view.displayPersonList(siblings); + } else { + view.displayMessage("У этого человека нет братьев/сестер или человек не найден."); + } + } + + private void showAncestors() { + String name = view.getInput("Введите имя человека: "); + List ancestors = service.getAncestors(name); + if (!ancestors.isEmpty()) { + view.displayMessage("Предки:"); + view.displayPersonList(ancestors); + } else { + view.displayMessage("У этого человека нет предков или человек не найден."); + } + } + + private void showDescendants() { + String name = view.getInput("Введите имя человека: "); + List descendants = service.getDescendants(name); + if (!descendants.isEmpty()) { + view.displayMessage("Потомки:"); + view.displayPersonList(descendants); + } else { + view.displayMessage("У этого человека нет потомков или человек не найден."); + } + } + + private void showGenerationCount() { + int count = service.getGenerationCount(); + view.displayMessage("Количество поколений в семейном дереве: " + count); + } +} \ No newline at end of file diff --git a/src/main/java/familytree/service/FamilyResearch.java b/src/main/java/familytree/service/FamilyResearch.java new file mode 100644 index 0000000..8e0ae52 --- /dev/null +++ b/src/main/java/familytree/service/FamilyResearch.java @@ -0,0 +1,49 @@ +package familytree.service; + +import familytree.model.FamilyTree; +import familytree.model.Person; + +import java.util.List; +import java.util.stream.Collectors; + +public class FamilyResearch implements IFamilyResearch { + private FamilyTree familyTree; + + public FamilyResearch(FamilyTree familyTree) { + this.familyTree = familyTree; + } + + @Override + public List getChildren(String name) { + Person person = familyTree.findPerson(name); + return person != null ? person.getChildren() : null; + } + + @Override + public Person[] getParents(String name) { + Person person = familyTree.findPerson(name); + if (person != null) { + return new Person[]{person.getFather(), person.getMother()}; + } + return null; + } + + @Override + public List getSiblings(String name) { + Person person = familyTree.findPerson(name); + if (person != null) { + Person father = person.getFather(); + Person mother = person.getMother(); + if (father != null) { + return father.getChildren().stream() + .filter(child -> !child.equals(person)) + .collect(Collectors.toList()); + } else if (mother != null) { + return mother.getChildren().stream() + .filter(child -> !child.equals(person)) + .collect(Collectors.toList()); + } + } + return null; + } +} \ No newline at end of file diff --git a/src/main/java/familytree/service/FamilyTreeFileManager.java b/src/main/java/familytree/service/FamilyTreeFileManager.java new file mode 100644 index 0000000..88328eb --- /dev/null +++ b/src/main/java/familytree/service/FamilyTreeFileManager.java @@ -0,0 +1,20 @@ +package familytree.service; + +import familytree.model.FamilyTreeOperations; +import java.io.IOException; + +public class FamilyTreeFileManager { + private IFileOperations fileOps; + + public FamilyTreeFileManager(IFileOperations fileOps) { + this.fileOps = fileOps; + } + + public void saveToFile(String fileName, FamilyTreeOperations familyTree) throws IOException { + fileOps.saveToFile(fileName, familyTree); + } + + public FamilyTreeOperations loadFromFile(String fileName) throws IOException, ClassNotFoundException { + return fileOps.loadFromFile(fileName); + } +} \ No newline at end of file diff --git a/src/main/java/familytree/service/FamilyTreeService.java b/src/main/java/familytree/service/FamilyTreeService.java new file mode 100644 index 0000000..fca268b --- /dev/null +++ b/src/main/java/familytree/service/FamilyTreeService.java @@ -0,0 +1,150 @@ +package familytree.service; + +import familytree.model.FamilyTree; +import familytree.model.Person; +import familytree.model.FamilyTreeOperations; + +import java.time.LocalDate; +import java.util.List; +import java.util.ArrayList; +import java.util.stream.Collectors; + +public class FamilyTreeService { + private FamilyTreeOperations familyTree; + private PersonFactory personFactory; + + public FamilyTreeService(FamilyTreeOperations familyTree, PersonFactory personFactory) { + this.familyTree = familyTree; + this.personFactory = personFactory; + } + + public void addPerson(String name, String gender, String birthDateInput) { + Person person = personFactory.createPerson(name, gender, birthDateInput); + familyTree.addMember(person); + } + + public Person findPerson(String name) { + return familyTree.findPerson(name); + } + + public List getAllMembers() { + return familyTree.getMembers(); + } + + public void sortByName() { + familyTree.sortByName(); + } + + public void sortByBirthDate() { + familyTree.sortByBirthDate(); + } + + public void addParentChild(String parentName, String childName) { + Person parent = familyTree.findPerson(parentName); + Person child = familyTree.findPerson(childName); + if (parent != null && child != null) { + parent.addChild(child); + if (parent.getGender().equals("Мужской")) { + child.setFather(parent); + } else { + child.setMother(parent); + } + } + } + + public List getChildren(String name) { + Person person = familyTree.findPerson(name); + return person != null ? person.getChildren() : null; + } + + public Person[] getParents(String name) { + Person person = familyTree.findPerson(name); + if (person != null) { + return new Person[]{person.getFather(), person.getMother()}; + } + return null; + } + + public List getSiblings(String name) { + Person person = familyTree.findPerson(name); + if (person != null) { + Person father = person.getFather(); + Person mother = person.getMother(); + if (father != null) { + return father.getChildren().stream() + .filter(child -> !child.equals(person)) + .collect(Collectors.toList()); + } else if (mother != null) { + return mother.getChildren().stream() + .filter(child -> !child.equals(person)) + .collect(Collectors.toList()); + } + } + return null; + } + + public List getAncestors(String name) { + Person person = familyTree.findPerson(name); + List ancestors = new ArrayList<>(); + if (person != null) { + addAncestors(person, ancestors); + } + return ancestors; + } + + private void addAncestors(Person person, List ancestors) { + if (person.getFather() != null) { + ancestors.add(person.getFather()); + addAncestors(person.getFather(), ancestors); + } + if (person.getMother() != null) { + ancestors.add(person.getMother()); + addAncestors(person.getMother(), ancestors); + } + } + + public List getDescendants(String name) { + Person person = familyTree.findPerson(name); + List descendants = new ArrayList<>(); + if (person != null) { + addDescendants(person, descendants); + } + return descendants; + } + + private void addDescendants(Person person, List descendants) { + for (Person child : person.getChildren()) { + descendants.add(child); + addDescendants(child, descendants); + } + } + + public int getGenerationCount() { + int maxGeneration = 0; + for (Person person : familyTree.getMembers()) { + int generation = getPersonGeneration(person); + if (generation > maxGeneration) { + maxGeneration = generation; + } + } + return maxGeneration; + } + + private int getPersonGeneration(Person person) { + int generation = 0; + Person current = person; + while (current.getFather() != null || current.getMother() != null) { + generation++; + current = current.getFather() != null ? current.getFather() : current.getMother(); + } + return generation; + } + + public FamilyTreeOperations getFamilyTree() { + return familyTree; + } + + public void setFamilyTree(FamilyTreeOperations familyTree) { + this.familyTree = familyTree; + } +} diff --git a/src/main/java/familytree/service/FileOperations.java b/src/main/java/familytree/service/FileOperations.java new file mode 100644 index 0000000..be54adc --- /dev/null +++ b/src/main/java/familytree/service/FileOperations.java @@ -0,0 +1,24 @@ +package familytree.service; + +import familytree.model.FamilyTreeOperations; +import java.io.*; + +public class FileOperations implements IFileOperations { + @Override + public void saveToFile(String fileName, FamilyTreeOperations familyTree) throws IOException { + try (ObjectOutputStream oos = new ObjectOutputStream( + new BufferedOutputStream( + new FileOutputStream(fileName)))) { + oos.writeObject(familyTree); + } + } + + @Override + public FamilyTreeOperations loadFromFile(String fileName) throws IOException, ClassNotFoundException { + try (ObjectInputStream ois = new ObjectInputStream( + new BufferedInputStream( + new FileInputStream(fileName)))) { + return (FamilyTreeOperations) ois.readObject(); + } + } +} \ No newline at end of file diff --git a/src/main/java/familytree/service/IFamilyResearch.java b/src/main/java/familytree/service/IFamilyResearch.java new file mode 100644 index 0000000..dbc6859 --- /dev/null +++ b/src/main/java/familytree/service/IFamilyResearch.java @@ -0,0 +1,11 @@ +package familytree.service; + +import familytree.model.Person; + +import java.util.List; + +public interface IFamilyResearch { + List getChildren(String name); + Person[] getParents(String name); + List getSiblings(String name); +} \ No newline at end of file diff --git a/src/main/java/familytree/service/IFileOperations.java b/src/main/java/familytree/service/IFileOperations.java new file mode 100644 index 0000000..dccaabb --- /dev/null +++ b/src/main/java/familytree/service/IFileOperations.java @@ -0,0 +1,9 @@ +package familytree.service; + +import familytree.model.FamilyTreeOperations; +import java.io.IOException; + +public interface IFileOperations { + void saveToFile(String fileName, FamilyTreeOperations familyTree) throws IOException; + FamilyTreeOperations loadFromFile(String fileName) throws IOException, ClassNotFoundException; +} \ No newline at end of file diff --git a/src/main/java/familytree/service/PersonFactory.java b/src/main/java/familytree/service/PersonFactory.java new file mode 100644 index 0000000..4778c5c --- /dev/null +++ b/src/main/java/familytree/service/PersonFactory.java @@ -0,0 +1,12 @@ +package familytree.service; + +import familytree.model.Person; +import java.time.LocalDate; + +public class PersonFactory { + public Person createPerson(String name, String gender, String birthDateInput) { + String normalizedGender = gender.trim().equalsIgnoreCase("М") ? "Мужской" : "Женский"; + LocalDate birthDate = LocalDate.parse(birthDateInput); + return new Person(name, normalizedGender, birthDate); + } +} \ No newline at end of file diff --git a/src/main/java/familytree/view/ConsoleFamilyTreeView.java b/src/main/java/familytree/view/ConsoleFamilyTreeView.java new file mode 100644 index 0000000..495e8bc --- /dev/null +++ b/src/main/java/familytree/view/ConsoleFamilyTreeView.java @@ -0,0 +1,74 @@ +package familytree.view; + +import familytree.model.Person; +import java.util.List; +import java.util.Scanner; + +public class ConsoleFamilyTreeView implements FamilyTreeView { + private Scanner scanner; + + public ConsoleFamilyTreeView() { + this.scanner = new Scanner(System.in, "UTF-8"); + } + + @Override + public void displayMenu() { + System.out.println("\nВыберите действие:"); + System.out.println("1. Добавить человека"); + System.out.println("2. Найти человека"); + System.out.println("3. Показать всех членов семьи"); + System.out.println("4. Сортировать по имени"); + System.out.println("5. Сортировать по дате рождения"); + System.out.println("6. Сохранить дерево в файл"); + System.out.println("7. Загрузить дерево из файла"); + System.out.println("0. Выйти"); + } + + @Override + public void displayExtendedMenu() { + System.out.println("\nВыберите действие:"); + System.out.println("1. Добавить человека"); + System.out.println("2. Найти человека"); + System.out.println("3. Показать всех членов семьи"); + System.out.println("4. Сортировать по имени"); + System.out.println("5. Сортировать по дате рождения"); + System.out.println("6. Сохранить дерево в файл"); + System.out.println("7. Загрузить дерево из файла"); + System.out.println("8. Добавить отношение родитель-ребенок"); + System.out.println("9. Показать детей"); + System.out.println("10. Показать родителей"); + System.out.println("11. Показать братьев/сестер"); + System.out.println("12. Показать предков"); + System.out.println("13. Показать потомков"); + System.out.println("14. Показать количество поколений"); + System.out.println("0. Выйти"); + } + + @Override + public int getMenuChoice() { + return Integer.parseInt(scanner.nextLine()); + } + + @Override + public String getInput(String prompt) { + System.out.print(prompt); + return scanner.nextLine(); + } + + @Override + public void displayMessage(String message) { + System.out.println(message); + } + + @Override + public void displayPerson(Person person) { + System.out.println(person); + } + + @Override + public void displayPersonList(List people) { + for (Person person : people) { + System.out.println(person); + } + } +} \ No newline at end of file diff --git a/src/main/java/familytree/view/FamilyTreeView.java b/src/main/java/familytree/view/FamilyTreeView.java new file mode 100644 index 0000000..6094220 --- /dev/null +++ b/src/main/java/familytree/view/FamilyTreeView.java @@ -0,0 +1,5 @@ +package familytree.view; + +public interface FamilyTreeView extends InputView, OutputView { + void displayExtendedMenu(); +} \ No newline at end of file diff --git a/src/main/java/familytree/view/InputView.java b/src/main/java/familytree/view/InputView.java new file mode 100644 index 0000000..855f42d --- /dev/null +++ b/src/main/java/familytree/view/InputView.java @@ -0,0 +1,6 @@ +package familytree.view; + +public interface InputView { + int getMenuChoice(); + String getInput(String prompt); +} diff --git a/src/main/java/familytree/view/OutputView.java b/src/main/java/familytree/view/OutputView.java new file mode 100644 index 0000000..47a76fa --- /dev/null +++ b/src/main/java/familytree/view/OutputView.java @@ -0,0 +1,11 @@ +package familytree.view; + +import familytree.model.Person; +import java.util.List; + +public interface OutputView { + void displayMenu(); + void displayMessage(String message); + void displayPerson(Person person); + void displayPersonList(List people); +} \ No newline at end of file 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(); - } -}