From ff1bf8ce4a0f934e450ecb706e332b5a2d352e4a Mon Sep 17 00:00:00 2001 From: Nazar Tymiv Date: Fri, 24 May 2024 22:07:09 +0100 Subject: [PATCH 1/8] feat: add Menu class with showOption function --- Todo-Challenge/Todo-Challenge/Menu.cs | 21 +++++++++++++++++++++ Todo-Challenge/Todo-Challenge/Program.cs | 11 +++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 Todo-Challenge/Todo-Challenge/Menu.cs diff --git a/Todo-Challenge/Todo-Challenge/Menu.cs b/Todo-Challenge/Todo-Challenge/Menu.cs new file mode 100644 index 0000000..92acaad --- /dev/null +++ b/Todo-Challenge/Todo-Challenge/Menu.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Todo_Challenge +{ + class Menu + { + public static void ShowOptions() + { + Console.WriteLine("Here are the options you can select:"); + Console.WriteLine(); + Console.WriteLine("0 - exit"); + Console.WriteLine("1 - view TODO list"); + Console.WriteLine("2 - add new item into TODO list"); + Console.WriteLine("3 - remove item from TODO list\n"); + } + } +} \ No newline at end of file diff --git a/Todo-Challenge/Todo-Challenge/Program.cs b/Todo-Challenge/Todo-Challenge/Program.cs index 3751555..9c02198 100644 --- a/Todo-Challenge/Todo-Challenge/Program.cs +++ b/Todo-Challenge/Todo-Challenge/Program.cs @@ -1,2 +1,9 @@ -// See https://aka.ms/new-console-template for more information -Console.WriteLine("Hello, World!"); +using System.Text; +using Todo_Challenge; + +Console.WriteLine("Welcome to TodoList :)\n\n"); + +new Menu(); +Menu.ShowOptions(); + +Console.ReadLine(); \ No newline at end of file From 2990211bdb05607e463d297a09948f5b5818a789 Mon Sep 17 00:00:00 2001 From: Nazar Tymiv Date: Fri, 24 May 2024 22:11:52 +0100 Subject: [PATCH 2/8] feat: add TodoItem class --- Todo-Challenge/Todo-Challenge/TodoItem.cs | 25 +++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Todo-Challenge/Todo-Challenge/TodoItem.cs diff --git a/Todo-Challenge/Todo-Challenge/TodoItem.cs b/Todo-Challenge/Todo-Challenge/TodoItem.cs new file mode 100644 index 0000000..758df41 --- /dev/null +++ b/Todo-Challenge/Todo-Challenge/TodoItem.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Todo_Challenge +{ + internal class TodoItem + { + public int Id { get; set; } + public string Name { get; set; } + public bool Completed { get; set; } = false; + + public TodoItem? NewTodoItem { get; set; } = null; + + public TodoItem(int id, string name) + { + Id = id; + Name = name; + Completed = false; + } + + } +} \ No newline at end of file From 731139940ca838fa88ecd1c67bcd7bcef6df0f4f Mon Sep 17 00:00:00 2001 From: Nazar Tymiv Date: Fri, 24 May 2024 22:32:59 +0100 Subject: [PATCH 3/8] feat: add AskOption function into Menu class --- Todo-Challenge/Todo-Challenge/Menu.cs | 20 ++++++++++++++++++++ Todo-Challenge/Todo-Challenge/Program.cs | 21 ++++++++++++++++----- Todo-Challenge/Todo-Challenge/TodoItem.cs | 6 ++---- 3 files changed, 38 insertions(+), 9 deletions(-) diff --git a/Todo-Challenge/Todo-Challenge/Menu.cs b/Todo-Challenge/Todo-Challenge/Menu.cs index 92acaad..93f8b41 100644 --- a/Todo-Challenge/Todo-Challenge/Menu.cs +++ b/Todo-Challenge/Todo-Challenge/Menu.cs @@ -17,5 +17,25 @@ public static void ShowOptions() Console.WriteLine("2 - add new item into TODO list"); Console.WriteLine("3 - remove item from TODO list\n"); } + + public static int AskOption() + { + while (true) + { + Console.Write("Select Option: "); + string userInput = Console.ReadLine(); + + bool optionRes = int.TryParse(userInput, out int option); + + if (!optionRes) + { + Console.WriteLine("\nInput was not an integer\n"); + Thread.Sleep(1500); + continue; + } + + return option; + } + } } } \ No newline at end of file diff --git a/Todo-Challenge/Todo-Challenge/Program.cs b/Todo-Challenge/Todo-Challenge/Program.cs index 9c02198..0743f24 100644 --- a/Todo-Challenge/Todo-Challenge/Program.cs +++ b/Todo-Challenge/Todo-Challenge/Program.cs @@ -1,9 +1,20 @@ -using System.Text; +using System.ComponentModel.Design; +using System.Text; using Todo_Challenge; -Console.WriteLine("Welcome to TodoList :)\n\n"); +class Program +{ + static void Main() + { -new Menu(); -Menu.ShowOptions(); + while(true) + { + new Menu(); + Menu.ShowOptions(); -Console.ReadLine(); \ No newline at end of file + int option = Menu.AskOption(); + + Console.ReadLine(); + } + } +} \ No newline at end of file diff --git a/Todo-Challenge/Todo-Challenge/TodoItem.cs b/Todo-Challenge/Todo-Challenge/TodoItem.cs index 758df41..c41d84c 100644 --- a/Todo-Challenge/Todo-Challenge/TodoItem.cs +++ b/Todo-Challenge/Todo-Challenge/TodoItem.cs @@ -12,13 +12,11 @@ internal class TodoItem public string Name { get; set; } public bool Completed { get; set; } = false; - public TodoItem? NewTodoItem { get; set; } = null; - - public TodoItem(int id, string name) + public TodoItem(int id, string name, bool completed) { Id = id; Name = name; - Completed = false; + Completed = completed; } } From 7c749edf77fe1b2b0f92b17c31111d71b44641ae Mon Sep 17 00:00:00 2001 From: Nazar Tymiv Date: Fri, 24 May 2024 22:37:26 +0100 Subject: [PATCH 4/8] feat: add option validator --- Todo-Challenge/Todo-Challenge/Menu.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Todo-Challenge/Todo-Challenge/Menu.cs b/Todo-Challenge/Todo-Challenge/Menu.cs index 93f8b41..503c73a 100644 --- a/Todo-Challenge/Todo-Challenge/Menu.cs +++ b/Todo-Challenge/Todo-Challenge/Menu.cs @@ -29,8 +29,13 @@ public static int AskOption() if (!optionRes) { - Console.WriteLine("\nInput was not an integer\n"); - Thread.Sleep(1500); + Console.WriteLine("\nInput was not an integer :(\n"); + continue; + } + + if (option < 0 || option > 3) + { + Console.WriteLine($"\nOption {option} unavaliable :(\n"); continue; } From 2c038c1fa252a129b6534e3287e087392303b0de Mon Sep 17 00:00:00 2001 From: Nazar Tymiv Date: Fri, 24 May 2024 23:20:45 +0100 Subject: [PATCH 5/8] feat: add case for view created todoitems and create askToContinue helper --- Todo-Challenge/Todo-Challenge/Menu.cs | 46 +++++++++++++++++++++++ Todo-Challenge/Todo-Challenge/Program.cs | 8 +++- Todo-Challenge/Todo-Challenge/TodoItem.cs | 4 +- 3 files changed, 53 insertions(+), 5 deletions(-) diff --git a/Todo-Challenge/Todo-Challenge/Menu.cs b/Todo-Challenge/Todo-Challenge/Menu.cs index 503c73a..b636f1a 100644 --- a/Todo-Challenge/Todo-Challenge/Menu.cs +++ b/Todo-Challenge/Todo-Challenge/Menu.cs @@ -42,5 +42,51 @@ public static int AskOption() return option; } } + + public static void OptionResponse(List todoList, int option) + { + switch (option) + { + case 0: + Environment.Exit(0); + break; + + case 1: + if (todoList.Count > 0) + { + foreach (var item in todoList) + { + Console.WriteLine($"\nName: {item.Name}\n Completed: {item.Completed}\n"); + } + + AskToContinue(); + } + else + { + Console.WriteLine("\nYour TodoList is empty :(\n"); + AskToContinue(); + } + + break; + + case 2: + break; + + case 3: + break; + + default: + Console.WriteLine("Invalid option."); + break; + } + } + + private static void AskToContinue() + { + Console.Write("Press Enter to continue: "); + Console.ReadLine(); + Console.Clear(); + } + } } \ No newline at end of file diff --git a/Todo-Challenge/Todo-Challenge/Program.cs b/Todo-Challenge/Todo-Challenge/Program.cs index 0743f24..09196c2 100644 --- a/Todo-Challenge/Todo-Challenge/Program.cs +++ b/Todo-Challenge/Todo-Challenge/Program.cs @@ -6,15 +6,19 @@ class Program { static void Main() { + List todoList = new List(); - while(true) + todoList.Add(new TodoItem("Task 1", false)); + todoList.Add(new TodoItem("Task 2", true)); + + while (true) { new Menu(); Menu.ShowOptions(); int option = Menu.AskOption(); - Console.ReadLine(); + Menu.OptionResponse(todoList, option); } } } \ No newline at end of file diff --git a/Todo-Challenge/Todo-Challenge/TodoItem.cs b/Todo-Challenge/Todo-Challenge/TodoItem.cs index c41d84c..b061b3d 100644 --- a/Todo-Challenge/Todo-Challenge/TodoItem.cs +++ b/Todo-Challenge/Todo-Challenge/TodoItem.cs @@ -8,13 +8,11 @@ namespace Todo_Challenge { internal class TodoItem { - public int Id { get; set; } public string Name { get; set; } public bool Completed { get; set; } = false; - public TodoItem(int id, string name, bool completed) + public TodoItem(string name, bool completed) { - Id = id; Name = name; Completed = completed; } From a41a610ae3a55229078be40e97187ff69e59e6c4 Mon Sep 17 00:00:00 2001 From: Nazar Tymiv Date: Fri, 24 May 2024 23:36:06 +0100 Subject: [PATCH 6/8] feat: add case for add new item to the todo list --- Todo-Challenge/Todo-Challenge/Menu.cs | 32 +++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/Todo-Challenge/Todo-Challenge/Menu.cs b/Todo-Challenge/Todo-Challenge/Menu.cs index b636f1a..35ed0ca 100644 --- a/Todo-Challenge/Todo-Challenge/Menu.cs +++ b/Todo-Challenge/Todo-Challenge/Menu.cs @@ -70,13 +70,37 @@ public static void OptionResponse(List todoList, int option) break; case 2: - break; + Console.Write("\nEnter name of the Todo Item: "); + string name = Console.ReadLine(); + Console.Write("Is this Todo completed? y/n: "); + string completedInput = Console.ReadLine(); - case 3: + bool completed = false; + + switch (completedInput) + { + case "y": + completed = true; + break; + + case "n": + completed = false; + break; + + default: + Console.WriteLine("\nInvalid option.\n"); + AskToContinue(); + break; + } + + todoList.Add(new TodoItem(name, completed)); + + Console.WriteLine("\nTodo Item have been added to the Todo List successfully\n"); + + AskToContinue(); break; - default: - Console.WriteLine("Invalid option."); + case 3: break; } } From f672fecb85209ea5174644298ed901adea095432 Mon Sep 17 00:00:00 2001 From: Nazar Tymiv Date: Fri, 24 May 2024 23:46:51 +0100 Subject: [PATCH 7/8] feat: add case for delete item from todolist --- Todo-Challenge/Todo-Challenge/Menu.cs | 50 +++++++++++++++++------- Todo-Challenge/Todo-Challenge/Program.cs | 3 -- 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/Todo-Challenge/Todo-Challenge/Menu.cs b/Todo-Challenge/Todo-Challenge/Menu.cs index 35ed0ca..7c917e2 100644 --- a/Todo-Challenge/Todo-Challenge/Menu.cs +++ b/Todo-Challenge/Todo-Challenge/Menu.cs @@ -52,21 +52,9 @@ public static void OptionResponse(List todoList, int option) break; case 1: - if (todoList.Count > 0) - { - foreach (var item in todoList) - { - Console.WriteLine($"\nName: {item.Name}\n Completed: {item.Completed}\n"); - } - - AskToContinue(); - } - else - { - Console.WriteLine("\nYour TodoList is empty :(\n"); - AskToContinue(); - } + ShowTodoItems(todoList); + AskToContinue(); break; case 2: @@ -95,12 +83,29 @@ public static void OptionResponse(List todoList, int option) todoList.Add(new TodoItem(name, completed)); - Console.WriteLine("\nTodo Item have been added to the Todo List successfully\n"); + Console.WriteLine("\nTodo Item have been added to the Todo List successfully :)\n"); AskToContinue(); break; case 3: + Console.Write("\nEnter name of the Todo Item which you would lite to remove: "); + string nameToRemove = Console.ReadLine(); + + var itemToRemove = todoList.Single(item => item.Name == nameToRemove); + + if (itemToRemove != null) + { + todoList.Remove(itemToRemove); + + Console.WriteLine("\nTodo Item have been removed from the Todo List successfully :)\n"); + } + else + { + Console.WriteLine($"\nItem with name {nameToRemove} doesn't exist :(\n"); + } + + AskToContinue(); break; } } @@ -112,5 +117,20 @@ private static void AskToContinue() Console.Clear(); } + private static void ShowTodoItems(List todoList) + { + if (todoList.Count > 0) + { + foreach (var item in todoList) + { + Console.WriteLine($"\nName: {item.Name}\n Completed: {item.Completed}\n"); + } + } + else + { + Console.WriteLine("\nYour TodoList is empty :(\n"); + } + } + } } \ No newline at end of file diff --git a/Todo-Challenge/Todo-Challenge/Program.cs b/Todo-Challenge/Todo-Challenge/Program.cs index 09196c2..04c62f6 100644 --- a/Todo-Challenge/Todo-Challenge/Program.cs +++ b/Todo-Challenge/Todo-Challenge/Program.cs @@ -8,9 +8,6 @@ static void Main() { List todoList = new List(); - todoList.Add(new TodoItem("Task 1", false)); - todoList.Add(new TodoItem("Task 2", true)); - while (true) { new Menu(); From c4c8eb5ba4bac08cde969bb07f43444afef23b14 Mon Sep 17 00:00:00 2001 From: Nazar Tymiv Date: Sat, 25 May 2024 00:03:55 +0100 Subject: [PATCH 8/8] feat: add list of todo items in case delete item --- Todo-Challenge/Todo-Challenge/Menu.cs | 43 +++++++++++++++------------ 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/Todo-Challenge/Todo-Challenge/Menu.cs b/Todo-Challenge/Todo-Challenge/Menu.cs index 7c917e2..c5d4402 100644 --- a/Todo-Challenge/Todo-Challenge/Menu.cs +++ b/Todo-Challenge/Todo-Challenge/Menu.cs @@ -60,27 +60,24 @@ public static void OptionResponse(List todoList, int option) case 2: Console.Write("\nEnter name of the Todo Item: "); string name = Console.ReadLine(); + if (name.Length == 0) + { + Console.WriteLine("\nName cannot be empty :(\n"); + AskToContinue(); + break; + } + Console.Write("Is this Todo completed? y/n: "); string completedInput = Console.ReadLine(); - - bool completed = false; - - switch (completedInput) + if (completedInput != "y" && completedInput != "n") { - case "y": - completed = true; - break; - - case "n": - completed = false; - break; - - default: - Console.WriteLine("\nInvalid option.\n"); - AskToContinue(); - break; + Console.WriteLine("\nInvalid completed field :(\n"); + AskToContinue(); + break; } + bool completed = completedInput == "y" ? true : false; + todoList.Add(new TodoItem(name, completed)); Console.WriteLine("\nTodo Item have been added to the Todo List successfully :)\n"); @@ -89,13 +86,21 @@ public static void OptionResponse(List todoList, int option) break; case 3: + ShowTodoItems(todoList); + + if (todoList.Count == 0) + { + AskToContinue(); + break; + } + Console.Write("\nEnter name of the Todo Item which you would lite to remove: "); string nameToRemove = Console.ReadLine(); - var itemToRemove = todoList.Single(item => item.Name == nameToRemove); - - if (itemToRemove != null) + if (todoList.Any(item => item.Name == nameToRemove)) { + var itemToRemove = todoList.Single(item => item.Name == nameToRemove); + todoList.Remove(itemToRemove); Console.WriteLine("\nTodo Item have been removed from the Todo List successfully :)\n");