using System.Collections.Generic;
using Newtonsoft.Json.Converters;
namespace _000_Taskmanager
public string name { get; set; }
public string description { get; set; }
public Status status { get; set; }
public Task(string name, string description, Status status)
this.description = description;
public TaskManager(string dataDir, string fileName)
if (!Directory.Exists(dataDir))
Directory.CreateDirectory(dataDir);
string path = dataDir + "/" + fileName;
Console.WriteLine("Файл найден.\nOK");
Console.WriteLine("Файл не найден и создаётся...");
Console.WriteLine("Новый файл создан: tasklist.json");
Console.WriteLine($"Using file: {_filePath}");
Console.WriteLine("\nВведите название новой задачи:");
var name = Console.ReadLine();
Console.WriteLine("\nСохранено.\nВведите описание новой задачи:");
var description = Console.ReadLine();
var status=Status.NotDone;
var task = new Task(name, description, status);
Console.WriteLine(string.Format("\nЗадача создана:\nНазвание: {0}\nОписание: {1}\nСтатус: Не выполнено", task.name, task.description));
File.WriteAllText(_filePath, JsonConvert.SerializeObject(_tasks));
Console.WriteLine("Введите номер задачи, которую хотите удалить:");
int index=Convert.ToInt32(Console.ReadLine());
if(index>=0 && index-1<_tasks.Count){
_tasks.RemoveAt(index-1);
Console.WriteLine("Задача удалена.");
Console.WriteLine("Задачи с таким номером не существует.");
public void DeleteAllTasks()
Console.WriteLine("Список задач полностью очищен.");
public List<Task> ParseTasks()
string json = File.ReadAllText(_filePath);
List<Task> list = JsonConvert.DeserializeObject<List<Task>>(json);
Console.WriteLine("Список задач:");
foreach (var task in ParseTasks()) {
Console.WriteLine(string.Format("\n{0}) {1}:\n{2}", number, task.name, task.description));
if (task.status == Status.NotDone) {Console.WriteLine("Статус: Не выполнено");}
else if (task.status == Status.Paused) {Console.WriteLine("Статус: Приостановлено");}
else if (task.status == Status.PartDone) {Console.WriteLine("Статус: Частично выполнено");}
else if (task.status == Status.Done) {Console.WriteLine("Статус: Завершено");}
Console.WriteLine("Показать задачи со статусом:\n1 - Не выполнено\n2 - Приостановлено\n3 - Частично выполнено\n4 - Завершено\n");
int filter=Convert.ToInt32(Console.ReadLine());
var filteredTasks = new List<Tuple<int, Task>>();
for (int i = 0; i < _tasks.Count; ++i)
if (_tasks[i].status == (Status)filter)
filteredTasks.Add(new Tuple<int, Task>(i, _tasks[i]));
if ((Status)filter == Status.NotDone) {Console.WriteLine("Не выполненные задачи:");}
else if ((Status)filter == Status.Paused) {Console.WriteLine("Приостановленные задачи:");}
else if ((Status)filter == Status.PartDone) {Console.WriteLine("Частично выполненные:");}
else if ((Status)filter == Status.Done) {Console.WriteLine("Завершённые задачи:");}
foreach (var Task in filteredTasks)
Console.WriteLine(string.Format("\n{0}) {1}:\n{2}", number, _tasks[number].name, _tasks[number].description));
public void ChangeStatus(int index, int newstatus)
_tasks[index].status=(Status)newstatus;
public void ReName(int index, string newname)
_tasks[index].name = newname;
public void ReDescription(int index, string newdescription)
_tasks[index].description = newdescription;
private List<Task> _tasks;
private string _filePath;
public static void Main(string[] args)
string dataDir = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/MyTaskManager";
var taskManager = new TaskManager(dataDir, "tasklist.json");
Console.WriteLine("\nСписок команд: new, list, edit, delete, delete all, exit");
marker=Console.ReadLine();
taskManager.CreateTask();
Console.WriteLine("\nЕсли вы хотите отсортировать задачи, введите 'sort'");
else if (marker=="delete")
taskManager.DeleteTask();
else if (marker=="delete all")
taskManager.DeleteAllTasks();
Console.WriteLine("Введите номер задачи, которую хотите редактировать:");
int index=Convert.ToInt32(Console.ReadLine());
Console.WriteLine("\nДля смены названия, введите 'name'\nЧтобы изменить описание, введите 'desc'");
Console.WriteLine("Для смены статуса, введите 'status'\nЧтобы вернуться назад, введите 'back'");
marker=Console.ReadLine();
Console.WriteLine("Введите новое название");
string newname=Console.ReadLine();
taskManager.ReName(index, newname);
Console.WriteLine("Сохранено: {0}", newname);
Console.WriteLine("Введите новое описание");
string newdescription=Console.ReadLine();
taskManager.ReDescription(index, newdescription);
Console.WriteLine("Сохранено: {0}", newdescription);
else if (marker=="status")
Console.WriteLine("Введите номер статуса:\n1 - Не выполнено\n2 - Приостановлено\n3 - Частично выполнено\n4 - Завершено\n");
int newstatus=Convert.ToInt32(Console.ReadLine());
taskManager.ChangeStatus(index, newstatus);
if (newstatus == 1) {Console.WriteLine("Сохранено: Не выполнено");}
else if (newstatus == 2) {Console.WriteLine("Сохранено: Приостановлено");}
else if (newstatus == 3) {Console.WriteLine("Сохранено: Частично выполнено");}
else if (newstatus == 4) {Console.WriteLine("Сохранено: Завершено");}
else if (marker!="name" && marker!="desc")
Console.WriteLine("Error: invalid input: '{0}'.", marker);
else if (marker!="new" && marker!="list" && marker!="exit"){
Console.WriteLine("Error: invalid input: '{0}'.", marker);