Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 35 additions & 7 deletions src/Main.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import tracker.*;

import java.io.File;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;
import java.util.TreeSet;

public class Main {
public static void main(String[] args) {
Expand All @@ -27,7 +30,6 @@ public static void main(String[] args) {
manager = new FileBackedTaskManager(tasks, epicTasks, subTasks, fileName);
}


while (true) {
printMenu();
int command = scanner.nextInt();
Expand All @@ -39,16 +41,24 @@ public static void main(String[] args) {
heading = scanner.nextLine();
System.out.println("Введите описание задачи:");
description = scanner.nextLine();
System.out.println("Введите продолжительность задачи (в минутах):");
long durationMinutes = scanner.nextLong();
Duration duration = Duration.ofMinutes(durationMinutes);
System.out.println("Введите дату и время начала выполнения задачи (в формате YYYY-MM-DDTHH:MM):");
String startTimeInput = scanner.next();
LocalDateTime startTime = LocalDateTime.parse(startTimeInput);

int index = manager.getTaskIndex(heading, description, "task");

if (index != -1) {
System.out.println("Такая задача уже есть! Ее индекс: " + tasks.get(index).getId());
} else {
Task newTask = new Task(heading, description, index);
Task newTask = new Task(heading, description, index, duration, startTime);
manager.createTask(newTask);
System.out.println("Задача успешно создана! Ее индекс: " + newTask.getId());
}
break;

case 2:
System.out.println("Введите идентификатор задачи, которую хотите отредактировать: ");
id = scanner.nextInt();
Expand Down Expand Up @@ -81,6 +91,7 @@ public static void main(String[] args) {
System.out.println("Задачи с таким id пока что нет");
}
break;

case 3:
System.out.println("Введите идентификатор задачи, которую хотите посмотреть:");
id = scanner.nextInt();
Expand Down Expand Up @@ -147,12 +158,14 @@ public static void main(String[] args) {
id = scanner.nextInt();
System.out.println(manager.getSubtasks(id));
break;

case 8:
System.out.println("Введите название задачи:");
System.out.println("Введите название эпика:");
heading = scanner.nextLine();
System.out.println("Введите описание задачи:");
System.out.println("Введите описание эпика:");
description = scanner.nextLine();


int epicIndex = manager.getTaskIndex(heading, description, "epic task");

if (epicIndex != -1) {
Expand All @@ -177,7 +190,14 @@ public static void main(String[] args) {
System.out.println("Введите описание подзадачи:");
description = scanner.nextLine();

Subtask newSubtask = new Subtask(heading, description, 0, epicId);
System.out.println("Введите продолжительность задачи (в минутах):");
durationMinutes = scanner.nextLong();
duration = Duration.ofMinutes(durationMinutes);
System.out.println("Введите дату и время начала выполнения эпика (в формате YYYY-MM-DDTHH:MM):");
startTimeInput = scanner.next();
startTime = LocalDateTime.parse(startTimeInput);

Subtask newSubtask = new Subtask(heading, description, 0, epicId, duration, startTime);
Subtask createdSubtask = manager.createSubTask(newSubtask);
System.out.println("Подзадача успешно создана! Ее идентификатор - " + createdSubtask.getId());
break;
Expand All @@ -198,7 +218,14 @@ public static void main(String[] args) {
case 11:
System.out.println(Managers.getDefaultHistory().getHistory());
break;
case 12:
case 12: // Например, добавим новый пункт в меню для получения приоритезированных задач
System.out.println("== Приоритезированные задачи: ==");
TreeSet<Task> prioritizedTasks = manager.getPrioritizedTasks();
for (Task task : prioritizedTasks) {
System.out.println(task);
}
break;
case 13:
return;
}
}
Expand All @@ -217,6 +244,7 @@ private static void printMenu() {
System.out.println("9 - Добавить подзадачи в эпик");
System.out.println("10 - Отметить сделанную задачу");
System.out.println("11 - Показать историю просмотров");
System.out.println("12 - Выход");
System.out.println("12 - Вывести задачи приотизировано");
System.out.println("13 - Выход");
}
}
52 changes: 48 additions & 4 deletions src/tracker/EpicTask.java
Original file line number Diff line number Diff line change
@@ -1,46 +1,90 @@
package tracker;

import java.time.Duration;
import java.time.LocalDateTime;
import java.util.ArrayList;

public class EpicTask extends Task {
private ArrayList<Subtask> subtasks;

public EpicTask(String heading, String description, int id) {
super(heading, description, id);
super(heading, description, id, Duration.ZERO, null); // Устанавливаем нулевую продолжительность и null для startTime
this.subtasks = new ArrayList<>();
}

public void addSubtask(Subtask subtask) {
subtasks.add(subtask);
calculateEpicDetails();
}

public ArrayList<Subtask> getSubtasks() {
return subtasks;
}

private void calculateEpicDetails() {
Duration totalDuration = Duration.ZERO;
LocalDateTime earliestStartTime = null;
LocalDateTime latestEndTime = null;

for (Subtask subtask : subtasks) {
totalDuration = totalDuration.plus(subtask.getDuration());
if (earliestStartTime == null || (subtask.getStartTime() != null && subtask.getStartTime().isBefore(earliestStartTime))) {
earliestStartTime = subtask.getStartTime();
}
if (latestEndTime == null || (subtask.getEndTime() != null && subtask.getEndTime().isAfter(latestEndTime))) {
latestEndTime = subtask.getEndTime();
}
}

this.duration = totalDuration;
this.startTime = earliestStartTime;
}

@Override
public LocalDateTime getEndTime() {
return super.getEndTime(); // Используем реализацию из Task
}

@Override
public String printTask() {
return "Глобальная задача с идентификатором " + id + "\n" + "Название: " + heading + "\n" + "Описание: " + description + "\n" + "Статус: " + status + "\n";
return "Глобальная задача с идентификатором " + id + "\n" +
"Название: " + heading + "\n" +
"Описание: " + description + "\n" +
"Статус: " + status + "\n" +
"Продолжительность: " + duration.toMinutes() + " минут\n" +
"Время начала: " + (startTime != null ? startTime : "Не задано");
}

@Override
public String toString() {
return getId() + "," + Type.EPIC + "," + getHeading() + "," + getStatus() + "," + getDescription() + ",";
return getId() + "," + Type.EPIC + "," + getHeading() + "," + getStatus() + "," +
getDescription() + "," + duration.toMinutes() + "," + (startTime != null ? startTime : "");
}

public static EpicTask fromString(String value) {
String[] parts = value.split(",");
if (parts.length < 5) {

// Проверка на минимальное количество частей
if (parts.length < 6) {
throw new IllegalArgumentException("Неверный формат строки: " + value);
}

int id = Integer.parseInt(parts[0]);
String heading = parts[2];
Status status = Status.valueOf(parts[3]);
String description = parts[4];
Duration duration = Duration.ofMinutes(Long.parseLong(parts[5]));
LocalDateTime startTime = parts.length > 6 && !parts[6].isEmpty() ? LocalDateTime.parse(parts[6]) : null;

EpicTask epicTask = new EpicTask(heading, description, id);
epicTask.setStatus(status);
epicTask.setDuration(duration);
epicTask.setStartTime(startTime);

// Инициализация пустого списка подзадач, если у эпика нет подзадач
if (duration.isZero() && startTime == null) {
epicTask.subtasks = new ArrayList<>(); // Инициализируем пустой список подзадач
}

return epicTask;
}
Expand Down
4 changes: 1 addition & 3 deletions src/tracker/FileBackedTaskManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.*;

public class FileBackedTaskManager extends InMemoryTaskManager {
private final String filePath;
Expand Down
15 changes: 8 additions & 7 deletions src/tracker/InMemoryHistoryManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.util.ArrayList;
import java.util.HashMap;


public class InMemoryHistoryManager implements HistoryManager {
private final HashMap<Integer, Node> tasksById;
private Node head;
Expand Down Expand Up @@ -32,6 +33,12 @@ public void remove(int id) {
}
}

public void clear() {
tasksById.clear();
head = null;
tail = null;
}

private void linkLast(Node node) {
if (head == null) {
head = node;
Expand All @@ -43,12 +50,6 @@ private void linkLast(Node node) {
}
}

public void clear() {
tasksById.clear();
head = null;
tail = null;
}

private void removeNode(Node node) {
if (node == head && node == tail) {
head = null;
Expand Down Expand Up @@ -90,4 +91,4 @@ public Node(Task task) {
this.next = null;
}
}
}
}
Loading