- Условия задачи
Разработать программу для создания и управления задачами с рабочим временем с 9:00 до 21:00. Реализовать функции добавления, удаления, анализа задач и управления временными промежутками.
- Вывод списка задач Отображает список всех задач в хронологическом порядке. Каждая задача представлена в формате: «номер - время начала - время окончания - название задачи».
- Добавление задачи Добавляет новую задачу с указанным временем начала (в формате «hh:mm»), временем выполнения (в минутах) и названием. Задачи с пересекающимся временем не добавляются. Задачи с некорректным временем (вне интервала 9:00-21:00) также не добавляются.
- Самая длинная задача Выводит информацию о самой продолжительной задаче. Если таких задач несколько, возвращается первая из них.
- Задачи на заданном промежутке времени Возвращает все задачи, которые пересекаются с указанным временным промежутком (задачи, начало или конец которых попадает в промежуток).
- Задачи, завершённые до указанного времени Возвращает все задачи, завершённые до указанного времени.
- Удаление задачи по номеру Удаляет задачу с указанным номером.
- Удаление задач, начинающихся на заданном промежутке Удаляет все задачи, которые начинаются в пределах указанного временного промежутка.
- Удаление задач, пересекающих промежуток Удаляет все задачи, пересекающие указанный временной промежуток. Если задача частично находится в промежутке, она обрезается.
- Удаление самых коротких задач Удаляет все задачи с минимальной продолжительностью.
- Добавление задачи в первый доступный временной интервал Добавляет задачу с указанным названием и временем выполнения (в минутах) в первый доступный временной интервал. Если задача не может быть размещена, добавление не выполняется.
- Подробное описание, как Вы понимаете, того, что вам нужно сделать. Можно с примерами
- Для хранения задачи класс Task.
- Для хранения списка задач ArrayList, т.к. его проще изменять, чем массив.
- Для хранения времени LocalTime.
Класс для задач имеет приватные поля для хранения времени начала и окончания задачи, названия и id. Доступ к значениям полей осуществляется через геттеры, а изменение значений полей — через сеттеры. Метод toString переопределен так: id + " - " + startTime + " - " + endTime + " - " + name.
Класс представляет собой ArrayList из Task и совокупность методов для управления объектами класса Task. Класс включает следующие методы: isValidTask(LocalTime startTime, int duration): Проверяет, корректно ли задано время начала задачи и не пересекается ли она с уже существующими задачами. Возвращает true, если задача может быть добавлена, и false в противном случае.
addTask(LocalTime startTime, int duration, String name): Добавляет новую задачу в список, если она валидна. Выводит сообщение о результате операции.
removeTask(int id): Удаляет задачу по id.
printAllTasks(): Выводит все задачи в отсортированном порядке по времени начала.
getLongestTask(): Находит и возвращает самую длинную задачу.
getTasksInRange(LocalTime startRange, LocalTime endRange): Возвращает список задач, которые находятся в заданном временном промежутке.
getCompletedTasksBefore(LocalTime time): Возвращает список завершенных задач до указанного времени.
removeTasksInStartRange(LocalTime startRange, LocalTime endRange): Удаляет задачи, которые начинаются в заданном диапазоне.
removeAndTrimTasksInRange(LocalTime startRange, LocalTime endRange): Удаляет задачи, которые полностью перекрывают указанный диапазон времени. Если задача частично перекрывает диапазон, она обрезается.
removeShortestTasks(): Удаляет все задачи с минимальной продолжительностью.
addTaskInFirst(int duration, String name): Находит первый свободный временной промежуток для добавления новой задачи с указаной продолжительностью.
- Тест на создания задач после 21:00
-
Input:
add 20:00 61 задача 1
-
Output:
Некорректное время или пересечение с существующими задачами, задача не создана.
- Тест на создания пересекающихся задач
-
Input:
add 20:00 59 задача 1 add 19:00 65 задача 2
-
Output:
Задача создана. Некорректное время или пересечение с существующими задачами, задача не создана.
- Тест поиск самой длинной первой задачи
-
Input:
add 14:00 10 t1 add 17:00 10 t2 max
-
Output:
Задача создана. Задача создана. 1 - 14:00 - 14:10 - t1
- Тест на возвращение задач, которые пересекаются с указанным временным промежутком (задачи, начало или конец которых попадает в промежуток).
-
Input:
add 14:00 10 t1 add 15:00 10 t2 add 16:00 10 t3 add 17:00 10 t4 range 14:14 17:05
-
Output:
Задача создана. Задача создана. Задача создана. Задача создана. [2 - 15:00 - 15:10 - t2, 3 - 16:00 - 16:10 - t3, 4 - 17:00 - 17:10 - t4]
- Тест на возвращение задач, завершённых до указанного времени.
-
Input:
add 14:00 10 t1 add 15:00 10 t2 completed 15:05
-
Output:
Задача создана. Задача создана. В 15:05 эти задачи будут выполнены: [1 - 14:00 - 14:10 - t1]
- Тест на удаление задач, пересекающих указанный временной промежуток. Если задача частично находится в промежутке, она обрезается.
-
Input:
add 14:00 10 t1 add 15:00 10 t2 look del time 13:00 14:05 look
-
Output:
Задача создана. Задача создана. 1 - 14:00 - 14:10 - t1 2 - 15:00 - 15:10 - t2 Все задачи, начинающиеся на этом временном промежутке удалены. 2 - 15:00 - 15:10 - t2
- Тест на добавление задач с указанным названием и временем выполнения (в минутах) в первый доступный временной интервал. Если задача не может быть размещена, добавление не выполняется.
-
Input:
add 14:00 10 t1 add first 20 t2
-
Output:
Задача создана. Нашёлся первый свободный временной промежуток: 09:00 - 09:20. Задача создана.
- Тест на добавление задач с указанным названием и временем выполнения (в минутах) в первый доступный временной интервал. Если задача не может быть размещена, добавление не выполняется.
-
Input:
add 09:00 600 t1 add first 200 t2
-
Output:
Задача создана. Не удалось добавить задачу, не нашёлся свободный временной промежуток нужной длины.