From 804f5b5b04c6679453a3fd6cfbca446ed1483fb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D1=8F=D1=87=D0=B5=D1=81=D0=BB=D0=B0=D0=B2=20=D0=A2?= =?UTF-8?q?=D0=B8=D1=85=D0=BE=D0=BD=D0=BE=D0=B2?= Date: Thu, 24 Nov 2022 13:05:32 +0300 Subject: [PATCH 1/3] Some --- src/ru/skypro/Main.java | 114 ++++++++++++++++++ .../exceptions/DataInvalidException.java | 11 ++ .../exceptions/NotImplementedException.java | 11 ++ src/ru/skypro/task/PeriodUtils.java | 9 ++ src/ru/skypro/task/Task.java | 108 +++++++++++++++++ src/ru/skypro/task/TaskPeriod.java | 9 ++ src/ru/skypro/task/TaskType.java | 6 + 7 files changed, 268 insertions(+) create mode 100644 src/ru/skypro/exceptions/DataInvalidException.java create mode 100644 src/ru/skypro/exceptions/NotImplementedException.java create mode 100644 src/ru/skypro/task/PeriodUtils.java create mode 100644 src/ru/skypro/task/Task.java create mode 100644 src/ru/skypro/task/TaskPeriod.java create mode 100644 src/ru/skypro/task/TaskType.java diff --git a/src/ru/skypro/Main.java b/src/ru/skypro/Main.java index 625884e..db8a326 100644 --- a/src/ru/skypro/Main.java +++ b/src/ru/skypro/Main.java @@ -1,7 +1,121 @@ package ru.skypro; +import ru.skypro.exceptions.DataInvalidException; +import ru.skypro.task.Task; +import ru.skypro.task.TaskPeriod; +import ru.skypro.task.TaskType; + +import java.util.HashMap; +import java.util.Map; +import java.util.Scanner; + public class Main { + static Map taskMap = new HashMap<>(); public static void main(String[] args){ + try (Scanner scanner = new Scanner(System.in)) { + label: + while (true) { + printMenu(); + System.out.print("Выберите пункт меню: "); + if (scanner.hasNextInt()) { + int menu = scanner.nextInt(); + switch (menu) { + case 1: + inputTask(scanner); + break; + case 2: + removeTask(scanner); + break; + case 3: + getTaskOnDate(scanner); + break; + case 0: + break label; + } + } else { + scanner.next(); + System.out.println("Выберите пункт меню из списка!"); + } + } + } + } + + private static void inputTask(Scanner scanner) { + System.out.print("Введите название задачи: \n"); + String taskName = scanner.next(); + System.out.print("Введите описание задачи: \n"); + String description = scanner.next(); + System.out.print("Выберите тип задачи: \n 1: Личная \n 2: Рабочая\n"); + int type = scanner.nextInt(); + System.out.print("Выберите периодичность задачи: \n"); + int taskPeriod = scanner.nextInt(); + System.out.print("Выберите дату задачи: \n Формат Даты: 'dd-mm-yyyy'\n"); + String date = scanner.next(); + System.out.print("Выберите время задачи: \n Формат Времени: 'hh:mm'\n"); + String time = scanner.next(); + try { + Task newTask = new Task( + taskName, + description, + type, + taskPeriod, + date, + time + ); + taskMap.put(newTask.getId(), newTask); + } catch (DataInvalidException e){ + System.err.println(); + } + } + + private static void printMenu() { + System.out.println( + """ + 1. Добавить задачу + 2. Удалить задачу + 3. Получить задачу на указанный день + 0. Выход + """ + ); + } + + private static void removeTask(Scanner scanner) { + System.out.print("Выберите id задачи: \n"); + for (var task:taskMap.entrySet()) { + System.out.print(task.getKey()+" "+task.getValue().toString()+" \n"); + } + System.out.print("0 - отменить \n"); + int type = scanner.nextInt(); + if (type == 0){ + return; + } + if (taskMap.remove(type) == null){ + System.out.print("Данного id не найдено \n"); + } + } + private static void getTaskOnDate(Scanner scanner) { + try { + Task newTask = new Task( + "1", + "1", + 1, + 1, + "11-11-2011", + "12:12" + ); + taskMap.put(newTask.getId(), newTask); + newTask = new Task( + "2", + "2", + 2, + 2, + "12-12-2011", + "24:12" + ); + taskMap.put(newTask.getId(), newTask); + } catch (DataInvalidException e){ + System.err.println(); + } } } diff --git a/src/ru/skypro/exceptions/DataInvalidException.java b/src/ru/skypro/exceptions/DataInvalidException.java new file mode 100644 index 0000000..76e3cb6 --- /dev/null +++ b/src/ru/skypro/exceptions/DataInvalidException.java @@ -0,0 +1,11 @@ +package ru.skypro.exceptions; + +public class DataInvalidException extends Exception{ + public DataInvalidException() { + super("error"); + } + + public DataInvalidException(String message) { + super(message); + } +} diff --git a/src/ru/skypro/exceptions/NotImplementedException.java b/src/ru/skypro/exceptions/NotImplementedException.java new file mode 100644 index 0000000..ff95aab --- /dev/null +++ b/src/ru/skypro/exceptions/NotImplementedException.java @@ -0,0 +1,11 @@ +package ru.skypro.exceptions; + +public class NotImplementedException extends Exception { + public NotImplementedException() { + this("SomeClass"); + } + + public NotImplementedException(String message) { + super(message + " not implemented"); + } +} diff --git a/src/ru/skypro/task/PeriodUtils.java b/src/ru/skypro/task/PeriodUtils.java new file mode 100644 index 0000000..4efc713 --- /dev/null +++ b/src/ru/skypro/task/PeriodUtils.java @@ -0,0 +1,9 @@ +package ru.skypro.task; + +import ru.skypro.exceptions.NotImplementedException; +import ru.skypro.task.Task; + +public interface PeriodUtils { + + String whenNext(Task task) throws NotImplementedException; +} diff --git a/src/ru/skypro/task/Task.java b/src/ru/skypro/task/Task.java new file mode 100644 index 0000000..7f4feec --- /dev/null +++ b/src/ru/skypro/task/Task.java @@ -0,0 +1,108 @@ +package ru.skypro.task; + +import ru.skypro.exceptions.DataInvalidException; +import ru.skypro.exceptions.NotImplementedException; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; + +public class Task implements PeriodUtils { + private static int counter; + private final Integer id; + private String header; + private String description; + private TaskType type; + private LocalDateTime dateTime; + private TaskPeriod taskPeriod; + + public Task(String header, String description, int type, int taskPeriod, String date, String time) throws DataInvalidException { + try { + this.id = counter++; + this.header = header; + this.description = description; + this.type = TaskType.values()[type-1]; + this.taskPeriod = TaskPeriod.values()[taskPeriod-1]; + this.dateTime = LocalDateTime.parse(date+" "+time, DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm")); + } catch (DateTimeParseException | ArrayIndexOutOfBoundsException e){ + throw new DataInvalidException(e.getMessage()); + } + } + + public Integer getId() { + return id; + } + + public String getHeader() { + return header; + } + + public String getDescription() { + return description; + } + + public TaskType getType() { + return type; + } + + public LocalDateTime getDateTime() { + return dateTime; + } + + public TaskPeriod getTaskPeriod() { + return taskPeriod; + } + + public void setHeader(String header) { + this.header = header; + } + + public void setDescription(String description) { + this.description = description; + } + + public void setType(TaskType type) { + this.type = type; + } + + public void setDateTime(LocalDateTime dateTime) { + this.dateTime = dateTime; + } + + public void setTaskPeriod(TaskPeriod taskPeriod) { + this.taskPeriod = taskPeriod; + } + + @Override + public String whenNext(Task task) throws NotImplementedException { + switch (taskPeriod) { + case ONE_OFF -> { + return "asd"; + } + case DAILY -> { + return "as2d"; + } + case WEEKLY -> { + return "asd3"; + } + case MONTHLY -> { + return "a4sd"; + } + case YEARLY -> { + return "a5sd"; + } + } + throw new NotImplementedException("taskPeriod"); + } + + @Override + public String toString() { + return "Task{" + + "header='" + header + '\'' + + ", description='" + description + '\'' + + ", type=" + type + + ", dateTime=" + dateTime + + ", taskPeriod=" + taskPeriod + + '}'; + } +} diff --git a/src/ru/skypro/task/TaskPeriod.java b/src/ru/skypro/task/TaskPeriod.java new file mode 100644 index 0000000..ea7296e --- /dev/null +++ b/src/ru/skypro/task/TaskPeriod.java @@ -0,0 +1,9 @@ +package ru.skypro.task; + +public enum TaskPeriod { + ONE_OFF, + DAILY, + WEEKLY, + MONTHLY, + YEARLY +} diff --git a/src/ru/skypro/task/TaskType.java b/src/ru/skypro/task/TaskType.java new file mode 100644 index 0000000..f3aa896 --- /dev/null +++ b/src/ru/skypro/task/TaskType.java @@ -0,0 +1,6 @@ +package ru.skypro.task; + +public enum TaskType { + PERSONAL, + WORK +} From 12c6823f8fc011b2ab818c50b8c5e5ce9054ee9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D1=8F=D1=87=D0=B5=D1=81=D0=BB=D0=B0=D0=B2=20=D0=A2?= =?UTF-8?q?=D0=B8=D1=85=D0=BE=D0=BD=D0=BE=D0=B2?= Date: Sat, 17 Dec 2022 14:08:03 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=94=D0=BE=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD?= =?UTF-8?q?=20=D0=B1=D0=B0=D0=B7=D0=BE=D0=B2=D1=8B=D0=B9=20=D1=84=D1=83?= =?UTF-8?q?=D0=BD=D0=BA=D1=86=D0=B8=D0=BE=D0=BD=D0=B0=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/skypro/Main.java | 73 ++++++++++++++++++----------- src/ru/skypro/task/PeriodUtils.java | 6 ++- src/ru/skypro/task/Task.java | 30 ++++++++---- 3 files changed, 71 insertions(+), 38 deletions(-) diff --git a/src/ru/skypro/Main.java b/src/ru/skypro/Main.java index db8a326..3a43882 100644 --- a/src/ru/skypro/Main.java +++ b/src/ru/skypro/Main.java @@ -2,16 +2,19 @@ import ru.skypro.exceptions.DataInvalidException; import ru.skypro.task.Task; -import ru.skypro.task.TaskPeriod; -import ru.skypro.task.TaskType; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Scanner; +import java.util.stream.Collectors; public class Main { static Map taskMap = new HashMap<>(); public static void main(String[] args){ + testInitTasks(); try (Scanner scanner = new Scanner(System.in)) { label: while (true) { @@ -40,6 +43,31 @@ public static void main(String[] args){ } } + private static void testInitTasks() { + try { + Task newTask = new Task( + "Планерка по понедельникам", + "Планерка по понедельникам", + 2, + 3, + "17-10-2022", + "10:00" + ); + taskMap.put(newTask.getId(), newTask); + newTask = new Task( + "Обеденный перерыв", + "Обеденный перерыв", + 1, + 2, + "17-10-2022", + "13:00" + ); + taskMap.put(newTask.getId(), newTask); + } catch (DataInvalidException e){ + System.err.println(); + } + } + private static void inputTask(Scanner scanner) { System.out.print("Введите название задачи: \n"); String taskName = scanner.next(); @@ -61,7 +89,7 @@ private static void inputTask(Scanner scanner) { taskPeriod, date, time - ); + ); taskMap.put(newTask.getId(), newTask); } catch (DataInvalidException e){ System.err.println(); @@ -85,37 +113,26 @@ private static void removeTask(Scanner scanner) { System.out.print(task.getKey()+" "+task.getValue().toString()+" \n"); } System.out.print("0 - отменить \n"); - int type = scanner.nextInt(); - if (type == 0){ + int idTask = scanner.nextInt(); + if (idTask == 0){ return; } - if (taskMap.remove(type) == null){ + if (taskMap.containsKey(idTask)){ + taskMap.get(idTask).deleteTask(); + System.out.print("Удалено\n"); + } else { System.out.print("Данного id не найдено \n"); } } private static void getTaskOnDate(Scanner scanner) { - try { - Task newTask = new Task( - "1", - "1", - 1, - 1, - "11-11-2011", - "12:12" - ); - taskMap.put(newTask.getId(), newTask); - newTask = new Task( - "2", - "2", - 2, - 2, - "12-12-2011", - "24:12" - ); - taskMap.put(newTask.getId(), newTask); - } catch (DataInvalidException e){ - System.err.println(); - } + System.out.print("Выберите дату задачи: \n Формат Даты: 'dd-mm-yyyy'\n"); + String date = scanner.next(); + List response = taskMap.values().stream().filter( + (t) -> t.whenNext(date) + ).toList(); + response.forEach(task -> { + System.out.print(task.toString() + " \n"); + }); } } diff --git a/src/ru/skypro/task/PeriodUtils.java b/src/ru/skypro/task/PeriodUtils.java index 4efc713..10a1256 100644 --- a/src/ru/skypro/task/PeriodUtils.java +++ b/src/ru/skypro/task/PeriodUtils.java @@ -1,9 +1,11 @@ package ru.skypro.task; import ru.skypro.exceptions.NotImplementedException; -import ru.skypro.task.Task; + +import java.time.LocalDate; public interface PeriodUtils { - String whenNext(Task task) throws NotImplementedException; + + Boolean whenNext(String date); } diff --git a/src/ru/skypro/task/Task.java b/src/ru/skypro/task/Task.java index 7f4feec..8feb8b6 100644 --- a/src/ru/skypro/task/Task.java +++ b/src/ru/skypro/task/Task.java @@ -1,9 +1,10 @@ package ru.skypro.task; import ru.skypro.exceptions.DataInvalidException; -import ru.skypro.exceptions.NotImplementedException; +import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.Period; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; @@ -16,7 +17,10 @@ public class Task implements PeriodUtils { private LocalDateTime dateTime; private TaskPeriod taskPeriod; + private Boolean flagDelete; + public Task(String header, String description, int type, int taskPeriod, String date, String time) throws DataInvalidException { + this.flagDelete = false; try { this.id = counter++; this.header = header; @@ -74,25 +78,35 @@ public void setTaskPeriod(TaskPeriod taskPeriod) { } @Override - public String whenNext(Task task) throws NotImplementedException { + public Boolean whenNext(String date) { + if (this.flagDelete) { + return false; + } + var dateIs = LocalDate.parse(date, DateTimeFormatter.ofPattern("dd-MM-yyyy")); switch (taskPeriod) { case ONE_OFF -> { - return "asd"; + return this.dateTime.toLocalDate() == dateIs; } case DAILY -> { - return "as2d"; + return this.dateTime.toLocalDate().datesUntil(dateIs.plusDays(1)).anyMatch(t->t.equals(dateIs)); } case WEEKLY -> { - return "asd3"; + return this.dateTime.toLocalDate().datesUntil(dateIs.plusDays(1), Period.ofWeeks(1)).anyMatch(t->t.equals(dateIs)); } case MONTHLY -> { - return "a4sd"; + return this.dateTime.toLocalDate().datesUntil(dateIs.plusDays(1), Period.ofMonths(1)).anyMatch(t->t.equals(dateIs)); } case YEARLY -> { - return "a5sd"; + return this.dateTime.toLocalDate().datesUntil(dateIs.plusDays(1), Period.ofYears(1)).anyMatch(t->t.equals(dateIs)); + } + default -> { + return false; } } - throw new NotImplementedException("taskPeriod"); + } + + public void deleteTask() { + this.flagDelete = true; } @Override From 53e94236e306cc6961bbfaa7fa8a206bf9316034 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D1=8F=D1=87=D0=B5=D1=81=D0=BB=D0=B0=D0=B2=20=D0=A2?= =?UTF-8?q?=D0=B8=D1=85=D0=BE=D0=BD=D0=BE=D0=B2?= Date: Sat, 17 Dec 2022 17:28:32 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=91=D0=BE=D0=BB=D0=B5=D0=B5=20=D0=BE?= =?UTF-8?q?=D0=BF=D1=82=D0=B8=D0=BC=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=20=D0=B4=D0=B0=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/skypro/task/Task.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/ru/skypro/task/Task.java b/src/ru/skypro/task/Task.java index 8feb8b6..18be9c6 100644 --- a/src/ru/skypro/task/Task.java +++ b/src/ru/skypro/task/Task.java @@ -85,19 +85,21 @@ public Boolean whenNext(String date) { var dateIs = LocalDate.parse(date, DateTimeFormatter.ofPattern("dd-MM-yyyy")); switch (taskPeriod) { case ONE_OFF -> { - return this.dateTime.toLocalDate() == dateIs; + return dateIs.equals(this.dateTime.toLocalDate()); } case DAILY -> { - return this.dateTime.toLocalDate().datesUntil(dateIs.plusDays(1)).anyMatch(t->t.equals(dateIs)); + return dateIs.isAfter(this.dateTime.toLocalDate()); } case WEEKLY -> { - return this.dateTime.toLocalDate().datesUntil(dateIs.plusDays(1), Period.ofWeeks(1)).anyMatch(t->t.equals(dateIs)); + return dateIs.getDayOfWeek().equals(this.dateTime.toLocalDate().getDayOfWeek()); } case MONTHLY -> { - return this.dateTime.toLocalDate().datesUntil(dateIs.plusDays(1), Period.ofMonths(1)).anyMatch(t->t.equals(dateIs)); + return dateIs.getDayOfMonth() == this.dateTime.toLocalDate().getDayOfMonth(); +// return this.dateTime.toLocalDate().datesUntil(dateIs.plusDays(1), Period.ofMonths(1)).anyMatch(t->t.equals(dateIs)); } case YEARLY -> { - return this.dateTime.toLocalDate().datesUntil(dateIs.plusDays(1), Period.ofYears(1)).anyMatch(t->t.equals(dateIs)); + return dateIs.getDayOfYear() == this.dateTime.toLocalDate().getDayOfYear(); +// return this.dateTime.toLocalDate().datesUntil(dateIs.plusDays(1), Period.ofYears(1)).anyMatch(t->t.equals(dateIs)); } default -> { return false;