From 2db26eb77a192bbc7aae9e410efaaf297a50f1c3 Mon Sep 17 00:00:00 2001 From: KamaSK Date: Tue, 20 May 2025 20:17:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D1=91=D0=BD=20?= =?UTF-8?q?=D1=82=D0=B8=D0=BF=20=D0=BF=D0=BE=D0=BB=D1=8F=20completed=20?= =?UTF-8?q?=D0=BD=D0=B0=20status=20=D0=B2=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81?= =?UTF-8?q?=D0=B5=20Task=20=D0=B4=D0=BB=D1=8F=20=D0=B8=D1=81=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D1=87=D0=B8=D1=81=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20TaskStatus.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D1=8B=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=81=D1=82=D0=B0=D1=82=D1=83=D1=81=D0=B0=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B8:=20markCompleted,=20markIn?= =?UTF-8?q?Progress=20=D0=B8=20markCanceled.=20=D0=9E=D0=B1=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D1=91=D0=BD=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=20Tas?= =?UTF-8?q?kPrinter=20=D0=B4=D0=BB=D1=8F=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=81=D1=82=D0=B0=D1=82?= =?UTF-8?q?=D1=83=D1=81=D0=B0=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B8.=20?= =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D1=8B=20=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D0=BE=D0=B4=D1=8B=20=D0=B2=20=D0=BA=D0=BB=D0=B0=D1=81?= =?UTF-8?q?=D1=81=D0=B5=20TodoApp=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D1=8B=20=D1=81=20=D0=BD=D0=BE=D0=B2=D1=8B?= =?UTF-8?q?=D0=BC=20=D1=81=D1=82=D0=B0=D1=82=D1=83=D1=81=D0=BE=D0=BC=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D1=87.=20=D0=A3=D0=BB=D1=83=D1=87?= =?UTF-8?q?=D1=88=D0=B5=D0=BD=D0=B0=20=D1=87=D0=B8=D1=82=D0=B0=D0=B5=D0=BC?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=8C=20=D0=BA=D0=BE=D0=B4=D0=B0=20=D0=B8=20?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D0=B0=20=D1=83=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B7=D0=B0=D0=B4=D0=B0?= =?UTF-8?q?=D1=87=D0=B0=D0=BC=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- todo/src/main/java/ru/kamask/pet/Task.java | 59 +++++---- .../main/java/ru/kamask/pet/TaskStatus.java | 28 ++-- todo/src/main/java/ru/kamask/pet/TodoApp.java | 121 +++++++++++++----- 3 files changed, 129 insertions(+), 79 deletions(-) diff --git a/todo/src/main/java/ru/kamask/pet/Task.java b/todo/src/main/java/ru/kamask/pet/Task.java index 5ae7311..f6f6a4f 100644 --- a/todo/src/main/java/ru/kamask/pet/Task.java +++ b/todo/src/main/java/ru/kamask/pet/Task.java @@ -9,7 +9,7 @@ class Task { private int id; private String title; private String description; - private boolean completed; + private TaskStatus status; private LocalDate createdAt; static { @@ -19,6 +19,7 @@ class Task { { id = ++nextId; + status = TaskStatus.NEW; createdAt = LocalDate.now(); taskCount++; } @@ -32,35 +33,20 @@ class Task { System.out.println("Колличество дел: " + taskCount); } - void printInfo() { - String stringCompleted = completed ? "[х]" : "[ ]"; - System.out.printf("%-3d | %-20s | %s\n", id, title, stringCompleted); + boolean isCompleted() { + return status == TaskStatus.COMPLETED; } - void printInfo(boolean full) { - if (!full) { - printInfo(); - return; - } - - String template = """ - - ────────────────────────────── - Номер: %-3d - Дата создания: %s - Статус: %s - Название: %-20s - ------------------------------ - %s - - """; - ; - String stringCompleted = completed ? "выполнено" : "не выполнено"; - System.out.printf(template, id, createdAt, stringCompleted, title, description); + void markCompleted() { + status = TaskStatus.COMPLETED; } - void toggleCompleted() { - completed = !completed; + void markInProgress() { + status = TaskStatus.IN_PROGRESS; + } + + void markCanceled() { + status = TaskStatus.CANCELLED; } int getId() { @@ -71,13 +57,26 @@ class Task { return title; } - boolean getCompleted() { - return completed; + TaskStatus getStatus() { + return status; } static class TaskPrinter { - void print(Task task) { - task.printInfo(true); + static void print(Task task) { + String template = """ + + ────────────────────────────── + Номер: %-3d + Дата создания: %s + Статус: %s + Название: %-20s + ------------------------------ + %s + + """; + ; + String stringCompleted = task.status.getColorCode() + task.status.getDescription() + "\u001B[0m"; + System.out.printf(template, task.id, task.createdAt, stringCompleted, task.title, task.description); } } diff --git a/todo/src/main/java/ru/kamask/pet/TaskStatus.java b/todo/src/main/java/ru/kamask/pet/TaskStatus.java index 4bd866d..262f244 100644 --- a/todo/src/main/java/ru/kamask/pet/TaskStatus.java +++ b/todo/src/main/java/ru/kamask/pet/TaskStatus.java @@ -1,25 +1,25 @@ package ru.kamask.pet; public enum TaskStatus { - NEW("Новое") { - @Override - String getColorCode() { - return "\u001B[32m"; - } - }, - IN_PROGRESS("В работе") { - @Override - String getColorCode() { - return "\u001B[35m"; - } - }, - COMPLETED("Сделано") { + NEW("новое") { @Override String getColorCode() { return "\u001B[34m"; } }, - CANCELLED("Отменено") { + IN_PROGRESS("в работе") { + @Override + String getColorCode() { + return "\u001B[35m"; + } + }, + COMPLETED("сделано") { + @Override + String getColorCode() { + return "\u001B[32m"; + } + }, + CANCELLED("отменено") { @Override String getColorCode() { return "\u001B[31m"; diff --git a/todo/src/main/java/ru/kamask/pet/TodoApp.java b/todo/src/main/java/ru/kamask/pet/TodoApp.java index 8056e31..601e3b0 100644 --- a/todo/src/main/java/ru/kamask/pet/TodoApp.java +++ b/todo/src/main/java/ru/kamask/pet/TodoApp.java @@ -14,11 +14,7 @@ public class TodoApp { TodoApp app = new TodoApp(); taskManager = app.new TaskManager(); - TaskStatus status = TaskStatus.valueOf("NEW"); - - System.out.println(status.getDescription()); - - // app.run(); + app.run(); } @@ -73,14 +69,32 @@ public class TodoApp { } private static void displayTask(Task task) { - task.printInfo(true); - String firstOption = task.getCompleted() ? "[1]Не выполнено" : "[1]Выполнено"; - int input = requestIntFromInput(firstOption + " [0]Главное меню\n\nВвод:", - new int[] { 0, 1 }); - if (input == 1) { - task.toggleCompleted(); - displayTask(task); + Task.TaskPrinter.print(task); + + String firstOption = switch (task.getStatus()) { + case NEW, CANCELLED -> "Начать"; + case IN_PROGRESS -> "Выполнено"; + case COMPLETED -> "Доделать"; + }; + + int input = requestIntFromInput("[1]" + firstOption + " [2]Отменить [0]Главное меню\n\nВвод:", + new int[] { 0, 1, 2 }); + + switch (input) { + case 0: + return; + case 1: { + switch (task.getStatus()) { + case NEW, CANCELLED, COMPLETED -> taskManager.markInProgress(task.getId()); + case IN_PROGRESS -> taskManager.markCompleted(task.getId()); + } + break; + } + case 2: + taskManager.markCanceled(task.getId()); } + + displayTask(task); } private static void displayTasks() { @@ -106,7 +120,7 @@ public class TodoApp { """); - printAll(tasks); + taskManager.printTasks(); int[] variantsInput = new int[tasksCounter + 1]; for (int i = 0; i < tasksCounter; i++) @@ -154,46 +168,83 @@ public class TodoApp { } while (true); } - private static void printAll(Task... tasks) { - for (Task t : tasks) - if (t != null) - t.printInfo(); - } - - private static boolean markTaskCompletedById(Task[] tasks, int id) { - for (Task t : tasks) - if (t != null && t.getId() == id) { - if (!t.getCompleted()) - t.toggleCompleted(); - return true; - } - return false; - } - private class TaskManager { void addTask(Task task) { tasks[tasksCounter++] = task; } - void markCompleted(int id) { - markTaskCompletedById(tasks, id); + boolean markCompleted(int id) { + for (int i = 0; i < tasksCounter; i++) + if (tasks[i].getId() == id) { + TaskAction action = new TaskAction() { + @Override + public void execute(Task task) { + task.markCompleted(); + } + }; + action.execute(tasks[i]); + return true; + } + return false; + } + + boolean markInProgress(int id) { + for (int i = 0; i < tasksCounter; i++) + if (tasks[i].getId() == id) { + TaskAction action = new TaskAction() { + @Override + public void start(Task task) { + task.markInProgress(); + } + }; + action.start(tasks[i]); + return true; + } + return false; + } + + boolean markCanceled(int id) { + for (int i = 0; i < tasksCounter; i++) + if (tasks[i].getId() == id) { + TaskAction action = new TaskAction() { + @Override + public void cancel(Task task) { + task.markCanceled(); + } + }; + action.cancel(tasks[i]); + return true; + } + return false; } void printTasks() { class ShortTaskPrinter { void print(Task task) { - System.out.printf("%-3s | %s\n", task.getId(), task.getTitle()); + int id = task.getId(); + String title = task.getTitle(); + TaskStatus status = task.getStatus(); + + String stringCompleted = status.getColorCode() + status.getDescription() + "\u001B[0m"; + System.out.printf("%-3d | %-20s | %s\n", id, title, stringCompleted); } } - ShortTaskPrinter p = new ShortTaskPrinter(); + ShortTaskPrinter printer = new ShortTaskPrinter(); for (int i = 0; i < Task.taskCount; i++) - p.print(tasks[i]); + printer.print(tasks[i]); } } interface TaskAction { - void execute(Task task); + default void execute(Task task) { + }; + + default void start(Task task) { + }; + + default void cancel(Task task) { + }; } }