From 1f8424645d26406490004084297cad31bac25d38 Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Tue, 31 Jan 2023 21:33:59 +0800 Subject: [PATCH 01/29] This is greed for level0 --- src/main/java/Duke.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 5d313334c..b24dfa8ea 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,10 +1,9 @@ public class Duke { public static void main(String[] args) { - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println("Hello from\n" + logo); + System.out.println("Hello! I'm Duke"); + System.out.println("What can I do for you?"); + System.out.println("\n"); + System.out.println("Bye. Hope to see you again soon!"); + } } From a1b47d950e7e513c6d645b98fdcdeae67de029f4 Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Tue, 31 Jan 2023 22:34:47 +0800 Subject: [PATCH 02/29] edit duke --- src/main/java/Duke.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index b24dfa8ea..a3237290b 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,5 +1,13 @@ public class Duke { public static void main(String[] args) { + + String logo = " ____ _ \n" + + "| _ \\ _ _| | _____ \n" + + "| | | | | | | |/ / _ \\\n" + + "| |_| | |_| | < __/\n" + + "|____/ \\__,_|_|\\_\\___|\n"; + System.out.println("Hello from\n" + logo); + System.out.println("Hello! I'm Duke"); System.out.println("What can I do for you?"); System.out.println("\n"); From 150d2b1e0e18ba6852705e7d7f6aeb903b76ad50 Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Tue, 31 Jan 2023 23:16:54 +0800 Subject: [PATCH 03/29] This is level 1 code --- src/main/java/Duke.java | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index a3237290b..3739cbc00 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,17 +1,27 @@ +import java.util.Scanner; + public class Duke { public static void main(String[] args) { - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println("Hello from\n" + logo); - - System.out.println("Hello! I'm Duke"); - System.out.println("What can I do for you?"); - System.out.println("\n"); - System.out.println("Bye. Hope to see you again soon!"); + boolean isByeEntered = true; + String outputs; + + System.out.println(" Hello! I'm Duke"); + System.out.println(" What can I do for you?"); + + while(isByeEntered) { + Scanner scan = new Scanner(System.in); + outputs = scan.nextLine(); + if(outputs.equals("bye")){ + System.out.println("Bye. Hope to see you again soon!"); + return; + }else{ + System.out.println(outputs); + } + + } + + } } From 9fb90732cb7824af2bb8ebbf9454b5df81296cee Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Tue, 31 Jan 2023 23:59:29 +0800 Subject: [PATCH 04/29] This is level 2 --- src/main/java/Duke.java | 45 +++++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 3739cbc00..e8f4e860d 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,25 +1,54 @@ import java.util.Scanner; public class Duke { - public static void main(String[] args) { - boolean isByeEntered = true; - String outputs; + public static final int MAX_INT = 100; + public static void greeting() { System.out.println(" Hello! I'm Duke"); System.out.println(" What can I do for you?"); - while(isByeEntered) { + } + + + + public static void add() { + boolean isByeEntered = true; + String outputs; + String[] storeList; + storeList = new String[MAX_INT]; + int i = 0; + int a = 1; + + while (isByeEntered) { Scanner scan = new Scanner(System.in); outputs = scan.nextLine(); - if(outputs.equals("bye")){ + if (outputs.equals("bye")) { System.out.println("Bye. Hope to see you again soon!"); return; - }else{ - System.out.println(outputs); + } else if(outputs.equals("list")){ + for(String list : storeList){ + if(list!=null) { + System.out.println(a + ". " + list); + a++; + }else{ + break; + } + } + + } else { + System.out.println("added: " + outputs); + storeList[i] = outputs; + i++; } - } + } + + + public static void main(String[] args) { + + greeting(); + add(); From 1948f115390761ac3bef918995b5d462c13d768b Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Sat, 4 Feb 2023 12:32:01 +0800 Subject: [PATCH 05/29] Level 3: Mark as Done --- src/main/java/Duke.java | 79 +++++++++++++++++++++++------------------ src/main/java/Task.java | 24 +++++++++++++ 2 files changed, 69 insertions(+), 34 deletions(-) create mode 100644 src/main/java/Task.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index e8f4e860d..95e66572b 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,56 +1,67 @@ +import java.util.ArrayList; import java.util.Scanner; public class Duke { - public static final int MAX_INT = 100; - public static void greeting() { System.out.println(" Hello! I'm Duke"); System.out.println(" What can I do for you?"); - } + public static void main(String[] args) { + greeting(); + boolean isByeEnter = false; + ArrayList taskNameList = new ArrayList<>(); + Scanner userInput = new Scanner(System.in); - public static void add() { - boolean isByeEntered = true; - String outputs; - String[] storeList; - storeList = new String[MAX_INT]; - int i = 0; - int a = 1; + while (!isByeEnter) { - while (isByeEntered) { - Scanner scan = new Scanner(System.in); - outputs = scan.nextLine(); - if (outputs.equals("bye")) { - System.out.println("Bye. Hope to see you again soon!"); - return; - } else if(outputs.equals("list")){ - for(String list : storeList){ - if(list!=null) { - System.out.println(a + ". " + list); - a++; - }else{ - break; - } + String taskName = userInput.nextLine(); + Task taskList = new Task(taskName); + //String combine = taskName + userInput.nextLine(); + String[] command = taskName.split("\\s+"); + switch (command[0]) { + case "list": + for (int i = 0; i < taskNameList.size(); i++) { + System.out.println((i + 1) + ".[" + taskNameList.get(i).getStatusIcon() + + "] " + taskNameList.get(i).getDescription()); } + break; - } else { - System.out.println("added: " + outputs); - storeList[i] = outputs; - i++; - } - } - } + case "mark": + // taskNameList.get(command[1]).mark(); + int indexTask = Integer.parseInt(command[1]); + taskNameList.get(indexTask - 1).mark(); + // new Task(isComplete); + System.out.println("Nice! I've marked this task as done:" + System.lineSeparator() + + "[" + taskNameList.get(indexTask - 1).getStatusIcon() + "] " + taskNameList.get(indexTask - 1).getDescription()); + break; + case "unmark": - public static void main(String[] args) { + // new Task(isComplete); + int indexOfTask = Integer.parseInt(command[1]); + taskNameList.get(indexOfTask - 1).unMark(); + System.out.println("OK, I've marked this task as not done yet:" + System.lineSeparator() + + "[" + taskNameList.get(indexOfTask - 1).getStatusIcon() + "] " + taskNameList.get(indexOfTask - 1).getDescription()); + break; - greeting(); - add(); + case "Bye": + System.out.println("Bye. Hope to see you again soon!"); + isByeEnter = true; + break; + default: + Task task = new Task(taskName); + taskNameList.add(task); + System.out.println("added: " + taskName); + break; + + } + } } } + diff --git a/src/main/java/Task.java b/src/main/java/Task.java new file mode 100644 index 000000000..15ae9065a --- /dev/null +++ b/src/main/java/Task.java @@ -0,0 +1,24 @@ +public class Task { + protected String description; + protected boolean isDone; + protected String name; + public Task(String description) { + this.description = description; + } + + public void mark() { + this.isDone = true; + } + + public void unMark() { + this.isDone = false; + } + + public String getDescription() { + return description; + } + + public String getStatusIcon() { + return (this.isDone ? "X" : " "); // mark done task with X + } +} From 20513b3def5750aab152791b85abd870d540d227 Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Tue, 14 Feb 2023 17:45:09 +0800 Subject: [PATCH 06/29] Level 4: ToDos, Events, Deadlines --- src/main/java/Deadline.java | 23 +++++++++++ src/main/java/Duke.java | 77 +++++++++++++++++++++++++++---------- src/main/java/Event.java | 27 +++++++++++++ src/main/java/Task.java | 21 +++++++++- src/main/java/Todo.java | 18 +++++++++ 5 files changed, 144 insertions(+), 22 deletions(-) create mode 100644 src/main/java/Deadline.java create mode 100644 src/main/java/Event.java create mode 100644 src/main/java/Todo.java diff --git a/src/main/java/Deadline.java b/src/main/java/Deadline.java new file mode 100644 index 000000000..a85577ef2 --- /dev/null +++ b/src/main/java/Deadline.java @@ -0,0 +1,23 @@ +public class Deadline extends Task{ + String input; + public Deadline(String input) { + super(input); + this.input = input; + } + + @Override + public String getState(){ + String deadline = input.substring(input.indexOf('/') + 1); + StringBuffer showDeadline = new StringBuffer(deadline); + showDeadline.insert(2, ":"); + String arrayOfDeadline = this.description.substring(description.indexOf(" ") + 1); + String[] eventName = arrayOfDeadline.split("/"); + return " [D]" + "[" + getStatusIcon() + "]" + " " + eventName[0] + " (" + showDeadline + ")" + System.lineSeparator(); + } + + @Override + public String guideline(){ + return " Got it. I've added this task: " + System.lineSeparator(); + } + +} diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 95e66572b..09c3dd33e 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -4,59 +4,96 @@ public class Duke { public static void greeting() { - System.out.println(" Hello! I'm Duke"); - System.out.println(" What can I do for you?"); + printLine(); + System.out.println(" Hello! I'm Duke"); + System.out.println(" What can I do for you?"); + printLine(); + } + public static void printLine(){ + System.out.println(" ____________________________________________________________"); } public static void main(String[] args) { greeting(); - boolean isByeEnter = false; ArrayList taskNameList = new ArrayList<>(); Scanner userInput = new Scanner(System.in); while (!isByeEnter) { - String taskName = userInput.nextLine(); - Task taskList = new Task(taskName); - //String combine = taskName + userInput.nextLine(); + Task task = new Task(taskName); String[] command = taskName.split("\\s+"); + Event event = new Event(taskName); + Todo toDo = new Todo(taskName); + Deadline deadLine = new Deadline(taskName); switch (command[0]) { + case "list": + printLine(); + System.out.print(task.guideline()); for (int i = 0; i < taskNameList.size(); i++) { - System.out.println((i + 1) + ".[" + taskNameList.get(i).getStatusIcon() - + "] " + taskNameList.get(i).getDescription()); + System.out.print(" " + (i + 1) + "." + + taskNameList.get(i).getState().trim() + System.lineSeparator()); } + printLine(); break; case "mark": - // taskNameList.get(command[1]).mark(); + printLine(); int indexTask = Integer.parseInt(command[1]); taskNameList.get(indexTask - 1).mark(); // new Task(isComplete); - System.out.println("Nice! I've marked this task as done:" + System.lineSeparator() + - "[" + taskNameList.get(indexTask - 1).getStatusIcon() + "] " + taskNameList.get(indexTask - 1).getDescription()); + System.out.print(" Nice! I've marked this task as done:" + + System.lineSeparator() + + taskNameList.get(indexTask - 1).getState()); + printLine(); break; case "unmark": - - // new Task(isComplete); + printLine(); int indexOfTask = Integer.parseInt(command[1]); taskNameList.get(indexOfTask - 1).unMark(); - System.out.println("OK, I've marked this task as not done yet:" + System.lineSeparator() + - "[" + taskNameList.get(indexOfTask - 1).getStatusIcon() + "] " + taskNameList.get(indexOfTask - 1).getDescription()); + System.out.print(" OK, I've marked this task as not done yet:" + + System.lineSeparator() + + taskNameList.get(indexOfTask - 1).getState()); + printLine(); + break; + + case "todo": + printLine(); + taskNameList.add(toDo); + String outputForTodo = toDo.guideline() + toDo.getState() + task.numberOfTask(taskNameList.size()); + System.out.println(outputForTodo); + printLine(); + break; + + case "deadline": + printLine(); + taskNameList.add(deadLine); + String outputForDeadline = deadLine.guideline() + deadLine.getState() + task.numberOfTask(taskNameList.size()); + System.out.println(outputForDeadline); + printLine(); + break; + + case "event": + printLine(); + taskNameList.add(event); + String outputForEvent = event.guideline() + event.getState() + task.numberOfTask(taskNameList.size()); + System.out.println(outputForEvent); + printLine(); break; case "Bye": - System.out.println("Bye. Hope to see you again soon!"); + printLine(); + System.out.println(" Bye. Hope to see you again soon!"); isByeEnter = true; + printLine(); break; default: - - Task task = new Task(taskName); - taskNameList.add(task); - System.out.println("added: " + taskName); + printLine(); + System.out.println(" oops, cannot find amtch instruction, please type again"); + printLine(); break; } diff --git a/src/main/java/Event.java b/src/main/java/Event.java new file mode 100644 index 000000000..f46dfef75 --- /dev/null +++ b/src/main/java/Event.java @@ -0,0 +1,27 @@ +import com.sun.source.tree.WhileLoopTree; + +public class Event extends Task{ + String input; + public Event(String input) { + super(input); + this.input = input; + } + @Override + public String getState(){ + String wholeArrayOfEvent = this.description.substring(description.indexOf(" ") + 1); + String[] arrayOfEvent = wholeArrayOfEvent.split("/from"); + String eventStart = arrayOfEvent[1].split("/to")[0].trim(); + String eventEnd = arrayOfEvent[1].split("/to")[1].trim(); + + String full; + full = " [E]" + "[" + getStatusIcon() + "]" + " " + arrayOfEvent[0] + + "(from: " + eventStart + " to: " + eventEnd + ")" + System.lineSeparator(); + + return full; +} + +@Override + public String guideline(){ + return " Got it. I've added this task: " + System.lineSeparator(); + } +} diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 15ae9065a..bf169611d 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -1,7 +1,12 @@ +import java.util.ArrayList; + public class Task { protected String description; protected boolean isDone; - protected String name; + protected String state; + protected String checkComplete; + protected String eventState; + public Task(String description) { this.description = description; } @@ -19,6 +24,18 @@ public String getDescription() { } public String getStatusIcon() { - return (this.isDone ? "X" : " "); // mark done task with X + checkComplete = (this.isDone ? "X" : " "); + return checkComplete; // mark done task with X + } + public String getState(){ + return state; + } + public String guideline(){ + return " Here are the task in your list: " + System.lineSeparator(); + } + public String numberOfTask(int length){ + return " Now you have " + length + " tasks in the list"; + } } + diff --git a/src/main/java/Todo.java b/src/main/java/Todo.java new file mode 100644 index 000000000..688abefd0 --- /dev/null +++ b/src/main/java/Todo.java @@ -0,0 +1,18 @@ +public class Todo extends Task{ + public Todo(String description) { + super(description); + } + + @Override + public String getState(){ + String arrayOfTodo = this.description.substring(description.indexOf(" ") + 1); + return " [T]" + "[" + getStatusIcon() + "]" + " " + arrayOfTodo + System.lineSeparator(); + } + + @Override + public String guideline(){ + return " Got it. I've added this task: " + System.lineSeparator(); + } +} + + From 2f37e5df275076c9e304caa5cb4df2fe5fd18200 Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Tue, 14 Feb 2023 19:38:40 +0800 Subject: [PATCH 07/29] A-TextUiTesting: Automated Text UI Testing --- src/main/java/Task.java | 2 +- text-ui-test/EXPECTED.TXT | 26 +++++++++++++++++++------- text-ui-test/input.txt | 3 +++ 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/main/java/Task.java b/src/main/java/Task.java index bf169611d..9eae5201e 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -34,7 +34,7 @@ public String guideline(){ return " Here are the task in your list: " + System.lineSeparator(); } public String numberOfTask(int length){ - return " Now you have " + length + " tasks in the list"; + return " Now you have " + length + " tasks in the list."; } } diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 657e74f6e..6e11edd51 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,7 +1,19 @@ -Hello from - ____ _ -| _ \ _ _| | _____ -| | | | | | | |/ / _ \ -| |_| | |_| | < __/ -|____/ \__,_|_|\_\___| - + ____________________________________________________________ + Hello! I'm Duke + What can I do for you? + ____________________________________________________________ + ____________________________________________________________ + Got it. I've added this task: + [T][ ] borrow book + Now you have 1 tasks in the list. + ____________________________________________________________ + ____________________________________________________________ + Got it. I've added this task: + [D][ ] return book (by: Sunday) + Now you have 2 tasks in the list. + ____________________________________________________________ + ____________________________________________________________ + Got it. I've added this task: + [E][ ] project meeting (from: Mon 2pm to: 4pm) + Now you have 3 tasks in the list. + ____________________________________________________________ diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index e69de29bb..ea34661f2 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -0,0 +1,3 @@ +todo borrow book +deadline return book /by Sunday +event project meeting /from Mon 2pm /to 4pm From aad18763d0ded0efb4c2c2bc6e565bf9f2d2a1d6 Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Tue, 14 Feb 2023 19:48:16 +0800 Subject: [PATCH 08/29] A-CodeQuality: Improve Code Quality --- src/main/java/Deadline.java | 7 +++++-- src/main/java/Duke.java | 21 +++++++++++++-------- src/main/java/Event.java | 9 ++++++--- src/main/java/Task.java | 3 ++- src/main/java/Todo.java | 6 ++++-- 5 files changed, 30 insertions(+), 16 deletions(-) diff --git a/src/main/java/Deadline.java b/src/main/java/Deadline.java index a85577ef2..3e52276b3 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/Deadline.java @@ -12,12 +12,15 @@ public String getState(){ showDeadline.insert(2, ":"); String arrayOfDeadline = this.description.substring(description.indexOf(" ") + 1); String[] eventName = arrayOfDeadline.split("/"); - return " [D]" + "[" + getStatusIcon() + "]" + " " + eventName[0] + " (" + showDeadline + ")" + System.lineSeparator(); + return " [D]" + "[" + getStatusIcon() + "]" + " " + + eventName[0] + " (" + showDeadline + ")" + + System.lineSeparator(); } @Override public String guideline(){ - return " Got it. I've added this task: " + System.lineSeparator(); + return " Got it. I've added this task: " + + System.lineSeparator(); } } diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 09c3dd33e..e5a07d38f 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -31,9 +31,9 @@ public static void main(String[] args) { case "list": printLine(); System.out.print(task.guideline()); - for (int i = 0; i < taskNameList.size(); i++) { - System.out.print(" " + (i + 1) + "." - + taskNameList.get(i).getState().trim() + System.lineSeparator()); + for (int indexOfInstruction = 0; indexOfInstruction < taskNameList.size(); indexOfInstruction++) { + System.out.print(" " + (indexOfInstruction + 1) + "." + + taskNameList.get(indexOfInstruction).getState().trim() + System.lineSeparator()); } printLine(); break; @@ -42,7 +42,6 @@ public static void main(String[] args) { printLine(); int indexTask = Integer.parseInt(command[1]); taskNameList.get(indexTask - 1).mark(); - // new Task(isComplete); System.out.print(" Nice! I've marked this task as done:" + System.lineSeparator() + taskNameList.get(indexTask - 1).getState()); @@ -62,7 +61,9 @@ public static void main(String[] args) { case "todo": printLine(); taskNameList.add(toDo); - String outputForTodo = toDo.guideline() + toDo.getState() + task.numberOfTask(taskNameList.size()); + String outputForTodo = toDo.guideline() + + toDo.getState() + + task.numberOfTask(taskNameList.size()); System.out.println(outputForTodo); printLine(); break; @@ -70,7 +71,9 @@ public static void main(String[] args) { case "deadline": printLine(); taskNameList.add(deadLine); - String outputForDeadline = deadLine.guideline() + deadLine.getState() + task.numberOfTask(taskNameList.size()); + String outputForDeadline = deadLine.guideline() + + deadLine.getState() + + task.numberOfTask(taskNameList.size()); System.out.println(outputForDeadline); printLine(); break; @@ -78,7 +81,9 @@ public static void main(String[] args) { case "event": printLine(); taskNameList.add(event); - String outputForEvent = event.guideline() + event.getState() + task.numberOfTask(taskNameList.size()); + String outputForEvent = event.guideline() + + event.getState() + + task.numberOfTask(taskNameList.size()); System.out.println(outputForEvent); printLine(); break; @@ -92,7 +97,7 @@ public static void main(String[] args) { default: printLine(); - System.out.println(" oops, cannot find amtch instruction, please type again"); + System.out.println(" oops, cannot find match instruction, please type again"); printLine(); break; diff --git a/src/main/java/Event.java b/src/main/java/Event.java index f46dfef75..3fb475d77 100644 --- a/src/main/java/Event.java +++ b/src/main/java/Event.java @@ -14,14 +14,17 @@ public String getState(){ String eventEnd = arrayOfEvent[1].split("/to")[1].trim(); String full; - full = " [E]" + "[" + getStatusIcon() + "]" + " " + arrayOfEvent[0] + - "(from: " + eventStart + " to: " + eventEnd + ")" + System.lineSeparator(); + full = " [E]" + "[" + getStatusIcon() + "]" + " " + + arrayOfEvent[0] + + "(from: " + eventStart + " to: " + + eventEnd + ")" + System.lineSeparator(); return full; } @Override public String guideline(){ - return " Got it. I've added this task: " + System.lineSeparator(); + return " Got it. I've added this task: " + + System.lineSeparator(); } } diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 9eae5201e..0d09312ba 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -31,7 +31,8 @@ public String getState(){ return state; } public String guideline(){ - return " Here are the task in your list: " + System.lineSeparator(); + return " Here are the task in your list: " + + System.lineSeparator(); } public String numberOfTask(int length){ return " Now you have " + length + " tasks in the list."; diff --git a/src/main/java/Todo.java b/src/main/java/Todo.java index 688abefd0..c3a1c6f15 100644 --- a/src/main/java/Todo.java +++ b/src/main/java/Todo.java @@ -6,12 +6,14 @@ public Todo(String description) { @Override public String getState(){ String arrayOfTodo = this.description.substring(description.indexOf(" ") + 1); - return " [T]" + "[" + getStatusIcon() + "]" + " " + arrayOfTodo + System.lineSeparator(); + return " [T]" + "[" + getStatusIcon() + "]" + " " + + arrayOfTodo + System.lineSeparator(); } @Override public String guideline(){ - return " Got it. I've added this task: " + System.lineSeparator(); + return " Got it. I've added this task: " + + System.lineSeparator(); } } From 52c24843d85c8bbe844801552cc9bb3b1f392053 Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Wed, 15 Feb 2023 01:27:20 +0800 Subject: [PATCH 09/29] This is branch-Level-5 which includes Level 5: Handle Errors --- src/main/java/DukeException.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/main/java/DukeException.java diff --git a/src/main/java/DukeException.java b/src/main/java/DukeException.java new file mode 100644 index 000000000..d2789a1f8 --- /dev/null +++ b/src/main/java/DukeException.java @@ -0,0 +1,5 @@ +public class DukeException extends Exception { + public DukeException(String message) { + super(message); + } +} \ No newline at end of file From 25314023d0bcbea4876c1a0f5e64490c0aa4ad3d Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Wed, 15 Feb 2023 01:28:45 +0800 Subject: [PATCH 10/29] This is branch-level-5 which includes Level 5: Handle Errors --- src/main/java/Deadline.java | 1 - src/main/java/Duke.java | 203 ++++++++++++++++++------------- src/main/java/DukeException.java | 3 +- src/main/java/Event.java | 10 +- src/main/java/Task.java | 4 + src/main/java/Todo.java | 2 + 6 files changed, 135 insertions(+), 88 deletions(-) diff --git a/src/main/java/Deadline.java b/src/main/java/Deadline.java index 3e52276b3..0f40d32f1 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/Deadline.java @@ -22,5 +22,4 @@ public String guideline(){ return " Got it. I've added this task: " + System.lineSeparator(); } - } diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index e5a07d38f..33e1e9906 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -2,108 +2,143 @@ import java.util.Scanner; public class Duke { + public static final String EMPTY_DESCRIPTION = " ☹ OOPS!!! The description cannot be empty."; + public static final String LINE = " ____________________________________________________________"; + private static final String UNRECOGNISED_INPUT = " ☹ OOPS!!! I'm sorry, but I don't know what that means :-("; + protected static boolean isByeEnter = false; + private static final ArrayList taskNameList = new ArrayList<>(); public static void greeting() { - printLine(); + + System.out.println(LINE); System.out.println(" Hello! I'm Duke"); System.out.println(" What can I do for you?"); - printLine(); + System.out.println(LINE); } - public static void printLine(){ - System.out.println(" ____________________________________________________________"); + + public static void inputValues(String input) throws DukeException { + String[] command = input.split("\\s+"); + switch (command[0]) { + case "list": + listMain(input); + break; + case "mark": + markMain(input, command); + break; + case "ummark": + unMarkMain(input, command); + break; + case "todo": + toDoMain(input); + break; + case "deadline": + deadlineMain(input); + break; + + case "event": + eventMain(input); + break; + default: + throw new DukeException(UNRECOGNISED_INPUT); + + } + + } - public static void main(String[] args) { - greeting(); - boolean isByeEnter = false; - ArrayList taskNameList = new ArrayList<>(); - Scanner userInput = new Scanner(System.in); + public static void listMain(String input) { + Task task = new Task(input); + System.out.println(LINE); + System.out.print(task.guideline()); + for (int indexOfInstruction = 0; indexOfInstruction < taskNameList.size(); indexOfInstruction++) { + System.out.print(" " + (indexOfInstruction + 1) + "." + + taskNameList.get(indexOfInstruction).getState().trim() + System.lineSeparator()); + } + System.out.println(LINE); - while (!isByeEnter) { - String taskName = userInput.nextLine(); - Task task = new Task(taskName); - String[] command = taskName.split("\\s+"); - Event event = new Event(taskName); - Todo toDo = new Todo(taskName); - Deadline deadLine = new Deadline(taskName); - switch (command[0]) { - - case "list": - printLine(); - System.out.print(task.guideline()); - for (int indexOfInstruction = 0; indexOfInstruction < taskNameList.size(); indexOfInstruction++) { - System.out.print(" " + (indexOfInstruction + 1) + "." - + taskNameList.get(indexOfInstruction).getState().trim() + System.lineSeparator()); - } - printLine(); - break; + } - case "mark": - printLine(); - int indexTask = Integer.parseInt(command[1]); - taskNameList.get(indexTask - 1).mark(); - System.out.print(" Nice! I've marked this task as done:" - + System.lineSeparator() - + taskNameList.get(indexTask - 1).getState()); - printLine(); - break; + public static void markMain(String input, String[] command) { + int indexTask = Integer.parseInt(command[1]); + System.out.println(LINE); + taskNameList.get(indexTask - 1).mark(); + System.out.print(" Nice! I've marked this task as done:" + + System.lineSeparator() + + taskNameList.get(indexTask - 1).getState()); + System.out.println(LINE); + } - case "unmark": - printLine(); - int indexOfTask = Integer.parseInt(command[1]); - taskNameList.get(indexOfTask - 1).unMark(); - System.out.print(" OK, I've marked this task as not done yet:" - + System.lineSeparator() - + taskNameList.get(indexOfTask - 1).getState()); - printLine(); - break; + public static void unMarkMain(String input, String[] command) { + int indexOfTask = Integer.parseInt(command[1]); + System.out.println(LINE); + taskNameList.get(indexOfTask - 1).unMark(); + System.out.print(" OK, I've marked this task as not done yet:" + + System.lineSeparator() + + taskNameList.get(indexOfTask - 1).getState()); + System.out.println(LINE); - case "todo": - printLine(); - taskNameList.add(toDo); - String outputForTodo = toDo.guideline() - + toDo.getState() - + task.numberOfTask(taskNameList.size()); - System.out.println(outputForTodo); - printLine(); - break; + } - case "deadline": - printLine(); - taskNameList.add(deadLine); - String outputForDeadline = deadLine.guideline() - + deadLine.getState() - + task.numberOfTask(taskNameList.size()); - System.out.println(outputForDeadline); - printLine(); - break; + public static void toDoMain(String input) throws DukeException { + Todo toDo = new Todo(input); + Task task = new Task(input); + String[] tokens = input.split("\\s+", 2); + if (tokens.length < 2) { + throw new DukeException(EMPTY_DESCRIPTION); + } + System.out.println(LINE); + taskNameList.add(toDo); + String outputForTodo = toDo.guideline() + + toDo.getState() + + task.numberOfTask(taskNameList.size()); + System.out.println(outputForTodo); + System.out.println(LINE); - case "event": - printLine(); - taskNameList.add(event); - String outputForEvent = event.guideline() - + event.getState() - + task.numberOfTask(taskNameList.size()); - System.out.println(outputForEvent); - printLine(); - break; + } - case "Bye": - printLine(); - System.out.println(" Bye. Hope to see you again soon!"); - isByeEnter = true; - printLine(); - break; + public static void eventMain(String input) { + Event event = new Event(input); + Task task = new Task(input); + taskNameList.add(event); + String outputForEvent = event.guideline() + + event.getState() + + task.numberOfTask(taskNameList.size()); + System.out.println(outputForEvent); + System.out.println(LINE); - default: - printLine(); - System.out.println(" oops, cannot find match instruction, please type again"); - printLine(); - break; + } + + public static void deadlineMain(String input) { + Deadline deadLine = new Deadline(input); + Task task = new Task(input); + System.out.println(LINE); + taskNameList.add(deadLine); + String outputForDeadline = deadLine.guideline() + + deadLine.getState() + + task.numberOfTask(taskNameList.size()); + System.out.println(outputForDeadline); + System.out.println(LINE); + + } + public static void main(String[] args) { + greeting(); + Scanner userInput = new Scanner(System.in); + + while (true) { + String taskName = userInput.nextLine(); + if (taskName.equalsIgnoreCase("bye")) { + break; + } + try { + inputValues(taskName); + } catch (Exception e) { + System.out.println(LINE); + System.out.println(e.getMessage()); + System.out.println(LINE); } - } + } } } diff --git a/src/main/java/DukeException.java b/src/main/java/DukeException.java index d2789a1f8..b66ae967c 100644 --- a/src/main/java/DukeException.java +++ b/src/main/java/DukeException.java @@ -1,5 +1,6 @@ -public class DukeException extends Exception { +public class DukeException extends Exception{ public DukeException(String message) { super(message); } + } \ No newline at end of file diff --git a/src/main/java/Event.java b/src/main/java/Event.java index 3fb475d77..bad02ff29 100644 --- a/src/main/java/Event.java +++ b/src/main/java/Event.java @@ -1,10 +1,16 @@ -import com.sun.source.tree.WhileLoopTree; - public class Event extends Task{ String input; + public Event(String input) { super(input); this.input = input; + } + public void handleErrors(){ + printLine(); + System.out.println(" ☹ OOPS!!! The description of a event cannot be empty."); + printLine(); + + } @Override public String getState(){ diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 0d09312ba..1c34a9a18 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -38,5 +38,9 @@ public String numberOfTask(int length){ return " Now you have " + length + " tasks in the list."; } + public static void printLine(){ + System.out.println(" ____________________________________________________________"); + } + } diff --git a/src/main/java/Todo.java b/src/main/java/Todo.java index c3a1c6f15..c1c5211ec 100644 --- a/src/main/java/Todo.java +++ b/src/main/java/Todo.java @@ -15,6 +15,8 @@ public String guideline(){ return " Got it. I've added this task: " + System.lineSeparator(); } + + } From 46b06d9df85e5a1356db3743d56804f89e99e28b Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Thu, 16 Feb 2023 13:56:57 +0800 Subject: [PATCH 11/29] update brach for package --- src/main/java/{ => duke}/Duke.java | 0 src/main/java/{ => duke}/DukeException.java | 0 src/main/java/{ => duke/instructions}/Deadline.java | 2 ++ src/main/java/{ => duke/instructions}/Event.java | 2 ++ src/main/java/{ => duke/instructions}/Task.java | 2 ++ src/main/java/{ => duke/instructions}/Todo.java | 2 ++ 6 files changed, 8 insertions(+) rename src/main/java/{ => duke}/Duke.java (100%) rename src/main/java/{ => duke}/DukeException.java (100%) rename src/main/java/{ => duke/instructions}/Deadline.java (98%) rename src/main/java/{ => duke/instructions}/Event.java (98%) rename src/main/java/{ => duke/instructions}/Task.java (98%) rename src/main/java/{ => duke/instructions}/Todo.java (97%) diff --git a/src/main/java/Duke.java b/src/main/java/duke/Duke.java similarity index 100% rename from src/main/java/Duke.java rename to src/main/java/duke/Duke.java diff --git a/src/main/java/DukeException.java b/src/main/java/duke/DukeException.java similarity index 100% rename from src/main/java/DukeException.java rename to src/main/java/duke/DukeException.java diff --git a/src/main/java/Deadline.java b/src/main/java/duke/instructions/Deadline.java similarity index 98% rename from src/main/java/Deadline.java rename to src/main/java/duke/instructions/Deadline.java index 0f40d32f1..6ed22bb0d 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/duke/instructions/Deadline.java @@ -1,3 +1,5 @@ +package duke; + public class Deadline extends Task{ String input; public Deadline(String input) { diff --git a/src/main/java/Event.java b/src/main/java/duke/instructions/Event.java similarity index 98% rename from src/main/java/Event.java rename to src/main/java/duke/instructions/Event.java index bad02ff29..f562687fa 100644 --- a/src/main/java/Event.java +++ b/src/main/java/duke/instructions/Event.java @@ -1,3 +1,5 @@ +package duke; + public class Event extends Task{ String input; diff --git a/src/main/java/Task.java b/src/main/java/duke/instructions/Task.java similarity index 98% rename from src/main/java/Task.java rename to src/main/java/duke/instructions/Task.java index 1c34a9a18..b8b0049f8 100644 --- a/src/main/java/Task.java +++ b/src/main/java/duke/instructions/Task.java @@ -1,3 +1,5 @@ +package duke; + import java.util.ArrayList; public class Task { diff --git a/src/main/java/Todo.java b/src/main/java/duke/instructions/Todo.java similarity index 97% rename from src/main/java/Todo.java rename to src/main/java/duke/instructions/Todo.java index c1c5211ec..09967071e 100644 --- a/src/main/java/Todo.java +++ b/src/main/java/duke/instructions/Todo.java @@ -1,3 +1,5 @@ +package duke; + public class Todo extends Task{ public Todo(String description) { super(description); From bc3b3453526fe7e705c6b5466c2a5ed94601fe54 Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Thu, 16 Feb 2023 14:01:11 +0800 Subject: [PATCH 12/29] create package and assign each file to the respective packages --- src/main/java/duke/Duke.java | 7 +++++++ src/main/java/duke/DukeException.java | 2 ++ src/main/java/duke/instructions/Deadline.java | 2 +- src/main/java/duke/instructions/Event.java | 2 +- src/main/java/duke/instructions/Task.java | 2 +- src/main/java/duke/instructions/Todo.java | 2 +- text-ui-test/runtest.bat | 4 ++-- 7 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index 33e1e9906..3695f8e4a 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -1,3 +1,10 @@ +package duke; + +import duke.instructions.Deadline; +import duke.instructions.Event; +import duke.instructions.Task; +import duke.instructions.Todo; + import java.util.ArrayList; import java.util.Scanner; diff --git a/src/main/java/duke/DukeException.java b/src/main/java/duke/DukeException.java index b66ae967c..e9d5ffeb9 100644 --- a/src/main/java/duke/DukeException.java +++ b/src/main/java/duke/DukeException.java @@ -1,3 +1,5 @@ +package duke; + public class DukeException extends Exception{ public DukeException(String message) { super(message); diff --git a/src/main/java/duke/instructions/Deadline.java b/src/main/java/duke/instructions/Deadline.java index 6ed22bb0d..4487ee314 100644 --- a/src/main/java/duke/instructions/Deadline.java +++ b/src/main/java/duke/instructions/Deadline.java @@ -1,4 +1,4 @@ -package duke; +package duke.instructions; public class Deadline extends Task{ String input; diff --git a/src/main/java/duke/instructions/Event.java b/src/main/java/duke/instructions/Event.java index f562687fa..481abbf3c 100644 --- a/src/main/java/duke/instructions/Event.java +++ b/src/main/java/duke/instructions/Event.java @@ -1,4 +1,4 @@ -package duke; +package duke.instructions; public class Event extends Task{ String input; diff --git a/src/main/java/duke/instructions/Task.java b/src/main/java/duke/instructions/Task.java index b8b0049f8..1a85769d4 100644 --- a/src/main/java/duke/instructions/Task.java +++ b/src/main/java/duke/instructions/Task.java @@ -1,4 +1,4 @@ -package duke; +package duke.instructions; import java.util.ArrayList; diff --git a/src/main/java/duke/instructions/Todo.java b/src/main/java/duke/instructions/Todo.java index 09967071e..6f54485d2 100644 --- a/src/main/java/duke/instructions/Todo.java +++ b/src/main/java/duke/instructions/Todo.java @@ -1,4 +1,4 @@ -package duke; +package duke.instructions; public class Todo extends Task{ public Todo(String description) { diff --git a/text-ui-test/runtest.bat b/text-ui-test/runtest.bat index 087374464..5c47c1c57 100644 --- a/text-ui-test/runtest.bat +++ b/text-ui-test/runtest.bat @@ -7,7 +7,7 @@ REM delete output from previous run if exist ACTUAL.TXT del ACTUAL.TXT REM compile the code into the bin folder -javac -cp ..\src\main\java -Xlint:none -d ..\bin ..\src\main\java\*.java +javac -cp ..\src\main\java -Xlint:none -d ..\bin ..\src\main\java\duke\*.java ..\src\main\java\duke\instructions\*.java IF ERRORLEVEL 1 ( echo ********** BUILD FAILURE ********** exit /b 1 @@ -15,7 +15,7 @@ IF ERRORLEVEL 1 ( REM no error here, errorlevel == 0 REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT -java -classpath ..\bin Duke < input.txt > ACTUAL.TXT +java -classpath ..\bin duke.Duke < input.txt > ACTUAL.TXT REM compare the output to the expected output FC ACTUAL.TXT EXPECTED.TXT From feac7ebc9b15767a2d113157d2e8943f14f178b6 Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Thu, 16 Feb 2023 15:12:27 +0800 Subject: [PATCH 13/29] This is incomplete delete --- src/main/java/Deadline.java | 1 - src/main/java/Duke.java | 216 +++++++++++++++++++------------ src/main/java/DukeException.java | 3 +- src/main/java/Event.java | 4 +- src/main/java/Task.java | 4 + src/main/java/Todo.java | 2 + 6 files changed, 142 insertions(+), 88 deletions(-) diff --git a/src/main/java/Deadline.java b/src/main/java/Deadline.java index 3e52276b3..0f40d32f1 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/Deadline.java @@ -22,5 +22,4 @@ public String guideline(){ return " Got it. I've added this task: " + System.lineSeparator(); } - } diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index e5a07d38f..f3a2eda16 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -2,108 +2,156 @@ import java.util.Scanner; public class Duke { + public static final String EMPTY_DESCRIPTION = " ☹ OOPS!!! The description cannot be empty."; + public static final String LINE = " ____________________________________________________________"; + private static final String UNRECOGNISED_INPUT = " ☹ OOPS!!! I'm sorry, but I don't know what that means :-("; + protected static boolean isByeEnter = false; + private static final ArrayList taskNameList = new ArrayList<>(); public static void greeting() { - printLine(); + + System.out.println(LINE); System.out.println(" Hello! I'm Duke"); System.out.println(" What can I do for you?"); - printLine(); + System.out.println(LINE); } - public static void printLine(){ - System.out.println(" ____________________________________________________________"); + + public static void inputValues(String input) throws DukeException { + String[] command = input.split("\\s+"); + switch (command[0]) { + case "list": + listMain(input); + break; + case "mark": + markMain(command); + break; + case "ummark": + unMarkMain(command); + break; + case "todo": + toDoMain(input); + break; + case "deadline": + deadlineMain(input); + break; + + case "event": + eventMain(input); + break; + case "delete": + deleteMain(input, command); + break; + default: + throw new DukeException(UNRECOGNISED_INPUT); + + } + + } - public static void main(String[] args) { - greeting(); - boolean isByeEnter = false; - ArrayList taskNameList = new ArrayList<>(); - Scanner userInput = new Scanner(System.in); + public static void listMain(String input) { + Task task = new Task(input); + System.out.println(LINE); + System.out.print(task.guideline()); + for (int indexOfInstruction = 0; indexOfInstruction < taskNameList.size(); indexOfInstruction++) { + System.out.print(" " + (indexOfInstruction + 1) + "." + + taskNameList.get(indexOfInstruction).getState().trim() + System.lineSeparator()); + } + System.out.println(LINE); - while (!isByeEnter) { - String taskName = userInput.nextLine(); - Task task = new Task(taskName); - String[] command = taskName.split("\\s+"); - Event event = new Event(taskName); - Todo toDo = new Todo(taskName); - Deadline deadLine = new Deadline(taskName); - switch (command[0]) { - - case "list": - printLine(); - System.out.print(task.guideline()); - for (int indexOfInstruction = 0; indexOfInstruction < taskNameList.size(); indexOfInstruction++) { - System.out.print(" " + (indexOfInstruction + 1) + "." - + taskNameList.get(indexOfInstruction).getState().trim() + System.lineSeparator()); - } - printLine(); - break; + } - case "mark": - printLine(); - int indexTask = Integer.parseInt(command[1]); - taskNameList.get(indexTask - 1).mark(); - System.out.print(" Nice! I've marked this task as done:" - + System.lineSeparator() - + taskNameList.get(indexTask - 1).getState()); - printLine(); - break; + public static void markMain(String[] command) { + int indexTask = Integer.parseInt(command[1]); + System.out.println(LINE); + taskNameList.get(indexTask - 1).mark(); + System.out.print(" Nice! I've marked this task as done:" + + System.lineSeparator() + + taskNameList.get(indexTask - 1).getState()); + System.out.println(LINE); + } - case "unmark": - printLine(); - int indexOfTask = Integer.parseInt(command[1]); - taskNameList.get(indexOfTask - 1).unMark(); - System.out.print(" OK, I've marked this task as not done yet:" - + System.lineSeparator() - + taskNameList.get(indexOfTask - 1).getState()); - printLine(); - break; + public static void unMarkMain(String[] command) { + int indexOfTask = Integer.parseInt(command[1]); + System.out.println(LINE); + taskNameList.get(indexOfTask - 1).unMark(); + System.out.print(" OK, I've marked this task as not done yet:" + + System.lineSeparator() + + taskNameList.get(indexOfTask - 1).getState()); + System.out.println(LINE); - case "todo": - printLine(); - taskNameList.add(toDo); - String outputForTodo = toDo.guideline() - + toDo.getState() - + task.numberOfTask(taskNameList.size()); - System.out.println(outputForTodo); - printLine(); - break; + } - case "deadline": - printLine(); - taskNameList.add(deadLine); - String outputForDeadline = deadLine.guideline() - + deadLine.getState() - + task.numberOfTask(taskNameList.size()); - System.out.println(outputForDeadline); - printLine(); - break; + public static void toDoMain(String input) throws DukeException { + Todo toDo = new Todo(input); + Task task = new Task(input); + String[] tokens = input.split("\\s+", 2); + if (tokens.length < 2) { + throw new DukeException(EMPTY_DESCRIPTION); + } + System.out.println(LINE); + taskNameList.add(toDo); + String outputForTodo = toDo.guideline() + + toDo.getState() + + task.numberOfTask(taskNameList.size()); + System.out.println(outputForTodo); + System.out.println(LINE); - case "event": - printLine(); - taskNameList.add(event); - String outputForEvent = event.guideline() - + event.getState() - + task.numberOfTask(taskNameList.size()); - System.out.println(outputForEvent); - printLine(); - break; + } - case "Bye": - printLine(); - System.out.println(" Bye. Hope to see you again soon!"); - isByeEnter = true; - printLine(); - break; + public static void eventMain(String input) { + Event event = new Event(input); + Task task = new Task(input); + taskNameList.add(event); + String outputForEvent = event.guideline() + + event.getState() + + task.numberOfTask(taskNameList.size()); + System.out.println(outputForEvent); + System.out.println(LINE); - default: - printLine(); - System.out.println(" oops, cannot find match instruction, please type again"); - printLine(); - break; + } + + public static void deadlineMain(String input) { + Deadline deadLine = new Deadline(input); + Task task = new Task(input); + System.out.println(LINE); + taskNameList.add(deadLine); + String outputForDeadline = deadLine.guideline() + + deadLine.getState() + + task.numberOfTask(taskNameList.size()); + System.out.println(outputForDeadline); + System.out.println(LINE); + + } + public static void deleteMain(String input, String[] command){ + int indexTask = Integer.parseInt(command[1]); + System.out.println(LINE); + taskNameList.get(indexTask - 1).mark(); + System.out.print(" Noted. I've removed this task:" + + System.lineSeparator() + + taskNameList.get(indexTask - 1).getState()); + System.out.println(LINE); + } + + public static void main(String[] args) { + greeting(); + Scanner userInput = new Scanner(System.in); + + while (true) { + String taskName = userInput.nextLine(); + if (taskName.equalsIgnoreCase("bye")) { + break; + } + try { + inputValues(taskName); + } catch (Exception e) { + System.out.println(LINE); + System.out.println(e.getMessage()); + System.out.println(LINE); } - } + } } } diff --git a/src/main/java/DukeException.java b/src/main/java/DukeException.java index d2789a1f8..b66ae967c 100644 --- a/src/main/java/DukeException.java +++ b/src/main/java/DukeException.java @@ -1,5 +1,6 @@ -public class DukeException extends Exception { +public class DukeException extends Exception{ public DukeException(String message) { super(message); } + } \ No newline at end of file diff --git a/src/main/java/Event.java b/src/main/java/Event.java index 3fb475d77..3d7d3dfee 100644 --- a/src/main/java/Event.java +++ b/src/main/java/Event.java @@ -1,11 +1,11 @@ -import com.sun.source.tree.WhileLoopTree; - public class Event extends Task{ String input; + public Event(String input) { super(input); this.input = input; } + @Override public String getState(){ String wholeArrayOfEvent = this.description.substring(description.indexOf(" ") + 1); diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 0d09312ba..1c34a9a18 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -38,5 +38,9 @@ public String numberOfTask(int length){ return " Now you have " + length + " tasks in the list."; } + public static void printLine(){ + System.out.println(" ____________________________________________________________"); + } + } diff --git a/src/main/java/Todo.java b/src/main/java/Todo.java index c3a1c6f15..c1c5211ec 100644 --- a/src/main/java/Todo.java +++ b/src/main/java/Todo.java @@ -15,6 +15,8 @@ public String guideline(){ return " Got it. I've added this task: " + System.lineSeparator(); } + + } From 31edec0e411c45b1f2978241e87a8e934fecb760 Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Thu, 16 Feb 2023 17:23:07 +0800 Subject: [PATCH 14/29] This is level 6 --- src/main/java/duke/instructions/Delete.java | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 src/main/java/duke/instructions/Delete.java diff --git a/src/main/java/duke/instructions/Delete.java b/src/main/java/duke/instructions/Delete.java new file mode 100644 index 000000000..0c765a963 --- /dev/null +++ b/src/main/java/duke/instructions/Delete.java @@ -0,0 +1,2 @@ +package duke.instructions;public class Delete { +} From 3d14bd2a1739f20a9c8a415bfd8242a0ac238140 Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Thu, 16 Feb 2023 17:23:46 +0800 Subject: [PATCH 15/29] Change in branch-level-6 --- src/main/java/duke/Duke.java | 27 ++++++++++++++------- src/main/java/duke/instructions/Delete.java | 19 ++++++++++++++- src/main/java/duke/instructions/Event.java | 8 ------ src/main/java/duke/instructions/Task.java | 8 ++---- 4 files changed, 38 insertions(+), 24 deletions(-) diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index 3695f8e4a..81d63b0c0 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -30,10 +30,10 @@ public static void inputValues(String input) throws DukeException { listMain(input); break; case "mark": - markMain(input, command); + markMain(command); break; case "ummark": - unMarkMain(input, command); + unMarkMain(command); break; case "todo": toDoMain(input); @@ -41,16 +41,16 @@ public static void inputValues(String input) throws DukeException { case "deadline": deadlineMain(input); break; - case "event": eventMain(input); break; + case "delete": + deleteMain(input, command); + break; default: throw new DukeException(UNRECOGNISED_INPUT); } - - } public static void listMain(String input) { @@ -65,7 +65,7 @@ public static void listMain(String input) { } - public static void markMain(String input, String[] command) { + public static void markMain(String[] command) { int indexTask = Integer.parseInt(command[1]); System.out.println(LINE); taskNameList.get(indexTask - 1).mark(); @@ -75,7 +75,7 @@ public static void markMain(String input, String[] command) { System.out.println(LINE); } - public static void unMarkMain(String input, String[] command) { + public static void unMarkMain(String[] command) { int indexOfTask = Integer.parseInt(command[1]); System.out.println(LINE); taskNameList.get(indexOfTask - 1).unMark(); @@ -127,6 +127,17 @@ public static void deadlineMain(String input) { System.out.println(LINE); } + public static void deleteMain(String input, String[] command){ + int indexTask = Integer.parseInt(command[1]); + Task task = new Task(input); + System.out.println(LINE); + System.out.print(" Noted. I've removed this task:" + + System.lineSeparator() + + taskNameList.get(indexTask - 1).getState()); + taskNameList.remove(indexTask - 1); + System.out.println(task.numberOfTask(taskNameList.size())); + System.out.println(LINE); + } public static void main(String[] args) { greeting(); @@ -144,8 +155,6 @@ public static void main(String[] args) { System.out.println(e.getMessage()); System.out.println(LINE); } - } } } - diff --git a/src/main/java/duke/instructions/Delete.java b/src/main/java/duke/instructions/Delete.java index 0c765a963..d3914b15e 100644 --- a/src/main/java/duke/instructions/Delete.java +++ b/src/main/java/duke/instructions/Delete.java @@ -1,2 +1,19 @@ -package duke.instructions;public class Delete { +package duke.instructions; + +public class Delete extends Task{ + + public Delete(String description) { + super(description); + } + + public void deleteTask(){ + + } + + @Override + public String guideline(){ + + return " Noted. I've removed this task:" + + System.lineSeparator(); + } } diff --git a/src/main/java/duke/instructions/Event.java b/src/main/java/duke/instructions/Event.java index 5667b7f69..63d0e6bb2 100644 --- a/src/main/java/duke/instructions/Event.java +++ b/src/main/java/duke/instructions/Event.java @@ -9,14 +9,6 @@ public Event(String input) { this.input = input; } - public void handleErrors(){ - printLine(); - System.out.println(" ☹ OOPS!!! The description of a event cannot be empty."); - printLine(); - - - } - @Override public String getState(){ String wholeArrayOfEvent = this.description.substring(description.indexOf(" ") + 1); diff --git a/src/main/java/duke/instructions/Task.java b/src/main/java/duke/instructions/Task.java index 1a85769d4..7902e80de 100644 --- a/src/main/java/duke/instructions/Task.java +++ b/src/main/java/duke/instructions/Task.java @@ -1,7 +1,5 @@ package duke.instructions; -import java.util.ArrayList; - public class Task { protected String description; protected boolean isDone; @@ -37,12 +35,10 @@ public String guideline(){ + System.lineSeparator(); } public String numberOfTask(int length){ - return " Now you have " + length + " tasks in the list."; + return " Now you have " + + length + " tasks in the list."; } - public static void printLine(){ - System.out.println(" ____________________________________________________________"); - } } From 5673757f5329e39219c8b4e2e889770dc6d29922 Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Fri, 24 Feb 2023 23:55:40 +0800 Subject: [PATCH 16/29] Level 6 and part of level 7 --- src/main/java/duke/Duke.java | 86 ++++++++++++++++++- src/main/java/duke/instructions/Deadline.java | 11 +++ src/main/java/duke/instructions/Event.java | 14 ++- src/main/java/duke/instructions/Task.java | 6 +- src/main/java/duke/instructions/Todo.java | 8 ++ 5 files changed, 120 insertions(+), 5 deletions(-) diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index 81d63b0c0..a95da7469 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -5,16 +5,26 @@ import duke.instructions.Task; import duke.instructions.Todo; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; import java.util.ArrayList; +import java.util.Objects; import java.util.Scanner; public class Duke { public static final String EMPTY_DESCRIPTION = " ☹ OOPS!!! The description cannot be empty."; public static final String LINE = " ____________________________________________________________"; private static final String UNRECOGNISED_INPUT = " ☹ OOPS!!! I'm sorry, but I don't know what that means :-("; + + private static final String FILE_PATH = "data/tasks.txt"; protected static boolean isByeEnter = false; private static final ArrayList taskNameList = new ArrayList<>(); + + + public static void greeting() { System.out.println(LINE); @@ -88,6 +98,7 @@ public static void unMarkMain(String[] command) { public static void toDoMain(String input) throws DukeException { Todo toDo = new Todo(input); + toDo.setTaskType("T"); Task task = new Task(input); String[] tokens = input.split("\\s+", 2); if (tokens.length < 2) { @@ -105,6 +116,7 @@ public static void toDoMain(String input) throws DukeException { public static void eventMain(String input) { Event event = new Event(input); + event.setTaskType("E"); Task task = new Task(input); taskNameList.add(event); String outputForEvent = event.guideline() @@ -117,6 +129,7 @@ public static void eventMain(String input) { public static void deadlineMain(String input) { Deadline deadLine = new Deadline(input); + deadLine.setTaskType("D"); Task task = new Task(input); System.out.println(LINE); taskNameList.add(deadLine); @@ -139,16 +152,77 @@ public static void deleteMain(String input, String[] command){ System.out.println(LINE); } - public static void main(String[] args) { - greeting(); - Scanner userInput = new Scanner(System.in); + public static void readFile() throws FileNotFoundException { + + File savedFile = new File(FILE_PATH); + if(!savedFile.getParentFile().exists()){ + savedFile.getParentFile().mkdirs(); + + } + try{ + if(!savedFile.exists()){ + savedFile.createNewFile(); + } + } catch (IOException e) { + System.out.println("Failed to create a new file!!!"); + } + + + } + public static void loadTaskFromFile() throws DukeException{ + try{ + readFile(); + }catch(java.io.FileNotFoundException e) { + System.out.println("Error loading tasks from the file "); + } + } + + public static void writeTaskToFile(String taskName){ + + try{ + File savedFile = new File(FILE_PATH); + FileWriter writeFile = new FileWriter(savedFile); +/* + for (int indexOfInstruction = 0; indexOfInstruction < taskNameList.size(); indexOfInstruction++) { + if(taskNameList.get(indexOfInstruction).getState().trim().contains("D")){ + Deadline newDeadline = (Deadline) taskNameList[]; + writeFile.write("D | " + newDeadline.getStatusIcon() + " | " + newDeadline.getState().eventName[0]); + + }*/ + for(Task tasks : taskNameList){ + String typeOfTask = tasks.getTaskType(); + switch(typeOfTask){ + case "D": + Deadline newDeadline = (Deadline) tasks; + writeFile.write("D | " + newDeadline.getStatusIcon() + " | "); + break; + case "E": + break; + case "T": + break; + default: + } + + } + + } catch (IOException e) { + throw new RuntimeException(e); + } + + + } + + public static void checkInput(){ + Scanner userInput = new Scanner(System.in); while (true) { String taskName = userInput.nextLine(); if (taskName.equalsIgnoreCase("bye")) { + writeTaskToFile(taskName); break; } try { + loadTaskFromFile(); inputValues(taskName); } catch (Exception e) { System.out.println(LINE); @@ -157,4 +231,10 @@ public static void main(String[] args) { } } } + + + public static void main(String[] args) { + greeting(); + checkInput(); + } } diff --git a/src/main/java/duke/instructions/Deadline.java b/src/main/java/duke/instructions/Deadline.java index 4487ee314..cc6eeaf7a 100644 --- a/src/main/java/duke/instructions/Deadline.java +++ b/src/main/java/duke/instructions/Deadline.java @@ -2,9 +2,20 @@ public class Deadline extends Task{ String input; + protected String taskType; public Deadline(String input) { super(input); this.input = input; + this.taskType = "D"; + } + + @Override + public String getTaskType() { + return taskType; + } + + public void setTaskType(String taskType) { + this.taskType = taskType; } @Override diff --git a/src/main/java/duke/instructions/Event.java b/src/main/java/duke/instructions/Event.java index 63d0e6bb2..fcc46d21c 100644 --- a/src/main/java/duke/instructions/Event.java +++ b/src/main/java/duke/instructions/Event.java @@ -2,11 +2,13 @@ package duke.instructions; public class Event extends Task{ - String input; + protected String input; + protected String taskType; public Event(String input) { super(input); this.input = input; + this.taskType = "E"; } @Override @@ -30,4 +32,14 @@ public String guideline(){ return " Got it. I've added this task: " + System.lineSeparator(); } + + + @Override + public String getTaskType() { + return taskType; + } + + public void setTaskType(String taskType) { + this.taskType = taskType; + } } diff --git a/src/main/java/duke/instructions/Task.java b/src/main/java/duke/instructions/Task.java index 7902e80de..851cfa9c7 100644 --- a/src/main/java/duke/instructions/Task.java +++ b/src/main/java/duke/instructions/Task.java @@ -1,11 +1,12 @@ package duke.instructions; public class Task { + protected String description; protected boolean isDone; protected String state; protected String checkComplete; - protected String eventState; + protected String taskType; public Task(String description) { this.description = description; @@ -30,6 +31,9 @@ public String getStatusIcon() { public String getState(){ return state; } + public String getTaskType(){ + return taskType; + } public String guideline(){ return " Here are the task in your list: " + System.lineSeparator(); diff --git a/src/main/java/duke/instructions/Todo.java b/src/main/java/duke/instructions/Todo.java index 6f54485d2..14a66a10a 100644 --- a/src/main/java/duke/instructions/Todo.java +++ b/src/main/java/duke/instructions/Todo.java @@ -18,6 +18,14 @@ public String guideline(){ + System.lineSeparator(); } + @Override + public String getTaskType() { + return taskType; + } + + public void setTaskType(String taskType) { + this.taskType = taskType; + } } From cd4ec76f60c5e2543d0746bda91f5002d426cc69 Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Sat, 25 Feb 2023 00:00:08 +0800 Subject: [PATCH 17/29] no message --- src/main/java/duke/Duke.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index 81d63b0c0..7a2d77962 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -12,7 +12,6 @@ public class Duke { public static final String EMPTY_DESCRIPTION = " ☹ OOPS!!! The description cannot be empty."; public static final String LINE = " ____________________________________________________________"; private static final String UNRECOGNISED_INPUT = " ☹ OOPS!!! I'm sorry, but I don't know what that means :-("; - protected static boolean isByeEnter = false; private static final ArrayList taskNameList = new ArrayList<>(); public static void greeting() { From 07841ce3fb82e091194c2e6b9d998cd81abd77d4 Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Sat, 25 Feb 2023 17:42:50 +0800 Subject: [PATCH 18/29] This is level 7 --- data/tasks.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/tasks.txt diff --git a/data/tasks.txt b/data/tasks.txt new file mode 100644 index 000000000..e69de29bb From 3bce789d8605e04d7550f33b50a5e6886ddd0d91 Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Sat, 25 Feb 2023 17:43:45 +0800 Subject: [PATCH 19/29] This is level 7 --- src/main/java/duke/Duke.java | 33 +++++++++---------- src/main/java/duke/instructions/Deadline.java | 11 ++++++- src/main/java/duke/instructions/Event.java | 13 ++++++++ src/main/java/duke/instructions/Task.java | 4 +++ src/main/java/duke/instructions/Todo.java | 7 ++++ 5 files changed, 50 insertions(+), 18 deletions(-) diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index a95da7469..bddd694da 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -55,7 +55,7 @@ public static void inputValues(String input) throws DukeException { eventMain(input); break; case "delete": - deleteMain(input, command); + deleteMain(input); break; default: throw new DukeException(UNRECOGNISED_INPUT); @@ -63,8 +63,8 @@ public static void inputValues(String input) throws DukeException { } } - public static void listMain(String input) { - Task task = new Task(input); + public static void listMain(String command) { + Task task = new Task(command); System.out.println(LINE); System.out.print(task.guideline()); for (int indexOfInstruction = 0; indexOfInstruction < taskNameList.size(); indexOfInstruction++) { @@ -127,10 +127,10 @@ public static void eventMain(String input) { } - public static void deadlineMain(String input) { - Deadline deadLine = new Deadline(input); + public static void deadlineMain(String command) { + Deadline deadLine = new Deadline(command); deadLine.setTaskType("D"); - Task task = new Task(input); + Task task = new Task(command); System.out.println(LINE); taskNameList.add(deadLine); String outputForDeadline = deadLine.guideline() @@ -140,9 +140,9 @@ public static void deadlineMain(String input) { System.out.println(LINE); } - public static void deleteMain(String input, String[] command){ - int indexTask = Integer.parseInt(command[1]); - Task task = new Task(input); + public static void deleteMain(String command){ + int indexTask = Integer.parseInt(command); + Task task = new Task(command); System.out.println(LINE); System.out.print(" Noted. I've removed this task:" + System.lineSeparator() @@ -183,27 +183,26 @@ public static void writeTaskToFile(String taskName){ try{ File savedFile = new File(FILE_PATH); FileWriter writeFile = new FileWriter(savedFile); -/* - for (int indexOfInstruction = 0; indexOfInstruction < taskNameList.size(); indexOfInstruction++) { - if(taskNameList.get(indexOfInstruction).getState().trim().contains("D")){ - Deadline newDeadline = (Deadline) taskNameList[]; - writeFile.write("D | " + newDeadline.getStatusIcon() + " | " + newDeadline.getState().eventName[0]); - - }*/ for(Task tasks : taskNameList){ String typeOfTask = tasks.getTaskType(); switch(typeOfTask){ case "D": Deadline newDeadline = (Deadline) tasks; - writeFile.write("D | " + newDeadline.getStatusIcon() + " | "); + writeFile.write("D | " + newDeadline.getStatusIcon() + " | " + newDeadline.getTaskList()); break; case "E": + Event newEvent = (Event) tasks; + writeFile.write("E | " + newEvent.getStatusIcon() + " | " + newEvent.getTaskList()); break; case "T": + Todo newToDo = (Todo) tasks; + writeFile.write("E | " + newToDo.getStatusIcon() + " | " + newToDo.getTaskList()); break; default: + System.out.println("Invalid inout, please enetr a valid command"); } + } } catch (IOException e) { diff --git a/src/main/java/duke/instructions/Deadline.java b/src/main/java/duke/instructions/Deadline.java index cc6eeaf7a..45c1c2470 100644 --- a/src/main/java/duke/instructions/Deadline.java +++ b/src/main/java/duke/instructions/Deadline.java @@ -6,7 +6,7 @@ public class Deadline extends Task{ public Deadline(String input) { super(input); this.input = input; - this.taskType = "D"; + } @Override @@ -30,6 +30,15 @@ public String getState(){ + System.lineSeparator(); } + @Override + public String getTaskList(){ + String deadline = input.substring(input.indexOf(' ') + 1); + String[] newDeadline = deadline.split("/by"); + return newDeadline[0] + " | " + newDeadline[1]; + + + } + @Override public String guideline(){ return " Got it. I've added this task: " diff --git a/src/main/java/duke/instructions/Event.java b/src/main/java/duke/instructions/Event.java index fcc46d21c..ea3ee6639 100644 --- a/src/main/java/duke/instructions/Event.java +++ b/src/main/java/duke/instructions/Event.java @@ -42,4 +42,17 @@ public String getTaskType() { public void setTaskType(String taskType) { this.taskType = taskType; } + + @Override + public String getTaskList(){ + + String wholeArrayOfEvent = this.description.substring(description.indexOf(" ") + 1); + String[] arrayOfEvent = wholeArrayOfEvent.split("/from"); + String eventStart = arrayOfEvent[1].split("/to")[0].trim(); + String eventEnd = arrayOfEvent[1].split("/to")[1].trim(); + + return arrayOfEvent[0] + + " | " + eventStart + "-" + + eventEnd + System.lineSeparator(); + } } diff --git a/src/main/java/duke/instructions/Task.java b/src/main/java/duke/instructions/Task.java index 851cfa9c7..03f6a8c8a 100644 --- a/src/main/java/duke/instructions/Task.java +++ b/src/main/java/duke/instructions/Task.java @@ -8,6 +8,7 @@ public class Task { protected String checkComplete; protected String taskType; + protected String taskList; public Task(String description) { this.description = description; } @@ -31,6 +32,9 @@ public String getStatusIcon() { public String getState(){ return state; } + public String getTaskList(){ + return taskList; + } public String getTaskType(){ return taskType; } diff --git a/src/main/java/duke/instructions/Todo.java b/src/main/java/duke/instructions/Todo.java index 14a66a10a..95984cb76 100644 --- a/src/main/java/duke/instructions/Todo.java +++ b/src/main/java/duke/instructions/Todo.java @@ -27,6 +27,13 @@ public void setTaskType(String taskType) { this.taskType = taskType; } + @Override + public String getTaskList(){ + String arrayOfTodo = this.description.substring(description.indexOf(" ") + 1); + return arrayOfTodo; + } + } + From a8b89031f3db85ab323aa500e28cb3c38f8ebea5 Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Sun, 5 Mar 2023 01:37:24 +0800 Subject: [PATCH 20/29] clean space --- src/main/java/duke/Duke.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index bff389da3..8c278a244 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -10,7 +10,6 @@ import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; -import java.util.Objects; import java.util.Scanner; public class Duke { @@ -203,7 +202,6 @@ public static void writeTaskToFile(String taskName){ System.out.println("Invalid inout, please enetr a valid command"); } - } } catch (IOException e) { @@ -232,7 +230,6 @@ public static void checkInput(){ } } - public static void main(String[] args) { greeting(); checkInput(); From 8260134b021efa47beb4216f722c682f05f8d939 Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Sun, 5 Mar 2023 10:11:19 +0800 Subject: [PATCH 21/29] A-moreOOP --- src/main/java/duke/Duke.java | 228 ++----------------- src/main/java/duke/Parser.java | 70 ++++++ src/main/java/duke/TaskList.java | 136 +++++++++++ src/main/java/duke/Ui.java | 17 ++ src/main/java/duke/instructions/Storage.java | 83 +++++++ 5 files changed, 321 insertions(+), 213 deletions(-) create mode 100644 src/main/java/duke/Parser.java create mode 100644 src/main/java/duke/TaskList.java create mode 100644 src/main/java/duke/Ui.java create mode 100644 src/main/java/duke/instructions/Storage.java diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index bddd694da..cdb5b10c6 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -1,239 +1,41 @@ package duke; -import duke.instructions.Deadline; -import duke.instructions.Event; -import duke.instructions.Task; -import duke.instructions.Todo; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileWriter; -import java.io.IOException; +import duke.instructions.*; import java.util.ArrayList; -import java.util.Objects; -import java.util.Scanner; + public class Duke { - public static final String EMPTY_DESCRIPTION = " ☹ OOPS!!! The description cannot be empty."; - public static final String LINE = " ____________________________________________________________"; - private static final String UNRECOGNISED_INPUT = " ☹ OOPS!!! I'm sorry, but I don't know what that means :-("; private static final String FILE_PATH = "data/tasks.txt"; - protected static boolean isByeEnter = false; private static final ArrayList taskNameList = new ArrayList<>(); + public Duke(String filePath) { - - public static void greeting() { - - System.out.println(LINE); - System.out.println(" Hello! I'm Duke"); - System.out.println(" What can I do for you?"); - System.out.println(LINE); - } - - public static void inputValues(String input) throws DukeException { - String[] command = input.split("\\s+"); - switch (command[0]) { - case "list": - listMain(input); - break; - case "mark": - markMain(command); - break; - case "ummark": - unMarkMain(command); - break; - case "todo": - toDoMain(input); - break; - case "deadline": - deadlineMain(input); - break; - case "event": - eventMain(input); - break; - case "delete": - deleteMain(input); - break; - default: - throw new DukeException(UNRECOGNISED_INPUT); - - } - } - - public static void listMain(String command) { - Task task = new Task(command); - System.out.println(LINE); - System.out.print(task.guideline()); - for (int indexOfInstruction = 0; indexOfInstruction < taskNameList.size(); indexOfInstruction++) { - System.out.print(" " + (indexOfInstruction + 1) + "." - + taskNameList.get(indexOfInstruction).getState().trim() + System.lineSeparator()); - } - System.out.println(LINE); - - } - - public static void markMain(String[] command) { - int indexTask = Integer.parseInt(command[1]); - System.out.println(LINE); - taskNameList.get(indexTask - 1).mark(); - System.out.print(" Nice! I've marked this task as done:" - + System.lineSeparator() - + taskNameList.get(indexTask - 1).getState()); - System.out.println(LINE); - } - - public static void unMarkMain(String[] command) { - int indexOfTask = Integer.parseInt(command[1]); - System.out.println(LINE); - taskNameList.get(indexOfTask - 1).unMark(); - System.out.print(" OK, I've marked this task as not done yet:" - + System.lineSeparator() - + taskNameList.get(indexOfTask - 1).getState()); - System.out.println(LINE); - - } - - public static void toDoMain(String input) throws DukeException { - Todo toDo = new Todo(input); - toDo.setTaskType("T"); - Task task = new Task(input); - String[] tokens = input.split("\\s+", 2); - if (tokens.length < 2) { - throw new DukeException(EMPTY_DESCRIPTION); - } - System.out.println(LINE); - taskNameList.add(toDo); - String outputForTodo = toDo.guideline() - + toDo.getState() - + task.numberOfTask(taskNameList.size()); - System.out.println(outputForTodo); - System.out.println(LINE); - - } - - public static void eventMain(String input) { - Event event = new Event(input); - event.setTaskType("E"); - Task task = new Task(input); - taskNameList.add(event); - String outputForEvent = event.guideline() - + event.getState() - + task.numberOfTask(taskNameList.size()); - System.out.println(outputForEvent); - System.out.println(LINE); - - } - - public static void deadlineMain(String command) { - Deadline deadLine = new Deadline(command); - deadLine.setTaskType("D"); - Task task = new Task(command); - System.out.println(LINE); - taskNameList.add(deadLine); - String outputForDeadline = deadLine.guideline() - + deadLine.getState() - + task.numberOfTask(taskNameList.size()); - System.out.println(outputForDeadline); - System.out.println(LINE); - - } - public static void deleteMain(String command){ - int indexTask = Integer.parseInt(command); - Task task = new Task(command); - System.out.println(LINE); - System.out.print(" Noted. I've removed this task:" - + System.lineSeparator() - + taskNameList.get(indexTask - 1).getState()); - taskNameList.remove(indexTask - 1); - System.out.println(task.numberOfTask(taskNameList.size())); - System.out.println(LINE); - } - - public static void readFile() throws FileNotFoundException { - - File savedFile = new File(FILE_PATH); - if(!savedFile.getParentFile().exists()){ - savedFile.getParentFile().mkdirs(); - + try { + Storage.readFile(filePath, taskNameList); + } catch (java.io.FileNotFoundException e) { + Ui.showNotFoundError(); } - try{ - if(!savedFile.exists()){ - savedFile.createNewFile(); - } - } catch (IOException e) { - System.out.println("Failed to create a new file!!!"); - } - - } - public static void loadTaskFromFile() throws DukeException{ - try{ - readFile(); - }catch(java.io.FileNotFoundException e) { - System.out.println("Error loading tasks from the file "); - } - } - public static void writeTaskToFile(String taskName){ - try{ - File savedFile = new File(FILE_PATH); - FileWriter writeFile = new FileWriter(savedFile); - for(Task tasks : taskNameList){ - String typeOfTask = tasks.getTaskType(); - switch(typeOfTask){ - case "D": - Deadline newDeadline = (Deadline) tasks; - writeFile.write("D | " + newDeadline.getStatusIcon() + " | " + newDeadline.getTaskList()); - break; - case "E": - Event newEvent = (Event) tasks; - writeFile.write("E | " + newEvent.getStatusIcon() + " | " + newEvent.getTaskList()); - break; - case "T": - Todo newToDo = (Todo) tasks; - writeFile.write("E | " + newToDo.getStatusIcon() + " | " + newToDo.getTaskList()); - break; - default: - System.out.println("Invalid inout, please enetr a valid command"); - } + public static void run() { + Ui.greeting(); + boolean isRunning = true; - } + while (isRunning) { + isRunning = Parser.checkInput(taskNameList); - } catch (IOException e) { - throw new RuntimeException(e); } - + Storage.writeTaskToFile(FILE_PATH, taskNameList); + Parser.sayBye(); } - public static void checkInput(){ - Scanner userInput = new Scanner(System.in); - while (true) { - String taskName = userInput.nextLine(); - if (taskName.equalsIgnoreCase("bye")) { - writeTaskToFile(taskName); - break; - } - try { - loadTaskFromFile(); - inputValues(taskName); - } catch (Exception e) { - System.out.println(LINE); - System.out.println(e.getMessage()); - System.out.println(LINE); - } - } - } - - public static void main(String[] args) { - greeting(); - checkInput(); + new Duke("data/tasks.txt").run(); } } diff --git a/src/main/java/duke/Parser.java b/src/main/java/duke/Parser.java new file mode 100644 index 000000000..2a5de50a3 --- /dev/null +++ b/src/main/java/duke/Parser.java @@ -0,0 +1,70 @@ +package duke; + +import duke.instructions.Storage; +import duke.instructions.Task; + +import java.util.ArrayList; +import java.util.Scanner; + +public class Parser { + private static final String UNRECOGNISED_INPUT = " ☹ OOPS!!! I'm sorry, but I don't know what that means :-("; + private static final String FILE_PATH = "data/tasks.txt"; + + public static final String LINE = " ____________________________________________________________"; + + public static void sayBye() { + System.out.println(LINE); + System.out.println(" Bye. Hope to see you again soon!"); + System.out.println(LINE); + } + + public static void inputValues(String input) throws DukeException { + String[] command = input.split("\\s+"); + switch (command[0]) { + case "list": + TaskList.listMain(input); + break; + case "mark": + TaskList.markMain(command); + break; + case "ummark": + TaskList.unMarkMain(command); + break; + case "todo": + TaskList.toDoMain(input); + break; + case "deadline": + TaskList.deadlineMain(input); + break; + case "event": + TaskList.eventMain(input); + break; + case "delete": + TaskList.deleteMain(input); + break; + default: + throw new DukeException(UNRECOGNISED_INPUT); + + } + } + + public static boolean checkInput(ArrayList taskNameList) { + Scanner userInput = new Scanner(System.in); + while (true) { + String taskName = userInput.nextLine(); + + if (taskName.equalsIgnoreCase("bye")) { + Storage.writeTaskToFile(FILE_PATH, taskNameList); + return false; + } + try { + Storage.loadTaskFromFile(FILE_PATH, taskNameList); + inputValues(taskName); + } catch (Exception e) { + System.out.println(LINE); + System.out.println(e.getMessage()); + System.out.println(LINE); + } + } + } +} diff --git a/src/main/java/duke/TaskList.java b/src/main/java/duke/TaskList.java new file mode 100644 index 000000000..83aae1854 --- /dev/null +++ b/src/main/java/duke/TaskList.java @@ -0,0 +1,136 @@ +package duke; + +import duke.instructions.Deadline; +import duke.instructions.Event; +import duke.instructions.Task; +import duke.instructions.Todo; + +import java.util.ArrayList; + +public class TaskList { + + private static final ArrayList taskNameList = new ArrayList<>(); + public static final String LINE = " ____________________________________________________________"; + public static final String EMPTY_DESCRIPTION = " ☹ OOPS!!! The description cannot be empty."; + + + public static void listMain(String command) { + Task task = new Task(command); + System.out.println(LINE); + System.out.print(task.guideline()); + for (int indexOfInstruction = 0; indexOfInstruction < taskNameList.size(); indexOfInstruction++) { + System.out.print(" " + (indexOfInstruction + 1) + "." + + taskNameList.get(indexOfInstruction).getState().trim() + System.lineSeparator()); + } + System.out.println(LINE); + + } + + public static void markMain(String[] command) { + int indexTask = Integer.parseInt(command[1]); + System.out.println(LINE); + taskNameList.get(indexTask - 1).mark(); + System.out.print(" Nice! I've marked this task as done:" + + System.lineSeparator() + + taskNameList.get(indexTask - 1).getState()); + System.out.println(LINE); + } + + public static void unMarkMain(String[] command) { + int indexOfTask = Integer.parseInt(command[1]); + System.out.println(LINE); + taskNameList.get(indexOfTask - 1).unMark(); + System.out.print(" OK, I've marked this task as not done yet:" + + System.lineSeparator() + + taskNameList.get(indexOfTask - 1).getState()); + System.out.println(LINE); + + } + + public static void toDoMain(String input) throws DukeException { + Todo toDo = new Todo(input); + toDo.setTaskType("T"); + Task task = new Task(input); + String[] tokens = input.split("\\s+", 2); + if (tokens.length < 2) { + throw new DukeException(EMPTY_DESCRIPTION); + } + System.out.println(LINE); + taskNameList.add(toDo); + String outputForTodo = toDo.guideline() + + toDo.getState() + + task.numberOfTask(taskNameList.size()); + System.out.println(outputForTodo); + System.out.println(LINE); + + } + + public static void eventMain(String input) { + Event event = new Event(input); + event.setTaskType("E"); + Task task = new Task(input); + taskNameList.add(event); + String outputForEvent = event.guideline() + + event.getState() + + task.numberOfTask(taskNameList.size()); + System.out.println(outputForEvent); + System.out.println(LINE); + + } + + public static void deadlineMain(String command) { + Deadline deadLine = new Deadline(command); + deadLine.setTaskType("D"); + Task task = new Task(command); + System.out.println(LINE); + taskNameList.add(deadLine); + String outputForDeadline = deadLine.guideline() + + deadLine.getState() + + task.numberOfTask(taskNameList.size()); + System.out.println(outputForDeadline); + System.out.println(LINE); + + } + public static void deleteMain(String command){ + int indexTask = Integer.parseInt(command); + Task task = new Task(command); + System.out.println(LINE); + System.out.print(" Noted. I've removed this task:" + + System.lineSeparator() + + taskNameList.get(indexTask - 1).getState()); + taskNameList.remove(indexTask - 1); + System.out.println(task.numberOfTask(taskNameList.size())); + System.out.println(LINE); + } + + /*public static void inputValues(String input) throws DukeException { + String[] command = input.split("\\s+"); + switch (command[0]) { + case "list": + TaskList.listMain(input); + break; + case "mark": + TaskList.markMain(command); + break; + case "ummark": + TaskList.unMarkMain(command); + break; + case "todo": + TaskList.toDoMain(input); + break; + case "deadline": + TaskList.deadlineMain(input); + break; + case "event": + TaskList.eventMain(input); + break; + case "delete": + TaskList.deleteMain(input); + break; + default: + throw new DukeException(UNRECOGNISED_INPUT); + + } + } +*/ +} diff --git a/src/main/java/duke/Ui.java b/src/main/java/duke/Ui.java new file mode 100644 index 000000000..303a7c219 --- /dev/null +++ b/src/main/java/duke/Ui.java @@ -0,0 +1,17 @@ +package duke; + +public class Ui { + public static final String LINE = " ____________________________________________________________"; + public static void greeting() { + + System.out.println(LINE); + System.out.println(" Hello! I'm Duke"); + System.out.println(" What can I do for you?"); + System.out.println(LINE); + } + + + public static void showNotFoundError(){ + System.out.println("Failed to locate the file"); + } +} diff --git a/src/main/java/duke/instructions/Storage.java b/src/main/java/duke/instructions/Storage.java new file mode 100644 index 000000000..2a01686fd --- /dev/null +++ b/src/main/java/duke/instructions/Storage.java @@ -0,0 +1,83 @@ +package duke.instructions; + +import duke.DukeException; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; + +public class Storage { + //static final String FILE_PATH = "data/tasks.txt"; + protected static String filePath; + + public Storage(String filePath) { + this.filePath = filePath; + } + + + public static void writeTaskToFile(String filePath, ArrayList taskNameList){ + + try{ + File savedFile = new File(filePath); + FileWriter writeFile = new FileWriter(savedFile); + for(Task tasks : taskNameList){ + String typeOfTask = tasks.getTaskType(); + switch(typeOfTask){ + case "D": + Deadline newDeadline = (Deadline) tasks; + writeFile.write("D | " + newDeadline.getStatusIcon() + " | " + newDeadline.getTaskList()); + break; + case "E": + Event newEvent = (Event) tasks; + writeFile.write("E | " + newEvent.getStatusIcon() + " | " + newEvent.getTaskList()); + break; + case "T": + Todo newToDo = (Todo) tasks; + writeFile.write("E | " + newToDo.getStatusIcon() + " | " + newToDo.getTaskList()); + break; + default: + System.out.println("Invalid inout, please enetr a valid command"); + } + + + } + + } catch (IOException e) { + throw new RuntimeException(e); + } + + + } + + public static void readFile(String filePath, ArrayList taskList) throws FileNotFoundException { + + File savedFile = new File(filePath); + if(!savedFile.getParentFile().exists()){ + savedFile.getParentFile().mkdirs(); + + } + try{ + if(!savedFile.exists()){ + savedFile.createNewFile(); + } + } catch (IOException e) { + System.out.println("Failed to create a new file!!!"); + } + + + } + public static void loadTaskFromFile(String filePath, ArrayList taskList) throws DukeException { + try{ + readFile(filePath, taskList); + }catch(java.io.FileNotFoundException e) { + System.out.println("Error loading tasks from the file "); + } + + } + + + + +} From c44b7a0bd53be2509e90cbc92e11cb3078767fe0 Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Sun, 5 Mar 2023 13:20:18 +0800 Subject: [PATCH 22/29] Implement the function of find --- src/main/java/duke/Duke.java | 57 +------------------- src/main/java/duke/Parser.java | 17 +++--- src/main/java/duke/TaskList.java | 59 +++++++++------------ src/main/java/duke/instructions/Delete.java | 2 - src/main/java/duke/instructions/Event.java | 6 +++ src/main/java/duke/instructions/Task.java | 9 ++-- src/main/java/duke/instructions/Todo.java | 9 ++++ 7 files changed, 56 insertions(+), 103 deletions(-) diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index 1ac958c98..eb60cf51f 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -7,9 +7,7 @@ public class Duke { private static final String FILE_PATH = "data/tasks.txt"; - - protected static boolean isByeEnter = false; - + private static final ArrayList taskNameList = new ArrayList<>(); @@ -38,59 +36,6 @@ public static void run() { } - -/* - public static void writeTaskToFile(String taskName){ - - try{ - File savedFile = new File(FILE_PATH); - FileWriter writeFile = new FileWriter(savedFile); - for(Task tasks : taskNameList){ - String typeOfTask = tasks.getTaskType(); - switch(typeOfTask){ - case "D": - Deadline newDeadline = (Deadline) tasks; - writeFile.write("D | " + newDeadline.getStatusIcon() + " | " + newDeadline.getTaskList()); - break; - case "E": - Event newEvent = (Event) tasks; - writeFile.write("E | " + newEvent.getStatusIcon() + " | " + newEvent.getTaskList()); - break; - case "T": - Todo newToDo = (Todo) tasks; - writeFile.write("E | " + newToDo.getStatusIcon() + " | " + newToDo.getTaskList()); - break; - default: - System.out.println("Invalid inout, please enetr a valid command"); - } - - } - - } catch (IOException e) { - throw new RuntimeException(e); - } - - - } - - public static void checkInput(){ - Scanner userInput = new Scanner(System.in); - while (true) { - String taskName = userInput.nextLine(); - if (taskName.equalsIgnoreCase("bye")) { - writeTaskToFile(taskName); - break; - } - try { - loadTaskFromFile(); - inputValues(taskName); - } catch (Exception e) { - System.out.println(LINE); - System.out.println(e.getMessage()); - System.out.println(LINE); - } - } - }*/ public static void main(String[] args) { new Duke("data/tasks.txt").run(); } diff --git a/src/main/java/duke/Parser.java b/src/main/java/duke/Parser.java index 2a5de50a3..7046e33b9 100644 --- a/src/main/java/duke/Parser.java +++ b/src/main/java/duke/Parser.java @@ -22,25 +22,28 @@ public static void inputValues(String input) throws DukeException { String[] command = input.split("\\s+"); switch (command[0]) { case "list": - TaskList.listMain(input); + TaskList.listCommand(input); break; case "mark": - TaskList.markMain(command); + TaskList.markCommand(command); break; case "ummark": - TaskList.unMarkMain(command); + TaskList.unMarkCommand(command); break; case "todo": - TaskList.toDoMain(input); + TaskList.toDoCommand(input); break; case "deadline": - TaskList.deadlineMain(input); + TaskList.deadlineCommand(input); break; case "event": - TaskList.eventMain(input); + TaskList.eventCommand(input); break; case "delete": - TaskList.deleteMain(input); + TaskList.deleteCommand(input); + break; + case "find": + TaskList.findCommand(input); break; default: throw new DukeException(UNRECOGNISED_INPUT); diff --git a/src/main/java/duke/TaskList.java b/src/main/java/duke/TaskList.java index 83aae1854..a6343175e 100644 --- a/src/main/java/duke/TaskList.java +++ b/src/main/java/duke/TaskList.java @@ -14,7 +14,7 @@ public class TaskList { public static final String EMPTY_DESCRIPTION = " ☹ OOPS!!! The description cannot be empty."; - public static void listMain(String command) { + public static void listCommand(String command) { Task task = new Task(command); System.out.println(LINE); System.out.print(task.guideline()); @@ -26,7 +26,7 @@ public static void listMain(String command) { } - public static void markMain(String[] command) { + public static void markCommand(String[] command) { int indexTask = Integer.parseInt(command[1]); System.out.println(LINE); taskNameList.get(indexTask - 1).mark(); @@ -36,7 +36,7 @@ public static void markMain(String[] command) { System.out.println(LINE); } - public static void unMarkMain(String[] command) { + public static void unMarkCommand(String[] command) { int indexOfTask = Integer.parseInt(command[1]); System.out.println(LINE); taskNameList.get(indexOfTask - 1).unMark(); @@ -47,7 +47,7 @@ public static void unMarkMain(String[] command) { } - public static void toDoMain(String input) throws DukeException { + public static void toDoCommand(String input) throws DukeException { Todo toDo = new Todo(input); toDo.setTaskType("T"); Task task = new Task(input); @@ -65,7 +65,7 @@ public static void toDoMain(String input) throws DukeException { } - public static void eventMain(String input) { + public static void eventCommand(String input) { Event event = new Event(input); event.setTaskType("E"); Task task = new Task(input); @@ -78,7 +78,7 @@ public static void eventMain(String input) { } - public static void deadlineMain(String command) { + public static void deadlineCommand(String command) { Deadline deadLine = new Deadline(command); deadLine.setTaskType("D"); Task task = new Task(command); @@ -91,7 +91,7 @@ public static void deadlineMain(String command) { System.out.println(LINE); } - public static void deleteMain(String command){ + public static void deleteCommand(String command){ int indexTask = Integer.parseInt(command); Task task = new Task(command); System.out.println(LINE); @@ -103,34 +103,25 @@ public static void deleteMain(String command){ System.out.println(LINE); } - /*public static void inputValues(String input) throws DukeException { - String[] command = input.split("\\s+"); - switch (command[0]) { - case "list": - TaskList.listMain(input); - break; - case "mark": - TaskList.markMain(command); - break; - case "ummark": - TaskList.unMarkMain(command); - break; - case "todo": - TaskList.toDoMain(input); - break; - case "deadline": - TaskList.deadlineMain(input); - break; - case "event": - TaskList.eventMain(input); - break; - case "delete": - TaskList.deleteMain(input); - break; - default: - throw new DukeException(UNRECOGNISED_INPUT); + public static void findCommand(String command){ + String keyword = command.substring(5); + ArrayList matchedTask = new ArrayList<>(); + + for (Task task : taskNameList) { + if ((task.getState()).contains(keyword)) { + matchedTask.add(task); + } + } + int numberOfFoundTasks = matchedTask.size(); + int number0fTask = 1; + System.out.println(" There are " + numberOfFoundTasks + " matching tasks in your list"); + for (Task foundTask : matchedTask) { + if (foundTask != null) { + System.out.print(" " +number0fTask + "." + foundTask.getState().trim() + System.lineSeparator()); + } + number0fTask++; } } -*/ + } diff --git a/src/main/java/duke/instructions/Delete.java b/src/main/java/duke/instructions/Delete.java index d3914b15e..bb45de181 100644 --- a/src/main/java/duke/instructions/Delete.java +++ b/src/main/java/duke/instructions/Delete.java @@ -6,9 +6,7 @@ public Delete(String description) { super(description); } - public void deleteTask(){ - } @Override public String guideline(){ diff --git a/src/main/java/duke/instructions/Event.java b/src/main/java/duke/instructions/Event.java index ea3ee6639..0c3637b7d 100644 --- a/src/main/java/duke/instructions/Event.java +++ b/src/main/java/duke/instructions/Event.java @@ -4,11 +4,13 @@ public class Event extends Task{ protected String input; protected String taskType; + protected String taskName; public Event(String input) { super(input); this.input = input; this.taskType = "E"; + this.taskName = input; } @Override @@ -42,6 +44,10 @@ public String getTaskType() { public void setTaskType(String taskType) { this.taskType = taskType; } + public String getTaskName(){ + return this.taskName; + } + @Override public String getTaskList(){ diff --git a/src/main/java/duke/instructions/Task.java b/src/main/java/duke/instructions/Task.java index 03f6a8c8a..e3f755671 100644 --- a/src/main/java/duke/instructions/Task.java +++ b/src/main/java/duke/instructions/Task.java @@ -8,6 +8,7 @@ public class Task { protected String checkComplete; protected String taskType; + protected String taskName; protected String taskList; public Task(String description) { this.description = description; @@ -21,10 +22,6 @@ public void unMark() { this.isDone = false; } - public String getDescription() { - return description; - } - public String getStatusIcon() { checkComplete = (this.isDone ? "X" : " "); return checkComplete; // mark done task with X @@ -38,6 +35,10 @@ public String getTaskList(){ public String getTaskType(){ return taskType; } + + public String getTaskName(){ + return taskName; + } public String guideline(){ return " Here are the task in your list: " + System.lineSeparator(); diff --git a/src/main/java/duke/instructions/Todo.java b/src/main/java/duke/instructions/Todo.java index 95984cb76..0372996b0 100644 --- a/src/main/java/duke/instructions/Todo.java +++ b/src/main/java/duke/instructions/Todo.java @@ -1,8 +1,16 @@ package duke.instructions; public class Todo extends Task{ + + protected String taskType; public Todo(String description) { super(description); + this.taskType = description; + } + + @Override + public String getTaskName(){ + return this.taskName; } @Override @@ -27,6 +35,7 @@ public void setTaskType(String taskType) { this.taskType = taskType; } + @Override public String getTaskList(){ String arrayOfTodo = this.description.substring(description.indexOf(" ") + 1); From da48b0a3deedc562433b56d16adb0765f366c5c4 Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Sun, 5 Mar 2023 13:45:48 +0800 Subject: [PATCH 23/29] level-9 formatting --- src/main/java/duke/TaskList.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/duke/TaskList.java b/src/main/java/duke/TaskList.java index a6343175e..fd12bd3aa 100644 --- a/src/main/java/duke/TaskList.java +++ b/src/main/java/duke/TaskList.java @@ -89,7 +89,6 @@ public static void deadlineCommand(String command) { + task.numberOfTask(taskNameList.size()); System.out.println(outputForDeadline); System.out.println(LINE); - } public static void deleteCommand(String command){ int indexTask = Integer.parseInt(command); @@ -102,7 +101,6 @@ public static void deleteCommand(String command){ System.out.println(task.numberOfTask(taskNameList.size())); System.out.println(LINE); } - public static void findCommand(String command){ String keyword = command.substring(5); From 31518e0c7aeef60c31577ba5ff0e977a75142f07 Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Sun, 5 Mar 2023 23:47:33 +0800 Subject: [PATCH 24/29] This is JavaDoc --- data/tasklist.txt | 1 + data/tasks.txt | 0 src/main/java/duke/Duke.java | 10 +-- src/main/java/duke/Parser.java | 41 +++++---- src/main/java/duke/TaskList.java | 66 +++++++++++--- src/main/java/duke/Ui.java | 8 ++ src/main/java/duke/instructions/Deadline.java | 47 +++++++--- src/main/java/duke/instructions/Event.java | 47 ++++++---- src/main/java/duke/instructions/Storage.java | 85 ++++++++++++++----- src/main/java/duke/instructions/Task.java | 22 +++-- src/main/java/duke/instructions/Todo.java | 37 +++++--- 11 files changed, 257 insertions(+), 107 deletions(-) create mode 100644 data/tasklist.txt delete mode 100644 data/tasks.txt diff --git a/data/tasklist.txt b/data/tasklist.txt new file mode 100644 index 000000000..56c92442c --- /dev/null +++ b/data/tasklist.txt @@ -0,0 +1 @@ +T | Not Done | list diff --git a/data/tasks.txt b/data/tasks.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index eb60cf51f..4cfe1d377 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -6,9 +6,8 @@ public class Duke { - private static final String FILE_PATH = "data/tasks.txt"; - private static final ArrayList taskNameList = new ArrayList<>(); + private static String filePath = "data/tasklist.txt"; public Duke(String filePath) { @@ -20,23 +19,20 @@ public Duke(String filePath) { } } - - public static void run() { Ui.greeting(); boolean isRunning = true; while (isRunning) { - isRunning = Parser.checkInput(taskNameList); + isRunning = Parser.checkInput(taskNameList, filePath); } - Storage.writeTaskToFile(FILE_PATH, taskNameList); Parser.sayBye(); } public static void main(String[] args) { - new Duke("data/tasks.txt").run(); + new Duke(filePath).run(); } } diff --git a/src/main/java/duke/Parser.java b/src/main/java/duke/Parser.java index 7046e33b9..6fc909a56 100644 --- a/src/main/java/duke/Parser.java +++ b/src/main/java/duke/Parser.java @@ -8,42 +8,46 @@ public class Parser { private static final String UNRECOGNISED_INPUT = " ☹ OOPS!!! I'm sorry, but I don't know what that means :-("; - private static final String FILE_PATH = "data/tasks.txt"; - public static final String LINE = " ____________________________________________________________"; public static void sayBye() { System.out.println(LINE); - System.out.println(" Bye. Hope to see you again soon!"); + System.out.println(" Bye. Hope to see you again soon!"); System.out.println(LINE); } - public static void inputValues(String input) throws DukeException { + /** + * Excute different instructions based on the command + * @param input user input + * @param taskNameInput list of task + * @throws DukeException check for errors + */ + public static void inputValues(String input, ArrayList taskNameInput) throws DukeException { String[] command = input.split("\\s+"); switch (command[0]) { case "list": - TaskList.listCommand(input); + TaskList.listCommand(input, taskNameInput); break; case "mark": - TaskList.markCommand(command); + TaskList.markCommand(command, taskNameInput); break; case "ummark": - TaskList.unMarkCommand(command); + TaskList.unMarkCommand(command, taskNameInput); break; case "todo": - TaskList.toDoCommand(input); + TaskList.toDoCommand(input, taskNameInput); break; case "deadline": - TaskList.deadlineCommand(input); + TaskList.deadlineCommand(input, taskNameInput); break; case "event": - TaskList.eventCommand(input); + TaskList.eventCommand(input, taskNameInput); break; case "delete": - TaskList.deleteCommand(input); + TaskList.deleteCommand(input, taskNameInput); break; case "find": - TaskList.findCommand(input); + TaskList.findCommand(input, taskNameInput); break; default: throw new DukeException(UNRECOGNISED_INPUT); @@ -51,18 +55,23 @@ public static void inputValues(String input) throws DukeException { } } - public static boolean checkInput(ArrayList taskNameList) { + /** + * to check if the program end using the keyword "bye" + * @param taskNameList list of task + * @param filePath the path of the file + * @return boolean values for checking the program + */ + public static boolean checkInput(ArrayList taskNameList, String filePath) { Scanner userInput = new Scanner(System.in); while (true) { String taskName = userInput.nextLine(); if (taskName.equalsIgnoreCase("bye")) { - Storage.writeTaskToFile(FILE_PATH, taskNameList); + Storage.writeTaskToFile(filePath, taskNameList); return false; } try { - Storage.loadTaskFromFile(FILE_PATH, taskNameList); - inputValues(taskName); + inputValues(taskName, taskNameList); } catch (Exception e) { System.out.println(LINE); System.out.println(e.getMessage()); diff --git a/src/main/java/duke/TaskList.java b/src/main/java/duke/TaskList.java index fd12bd3aa..54dc26022 100644 --- a/src/main/java/duke/TaskList.java +++ b/src/main/java/duke/TaskList.java @@ -7,14 +7,21 @@ import java.util.ArrayList; +/* + contains the methods for different instructions + */ + public class TaskList { - private static final ArrayList taskNameList = new ArrayList<>(); public static final String LINE = " ____________________________________________________________"; public static final String EMPTY_DESCRIPTION = " ☹ OOPS!!! The description cannot be empty."; - public static void listCommand(String command) { + /** + * Print a list of tasks that have been entered + * @param command user input that contains the user-specific keyword "list" + */ + public static void listCommand(String command, ArrayList taskNameList) { Task task = new Task(command); System.out.println(LINE); System.out.print(task.guideline()); @@ -26,7 +33,12 @@ public static void listCommand(String command) { } - public static void markCommand(String[] command) { + /** + * Print the task that have been marked + * @param command user input that contains the user-specific keyword "mark" + */ + + public static void markCommand(String[] command, ArrayList taskNameList) { int indexTask = Integer.parseInt(command[1]); System.out.println(LINE); taskNameList.get(indexTask - 1).mark(); @@ -36,7 +48,11 @@ public static void markCommand(String[] command) { System.out.println(LINE); } - public static void unMarkCommand(String[] command) { + /** + * Print the task that have been unmarked + * @param command user input that contains the user-specific keyword "unmark" + */ + public static void unMarkCommand(String[] command , ArrayList taskNameList) { int indexOfTask = Integer.parseInt(command[1]); System.out.println(LINE); taskNameList.get(indexOfTask - 1).unMark(); @@ -47,11 +63,15 @@ public static void unMarkCommand(String[] command) { } - public static void toDoCommand(String input) throws DukeException { - Todo toDo = new Todo(input); + /** + * Print the task that need to be done by user + * @param command user input that contains the user-specific keyword "todo" + */ + public static void toDoCommand(String command , ArrayList taskNameList) throws DukeException { + Todo toDo = new Todo(command); toDo.setTaskType("T"); - Task task = new Task(input); - String[] tokens = input.split("\\s+", 2); + Task task = new Task(command); + String[] tokens = command.split("\\s+", 2); if (tokens.length < 2) { throw new DukeException(EMPTY_DESCRIPTION); } @@ -65,10 +85,15 @@ public static void toDoCommand(String input) throws DukeException { } - public static void eventCommand(String input) { - Event event = new Event(input); + + /** + * Print the event that have been entered + * @param command user input that contains the user-specific keyword "mark" + */ + public static void eventCommand(String command , ArrayList taskNameList) { + Event event = new Event(command); event.setTaskType("E"); - Task task = new Task(input); + Task task = new Task(command); taskNameList.add(event); String outputForEvent = event.guideline() + event.getState() @@ -78,7 +103,11 @@ public static void eventCommand(String input) { } - public static void deadlineCommand(String command) { + /** + * Print the deadline that for the task they have entered + * @param command user input that contains the user-specific keyword "deadline" + */ + public static void deadlineCommand(String command , ArrayList taskNameList) { Deadline deadLine = new Deadline(command); deadLine.setTaskType("D"); Task task = new Task(command); @@ -90,7 +119,12 @@ public static void deadlineCommand(String command) { System.out.println(outputForDeadline); System.out.println(LINE); } - public static void deleteCommand(String command){ + + /** + * Print the task that have been deleted + * @param command user input that contains the user-specific keyword "delete" + */ + public static void deleteCommand(String command, ArrayList taskNameList){ int indexTask = Integer.parseInt(command); Task task = new Task(command); System.out.println(LINE); @@ -101,7 +135,11 @@ public static void deleteCommand(String command){ System.out.println(task.numberOfTask(taskNameList.size())); System.out.println(LINE); } - public static void findCommand(String command){ + /** + * Print the task that can be found in the tasks list + * @param command user input that contains the user-specific keyword "find + */ + public static void findCommand(String command, ArrayList taskNameList){ String keyword = command.substring(5); ArrayList matchedTask = new ArrayList<>(); diff --git a/src/main/java/duke/Ui.java b/src/main/java/duke/Ui.java index 303a7c219..111b1be82 100644 --- a/src/main/java/duke/Ui.java +++ b/src/main/java/duke/Ui.java @@ -1,7 +1,15 @@ package duke; +/* + Contains the methods to display the greeting when the program start + */ + public class Ui { public static final String LINE = " ____________________________________________________________"; + + /** + * For greeting + */ public static void greeting() { System.out.println(LINE); diff --git a/src/main/java/duke/instructions/Deadline.java b/src/main/java/duke/instructions/Deadline.java index 45c1c2470..5be7aac42 100644 --- a/src/main/java/duke/instructions/Deadline.java +++ b/src/main/java/duke/instructions/Deadline.java @@ -9,27 +9,42 @@ public Deadline(String input) { } - @Override - public String getTaskType() { - return taskType; - } public void setTaskType(String taskType) { this.taskType = taskType; } + @Override + public String getTaskType(){ + return this.taskType; + } + /** + * Format the input task + * @return return the new format of the task + */ @Override public String getState(){ - String deadline = input.substring(input.indexOf('/') + 1); - StringBuffer showDeadline = new StringBuffer(deadline); - showDeadline.insert(2, ":"); - String arrayOfDeadline = this.description.substring(description.indexOf(" ") + 1); - String[] eventName = arrayOfDeadline.split("/"); - return " [D]" + "[" + getStatusIcon() + "]" + " " - + eventName[0] + " (" + showDeadline + ")" - + System.lineSeparator(); + if(input.contains("|")){ + String[] inputCommands = input.split("\\|"); + return " [D]" + "[" + getStatusIcon() + "]" + " " + + inputCommands[2].trim() + " (by: " + inputCommands[3].trim() + ")" + + System.lineSeparator(); + }else { + String deadline = input.substring(input.indexOf('/') + 1); + StringBuffer showDeadline = new StringBuffer(deadline); + showDeadline.insert(2, ":"); + String arrayOfDeadline = this.description.substring(description.indexOf(" ") + 1); + String[] eventName = arrayOfDeadline.split("/"); + return " [D]" + "[" + getStatusIcon() + "]" + " " + + eventName[0] + " (" + showDeadline + ")" + + System.lineSeparator(); + } } + /** + * Format the task + * @return return the formatting task and save it in text file + */ @Override public String getTaskList(){ String deadline = input.substring(input.indexOf(' ') + 1); @@ -44,4 +59,12 @@ public String guideline(){ return " Got it. I've added this task: " + System.lineSeparator(); } + + public String taskStatus(){ + if(getStatusIcon().equals("X")){ + return "Done"; + }else{ + return "Not Done"; + } + } } diff --git a/src/main/java/duke/instructions/Event.java b/src/main/java/duke/instructions/Event.java index 0c3637b7d..873f30ea2 100644 --- a/src/main/java/duke/instructions/Event.java +++ b/src/main/java/duke/instructions/Event.java @@ -13,20 +13,36 @@ public Event(String input) { this.taskName = input; } + /** + * format the task + * @return return the respective task format based on the input + * if the input from text file, then it will execute the if condition, if the input from the input, then it will execute the else condition + */ + @Override public String getState(){ - String wholeArrayOfEvent = this.description.substring(description.indexOf(" ") + 1); - String[] arrayOfEvent = wholeArrayOfEvent.split("/from"); - String eventStart = arrayOfEvent[1].split("/to")[0].trim(); - String eventEnd = arrayOfEvent[1].split("/to")[1].trim(); - String full; - full = " [E]" + "[" + getStatusIcon() + "]" + " " - + arrayOfEvent[0] + - "(from: " + eventStart + " to: " - + eventEnd + ")" + System.lineSeparator(); + if(description.contains("|")){ + String[] inputCommands = description.split("\\|"); + String[] event = inputCommands[3].split("-"); + return " [E]" + "[" + getStatusIcon() + "]" + " " + + inputCommands[2].trim() + + " (from: " + event[0].trim() + " to: " + + event[1].trim() + ")" + System.lineSeparator(); + }else { + String wholeArrayOfEvent = this.description.substring(description.indexOf(" ") + 1); + String[] arrayOfEvent = wholeArrayOfEvent.split("/from"); + String eventStart = arrayOfEvent[1].split("/to")[0].trim(); + String eventEnd = arrayOfEvent[1].split("/to")[1].trim(); + + String full; + full = " [E]" + "[" + getStatusIcon() + "]" + " " + + arrayOfEvent[0] + + "(from: " + eventStart + " to: " + + eventEnd + ")" + System.lineSeparator(); - return full; + return full; + } } @Override @@ -36,16 +52,13 @@ public String guideline(){ } - @Override - public String getTaskType() { - return taskType; - } - public void setTaskType(String taskType) { this.taskType = taskType; } - public String getTaskName(){ - return this.taskName; + + @Override + public String getTaskType(){ + return this.taskType; } diff --git a/src/main/java/duke/instructions/Storage.java b/src/main/java/duke/instructions/Storage.java index 2a01686fd..444c6ed8c 100644 --- a/src/main/java/duke/instructions/Storage.java +++ b/src/main/java/duke/instructions/Storage.java @@ -2,21 +2,28 @@ import duke.DukeException; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileWriter; -import java.io.IOException; +import java.io.*; import java.util.ArrayList; +import java.util.Scanner; +/** + * Storage class mainly used for saving and loading the file when user exit the program + */ public class Storage { - //static final String FILE_PATH = "data/tasks.txt"; protected static String filePath; + private static final ArrayList previousTask = new ArrayList<>(); public Storage(String filePath) { this.filePath = filePath; } + public static final String LINE = " ____________________________________________________________"; + /** + * Store the task to txt file + * @param filePath the path where the file stored + * @param taskNameList the array list that store the tasks + */ public static void writeTaskToFile(String filePath, ArrayList taskNameList){ try{ @@ -27,57 +34,95 @@ public static void writeTaskToFile(String filePath, ArrayList taskNameList switch(typeOfTask){ case "D": Deadline newDeadline = (Deadline) tasks; - writeFile.write("D | " + newDeadline.getStatusIcon() + " | " + newDeadline.getTaskList()); + writeFile.write("D | " + newDeadline.taskStatus() + " | " + newDeadline.getTaskList() + System.lineSeparator()); break; case "E": Event newEvent = (Event) tasks; - writeFile.write("E | " + newEvent.getStatusIcon() + " | " + newEvent.getTaskList()); + writeFile.write("E | " + newEvent.taskStatus() + " | " + newEvent.getTaskList() + System.lineSeparator()); break; case "T": Todo newToDo = (Todo) tasks; - writeFile.write("E | " + newToDo.getStatusIcon() + " | " + newToDo.getTaskList()); + writeFile.write("T | " + newToDo.taskStatus() + " | " + newToDo.getTaskList() + System.lineSeparator()); break; default: - System.out.println("Invalid inout, please enetr a valid command"); + System.out.println("Invalid input, please enter a valid command"); } - - } + writeFile.close(); } catch (IOException e) { throw new RuntimeException(e); } - } - public static void readFile(String filePath, ArrayList taskList) throws FileNotFoundException { + /** + * + * Write the file to external txt file + * @param filePath filePath the path where the file stored + * @param taskNameList store the list of task + * @throws FileNotFoundException + */ + + public static void readFile(String filePath, ArrayList taskNameList) throws FileNotFoundException { File savedFile = new File(filePath); - if(!savedFile.getParentFile().exists()){ + if (!savedFile.getParentFile().exists()) { savedFile.getParentFile().mkdirs(); } - try{ - if(!savedFile.exists()){ + try { + if (!savedFile.exists()) { savedFile.createNewFile(); } } catch (IOException e) { System.out.println("Failed to create a new file!!!"); } + Scanner fileRead = new Scanner(new FileInputStream((filePath))); + try { + while (fileRead.hasNext()) { + String command = fileRead.nextLine(); + String[] inputCommands = command.split("\\|"); + String fileType = inputCommands[0].trim(); + switch (fileType) { + case "D": + Deadline newDeadline = new Deadline(command); + previousTask.add(newDeadline); + break; + case "T": + Todo newTodo = new Todo(command); + previousTask.add(newTodo); + break; + case "E": + Event newEvent = new Event(command); + previousTask.add(newEvent); + break; + default: + throw new FileNotFoundException(); + } + } + System.out.println(" Hear is the previous task: " + System.lineSeparator() + LINE); + for (int indexOfInstruction = 0; indexOfInstruction < previousTask.size(); indexOfInstruction++) { + System.out.print(" " + (indexOfInstruction + 1) + "." + + previousTask.get(indexOfInstruction).getState().trim() + System.lineSeparator()); + } + }catch(ArrayIndexOutOfBoundsException e){ + System.out.println("Tasklist.txt file cannot be accessed!"); + } } - public static void loadTaskFromFile(String filePath, ArrayList taskList) throws DukeException { + + /*public static void loadTaskFromFile(String filePath, ArrayList taskNameList) throws FileNotFoundException { try{ - readFile(filePath, taskList); + readFile(filePath, taskNameList); }catch(java.io.FileNotFoundException e) { System.out.println("Error loading tasks from the file "); - } + }*/ } -} + diff --git a/src/main/java/duke/instructions/Task.java b/src/main/java/duke/instructions/Task.java index e3f755671..439543f6d 100644 --- a/src/main/java/duke/instructions/Task.java +++ b/src/main/java/duke/instructions/Task.java @@ -3,16 +3,19 @@ public class Task { protected String description; - protected boolean isDone; + protected boolean isDone = false; protected String state; protected String checkComplete; - protected String taskType; + protected static String taskType; + - protected String taskName; protected String taskList; public Task(String description) { this.description = description; } + public Task(){ + + } public void mark() { this.isDone = true; @@ -32,13 +35,11 @@ public String getState(){ public String getTaskList(){ return taskList; } - public String getTaskType(){ + public String getTaskType(){ return taskType; } - public String getTaskName(){ - return taskName; - } + public String guideline(){ return " Here are the task in your list: " + System.lineSeparator(); @@ -49,5 +50,12 @@ public String numberOfTask(int length){ } + public String taskStatus(){ + if(getStatusIcon().equals("X")){ + return "Done"; + }else{ + return "Not Done"; + } + } } diff --git a/src/main/java/duke/instructions/Todo.java b/src/main/java/duke/instructions/Todo.java index 0372996b0..567907392 100644 --- a/src/main/java/duke/instructions/Todo.java +++ b/src/main/java/duke/instructions/Todo.java @@ -5,19 +5,21 @@ public class Todo extends Task{ protected String taskType; public Todo(String description) { super(description); - this.taskType = description; } - @Override - public String getTaskName(){ - return this.taskName; - } + @Override public String getState(){ - String arrayOfTodo = this.description.substring(description.indexOf(" ") + 1); - return " [T]" + "[" + getStatusIcon() + "]" + " " - + arrayOfTodo + System.lineSeparator(); + if(description.contains("|")){ + String[] inputCommands = description.split("\\|"); + return " [T]" + "[" + getStatusIcon() + "]" + " " + + inputCommands[2].trim() + System.lineSeparator(); + }else { + String arrayOfTodo = this.description.substring(description.indexOf(" ") + 1); + return " [T]" + "[" + getStatusIcon() + "]" + " " + + arrayOfTodo + System.lineSeparator(); + } } @Override @@ -26,14 +28,13 @@ public String guideline(){ + System.lineSeparator(); } - @Override - public String getTaskType() { - return taskType; - } - public void setTaskType(String taskType) { this.taskType = taskType; } + @Override + public String getTaskType(){ + return this.taskType; + } @Override @@ -41,8 +42,16 @@ public String getTaskList(){ String arrayOfTodo = this.description.substring(description.indexOf(" ") + 1); return arrayOfTodo; } + public String taskStatus(){ + if(getStatusIcon().equals("X")){ + return "Done"; + }else{ + return "Not Done"; + } + } + } + -} From 144ebda63d303de6c8f76dfa618d686cf586406f Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Sun, 5 Mar 2023 23:58:42 +0800 Subject: [PATCH 25/29] changes --- src/main/java/duke/Ui.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/duke/Ui.java b/src/main/java/duke/Ui.java index 111b1be82..3d03a7cf8 100644 --- a/src/main/java/duke/Ui.java +++ b/src/main/java/duke/Ui.java @@ -8,7 +8,7 @@ public class Ui { public static final String LINE = " ____________________________________________________________"; /** - * For greeting + * For greeting and display each time the program run */ public static void greeting() { From aca60558f0acadb813566f712de67b6a2fa871fe Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Mon, 6 Mar 2023 02:10:27 +0800 Subject: [PATCH 26/29] Update README --- docs/README.md | 262 +++++++++++++++++++- src/main/java/duke/TaskList.java | 2 + src/main/java/duke/instructions/Delete.java | 17 -- 3 files changed, 252 insertions(+), 29 deletions(-) delete mode 100644 src/main/java/duke/instructions/Delete.java diff --git a/docs/README.md b/docs/README.md index 8077118eb..d17cad9a4 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,29 +1,267 @@ # User Guide -## Features +## Table of Contents + +* [User Guide](#user-guide) + * [Features](#features) + * [Task Type 1: `Todos`](#task-type-1--todos) + * [Task Type 2: `Events`](#task-type-2--events) + * [Task Type 3: `Deadlines`](#task-type-3--deadlines) + * [Find Tasks By Description](#find-tasks-by-description) + * [Task Completion Status](#task-completion-status) + * [Task Deletion](#task-deletion) + * [Task Data Storage](#task-data-storage) + * [Usage](#usage) + * [`todo` - New Todo Task](#todo---new-todo-task) + * [`deadline` - New Deadline Task](#deadline---new-deadline-task) + * [`event` - New Event Task](#event---new-event-task) + * [`list` - List all Tasks](#list---list-all-tasks) + * [`mark` - Marks a Task as done](#mark---marks-a-task-as-done) + * [`unmark` - Marks a Task as not done](#unmark---marks-a-task-as-not-done) + * [`delete` - Deletes a Task](#delete---deletes-a-task) + * [`find` - Find Task by Keyword](#find---find-task-by-keyword) + * [`bye` - Turns Rica Off](#bye---shut-down-program) + -### Feature-ABC +## Features -Description of the feature. +### Task Type 1: `Todo` -### Feature-XYZ +The function of 'Todo' is to record the planning, like what are the things are reuqred to be done. -Description of the feature. +### Task Type 2: `Event` + +Event can be considered as part of the Todo, but it required the **start date and/or time** and **end date and/or time**, which can be more specific. + +### Task Type 3: `Deadline` + +Another kind of Todo is Deadline which has a specified **due date** so that the user can track the deadline for the task. Therefore, the priority of the tasks can be visualized. + +### Find Tasks By Description + +After creating many tasks, users can type a certain **keyword** to find the tasks that have been created before. As such, all the related tasks can be reviewed. + +### Task Completion Status + +All Tasks can be marked **done** or **not done**, so it helps to keep tracking the completion of the tasks

+The status of the tasks can be indicated by `[X]` if a task is completed or an empty box `[ ]` if the task haven't been completed yet. + +### Task Deletion + +Users can **delete** a task if they no longer need it in the task list. + +### Task Data Storage + +A list of Tasks can be recorded in computer's storage and _restore it_ the next time when the program start.

+The data memories will be stored in the data\taskList.txt file. ## Usage -### `Keyword` - Describe action +### `todo` - New Todo Task + +Creates a new Todo Task with the specific requirement and uncompleted status. -Describe the action and its outcome. +**Syntax**: -Example of usage: +`todo (task-that-need-to-be-done)` -`keyword (optional arguments)` +**Example of usage**: -Expected outcome: +`todo buy food` -Description of the outcome. +**Expected outcome**: ``` -expected output +todo buy food + ____________________________________________________________ + Got it. I've added this task: + [T][ ] buy food + Now you have 1 tasks in the list. + ____________________________________________________________ +``` + +### `deadline` - New Deadline Task + +Creates a new Deadline Task with the given description and due date. + +**Syntax**: + +`deadline (task-description) /by (deadline-with-time)` + +**Example of usage**: + +`deadline CS2113 Assignmentt /by 3 March` + +**Expected outcome**: + +Rica will remember that you have a deadline called 'Fall asleep' to meet by 10pm, which is added to your list of Tasks. + +``` +deadline Fall asleep /by 10pm + ____________________________________________________________ + Got it. I've added this task: + [D][ ] CS2113 Assignmentt (by: 3 March) + Now you have 2 tasks in the list. + ____________________________________________________________ +``` + +### `event` - New Event Task + +Creates a new Event Task with the given description, start date/time and end date/time. + +**Syntax**: + +`event (tassk-description) /from (start-date) /to (end-date)` + +**Example of usage**: + +`event shopping /from 4pm /to 8:30pm` + +**Expected outcome**: + +Rica will keep in mind that you want to 'Watch sunset' from 7pm to 7.15pm, and this Deadline is added to your list of Tasks. + +``` +event shopping /from 4pm /to 8.30pm + ____________________________________________________________ + Got it. I've added this task: + [E][ ] shopping (from: 4pm to: 8:30pm) + Now you have 1 tasks in the list. + ____________________________________________________________ +``` + +### `list` - List all Tasks + +Lists all Tasks that Rica currently remembers along with their completion status. + +**Example of usage**: + +`list` + +**Expected outcome**: + +Description of all the Tasks that have been entered as well as which Tasks are done or not done. + +``` +list + ____________________________________________________________ + Here are the task in your list: + 1.[E][ ] shopping (from: 4pm to: 8:30pm) + ____________________________________________________________ +``` + +### `mark` - Marks a Task as done + +Given the Task number based on the task list, mark the corresponding Task as done by the user. + +**Syntax**: + +`mark (task-index)` + +**Example of usage**: + +`mark 1` + +**Expected outcome**: + +Index 1 of the task list is now done, so it will update this task as done in the task list. + +``` +mark 1 + ____________________________________________________________ + Nice! I've marked this task as done: + [E][X] shopping (from: 4pm to: 8:30pm) + ____________________________________________________________ +``` + +### `unmark` - Marks a Task as not done + + + + +**Syntax**: + +`unmark (task-index)` + +**Example of usage**: + +`unmark 1` + +**Expected outcome**: + +Index 1 of the task list is now not done, so it will update this task as not done in the task list + +``` +unmark 1 + ____________________________________________________________ + Nice! I've marked this task as done: + [E][X] shopping (from: 4pm to: 8:30pm) + ____________________________________________________________ +``` + +### `delete` - Deletes a Task + +Given the Task number based on the task list, delete the corresponding Task by the user. + +**Syntax**: + +`delete (task-number)` + +**Example of usage**: + +`delete 1` + +**Expected outcome**: + +Index 1 of the task list is now deleted, so it will be deleted from the task list. + +``` +delete 1 + ____________________________________________________________ + Noted. I've removed this task: + [E][ ] project meeting (from: Aug 6th 2pm to: 4pm) + Now you have 4 tasks in the list. + ____________________________________________________________ +``` + +### `find` - Find Task by Keyword + +Given a keyword, a list of all Tasks with a matching description will be shown. + +**Syntax**: + +`find (keyword)` + +**Example of usage**: + +`find book` + +**Expected outcome**: + +Task with a description containing the word 'book' is shown to the user. + +``` +find book + ____________________________________________________________ + Here are the matching tasks in your list: + 1.[T][X] read book + 2.[D][X] return book (by: June 6th) + ____________________________________________________________ +``` + +### `bye` - Turns Program Off + +The program will shut down. + +**Example of usage**: + +`bye` + +**Expected outcome**: + + ``` + ____________________________________________________________ + Bye. Hope to see you again soon! + ____________________________________________________________ +``` \ No newline at end of file diff --git a/src/main/java/duke/TaskList.java b/src/main/java/duke/TaskList.java index 54dc26022..eaa156305 100644 --- a/src/main/java/duke/TaskList.java +++ b/src/main/java/duke/TaskList.java @@ -94,6 +94,7 @@ public static void eventCommand(String command , ArrayList taskNameList) { Event event = new Event(command); event.setTaskType("E"); Task task = new Task(command); + System.out.println(LINE); taskNameList.add(event); String outputForEvent = event.guideline() + event.getState() @@ -127,6 +128,7 @@ public static void deadlineCommand(String command , ArrayList taskNameList public static void deleteCommand(String command, ArrayList taskNameList){ int indexTask = Integer.parseInt(command); Task task = new Task(command); + System.out.println(LINE); System.out.print(" Noted. I've removed this task:" + System.lineSeparator() diff --git a/src/main/java/duke/instructions/Delete.java b/src/main/java/duke/instructions/Delete.java deleted file mode 100644 index bb45de181..000000000 --- a/src/main/java/duke/instructions/Delete.java +++ /dev/null @@ -1,17 +0,0 @@ -package duke.instructions; - -public class Delete extends Task{ - - public Delete(String description) { - super(description); - } - - - - @Override - public String guideline(){ - - return " Noted. I've removed this task:" - + System.lineSeparator(); - } -} From 3d4ec2e9efb43b00783d83d0878eb1bdec0d2bd8 Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Mon, 6 Mar 2023 11:33:25 +0800 Subject: [PATCH 27/29] Update README --- docs/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/README.md b/docs/README.md index d17cad9a4..5fd8e07e5 100644 --- a/docs/README.md +++ b/docs/README.md @@ -4,10 +4,10 @@ * [User Guide](#user-guide) * [Features](#features) - * [Task Type 1: `Todos`](#task-type-1--todos) - * [Task Type 2: `Events`](#task-type-2--events) - * [Task Type 3: `Deadlines`](#task-type-3--deadlines) - * [Find Tasks By Description](#find-tasks-by-description) + * [Task Type 1: `Todo`](#task-type-1--todos) + * [Task Type 2: `Event`](#task-type-2--events) + * [Task Type 3: `Deadline`](#task-type-3--deadlines) + * [Find Tasks By Keyword](#find-tasks-by-description) * [Task Completion Status](#task-completion-status) * [Task Deletion](#task-deletion) * [Task Data Storage](#task-data-storage) @@ -20,7 +20,7 @@ * [`unmark` - Marks a Task as not done](#unmark---marks-a-task-as-not-done) * [`delete` - Deletes a Task](#delete---deletes-a-task) * [`find` - Find Task by Keyword](#find---find-task-by-keyword) - * [`bye` - Turns Rica Off](#bye---shut-down-program) + * [`bye` - Terminate the program](#bye---shut-down-program) ## Features From 91ab442f237ef3d2e5714cbdec1eb99285c8d901 Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Mon, 6 Mar 2023 12:21:33 +0800 Subject: [PATCH 28/29] update --- data/tasklist.txt | 2 +- src/main/java/duke/Duke.java | 10 ++++--- src/main/java/duke/Parser.java | 8 +++--- src/main/java/duke/TaskList.java | 16 ++++++----- src/main/java/duke/instructions/Deadline.java | 12 ++++++--- src/main/java/duke/instructions/Event.java | 9 ++++++- src/main/java/duke/instructions/Storage.java | 27 ++++++++++--------- src/main/java/duke/instructions/Task.java | 16 +++++++++++ src/main/java/duke/instructions/Todo.java | 7 +++++ 9 files changed, 75 insertions(+), 32 deletions(-) diff --git a/data/tasklist.txt b/data/tasklist.txt index 56c92442c..023f4767d 100644 --- a/data/tasklist.txt +++ b/data/tasklist.txt @@ -1 +1 @@ -T | Not Done | list +T | Not Done | rice diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index 4cfe1d377..33deaa388 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -2,8 +2,6 @@ import duke.instructions.*; import java.util.ArrayList; -import java.util.Scanner; - public class Duke { private static final ArrayList taskNameList = new ArrayList<>(); @@ -19,19 +17,23 @@ public Duke(String filePath) { } } + /** + * The starting and ending of the program + * This methods will keep checking if "bye" is entered by the user + * + */ public static void run() { Ui.greeting(); boolean isRunning = true; - while (isRunning) { isRunning = Parser.checkInput(taskNameList, filePath); - } Parser.sayBye(); } + public static void main(String[] args) { new Duke(filePath).run(); } diff --git a/src/main/java/duke/Parser.java b/src/main/java/duke/Parser.java index 6fc909a56..40418e52c 100644 --- a/src/main/java/duke/Parser.java +++ b/src/main/java/duke/Parser.java @@ -31,7 +31,7 @@ public static void inputValues(String input, ArrayList taskNameInput) thro case "mark": TaskList.markCommand(command, taskNameInput); break; - case "ummark": + case "unmark": TaskList.unMarkCommand(command, taskNameInput); break; case "todo": @@ -65,9 +65,11 @@ public static boolean checkInput(ArrayList taskNameList, String filePath) Scanner userInput = new Scanner(System.in); while (true) { String taskName = userInput.nextLine(); - if (taskName.equalsIgnoreCase("bye")) { - Storage.writeTaskToFile(filePath, taskNameList); + if(taskNameList.size() < 1){ + System.out.println(" You do not enter any task and program will be terminated!!!"); + }else{ + Storage.writeTaskToFile(filePath, taskNameList);} return false; } try { diff --git a/src/main/java/duke/TaskList.java b/src/main/java/duke/TaskList.java index eaa156305..e270bd183 100644 --- a/src/main/java/duke/TaskList.java +++ b/src/main/java/duke/TaskList.java @@ -69,7 +69,7 @@ public static void unMarkCommand(String[] command , ArrayList taskNameList */ public static void toDoCommand(String command , ArrayList taskNameList) throws DukeException { Todo toDo = new Todo(command); - toDo.setTaskType("T"); + //toDo.setTaskType("T"); Task task = new Task(command); String[] tokens = command.split("\\s+", 2); if (tokens.length < 2) { @@ -92,7 +92,7 @@ public static void toDoCommand(String command , ArrayList taskNameList) th */ public static void eventCommand(String command , ArrayList taskNameList) { Event event = new Event(command); - event.setTaskType("E"); + //event.setTaskType("E"); Task task = new Task(command); System.out.println(LINE); taskNameList.add(event); @@ -110,7 +110,7 @@ public static void eventCommand(String command , ArrayList taskNameList) { */ public static void deadlineCommand(String command , ArrayList taskNameList) { Deadline deadLine = new Deadline(command); - deadLine.setTaskType("D"); + //deadLine.setTaskType("D"); Task task = new Task(command); System.out.println(LINE); taskNameList.add(deadLine); @@ -126,9 +126,9 @@ public static void deadlineCommand(String command , ArrayList taskNameList * @param command user input that contains the user-specific keyword "delete" */ public static void deleteCommand(String command, ArrayList taskNameList){ - int indexTask = Integer.parseInt(command); + String[] tokens = command.split("\\s+"); + int indexTask = Integer.parseInt(tokens[1]); Task task = new Task(command); - System.out.println(LINE); System.out.print(" Noted. I've removed this task:" + System.lineSeparator() @@ -153,10 +153,12 @@ public static void findCommand(String command, ArrayList taskNameList){ } int numberOfFoundTasks = matchedTask.size(); int number0fTask = 1; - System.out.println(" There are " + numberOfFoundTasks + " matching tasks in your list"); + System.out.println(" There are " + numberOfFoundTasks + + " matching tasks in your list"); for (Task foundTask : matchedTask) { if (foundTask != null) { - System.out.print(" " +number0fTask + "." + foundTask.getState().trim() + System.lineSeparator()); + System.out.print(" " +number0fTask + "." + foundTask.getState().trim() + + System.lineSeparator()); } number0fTask++; } diff --git a/src/main/java/duke/instructions/Deadline.java b/src/main/java/duke/instructions/Deadline.java index 5be7aac42..05a51bedd 100644 --- a/src/main/java/duke/instructions/Deadline.java +++ b/src/main/java/duke/instructions/Deadline.java @@ -2,11 +2,13 @@ public class Deadline extends Task{ String input; + boolean isComplete; + String status; protected String taskType; public Deadline(String input) { super(input); this.input = input; - + this.taskType = "D"; } @@ -15,7 +17,11 @@ public void setTaskType(String taskType) { } @Override public String getTaskType(){ - return this.taskType; + return "D"; + } + public void statusIcon(boolean isComplete){ + this.isComplete = isComplete; + this.status = (this.isComplete ? "X" : " "); } /** @@ -26,7 +32,7 @@ public String getTaskType(){ public String getState(){ if(input.contains("|")){ String[] inputCommands = input.split("\\|"); - return " [D]" + "[" + getStatusIcon() + "]" + " " + return " [D]" + "[" + this.status + "]" + " " + inputCommands[2].trim() + " (by: " + inputCommands[3].trim() + ")" + System.lineSeparator(); }else { diff --git a/src/main/java/duke/instructions/Event.java b/src/main/java/duke/instructions/Event.java index 873f30ea2..11e53b387 100644 --- a/src/main/java/duke/instructions/Event.java +++ b/src/main/java/duke/instructions/Event.java @@ -6,6 +6,9 @@ public class Event extends Task{ protected String taskType; protected String taskName; + boolean isComplete; + String status; + public Event(String input) { super(input); this.input = input; @@ -13,6 +16,10 @@ public Event(String input) { this.taskName = input; } + public void statusIcon(boolean isComplete){ + this.isComplete = isComplete; + this.status = (this.isComplete ? "X" : " "); + } /** * format the task * @return return the respective task format based on the input @@ -25,7 +32,7 @@ public String getState(){ if(description.contains("|")){ String[] inputCommands = description.split("\\|"); String[] event = inputCommands[3].split("-"); - return " [E]" + "[" + getStatusIcon() + "]" + " " + return " [E]" + "[" + this.status + "]" + " " + inputCommands[2].trim() + " (from: " + event[0].trim() + " to: " + event[1].trim() + ")" + System.lineSeparator(); diff --git a/src/main/java/duke/instructions/Storage.java b/src/main/java/duke/instructions/Storage.java index 444c6ed8c..8b404bf51 100644 --- a/src/main/java/duke/instructions/Storage.java +++ b/src/main/java/duke/instructions/Storage.java @@ -11,7 +11,7 @@ */ public class Storage { protected static String filePath; - private static final ArrayList previousTask = new ArrayList<>(); + private static final ArrayList taskNameList = new ArrayList<>(); public Storage(String filePath) { this.filePath = filePath; @@ -84,18 +84,26 @@ public static void readFile(String filePath, ArrayList taskNameList) throw String command = fileRead.nextLine(); String[] inputCommands = command.split("\\|"); String fileType = inputCommands[0].trim(); + boolean isCompleted = true; + if (inputCommands[1].trim().equals("Not Done")) { + isCompleted = false; + } + switch (fileType) { case "D": Deadline newDeadline = new Deadline(command); - previousTask.add(newDeadline); + taskNameList.add(newDeadline); + newDeadline.statusIcon(isCompleted); break; case "T": Todo newTodo = new Todo(command); - previousTask.add(newTodo); + taskNameList.add(newTodo); + newTodo.statusIcon(isCompleted); break; case "E": Event newEvent = new Event(command); - previousTask.add(newEvent); + taskNameList.add(newEvent); + newEvent.statusIcon(isCompleted); break; default: throw new FileNotFoundException(); @@ -103,9 +111,9 @@ public static void readFile(String filePath, ArrayList taskNameList) throw } System.out.println(" Hear is the previous task: " + System.lineSeparator() + LINE); - for (int indexOfInstruction = 0; indexOfInstruction < previousTask.size(); indexOfInstruction++) { + for (int indexOfInstruction = 0; indexOfInstruction < taskNameList.size(); indexOfInstruction++) { System.out.print(" " + (indexOfInstruction + 1) + "." - + previousTask.get(indexOfInstruction).getState().trim() + System.lineSeparator()); + + taskNameList.get(indexOfInstruction).getState().trim() + System.lineSeparator()); } }catch(ArrayIndexOutOfBoundsException e){ System.out.println("Tasklist.txt file cannot be accessed!"); @@ -113,13 +121,6 @@ public static void readFile(String filePath, ArrayList taskNameList) throw } - /*public static void loadTaskFromFile(String filePath, ArrayList taskNameList) throws FileNotFoundException { - try{ - readFile(filePath, taskNameList); - }catch(java.io.FileNotFoundException e) { - System.out.println("Error loading tasks from the file "); - }*/ - } diff --git a/src/main/java/duke/instructions/Task.java b/src/main/java/duke/instructions/Task.java index 439543f6d..3d5623f86 100644 --- a/src/main/java/duke/instructions/Task.java +++ b/src/main/java/duke/instructions/Task.java @@ -8,6 +8,9 @@ public class Task { protected String checkComplete; protected static String taskType; + boolean isComplete; + String status; + protected String taskList; public Task(String description) { @@ -25,6 +28,11 @@ public void unMark() { this.isDone = false; } + /** + * To update the status of the task and use "X" to indicate the task had been completed + * while " " is used to indicate the task haven't been done yet + * @return return the completion of the task + */ public String getStatusIcon() { checkComplete = (this.isDone ? "X" : " "); return checkComplete; // mark done task with X @@ -44,6 +52,14 @@ public String guideline(){ return " Here are the task in your list: " + System.lineSeparator(); } + + + + /** + * update the length of the task list + * @param length the length of the current task list + * @return return a string which shows the lasted number of tasks in the list + */ public String numberOfTask(int length){ return " Now you have " + length + " tasks in the list."; diff --git a/src/main/java/duke/instructions/Todo.java b/src/main/java/duke/instructions/Todo.java index 567907392..de27a0eba 100644 --- a/src/main/java/duke/instructions/Todo.java +++ b/src/main/java/duke/instructions/Todo.java @@ -3,11 +3,18 @@ public class Todo extends Task{ protected String taskType; + boolean isComplete; + String status; public Todo(String description) { super(description); + this.taskType = "T"; } + public void statusIcon(boolean isComplete){ + this.isComplete = isComplete; + this.status = (this.isComplete ? "X" : " "); + } @Override public String getState(){ From 2ca723ee27888d32a3915acdc00d12405e381b14 Mon Sep 17 00:00:00 2001 From: ZIZI-czh Date: Fri, 10 Mar 2023 01:13:02 +0800 Subject: [PATCH 29/29] update --- src/main/java/duke/instructions/Todo.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/duke/instructions/Todo.java b/src/main/java/duke/instructions/Todo.java index 0372996b0..e74755c7f 100644 --- a/src/main/java/duke/instructions/Todo.java +++ b/src/main/java/duke/instructions/Todo.java @@ -26,6 +26,10 @@ public String guideline(){ + System.lineSeparator(); } + /** + * get the task type + * @return the type of task + */ @Override public String getTaskType() { return taskType;