149 lines
4.7 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package ru.kamask.pet;
import java.util.Scanner;
public class TodoApp {
private static Task[] tasks = new Task[10];
private static int nextTaskId = 1;
private static int tasksCounter = 0;
private static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
displayMainMenu();
}
public static int requestIntFromInput(String template, int[] allowedInts) {
do {
System.out.print(template);
int input;
do {
if (scanner.hasNextInt()) {
input = scanner.nextInt();
scanner.nextLine();
break;
} else {
scanner.next();
System.out.print("Ошибка: используйте цифры.\овторите ввод:");
}
} while (true);
for (int i : allowedInts)
if (i == input)
return input;
System.out.print("Ошибка: укажите номер выбранного пункта.\овторите ввод:");
} while (true);
}
public static void displayMainMenu() {
while (true) {
String menu = """
┌──────────────────────────┐
| [1] Добавить дело |
| [2] Список дел |
| |
| [0] Выйти из программы |
└──────────────────────────┘
Введите номер пункта меню:""";
switch (requestIntFromInput(menu, new int[] { 0, 1, 2 })) {
case 1 -> displayCreateTask();
case 2 -> displayTasks();
case 0 -> {
scanner.close();
System.exit(0);
}
}
}
}
private static void displayCreateTask() {
if (tasksCounter >= 9) {
System.out.println("\nОшибка: Достигнут лимит в 10 дел.\n");
return;
}
int id = nextTaskId++;
String title;
String description;
do {
System.out.print("\nНпишите название дела (320 символов): ");
title = scanner.nextLine().trim();
if (title.length() >= 3 && title.length() <= 20)
break;
System.out.print("\nОшибка: Название должно содержать от 3 до 20 символов.\опробуйте снова: ");
} while (true);
System.out.print("\nНпишите описание дела: ");
description = scanner.nextLine().trim();
var task = new Task(id, title, description);
tasks[tasksCounter++] = task;
}
private static void displayTasks() {
if (tasksCounter < 1) {
int input = requestIntFromInput("""
Список дел пуст.
[1] Добавить дело
[0] Выйти из программы
Введите номер пункта:""", new int[] { 0, 1 });
if (input == 1) {
displayCreateTask();
displayTasks();
} else
System.exit(0);
}
int[] tasksIDs = new int[tasksCounter + 1];
System.out.println("""
Список дел:
""");
for (int i = 0; i < tasksCounter; i++) {
tasks[i].printInfo();
tasksIDs[i] = tasks[i].getId();
}
tasksIDs[tasksCounter] = 0;
int input = requestIntFromInput("""
Введите номер дела или 0 для возврата в меню:""", tasksIDs);
if (input == 0)
return;
displayTask(getTaskById(input));
}
public static Task getTaskById(int id) {
for (int i = 0; i < tasksCounter; i++) {
if (tasks[i].getId() == id)
return tasks[i];
}
return null;
}
public 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);
}
}
}