From 8bf8991223123c1c6d23ad356d953206c1bbea01 Mon Sep 17 00:00:00 2001 From: silinche Date: Fri, 20 Aug 2021 15:20:24 +0800 Subject: [PATCH 01/23] add increment level 0 --- src/main/java/Duke.java | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 5d313334c..1f6609b92 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,10 +1,18 @@ public class Duke { + public static void hi() { + System.out.println("Hello I'm Duke"); + System.out.println("What can I do for you?"); + System.out.println("______________________________"); + } + + public static void bye() { + System.out.println("Bye. Hope to see you again soon!"); + System.out.println("______________________________"); + } + public static void main(String[] args) { - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println("Hello from\n" + logo); + System.out.println("______________________________"); + hi(); + bye(); } } From 5876d3a21cbb3075f283c9f8795c1aa875dbfdfd Mon Sep 17 00:00:00 2001 From: silinche Date: Wed, 25 Aug 2021 21:14:58 +0800 Subject: [PATCH 02/23] added increment 1 --- src/main/java/Duke.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 1f6609b92..49ebb2397 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,18 +1,30 @@ +import java.util.Scanner; + public class Duke { public static void hi() { System.out.println("Hello I'm Duke"); System.out.println("What can I do for you?"); - System.out.println("______________________________"); } public static void bye() { System.out.println("Bye. Hope to see you again soon!"); - System.out.println("______________________________"); + } + + public static void echo() { + String line; + Scanner in = new Scanner(System.in); + while (true) { + line = in.nextLine(); + if (line.equals("bye")) { + return; + } + System.out.println(line); + } } public static void main(String[] args) { - System.out.println("______________________________"); hi(); + echo(); bye(); } } From 02672d87a3a8cf19154ba5977f6ee0117fd28aeb Mon Sep 17 00:00:00 2001 From: silinche Date: Wed, 25 Aug 2021 22:32:24 +0800 Subject: [PATCH 03/23] added increment 2 --- src/main/java/Duke.java | 28 +++++++++++++++++++++++++--- src/main/java/Task.java | 21 +++++++++++++++++++++ 2 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 src/main/java/Task.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 49ebb2397..f8cff9834 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,5 +1,6 @@ import java.util.Scanner; + public class Duke { public static void hi() { System.out.println("Hello I'm Duke"); @@ -10,21 +11,42 @@ public static void bye() { System.out.println("Bye. Hope to see you again soon!"); } - public static void echo() { + public static void running() { + Task[] tasks= new Task[100]; + int taskNumber = 0; String line; Scanner in = new Scanner(System.in); while (true) { + //new scanner line = in.nextLine(); + //if goodbye if (line.equals("bye")) { return; } - System.out.println(line); + //if want to list out tasks or mark as done or add items + if (line.equals("list")) { + for (int i = 0; i < taskNumber; i++) { + System.out.println((i + 1) + "." + " " + tasks[i].getDescription()); +// System.out.println((i + 1) + "." + tasks[i].getStatusIcon() + " " + tasks[i].getDescription()); + } + } +// else if (line.startsWith("done")) { +// int index = Integer.parseInt(line.substring(5)) - 1; +// tasks[index].setDone(); +// System.out.println("Nice! I've marked this task as done:"); +// System.out.println(" " + tasks[index].getStatusIcon() + " " + tasks[index].getDescription()); +// } + else { + tasks[taskNumber] = new Task(line); + taskNumber++; + System.out.println("added: " + line); + } } } public static void main(String[] args) { hi(); - echo(); + running(); bye(); } } diff --git a/src/main/java/Task.java b/src/main/java/Task.java new file mode 100644 index 000000000..22fc53552 --- /dev/null +++ b/src/main/java/Task.java @@ -0,0 +1,21 @@ +public class Task { + protected String description; +// protected boolean isDone; + + public Task(String description) { + this.description = description; +// this.isDone = false; + } + +// public void setDone() { +// this.isDone = true; +// } + + public String getDescription() { + return this.description; + } + +// public String getStatusIcon() { +// return (isDone ? "[X]" : "[ ]"); // mark done task with X +// } +} From d75ba2c890d2a3a5b772e6b44e63e1feb3fc9101 Mon Sep 17 00:00:00 2001 From: silinche Date: Wed, 25 Aug 2021 22:38:06 +0800 Subject: [PATCH 04/23] added increment 3 --- src/main/java/Duke.java | 15 +++++++-------- src/main/java/Task.java | 14 +++++++------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index f8cff9834..55e11f558 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -26,16 +26,15 @@ public static void running() { //if want to list out tasks or mark as done or add items if (line.equals("list")) { for (int i = 0; i < taskNumber; i++) { - System.out.println((i + 1) + "." + " " + tasks[i].getDescription()); -// System.out.println((i + 1) + "." + tasks[i].getStatusIcon() + " " + tasks[i].getDescription()); + System.out.println((i + 1) + "." + tasks[i].getStatusIcon() + " " + tasks[i].getDescription()); } } -// else if (line.startsWith("done")) { -// int index = Integer.parseInt(line.substring(5)) - 1; -// tasks[index].setDone(); -// System.out.println("Nice! I've marked this task as done:"); -// System.out.println(" " + tasks[index].getStatusIcon() + " " + tasks[index].getDescription()); -// } + else if (line.startsWith("done")) { + int index = Integer.parseInt(line.substring(5)) - 1; + tasks[index].setDone(); + System.out.println("Nice! I've marked this task as done:"); + System.out.println(" " + tasks[index].getStatusIcon() + " " + tasks[index].getDescription()); + } else { tasks[taskNumber] = new Task(line); taskNumber++; diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 22fc53552..63c929229 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -1,21 +1,21 @@ public class Task { protected String description; -// protected boolean isDone; + protected boolean isDone; public Task(String description) { this.description = description; // this.isDone = false; } -// public void setDone() { -// this.isDone = true; -// } + public void setDone() { + this.isDone = true; + } public String getDescription() { return this.description; } -// public String getStatusIcon() { -// return (isDone ? "[X]" : "[ ]"); // mark done task with X -// } + public String getStatusIcon() { + return (isDone ? "[X]" : "[ ]"); // mark done task with X + } } From c77d04f2f228809cdb74e67fc3f4747c74e21d15 Mon Sep 17 00:00:00 2001 From: silinche Date: Wed, 25 Aug 2021 22:41:33 +0800 Subject: [PATCH 05/23] fix minor bug for increment 3 --- src/main/java/Task.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 63c929229..b34763811 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -4,7 +4,7 @@ public class Task { public Task(String description) { this.description = description; -// this.isDone = false; + this.isDone = false; } public void setDone() { From 308eacf96b3fad516ac0bc1aaf18e1e613acb734 Mon Sep 17 00:00:00 2001 From: silinche Date: Wed, 25 Aug 2021 23:01:27 +0800 Subject: [PATCH 06/23] update on A-CodingStandard --- src/main/java/Duke.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 55e11f558..63c6d616b 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -28,14 +28,12 @@ public static void running() { for (int i = 0; i < taskNumber; i++) { System.out.println((i + 1) + "." + tasks[i].getStatusIcon() + " " + tasks[i].getDescription()); } - } - else if (line.startsWith("done")) { + } else if (line.startsWith("done")) { int index = Integer.parseInt(line.substring(5)) - 1; tasks[index].setDone(); System.out.println("Nice! I've marked this task as done:"); System.out.println(" " + tasks[index].getStatusIcon() + " " + tasks[index].getDescription()); - } - else { + } else { tasks[taskNumber] = new Task(line); taskNumber++; System.out.println("added: " + line); From 97a678149ffcc81b98ee4215bdb108a9aaf57d5c Mon Sep 17 00:00:00 2001 From: silinche Date: Wed, 1 Sep 2021 23:59:36 +0800 Subject: [PATCH 07/23] Increment 4 --- src/main/java/Deadline.java | 14 +++++++++++ src/main/java/Duke.java | 50 ++++++++++++++++++++++++++++++++++--- src/main/java/Event.java | 14 +++++++++++ src/main/java/Task.java | 5 ++++ src/main/java/ToDo.java | 10 ++++++++ 5 files changed, 90 insertions(+), 3 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..e4e4b232c --- /dev/null +++ b/src/main/java/Deadline.java @@ -0,0 +1,14 @@ +public class Deadline extends Task { + + protected String by; + + public Deadline(String description, String by) { + super(description); + this.by = by; + } + + @Override + public String toString() { + return "[D]" + super.toString() + " (by: " + by + ")"; + } +} diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 63c6d616b..31ab109b6 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -33,10 +33,54 @@ public static void running() { tasks[index].setDone(); System.out.println("Nice! I've marked this task as done:"); System.out.println(" " + tasks[index].getStatusIcon() + " " + tasks[index].getDescription()); - } else { - tasks[taskNumber] = new Task(line); + } else if (line.startsWith("todo")) { + tasks[taskNumber] = new ToDo(line.substring(5)); taskNumber++; - System.out.println("added: " + line); + System.out.println("Got it. I've added this task:"); + System.out.println(" " + tasks[taskNumber - 1]); + System.out.println("Now you have " + taskNumber + " tasks in the list"); + } else if (line.startsWith("deadline")) { + String[] words = line.split(" "); + int index = 0; + String deadlineDescription = null; + String by = null; + for (int i = 0; i < words.length; i++) { + if (words[i].equals("/by")) { + index = i; + break; + } + } + for (int i = 1; i < index; i++) { + deadlineDescription += words[i]; + } + by = words[index + 1]; + tasks[taskNumber] = new Deadline(deadlineDescription, by); + taskNumber++; + System.out.println("Got it. I've added this task:"); + System.out.println(" " + tasks[taskNumber - 1]); + System.out.println("Now you have " + taskNumber + " tasks in the list"); + } else if (line.startsWith("event")) { + String[] words = line.split(" "); + int index = 0; + String eventDescription = null; + String at = null; + for (int i = 0; i < words.length; i++) { + if (words[i].equals("/at")) { + index = i; + break; + } + } + for (int i = 1; i < index; i++) { + eventDescription += words[i]; + } + for (int i = index + 1; i < words.length; i++) { + at += words[i]; + } + tasks[taskNumber] = new Deadline(eventDescription, at); + taskNumber++; + System.out.println("Got it. I've added this task:"); + System.out.println(" " + tasks[taskNumber - 1]); + System.out.println("Now you have " + taskNumber + " tasks in the list"); } } } diff --git a/src/main/java/Event.java b/src/main/java/Event.java new file mode 100644 index 000000000..6874b47c3 --- /dev/null +++ b/src/main/java/Event.java @@ -0,0 +1,14 @@ +public class Event extends Task { + + protected String at; + + public Event(String description, String at) { + super(description); + this.at = at; + } + + @Override + public String toString() { + return "[E]" + super.toString() + " (at: " + at + ")"; + } +} diff --git a/src/main/java/Task.java b/src/main/java/Task.java index b34763811..110752328 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -18,4 +18,9 @@ public String getDescription() { public String getStatusIcon() { return (isDone ? "[X]" : "[ ]"); // mark done task with X } + + @Override + public String toString() { + return " " + this.getStatusIcon() + " " + this.getDescription(); + } } diff --git a/src/main/java/ToDo.java b/src/main/java/ToDo.java new file mode 100644 index 000000000..023c97b36 --- /dev/null +++ b/src/main/java/ToDo.java @@ -0,0 +1,10 @@ +public class ToDo extends Task{ + public ToDo(String description) { + super(description); + } + + @Override + public String toString() { + return "[T]" + super.toString(); + } +} From 64e85b9deb13ff52f57413417a1b7513bb86d895 Mon Sep 17 00:00:00 2001 From: silinche Date: Thu, 2 Sep 2021 00:08:07 +0800 Subject: [PATCH 08/23] fixed bugs for level-4 --- src/main/java/Duke.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 31ab109b6..05a79e8c2 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -42,8 +42,8 @@ public static void running() { } else if (line.startsWith("deadline")) { String[] words = line.split(" "); int index = 0; - String deadlineDescription = null; - String by = null; + String deadlineDescription = ""; + String by = ""; for (int i = 0; i < words.length; i++) { if (words[i].equals("/by")) { index = i; @@ -51,7 +51,7 @@ public static void running() { } } for (int i = 1; i < index; i++) { - deadlineDescription += words[i]; + deadlineDescription = deadlineDescription + words[i] + " "; } by = words[index + 1]; tasks[taskNumber] = new Deadline(deadlineDescription, by); @@ -62,8 +62,8 @@ public static void running() { } else if (line.startsWith("event")) { String[] words = line.split(" "); int index = 0; - String eventDescription = null; - String at = null; + String eventDescription = ""; + String at = ""; for (int i = 0; i < words.length; i++) { if (words[i].equals("/at")) { index = i; @@ -71,12 +71,12 @@ public static void running() { } } for (int i = 1; i < index; i++) { - eventDescription += words[i]; + eventDescription = eventDescription + words[i] + " "; } for (int i = index + 1; i < words.length; i++) { - at += words[i]; + at = at + words[i] + " "; } - tasks[taskNumber] = new Deadline(eventDescription, at); + tasks[taskNumber] = new Event(eventDescription, at); taskNumber++; System.out.println("Got it. I've added this task:"); System.out.println(" " + tasks[taskNumber - 1]); From 48ce8827577bca28d8ee76a2d54fbd745a48ac56 Mon Sep 17 00:00:00 2001 From: silinche Date: Thu, 2 Sep 2021 00:22:57 +0800 Subject: [PATCH 09/23] fixed minor bugs for increment level 4 --- src/main/java/Deadline.java | 2 +- src/main/java/Duke.java | 2 +- src/main/java/Event.java | 2 +- src/main/java/Task.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/Deadline.java b/src/main/java/Deadline.java index e4e4b232c..404eb8ef5 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/Deadline.java @@ -9,6 +9,6 @@ public Deadline(String description, String by) { @Override public String toString() { - return "[D]" + super.toString() + " (by: " + by + ")"; + return "[D]" + super.toString() + "(by: " + by + ")"; } } diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 05a79e8c2..b06bdd687 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -26,7 +26,7 @@ public static void running() { //if want to list out tasks or mark as done or add items if (line.equals("list")) { for (int i = 0; i < taskNumber; i++) { - System.out.println((i + 1) + "." + tasks[i].getStatusIcon() + " " + tasks[i].getDescription()); + System.out.println((i + 1) + "." + tasks[i]); } } else if (line.startsWith("done")) { int index = Integer.parseInt(line.substring(5)) - 1; diff --git a/src/main/java/Event.java b/src/main/java/Event.java index 6874b47c3..3971fbc61 100644 --- a/src/main/java/Event.java +++ b/src/main/java/Event.java @@ -9,6 +9,6 @@ public Event(String description, String at) { @Override public String toString() { - return "[E]" + super.toString() + " (at: " + at + ")"; + return "[E]" + super.toString() + "(at: " + at + ")"; } } diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 110752328..ce936de73 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -21,6 +21,6 @@ public String getStatusIcon() { @Override public String toString() { - return " " + this.getStatusIcon() + " " + this.getDescription(); + return this.getStatusIcon() + " " + this.getDescription(); } } From 653a21dca2caada8e8d0ee3c5b865dd7d036e30c Mon Sep 17 00:00:00 2001 From: silinche Date: Wed, 8 Sep 2021 23:44:40 +0800 Subject: [PATCH 10/23] commit text ui testing --- src/main/java/Duke.java | 4 +++- text-ui-test/EXPECTED.TXT | 24 +++++++++++++++++------- text-ui-test/input.txt | 6 ++++++ 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index b06bdd687..89ac8b27a 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -53,7 +53,9 @@ public static void running() { for (int i = 1; i < index; i++) { deadlineDescription = deadlineDescription + words[i] + " "; } - by = words[index + 1]; + for (int i = index + 1; i < words.length; i++) { + by = by + words[i] + " "; + } tasks[taskNumber] = new Deadline(deadlineDescription, by); taskNumber++; System.out.println("Got it. I've added this task:"); diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 657e74f6e..22849f47b 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,7 +1,17 @@ -Hello from - ____ _ -| _ \ _ _| | _____ -| | | | | | | |/ / _ \ -| |_| | |_| | < __/ -|____/ \__,_|_|\_\___| - +Hello I'm Duke +What can I do for you? +Got it. I've added this task: + [T][ ] do wct +Now you have 1 tasks in the list +Got it. I've added this task: + [D][ ] inquiry (by: now ) +Now you have 2 tasks in the list +Got it. I've added this task: + [E][ ] wct (at: tomorrow 2pm ) +Now you have 3 tasks in the list +Nice! I've marked this task as done: + [X] do wct +1.[T][X] do wct +2.[D][ ] inquiry (by: now ) +3.[E][ ] wct (at: tomorrow 2pm ) +Bye. Hope to see you again soon! diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index e69de29bb..d1a747a5c 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -0,0 +1,6 @@ +todo do wct +deadline inquiry /by now +event wct /at tomorrow 2pm +done 1 +list +bye From 7f61f2d7203a7511d7d6ebdf68b09c55c8fb3a74 Mon Sep 17 00:00:00 2001 From: silinche Date: Wed, 15 Sep 2021 14:58:59 +0800 Subject: [PATCH 11/23] create more functions to comply with code quality standards --- src/main/java/Duke.java | 136 +++++++++++++++++++++++----------------- 1 file changed, 78 insertions(+), 58 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 89ac8b27a..5b3b7e979 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -2,12 +2,81 @@ public class Duke { - public static void hi() { + public static void listOut(Task[] tasks, int taskNumber) { + for (int i = 0; i < taskNumber; i++) { + System.out.println((i + 1) + "." + tasks[i]); + } + } + + public static void markDone(String line, Task[] tasks) { + int index = Integer.parseInt(line.substring(5)) - 1; + tasks[index].setDone(); + System.out.println("Nice! I've marked this task as done:"); + System.out.println(" " + tasks[index].getStatusIcon() + " " + tasks[index].getDescription()); + } + + public static void addTodo(String line, Task[] tasks, int taskNumber) { + tasks[taskNumber] = new ToDo(line.substring(5)); + taskNumber++; + System.out.println("Got it. I've added this task:"); + System.out.println(" " + tasks[taskNumber - 1]); + System.out.println("Now you have " + taskNumber + " tasks in the list"); + } + + public static void addDeadline(String line, Task[] tasks, int taskNumber) { + String[] words = line.split(" "); + int index = 0; + String deadlineDescription = ""; + String by = ""; + for (int i = 0; i < words.length; i++) { + if (words[i].equals("/by")) { + index = i; + break; + } + } + for (int i = 1; i < index; i++) { + deadlineDescription = deadlineDescription + words[i] + " "; + } + for (int i = index + 1; i < words.length; i++) { + by = by + words[i] + " "; + } + tasks[taskNumber] = new Deadline(deadlineDescription, by); + taskNumber++; + System.out.println("Got it. I've added this task:"); + System.out.println(" " + tasks[taskNumber - 1]); + System.out.println("Now you have " + taskNumber + " tasks in the list"); + } + + public static void addEvent(String line, Task[] tasks, int taskNumber) { + String[] words = line.split(" "); + int index = 0; + String eventDescription = ""; + String at = ""; + for (int i = 0; i < words.length; i++) { + if (words[i].equals("/at")) { + index = i; + break; + } + } + for (int i = 1; i < index; i++) { + eventDescription = eventDescription + words[i] + " "; + } + for (int i = index + 1; i < words.length; i++) { + at = at + words[i] + " "; + } + tasks[taskNumber] = new Event(eventDescription, at); + taskNumber++; + System.out.println("Got it. I've added this task:"); + System.out.println(" " + tasks[taskNumber - 1]); + System.out.println("Now you have " + taskNumber + " tasks in the list"); + } + + public static void sayHi() { System.out.println("Hello I'm Duke"); System.out.println("What can I do for you?"); } - public static void bye() { + public static void sayBye() { System.out.println("Bye. Hope to see you again soon!"); } @@ -17,79 +86,30 @@ public static void running() { String line; Scanner in = new Scanner(System.in); while (true) { - //new scanner line = in.nextLine(); - //if goodbye if (line.equals("bye")) { return; } - //if want to list out tasks or mark as done or add items if (line.equals("list")) { - for (int i = 0; i < taskNumber; i++) { - System.out.println((i + 1) + "." + tasks[i]); - } + listOut(tasks, taskNumber); } else if (line.startsWith("done")) { - int index = Integer.parseInt(line.substring(5)) - 1; - tasks[index].setDone(); - System.out.println("Nice! I've marked this task as done:"); - System.out.println(" " + tasks[index].getStatusIcon() + " " + tasks[index].getDescription()); + markDone(line, tasks); } else if (line.startsWith("todo")) { - tasks[taskNumber] = new ToDo(line.substring(5)); + addTodo(line, tasks, taskNumber); taskNumber++; - System.out.println("Got it. I've added this task:"); - System.out.println(" " + tasks[taskNumber - 1]); - System.out.println("Now you have " + taskNumber + " tasks in the list"); } else if (line.startsWith("deadline")) { - String[] words = line.split(" "); - int index = 0; - String deadlineDescription = ""; - String by = ""; - for (int i = 0; i < words.length; i++) { - if (words[i].equals("/by")) { - index = i; - break; - } - } - for (int i = 1; i < index; i++) { - deadlineDescription = deadlineDescription + words[i] + " "; - } - for (int i = index + 1; i < words.length; i++) { - by = by + words[i] + " "; - } - tasks[taskNumber] = new Deadline(deadlineDescription, by); + addDeadline(line, tasks, taskNumber); taskNumber++; - System.out.println("Got it. I've added this task:"); - System.out.println(" " + tasks[taskNumber - 1]); - System.out.println("Now you have " + taskNumber + " tasks in the list"); } else if (line.startsWith("event")) { - String[] words = line.split(" "); - int index = 0; - String eventDescription = ""; - String at = ""; - for (int i = 0; i < words.length; i++) { - if (words[i].equals("/at")) { - index = i; - break; - } - } - for (int i = 1; i < index; i++) { - eventDescription = eventDescription + words[i] + " "; - } - for (int i = index + 1; i < words.length; i++) { - at = at + words[i] + " "; - } - tasks[taskNumber] = new Event(eventDescription, at); + addEvent(line, tasks, taskNumber); taskNumber++; - System.out.println("Got it. I've added this task:"); - System.out.println(" " + tasks[taskNumber - 1]); - System.out.println("Now you have " + taskNumber + " tasks in the list"); } } } public static void main(String[] args) { - hi(); + sayHi(); running(); - bye(); + sayBye(); } } From dfcf04b49897c7fc746963b288d150825032a974 Mon Sep 17 00:00:00 2001 From: silinche Date: Wed, 15 Sep 2021 19:12:09 +0800 Subject: [PATCH 12/23] added dealing with errors --- src/main/java/Duke.java | 63 ++++++++++++++++++++++++++++------------- 1 file changed, 44 insertions(+), 19 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 5b3b7e979..1fe32a66c 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -9,21 +9,31 @@ public static void listOut(Task[] tasks, int taskNumber) { } public static void markDone(String line, Task[] tasks) { - int index = Integer.parseInt(line.substring(5)) - 1; - tasks[index].setDone(); - System.out.println("Nice! I've marked this task as done:"); - System.out.println(" " + tasks[index].getStatusIcon() + " " + tasks[index].getDescription()); + try { + int index = Integer.parseInt(line.substring(5)) - 1; + tasks[index].setDone(); + System.out.println("Nice! I've marked this task as done:"); + System.out.println(" " + tasks[index].getStatusIcon() + " " + tasks[index].getDescription()); + } catch (StringIndexOutOfBoundsException e) { + System.out.println("OOPS!!! The description of a mark-done cannot be empty."); + } } - public static void addTodo(String line, Task[] tasks, int taskNumber) { - tasks[taskNumber] = new ToDo(line.substring(5)); - taskNumber++; - System.out.println("Got it. I've added this task:"); - System.out.println(" " + tasks[taskNumber - 1]); - System.out.println("Now you have " + taskNumber + " tasks in the list"); + public static boolean addTodo(String line, Task[] tasks, int taskNumber) { + try { + tasks[taskNumber] = new ToDo(line.substring(5)); + taskNumber++; + System.out.println("Got it. I've added this task:"); + System.out.println(" " + tasks[taskNumber - 1]); + System.out.println("Now you have " + taskNumber + " tasks in the list"); + return true; + } catch (StringIndexOutOfBoundsException e) { + System.out.println("OOPS!!! The description of a todo cannot be empty."); + return false; + } } - public static void addDeadline(String line, Task[] tasks, int taskNumber) { + public static boolean addDeadline(String line, Task[] tasks, int taskNumber) { String[] words = line.split(" "); int index = 0; String deadlineDescription = ""; @@ -34,6 +44,10 @@ public static void addDeadline(String line, Task[] tasks, int taskNumber) { break; } } + if (index == 0) { + System.out.println("OOPS!!! The description of a deadline cannot be empty."); + return false; + } for (int i = 1; i < index; i++) { deadlineDescription = deadlineDescription + words[i] + " "; } @@ -45,9 +59,10 @@ public static void addDeadline(String line, Task[] tasks, int taskNumber) { System.out.println("Got it. I've added this task:"); System.out.println(" " + tasks[taskNumber - 1]); System.out.println("Now you have " + taskNumber + " tasks in the list"); + return true; } - public static void addEvent(String line, Task[] tasks, int taskNumber) { + public static boolean addEvent(String line, Task[] tasks, int taskNumber) { String[] words = line.split(" "); int index = 0; String eventDescription = ""; @@ -58,6 +73,10 @@ public static void addEvent(String line, Task[] tasks, int taskNumber) { break; } } + if (index == 0) { + System.out.println("OOPS!!! The description of a deadline cannot be empty."); + return false; + } for (int i = 1; i < index; i++) { eventDescription = eventDescription + words[i] + " "; } @@ -69,6 +88,7 @@ public static void addEvent(String line, Task[] tasks, int taskNumber) { System.out.println("Got it. I've added this task:"); System.out.println(" " + tasks[taskNumber - 1]); System.out.println("Now you have " + taskNumber + " tasks in the list"); + return true; } public static void sayHi() { @@ -81,7 +101,7 @@ public static void sayBye() { } public static void running() { - Task[] tasks= new Task[100]; + Task[] tasks = new Task[100]; int taskNumber = 0; String line; Scanner in = new Scanner(System.in); @@ -95,14 +115,19 @@ public static void running() { } else if (line.startsWith("done")) { markDone(line, tasks); } else if (line.startsWith("todo")) { - addTodo(line, tasks, taskNumber); - taskNumber++; + if (addTodo(line, tasks, taskNumber)) { + taskNumber++; + } } else if (line.startsWith("deadline")) { - addDeadline(line, tasks, taskNumber); - taskNumber++; + if (addDeadline(line, tasks, taskNumber)) { + taskNumber++; + } } else if (line.startsWith("event")) { - addEvent(line, tasks, taskNumber); - taskNumber++; + if (addEvent(line, tasks, taskNumber)) { + taskNumber++; + } + } else { + System.out.println("☹ OOPS!!! I'm sorry, but I don't know what that means :-("); } } } From b4c1c6864360f47ae0353c548785e8e8354dbd31 Mon Sep 17 00:00:00 2001 From: silinche Date: Wed, 15 Sep 2021 19:32:19 +0800 Subject: [PATCH 13/23] added packaging --- README.md | 4 ++-- src/main/java/{ => duke/command}/Duke.java | 9 ++++++++- src/main/java/{ => duke/task}/Deadline.java | 2 ++ src/main/java/{ => duke/task}/Event.java | 2 ++ src/main/java/{ => duke/task}/Task.java | 2 ++ src/main/java/{ => duke/task}/ToDo.java | 2 ++ text-ui-test/EXPECTED.TXT | 2 +- 7 files changed, 19 insertions(+), 4 deletions(-) rename src/main/java/{ => duke/command}/Duke.java (96%) rename src/main/java/{ => duke/task}/Deadline.java (93%) rename src/main/java/{ => duke/task}/Event.java (93%) rename src/main/java/{ => duke/task}/Task.java (96%) rename src/main/java/{ => duke/task}/ToDo.java (90%) diff --git a/README.md b/README.md index 8715d4d91..0dc173b2e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Duke project template +# duke.command.Duke project template This is a project template for a greenfield Java project. It's named after the Java mascot _Duke_. Given below are instructions on how to use it. @@ -13,7 +13,7 @@ Prerequisites: JDK 11, update Intellij to the most recent version. 1. If there are any further prompts, accept the defaults. 1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).
In the same dialog, set the **Project language level** field to the `SDK default` option. -3. After that, locate the `src/main/java/Duke.java` file, right-click it, and choose `Run Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output: +3. After that, locate the `src/main/java/duke.command.Duke.java` file, right-click it, and choose `Run duke.command.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output: ``` Hello from ____ _ diff --git a/src/main/java/Duke.java b/src/main/java/duke/command/Duke.java similarity index 96% rename from src/main/java/Duke.java rename to src/main/java/duke/command/Duke.java index 1fe32a66c..afb973b86 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/duke/command/Duke.java @@ -1,3 +1,10 @@ +package duke.command; + +import duke.task.Deadline; +import duke.task.Event; +import duke.task.Task; +import duke.task.ToDo; + import java.util.Scanner; @@ -92,7 +99,7 @@ public static boolean addEvent(String line, Task[] tasks, int taskNumber) { } public static void sayHi() { - System.out.println("Hello I'm Duke"); + System.out.println("Hello I'm duke.command.Duke"); System.out.println("What can I do for you?"); } diff --git a/src/main/java/Deadline.java b/src/main/java/duke/task/Deadline.java similarity index 93% rename from src/main/java/Deadline.java rename to src/main/java/duke/task/Deadline.java index 404eb8ef5..662f8bb1c 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/duke/task/Deadline.java @@ -1,3 +1,5 @@ +package duke.task; + public class Deadline extends Task { protected String by; diff --git a/src/main/java/Event.java b/src/main/java/duke/task/Event.java similarity index 93% rename from src/main/java/Event.java rename to src/main/java/duke/task/Event.java index 3971fbc61..4c8b24803 100644 --- a/src/main/java/Event.java +++ b/src/main/java/duke/task/Event.java @@ -1,3 +1,5 @@ +package duke.task; + public class Event extends Task { protected String at; diff --git a/src/main/java/Task.java b/src/main/java/duke/task/Task.java similarity index 96% rename from src/main/java/Task.java rename to src/main/java/duke/task/Task.java index ce936de73..58a94d095 100644 --- a/src/main/java/Task.java +++ b/src/main/java/duke/task/Task.java @@ -1,3 +1,5 @@ +package duke.task; + public class Task { protected String description; protected boolean isDone; diff --git a/src/main/java/ToDo.java b/src/main/java/duke/task/ToDo.java similarity index 90% rename from src/main/java/ToDo.java rename to src/main/java/duke/task/ToDo.java index 023c97b36..f46d599dd 100644 --- a/src/main/java/ToDo.java +++ b/src/main/java/duke/task/ToDo.java @@ -1,3 +1,5 @@ +package duke.task; + public class ToDo extends Task{ public ToDo(String description) { super(description); diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 22849f47b..5c6addc53 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,4 +1,4 @@ -Hello I'm Duke +Hello I'm duke.command.Duke What can I do for you? Got it. I've added this task: [T][ ] do wct From 7f4ad3fd2129c9034cf2e465dac733717135b367 Mon Sep 17 00:00:00 2001 From: silinche Date: Thu, 16 Sep 2021 13:39:38 +0800 Subject: [PATCH 14/23] added level 6 deletion function --- src/main/java/duke/command/Duke.java | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/java/duke/command/Duke.java b/src/main/java/duke/command/Duke.java index afb973b86..7110c2e45 100644 --- a/src/main/java/duke/command/Duke.java +++ b/src/main/java/duke/command/Duke.java @@ -26,6 +26,23 @@ public static void markDone(String line, Task[] tasks) { } } + public static boolean deleteTask(String line, Task[] tasks, int taskNumber) { + try { + int index = Integer.parseInt(line.substring(7)) - 1; + System.out.println("Noted. I've removed this task:"); + System.out.println(" " + tasks[index]); + System.out.println("Now you have " + (taskNumber - 1) + " tasks in the list"); + for (int i = index; i < taskNumber - 1; i++) { + tasks[i] = tasks[i + 1]; + //what to do to the last one? + } + return true; + } catch (StringIndexOutOfBoundsException e) { + System.out.println("OOPS!!! The description of a deletion cannot be empty."); + return false; + } + } + public static boolean addTodo(String line, Task[] tasks, int taskNumber) { try { tasks[taskNumber] = new ToDo(line.substring(5)); @@ -99,7 +116,7 @@ public static boolean addEvent(String line, Task[] tasks, int taskNumber) { } public static void sayHi() { - System.out.println("Hello I'm duke.command.Duke"); + System.out.println("Hello I'm Duke"); System.out.println("What can I do for you?"); } @@ -121,6 +138,10 @@ public static void running() { listOut(tasks, taskNumber); } else if (line.startsWith("done")) { markDone(line, tasks); + } else if (line.startsWith("delete")) { + if (deleteTask(line, tasks, taskNumber)) { + taskNumber--; + } } else if (line.startsWith("todo")) { if (addTodo(line, tasks, taskNumber)) { taskNumber++; From 06d40a3199fd70b7a99791925c101559eba79051 Mon Sep 17 00:00:00 2001 From: silinche Date: Fri, 17 Sep 2021 21:32:29 +0800 Subject: [PATCH 15/23] added the save to file feature --- .gitignore | 1 + src/main/java/duke/command/Duke.java | 57 +++++++++++++++++++++++++++ src/main/java/duke/task/Deadline.java | 15 +++++++ src/main/java/duke/task/Event.java | 19 +++++++++ src/main/java/duke/task/Task.java | 21 ++++++++++ src/main/java/duke/task/ToDo.java | 5 ++- 6 files changed, 117 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index f69985ef1..76264e19c 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ bin/ /text-ui-test/ACTUAL.txt text-ui-test/EXPECTED-UNIX.TXT +data/ diff --git a/src/main/java/duke/command/Duke.java b/src/main/java/duke/command/Duke.java index afb973b86..75bd8b8e4 100644 --- a/src/main/java/duke/command/Duke.java +++ b/src/main/java/duke/command/Duke.java @@ -6,9 +6,60 @@ import duke.task.ToDo; import java.util.Scanner; +import java.io.File; +import java.io.IOException; +import java.io.FileNotFoundException; +import java.io.FileWriter; public class Duke { + private static int loadFromFile(String filePath, Task[] tasks) { + int taskNumber = 0; + try { + File f = new File(filePath); + if (!f.createNewFile()) { + Scanner s = new Scanner(f); + while (s.hasNext()) { + String task = s.nextLine(); + String[] words = task.split(" \\| "); + if (words[0].equals("T")) { + tasks[taskNumber] = new ToDo(Integer.parseInt(words[1]), words[2]); + taskNumber++; + } else if (words[0].equals("D")) { + tasks[taskNumber] = new Deadline(Integer.parseInt(words[1]), words[2], words[3]); + taskNumber++; + } else if (words[0].equals("E")) { + tasks[taskNumber] = new Event(Integer.parseInt(words[1]), words[2], words[3]); + taskNumber++; + } + } + } + return taskNumber; + } catch (IOException e) { + System.out.println("An error occurred."); + e.printStackTrace(); + return 0; + } + } + + private static void saveToFile(String filePath, Task[] tasks, int taskNumber) { + try { + FileWriter fw = new FileWriter(filePath); + for (int i = 0; i < taskNumber; i++) { + if (tasks[i].getType().equals("todo")) { + fw.write("T" + " | " + tasks[i].getStatusNumber() + " | " + tasks[i].getDescription() + System.lineSeparator()); + } else if (tasks[i].getType().equals("deadline")) { + fw.write("D" + " | " + tasks[i].getStatusNumber() + " | " + tasks[i].getDescription() + " | " + tasks[i].getTime() + System.lineSeparator()); + } else if (tasks[i].getType().equals("event")) { + fw.write("E" + " | " + tasks[i].getStatusNumber() + " | " + tasks[i].getDescription() + " | " + tasks[i].getTime() + System.lineSeparator()); + } + } + fw.close(); + } catch (IOException e) { + System.out.println("Something went wrong: " + e.getMessage()); + } + } + public static void listOut(Task[] tasks, int taskNumber) { for (int i = 0; i < taskNumber; i++) { System.out.println((i + 1) + "." + tasks[i]); @@ -58,9 +109,11 @@ public static boolean addDeadline(String line, Task[] tasks, int taskNumber) { for (int i = 1; i < index; i++) { deadlineDescription = deadlineDescription + words[i] + " "; } + deadlineDescription = deadlineDescription.substring(0, deadlineDescription.length() - 1); for (int i = index + 1; i < words.length; i++) { by = by + words[i] + " "; } + by = by.substring(0, by.length() - 1); tasks[taskNumber] = new Deadline(deadlineDescription, by); taskNumber++; System.out.println("Got it. I've added this task:"); @@ -87,9 +140,11 @@ public static boolean addEvent(String line, Task[] tasks, int taskNumber) { for (int i = 1; i < index; i++) { eventDescription = eventDescription + words[i] + " "; } + eventDescription = eventDescription.substring(0, eventDescription.length() - 1); for (int i = index + 1; i < words.length; i++) { at = at + words[i] + " "; } + at = at.substring(0, at.length() - 1); tasks[taskNumber] = new Event(eventDescription, at); taskNumber++; System.out.println("Got it. I've added this task:"); @@ -110,11 +165,13 @@ public static void sayBye() { public static void running() { Task[] tasks = new Task[100]; int taskNumber = 0; + taskNumber = loadFromFile("data/tasks.txt", tasks); String line; Scanner in = new Scanner(System.in); while (true) { line = in.nextLine(); if (line.equals("bye")) { + saveToFile("data/tasks.txt", tasks, taskNumber); return; } if (line.equals("list")) { diff --git a/src/main/java/duke/task/Deadline.java b/src/main/java/duke/task/Deadline.java index 662f8bb1c..b7627e3fe 100644 --- a/src/main/java/duke/task/Deadline.java +++ b/src/main/java/duke/task/Deadline.java @@ -9,6 +9,21 @@ public Deadline(String description, String by) { this.by = by; } + public Deadline(int status, String description, String by) { + super(status, description); + this.by = by; + } + + @Override + public String getType() { + return "deadline"; + } + + @Override + public String getTime() { + return this.by; + } + @Override public String toString() { return "[D]" + super.toString() + "(by: " + by + ")"; diff --git a/src/main/java/duke/task/Event.java b/src/main/java/duke/task/Event.java index 4c8b24803..7247fdbf9 100644 --- a/src/main/java/duke/task/Event.java +++ b/src/main/java/duke/task/Event.java @@ -9,6 +9,25 @@ public Event(String description, String at) { this.at = at; } + public Event(int status, String description, String at) { + super(status, description); + this.at = at; + } + + @Override + public String getType() { + return "event"; + } + + @Override + public String getStatusNumber() { + return super.getStatusNumber(); + } + + public String getTime() { + return this.at; + } + @Override public String toString() { return "[E]" + super.toString() + "(at: " + at + ")"; diff --git a/src/main/java/duke/task/Task.java b/src/main/java/duke/task/Task.java index 58a94d095..255dd8a3d 100644 --- a/src/main/java/duke/task/Task.java +++ b/src/main/java/duke/task/Task.java @@ -9,6 +9,15 @@ public Task(String description) { this.isDone = false; } + public Task(int status, String description) { + this.description = description; + if (status == 1) { + this.isDone = true; + } else { + this.isDone = false; + } + } + public void setDone() { this.isDone = true; } @@ -21,6 +30,18 @@ public String getStatusIcon() { return (isDone ? "[X]" : "[ ]"); // mark done task with X } + public String getStatusNumber() { + return (isDone ? "1" : "0"); // mark done task with 1 + } + + public String getTime() { + return ""; + }; + + public String getType() { + return ""; + } + @Override public String toString() { return this.getStatusIcon() + " " + this.getDescription(); diff --git a/src/main/java/duke/task/ToDo.java b/src/main/java/duke/task/ToDo.java index f46d599dd..5c2bc990c 100644 --- a/src/main/java/duke/task/ToDo.java +++ b/src/main/java/duke/task/ToDo.java @@ -4,7 +4,10 @@ public class ToDo extends Task{ public ToDo(String description) { super(description); } - + public ToDo(int status, String description) { super(status, description);} + public String getType() { + return "todo"; + } @Override public String toString() { return "[T]" + super.toString(); From 2a8961939aba4ce46351f55e1972fc73a1b33c36 Mon Sep 17 00:00:00 2001 From: silinche Date: Tue, 28 Sep 2021 17:31:37 +0800 Subject: [PATCH 16/23] created Storage class to achieve more oop --- src/main/java/META-INF/MANIFEST.MF | 3 + src/main/java/duke/command/Duke.java | 55 +----------------- src/main/java/duke/command/Storage.java | 77 +++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 52 deletions(-) create mode 100644 src/main/java/META-INF/MANIFEST.MF create mode 100644 src/main/java/duke/command/Storage.java diff --git a/src/main/java/META-INF/MANIFEST.MF b/src/main/java/META-INF/MANIFEST.MF new file mode 100644 index 000000000..d749a8d57 --- /dev/null +++ b/src/main/java/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: duke.command.Duke + diff --git a/src/main/java/duke/command/Duke.java b/src/main/java/duke/command/Duke.java index cd07222be..d5ec428e4 100644 --- a/src/main/java/duke/command/Duke.java +++ b/src/main/java/duke/command/Duke.java @@ -6,59 +6,9 @@ import duke.task.ToDo; import java.util.Scanner; -import java.io.File; -import java.io.IOException; -import java.io.FileNotFoundException; -import java.io.FileWriter; public class Duke { - private static int loadFromFile(String filePath, Task[] tasks) { - int taskNumber = 0; - try { - File f = new File(filePath); - if (!f.createNewFile()) { - Scanner s = new Scanner(f); - while (s.hasNext()) { - String task = s.nextLine(); - String[] words = task.split(" \\| "); - if (words[0].equals("T")) { - tasks[taskNumber] = new ToDo(Integer.parseInt(words[1]), words[2]); - taskNumber++; - } else if (words[0].equals("D")) { - tasks[taskNumber] = new Deadline(Integer.parseInt(words[1]), words[2], words[3]); - taskNumber++; - } else if (words[0].equals("E")) { - tasks[taskNumber] = new Event(Integer.parseInt(words[1]), words[2], words[3]); - taskNumber++; - } - } - } - return taskNumber; - } catch (IOException e) { - System.out.println("An error occurred."); - e.printStackTrace(); - return 0; - } - } - - private static void saveToFile(String filePath, Task[] tasks, int taskNumber) { - try { - FileWriter fw = new FileWriter(filePath); - for (int i = 0; i < taskNumber; i++) { - if (tasks[i].getType().equals("todo")) { - fw.write("T" + " | " + tasks[i].getStatusNumber() + " | " + tasks[i].getDescription() + System.lineSeparator()); - } else if (tasks[i].getType().equals("deadline")) { - fw.write("D" + " | " + tasks[i].getStatusNumber() + " | " + tasks[i].getDescription() + " | " + tasks[i].getTime() + System.lineSeparator()); - } else if (tasks[i].getType().equals("event")) { - fw.write("E" + " | " + tasks[i].getStatusNumber() + " | " + tasks[i].getDescription() + " | " + tasks[i].getTime() + System.lineSeparator()); - } - } - fw.close(); - } catch (IOException e) { - System.out.println("Something went wrong: " + e.getMessage()); - } - } public static void listOut(Task[] tasks, int taskNumber) { for (int i = 0; i < taskNumber; i++) { @@ -182,13 +132,14 @@ public static void sayBye() { public static void running() { Task[] tasks = new Task[100]; int taskNumber = 0; - taskNumber = loadFromFile("data/tasks.txt", tasks); + Storage s = new Storage("data/tasks.txt", tasks); + taskNumber = s.loadFromFile("data/tasks.txt", tasks); String line; Scanner in = new Scanner(System.in); while (true) { line = in.nextLine(); if (line.equals("bye")) { - saveToFile("data/tasks.txt", tasks, taskNumber); + s.saveToFile("data/tasks.txt", tasks, taskNumber); return; } if (line.equals("list")) { diff --git a/src/main/java/duke/command/Storage.java b/src/main/java/duke/command/Storage.java new file mode 100644 index 000000000..3f7e2db46 --- /dev/null +++ b/src/main/java/duke/command/Storage.java @@ -0,0 +1,77 @@ +package duke.command; + +import duke.task.Deadline; +import duke.task.Event; +import duke.task.Task; +import duke.task.ToDo; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.Scanner; + +public class Storage { + protected String filePath; + protected Task[] tasks; + + public Storage(String filePath, Task[] tasks) { + this.filePath = filePath; + this.tasks = tasks; + } + + public static int loadFromFile(String filePath, Task[] tasks) { + int taskNumber = 0; + try { + File f = new File(filePath); + if (!f.createNewFile()) { + Scanner s = new Scanner(f); + while (s.hasNext()) { + String task = s.nextLine(); + String[] words = task.split(" \\| "); + switch (words[0]) { + case "T": + tasks[taskNumber] = new ToDo(Integer.parseInt(words[1]), words[2]); + taskNumber++; + break; + case "D": + tasks[taskNumber] = new Deadline(Integer.parseInt(words[1]), words[2], words[3]); + taskNumber++; + break; + case "E": + tasks[taskNumber] = new Event(Integer.parseInt(words[1]), words[2], words[3]); + taskNumber++; + break; + } + } + } + return taskNumber; + } catch (IOException e) { + System.out.println("An error occurred."); + e.printStackTrace(); + return 0; + } + } + + public static void saveToFile(String filePath, Task[] tasks, int taskNumber) { + try { + FileWriter fw = new FileWriter(filePath); + for (int i = 0; i < taskNumber; i++) { + switch (tasks[i].getType()) { + case "todo": + fw.write("T" + " | " + tasks[i].getStatusNumber() + " | " + tasks[i].getDescription() + System.lineSeparator()); + break; + case "deadline": + fw.write("D" + " | " + tasks[i].getStatusNumber() + " | " + tasks[i].getDescription() + " | " + tasks[i].getTime() + System.lineSeparator()); + break; + case "event": + fw.write("E" + " | " + tasks[i].getStatusNumber() + " | " + tasks[i].getDescription() + " | " + tasks[i].getTime() + System.lineSeparator()); + break; + } + } + fw.close(); + } catch (IOException e) { + System.out.println("Something went wrong: " + e.getMessage()); + } + } + +} From d41de47552cc6ffb47d6bb54f50e4ac928eaa203 Mon Sep 17 00:00:00 2001 From: silinche Date: Tue, 28 Sep 2021 17:50:14 +0800 Subject: [PATCH 17/23] added ui class to achieve more oop --- src/main/java/duke/command/Duke.java | 5 +++-- src/main/java/duke/command/Ui.java | 12 ++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 src/main/java/duke/command/Ui.java diff --git a/src/main/java/duke/command/Duke.java b/src/main/java/duke/command/Duke.java index d5ec428e4..0e74c8195 100644 --- a/src/main/java/duke/command/Duke.java +++ b/src/main/java/duke/command/Duke.java @@ -169,8 +169,9 @@ public static void running() { } public static void main(String[] args) { - sayHi(); + Ui ui = new Ui(); + ui.sayHi(); running(); - sayBye(); + ui.sayBye(); } } diff --git a/src/main/java/duke/command/Ui.java b/src/main/java/duke/command/Ui.java new file mode 100644 index 000000000..faa83eadc --- /dev/null +++ b/src/main/java/duke/command/Ui.java @@ -0,0 +1,12 @@ +package duke.command; + +public class Ui { + public static void sayHi() { + System.out.println("Hello I'm Duke"); + System.out.println("What can I do for you?"); + } + + public static void sayBye() { + System.out.println("Bye. Hope to see you again soon!"); + } +} From 3e52e942590b7a18d1bc0a56b85d96e3516900bc Mon Sep 17 00:00:00 2001 From: silinche Date: Wed, 29 Sep 2021 00:39:05 +0800 Subject: [PATCH 18/23] added more classes to achieve more oop --- src/main/java/duke/command/Duke.java | 164 +++-------------------- src/main/java/duke/command/Parser.java | 34 +++++ src/main/java/duke/command/Storage.java | 29 ++-- src/main/java/duke/command/TaskList.java | 105 +++++++++++++++ src/main/java/duke/command/Ui.java | 39 ++++++ 5 files changed, 208 insertions(+), 163 deletions(-) create mode 100644 src/main/java/duke/command/Parser.java create mode 100644 src/main/java/duke/command/TaskList.java diff --git a/src/main/java/duke/command/Duke.java b/src/main/java/duke/command/Duke.java index 0e74c8195..bd57c31d0 100644 --- a/src/main/java/duke/command/Duke.java +++ b/src/main/java/duke/command/Duke.java @@ -1,167 +1,36 @@ package duke.command; - -import duke.task.Deadline; -import duke.task.Event; -import duke.task.Task; -import duke.task.ToDo; - import java.util.Scanner; public class Duke { - - public static void listOut(Task[] tasks, int taskNumber) { - for (int i = 0; i < taskNumber; i++) { - System.out.println((i + 1) + "." + tasks[i]); - } - } - - public static void markDone(String line, Task[] tasks) { - try { - int index = Integer.parseInt(line.substring(5)) - 1; - tasks[index].setDone(); - System.out.println("Nice! I've marked this task as done:"); - System.out.println(" " + tasks[index].getStatusIcon() + " " + tasks[index].getDescription()); - } catch (StringIndexOutOfBoundsException e) { - System.out.println("OOPS!!! The description of a mark-done cannot be empty."); - } - } - - public static boolean deleteTask(String line, Task[] tasks, int taskNumber) { - try { - int index = Integer.parseInt(line.substring(7)) - 1; - System.out.println("Noted. I've removed this task:"); - System.out.println(" " + tasks[index]); - System.out.println("Now you have " + (taskNumber - 1) + " tasks in the list"); - for (int i = index; i < taskNumber - 1; i++) { - tasks[i] = tasks[i + 1]; - //what to do to the last one? - } - return true; - } catch (StringIndexOutOfBoundsException e) { - System.out.println("OOPS!!! The description of a deletion cannot be empty."); - return false; - } - } - - public static boolean addTodo(String line, Task[] tasks, int taskNumber) { - try { - tasks[taskNumber] = new ToDo(line.substring(5)); - taskNumber++; - System.out.println("Got it. I've added this task:"); - System.out.println(" " + tasks[taskNumber - 1]); - System.out.println("Now you have " + taskNumber + " tasks in the list"); - return true; - } catch (StringIndexOutOfBoundsException e) { - System.out.println("OOPS!!! The description of a todo cannot be empty."); - return false; - } - } - - public static boolean addDeadline(String line, Task[] tasks, int taskNumber) { - String[] words = line.split(" "); - int index = 0; - String deadlineDescription = ""; - String by = ""; - for (int i = 0; i < words.length; i++) { - if (words[i].equals("/by")) { - index = i; - break; - } - } - if (index == 0) { - System.out.println("OOPS!!! The description of a deadline cannot be empty."); - return false; - } - for (int i = 1; i < index; i++) { - deadlineDescription = deadlineDescription + words[i] + " "; - } - deadlineDescription = deadlineDescription.substring(0, deadlineDescription.length() - 1); - for (int i = index + 1; i < words.length; i++) { - by = by + words[i] + " "; - } - by = by.substring(0, by.length() - 1); - tasks[taskNumber] = new Deadline(deadlineDescription, by); - taskNumber++; - System.out.println("Got it. I've added this task:"); - System.out.println(" " + tasks[taskNumber - 1]); - System.out.println("Now you have " + taskNumber + " tasks in the list"); - return true; - } - - public static boolean addEvent(String line, Task[] tasks, int taskNumber) { - String[] words = line.split(" "); - int index = 0; - String eventDescription = ""; - String at = ""; - for (int i = 0; i < words.length; i++) { - if (words[i].equals("/at")) { - index = i; - break; - } - } - if (index == 0) { - System.out.println("OOPS!!! The description of a deadline cannot be empty."); - return false; - } - for (int i = 1; i < index; i++) { - eventDescription = eventDescription + words[i] + " "; - } - eventDescription = eventDescription.substring(0, eventDescription.length() - 1); - for (int i = index + 1; i < words.length; i++) { - at = at + words[i] + " "; - } - at = at.substring(0, at.length() - 1); - tasks[taskNumber] = new Event(eventDescription, at); - taskNumber++; - System.out.println("Got it. I've added this task:"); - System.out.println(" " + tasks[taskNumber - 1]); - System.out.println("Now you have " + taskNumber + " tasks in the list"); - return true; - } - - public static void sayHi() { - System.out.println("Hello I'm Duke"); - System.out.println("What can I do for you?"); - } - - public static void sayBye() { - System.out.println("Bye. Hope to see you again soon!"); - } + private static Parser parser = new Parser(); + private static Ui ui = new Ui(); + private static TaskList taskList = new TaskList(); + private static Storage s = new Storage("data/tasks.txt"); public static void running() { - Task[] tasks = new Task[100]; - int taskNumber = 0; - Storage s = new Storage("data/tasks.txt", tasks); - taskNumber = s.loadFromFile("data/tasks.txt", tasks); + s.loadFromFile(taskList); String line; Scanner in = new Scanner(System.in); while (true) { line = in.nextLine(); - if (line.equals("bye")) { - s.saveToFile("data/tasks.txt", tasks, taskNumber); - return; - } + if (line.equals("list")) { - listOut(tasks, taskNumber); + taskList.listOut(); } else if (line.startsWith("done")) { - markDone(line, tasks); + taskList.markDone(line); } else if (line.startsWith("delete")) { - if (deleteTask(line, tasks, taskNumber)) { - taskNumber--; - } + int index = parser.getIndexForDelete(line); + taskList.deleteTask(index); } else if (line.startsWith("todo")) { - if (addTodo(line, tasks, taskNumber)) { - taskNumber++; - } + taskList.addTodo(line); } else if (line.startsWith("deadline")) { - if (addDeadline(line, tasks, taskNumber)) { - taskNumber++; - } + taskList.addDeadline(line); } else if (line.startsWith("event")) { - if (addEvent(line, tasks, taskNumber)) { - taskNumber++; - } + taskList.addEvent(line); + } else if (line.equals("bye")) { + s.saveToFile("data/tasks.txt", taskList); + return; } else { System.out.println("☹ OOPS!!! I'm sorry, but I don't know what that means :-("); } @@ -169,7 +38,6 @@ public static void running() { } public static void main(String[] args) { - Ui ui = new Ui(); ui.sayHi(); running(); ui.sayBye(); diff --git a/src/main/java/duke/command/Parser.java b/src/main/java/duke/command/Parser.java new file mode 100644 index 000000000..dc8a7db1c --- /dev/null +++ b/src/main/java/duke/command/Parser.java @@ -0,0 +1,34 @@ +package duke.command; + +public class Parser { + public static Integer getIndexForDelete(String line) { + return Integer.parseInt(line.substring(7)) - 1; + } + public static Integer getIndexForDone(String line) { + return Integer.parseInt(line.substring(5)) - 1; + } + + public static Integer getIndexForDeadline(String line) { + String[] words = line.split(" "); + int index = 0; + for (int i = 0; i < words.length; i++) { + if (words[i].equals("/by")) { + index = i; + break; + } + } + return index; + } + + public static Integer getIndexForEvent(String line) { + String[] words = line.split(" "); + int index = 0; + for (int i = 0; i < words.length; i++) { + if (words[i].equals("/at")) { + index = i; + break; + } + } + return index; + } +} diff --git a/src/main/java/duke/command/Storage.java b/src/main/java/duke/command/Storage.java index 3f7e2db46..f17f8b695 100644 --- a/src/main/java/duke/command/Storage.java +++ b/src/main/java/duke/command/Storage.java @@ -12,14 +12,12 @@ public class Storage { protected String filePath; - protected Task[] tasks; - public Storage(String filePath, Task[] tasks) { + public Storage(String filePath) { this.filePath = filePath; - this.tasks = tasks; } - public static int loadFromFile(String filePath, Task[] tasks) { + public void loadFromFile(TaskList taskList) { int taskNumber = 0; try { File f = new File(filePath); @@ -30,41 +28,42 @@ public static int loadFromFile(String filePath, Task[] tasks) { String[] words = task.split(" \\| "); switch (words[0]) { case "T": - tasks[taskNumber] = new ToDo(Integer.parseInt(words[1]), words[2]); + taskList.tasks[taskNumber] = new ToDo(Integer.parseInt(words[1]), words[2]); taskNumber++; break; case "D": - tasks[taskNumber] = new Deadline(Integer.parseInt(words[1]), words[2], words[3]); + taskList.tasks[taskNumber] = new Deadline(Integer.parseInt(words[1]), words[2], words[3]); taskNumber++; break; case "E": - tasks[taskNumber] = new Event(Integer.parseInt(words[1]), words[2], words[3]); + taskList.tasks[taskNumber] = new Event(Integer.parseInt(words[1]), words[2], words[3]); taskNumber++; break; } } } - return taskNumber; + taskList.taskNumber = taskNumber; + return; } catch (IOException e) { System.out.println("An error occurred."); e.printStackTrace(); - return 0; + return; } } - public static void saveToFile(String filePath, Task[] tasks, int taskNumber) { + public static void saveToFile(String filePath, TaskList taskList) { try { FileWriter fw = new FileWriter(filePath); - for (int i = 0; i < taskNumber; i++) { - switch (tasks[i].getType()) { + for (int i = 0; i < taskList.taskNumber; i++) { + switch (taskList.tasks[i].getType()) { case "todo": - fw.write("T" + " | " + tasks[i].getStatusNumber() + " | " + tasks[i].getDescription() + System.lineSeparator()); + fw.write("T" + " | " + taskList.tasks[i].getStatusNumber() + " | " + taskList.tasks[i].getDescription() + System.lineSeparator()); break; case "deadline": - fw.write("D" + " | " + tasks[i].getStatusNumber() + " | " + tasks[i].getDescription() + " | " + tasks[i].getTime() + System.lineSeparator()); + fw.write("D" + " | " + taskList.tasks[i].getStatusNumber() + " | " + taskList.tasks[i].getDescription() + " | " + taskList.tasks[i].getTime() + System.lineSeparator()); break; case "event": - fw.write("E" + " | " + tasks[i].getStatusNumber() + " | " + tasks[i].getDescription() + " | " + tasks[i].getTime() + System.lineSeparator()); + fw.write("E" + " | " + taskList.tasks[i].getStatusNumber() + " | " + taskList.tasks[i].getDescription() + " | " + taskList.tasks[i].getTime() + System.lineSeparator()); break; } } diff --git a/src/main/java/duke/command/TaskList.java b/src/main/java/duke/command/TaskList.java new file mode 100644 index 000000000..d85e5dc3d --- /dev/null +++ b/src/main/java/duke/command/TaskList.java @@ -0,0 +1,105 @@ +package duke.command; + +import duke.task.Deadline; +import duke.task.Event; +import duke.task.Task; +import duke.task.ToDo; + +public class TaskList { + protected Task[] tasks; + protected int taskNumber; + + public TaskList() { + tasks = new Task[100]; + taskNumber = 0; + } + + + public void listOut() { + for (int i = 0; i < taskNumber; i++) { + System.out.println((i + 1) + "." + tasks[i]); + } + } + + public void markDone(String line) { + Ui ui = new Ui(); + Parser parser = new Parser(); + try { + int index = parser.getIndexForDone(line); + tasks[index].setDone(); + ui.markDone(index, tasks); + } catch (StringIndexOutOfBoundsException e) { + ui.markDoneFailed(); + } + } + + public void deleteTask(int index) { + Ui ui = new Ui(); + try { + ui.deleteTask(index, tasks, taskNumber); + for (int i = index; i < taskNumber - 1; i++) { + tasks[i] = tasks[i + 1]; + } + taskNumber--; + } catch (StringIndexOutOfBoundsException e) { + ui.deleteTaskFailed(); + } + } + + public void addTodo(String line) { + Ui ui = new Ui(); + try { + tasks[taskNumber] = new ToDo(line.substring(5)); + taskNumber++; + ui.addTask(tasks, taskNumber); + } catch (StringIndexOutOfBoundsException e) { + ui.addTodoFailed(); + } + } + + public void addDeadline(String line) { + Ui ui = new Ui(); + Parser parser = new Parser(); + String[] words = line.split(" "); + int index = parser.getIndexForDeadline(line); + if (index == 0) { + ui.addDeadlineFailed(); + } + String deadlineDescription = ""; + String by = ""; + for (int i = 1; i < index; i++) { + deadlineDescription = deadlineDescription + words[i] + " "; + } + deadlineDescription = deadlineDescription.substring(0, deadlineDescription.length() - 1); + for (int i = index + 1; i < words.length; i++) { + by = by + words[i] + " "; + } + by = by.substring(0, by.length() - 1); + tasks[taskNumber] = new Deadline(deadlineDescription, by); + taskNumber++; + ui.addTask(tasks, taskNumber); + } + + public void addEvent(String line) { + Ui ui = new Ui(); + Parser parser = new Parser(); + String[] words = line.split(" "); + int index = parser.getIndexForEvent(line); + if (index == 0) { + ui.addEventFailed(); + } + String eventDescription = ""; + String at = ""; + for (int i = 1; i < index; i++) { + eventDescription = eventDescription + words[i] + " "; + } + eventDescription = eventDescription.substring(0, eventDescription.length() - 1); + for (int i = index + 1; i < words.length; i++) { + at = at + words[i] + " "; + } + at = at.substring(0, at.length() - 1); + tasks[taskNumber] = new Event(eventDescription, at); + taskNumber++; + ui.addTask(tasks, taskNumber); + } +} diff --git a/src/main/java/duke/command/Ui.java b/src/main/java/duke/command/Ui.java index faa83eadc..0fcdde09b 100644 --- a/src/main/java/duke/command/Ui.java +++ b/src/main/java/duke/command/Ui.java @@ -1,11 +1,50 @@ package duke.command; +import duke.task.Task; + public class Ui { public static void sayHi() { System.out.println("Hello I'm Duke"); System.out.println("What can I do for you?"); } + public static void markDone(int index, Task[] tasks) { + System.out.println("Nice! I've marked this task as done:"); + System.out.println(" " + tasks[index].getStatusIcon() + " " + tasks[index].getDescription()); + } + + public static void markDoneFailed() { + System.out.println("OOPS!!! The description of a mark-done cannot be empty."); + } + + public static void deleteTask(int index, Task[] tasks, int taskNumber) { + System.out.println("Noted. I've removed this task:"); + System.out.println(" " + tasks[index]); + System.out.println("Now you have " + (taskNumber - 1) + " tasks in the list"); + } + + public static void deleteTaskFailed() { + System.out.println("OOPS!!! The description of a deletion cannot be empty."); + } + + public static void addTask(Task[] tasks, int taskNumber) { + System.out.println("Got it. I've added this task:"); + System.out.println(" " + tasks[taskNumber - 1]); + System.out.println("Now you have " + taskNumber + " tasks in the list"); + } + + public static void addTodoFailed() { + System.out.println("OOPS!!! The description of a todo cannot be empty."); + } + + public static void addDeadlineFailed() { + System.out.println("OOPS!!! The description of a deadline cannot be empty."); + } + + public static void addEventFailed() { + System.out.println("OOPS!!! The description of an event cannot be empty."); + } + public static void sayBye() { System.out.println("Bye. Hope to see you again soon!"); } From 83202972da84265bf5d0cb276f632b2a3469e28c Mon Sep 17 00:00:00 2001 From: silinche Date: Wed, 29 Sep 2021 23:06:13 +0800 Subject: [PATCH 19/23] added the find feature (level 9) --- src/main/java/duke/command/Duke.java | 2 ++ src/main/java/duke/command/TaskList.java | 18 +++++++++++++++++- src/main/java/duke/command/Ui.java | 8 ++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/main/java/duke/command/Duke.java b/src/main/java/duke/command/Duke.java index bd57c31d0..768d3ff6c 100644 --- a/src/main/java/duke/command/Duke.java +++ b/src/main/java/duke/command/Duke.java @@ -17,6 +17,8 @@ public static void running() { if (line.equals("list")) { taskList.listOut(); + } else if (line.startsWith("find")) { + taskList.find(line); } else if (line.startsWith("done")) { taskList.markDone(line); } else if (line.startsWith("delete")) { diff --git a/src/main/java/duke/command/TaskList.java b/src/main/java/duke/command/TaskList.java index d85e5dc3d..166e039d0 100644 --- a/src/main/java/duke/command/TaskList.java +++ b/src/main/java/duke/command/TaskList.java @@ -14,13 +14,29 @@ public TaskList() { taskNumber = 0; } - public void listOut() { for (int i = 0; i < taskNumber; i++) { System.out.println((i + 1) + "." + tasks[i]); } } + public void find(String line) { + Ui ui = new Ui(); + try { + int j = 1; + String keyword = line.substring(5); + ui.find(); + for (int i = 0; i < taskNumber; i++) { + if (tasks[i].getDescription().contains(keyword)) { + System.out.println(j + "." + tasks[i]); + j++; + } + } + } catch (StringIndexOutOfBoundsException e) { + ui.findFailed(); + } + } + public void markDone(String line) { Ui ui = new Ui(); Parser parser = new Parser(); diff --git a/src/main/java/duke/command/Ui.java b/src/main/java/duke/command/Ui.java index 0fcdde09b..51ad57dbb 100644 --- a/src/main/java/duke/command/Ui.java +++ b/src/main/java/duke/command/Ui.java @@ -8,6 +8,14 @@ public static void sayHi() { System.out.println("What can I do for you?"); } + public static void find() { + System.out.println("Here are the matching tasks in your list:"); + } + + public static void findFailed() { + System.out.println("OOPS!!! The description of a find cannot be empty."); + } + public static void markDone(int index, Task[] tasks) { System.out.println("Nice! I've marked this task as done:"); System.out.println(" " + tasks[index].getStatusIcon() + " " + tasks[index].getDescription()); From fd35808fce6d606c7863fbe2a00896095b6c6647 Mon Sep 17 00:00:00 2001 From: silinche Date: Fri, 1 Oct 2021 13:55:19 +0800 Subject: [PATCH 20/23] added javadoc --- src/main/java/duke/command/Duke.java | 1 - src/main/java/duke/command/Parser.java | 11 ++++++++ src/main/java/duke/command/Storage.java | 18 ++++++++++++ src/main/java/duke/command/TaskList.java | 35 +++++++++++++++++++++++- src/main/java/duke/task/Deadline.java | 4 +++ src/main/java/duke/task/Event.java | 5 +++- src/main/java/duke/task/Task.java | 4 +++ src/main/java/duke/task/ToDo.java | 4 ++- 8 files changed, 78 insertions(+), 4 deletions(-) diff --git a/src/main/java/duke/command/Duke.java b/src/main/java/duke/command/Duke.java index bd57c31d0..9ae3484f4 100644 --- a/src/main/java/duke/command/Duke.java +++ b/src/main/java/duke/command/Duke.java @@ -1,7 +1,6 @@ package duke.command; import java.util.Scanner; - public class Duke { private static Parser parser = new Parser(); private static Ui ui = new Ui(); diff --git a/src/main/java/duke/command/Parser.java b/src/main/java/duke/command/Parser.java index dc8a7db1c..79487c463 100644 --- a/src/main/java/duke/command/Parser.java +++ b/src/main/java/duke/command/Parser.java @@ -4,10 +4,16 @@ public class Parser { public static Integer getIndexForDelete(String line) { return Integer.parseInt(line.substring(7)) - 1; } + public static Integer getIndexForDone(String line) { return Integer.parseInt(line.substring(5)) - 1; } + /** + * Returns the index of the word "/by" in the array of strings generated from the input line. + * @param line The whole line of input from the command line. + * @return Index position of the the word "/by" + */ public static Integer getIndexForDeadline(String line) { String[] words = line.split(" "); int index = 0; @@ -20,6 +26,11 @@ public static Integer getIndexForDeadline(String line) { return index; } + /** + * Returns the index of the word "/at" in the array of strings generated from the input line. + * @param line The whole line of input from the command line. + * @return Index position of the the word "/at" + */ public static Integer getIndexForEvent(String line) { String[] words = line.split(" "); int index = 0; diff --git a/src/main/java/duke/command/Storage.java b/src/main/java/duke/command/Storage.java index f17f8b695..bdd12bfdd 100644 --- a/src/main/java/duke/command/Storage.java +++ b/src/main/java/duke/command/Storage.java @@ -10,6 +10,9 @@ import java.io.IOException; import java.util.Scanner; +/** + * Represents a storage space for a TaskList object. + */ public class Storage { protected String filePath; @@ -17,6 +20,13 @@ public Storage(String filePath) { this.filePath = filePath; } + /** + * Checks the text file set earlier for storage, + * loads the tasks into the input TaskList object. + * + * @param taskList The list of tasks initialized without any content yet. + * @throws IOException If an error occurs from reading or writing to the text file. + */ public void loadFromFile(TaskList taskList) { int taskNumber = 0; try { @@ -51,6 +61,14 @@ public void loadFromFile(TaskList taskList) { } } + /** + * Saves the current tasks in a TaskList object + * into a text file when the program terminates. + * + * @param filePath Path of the text file used to store the list of tasks. + * @param taskList The list of tasks. + * @throws IOException If an error occurs from reading or writing to the text file. + */ public static void saveToFile(String filePath, TaskList taskList) { try { FileWriter fw = new FileWriter(filePath); diff --git a/src/main/java/duke/command/TaskList.java b/src/main/java/duke/command/TaskList.java index d85e5dc3d..51bfb3ba1 100644 --- a/src/main/java/duke/command/TaskList.java +++ b/src/main/java/duke/command/TaskList.java @@ -5,6 +5,9 @@ import duke.task.Task; import duke.task.ToDo; +/** + * Represents a list of all tasks added. + */ public class TaskList { protected Task[] tasks; protected int taskNumber; @@ -14,13 +17,22 @@ public TaskList() { taskNumber = 0; } - + /** + * Prints out all the tasks in a TaskList object. + */ public void listOut() { for (int i = 0; i < taskNumber; i++) { System.out.println((i + 1) + "." + tasks[i]); } } + /** + * Marks a particular task done, from index of the task + * inputted from the command lind. + * + * @param line The whole line of input from the command line. + * @throws StringIndexOutOfBoundsException If there is no index contained in the line. + */ public void markDone(String line) { Ui ui = new Ui(); Parser parser = new Parser(); @@ -33,6 +45,11 @@ public void markDone(String line) { } } + /** + * Delete a particular task from a TaskList object. + * @param index Index of the task to be deleted + * @throws StringIndexOutOfBoundsException If there is no index contained in the line. + */ public void deleteTask(int index) { Ui ui = new Ui(); try { @@ -46,6 +63,11 @@ public void deleteTask(int index) { } } + /** + * Add a "todo" type of task into a TaskList object. + * @param line The whole line of input from the command line. + * @throws StringIndexOutOfBoundsException If there is no argument after the "todo" command + */ public void addTodo(String line) { Ui ui = new Ui(); try { @@ -57,6 +79,11 @@ public void addTodo(String line) { } } + /** + * Add a "deadline" type of task into a TaskList object. + * @param line The whole line of input from the command line. + * @throws StringIndexOutOfBoundsException If there is no argument after the "deadline" command + */ public void addDeadline(String line) { Ui ui = new Ui(); Parser parser = new Parser(); @@ -80,6 +107,12 @@ public void addDeadline(String line) { ui.addTask(tasks, taskNumber); } + /** + * Add a "event" type of task into a TaskList object. + * @param line The whole line of input from the command line. + * @throws StringIndexOutOfBoundsException If there is no argument after the "event" command + */ + public void addEvent(String line) { Ui ui = new Ui(); Parser parser = new Parser(); diff --git a/src/main/java/duke/task/Deadline.java b/src/main/java/duke/task/Deadline.java index b7627e3fe..713d9b31b 100644 --- a/src/main/java/duke/task/Deadline.java +++ b/src/main/java/duke/task/Deadline.java @@ -1,5 +1,9 @@ package duke.task; +/** + * Represents an deadline that has a description, a status inherited from Task class, + * and an extra at attribute indicating the deadline of the task. + */ public class Deadline extends Task { protected String by; diff --git a/src/main/java/duke/task/Event.java b/src/main/java/duke/task/Event.java index 7247fdbf9..2e603484c 100644 --- a/src/main/java/duke/task/Event.java +++ b/src/main/java/duke/task/Event.java @@ -1,7 +1,10 @@ package duke.task; +/** + * Represents an event that has a description, a status inherited from Task class, + * and an extra at attribute indicating the time of the task. + */ public class Event extends Task { - protected String at; public Event(String description, String at) { diff --git a/src/main/java/duke/task/Task.java b/src/main/java/duke/task/Task.java index 255dd8a3d..47d7388e1 100644 --- a/src/main/java/duke/task/Task.java +++ b/src/main/java/duke/task/Task.java @@ -1,5 +1,9 @@ package duke.task; +/** + * Represent a general task that might be a "todo", a "deadline", or a "event". + * The task has a description attribute, and a status attribute indicating whether it is done. + */ public class Task { protected String description; protected boolean isDone; diff --git a/src/main/java/duke/task/ToDo.java b/src/main/java/duke/task/ToDo.java index 5c2bc990c..d66c113d3 100644 --- a/src/main/java/duke/task/ToDo.java +++ b/src/main/java/duke/task/ToDo.java @@ -1,5 +1,7 @@ package duke.task; - +/** + * Represents an todo that has a description, a status inherited from Task class. + */ public class ToDo extends Task{ public ToDo(String description) { super(description); From bb572280b239b38a9996b9ae6f6d10a3e89b4cf2 Mon Sep 17 00:00:00 2001 From: silinche Date: Fri, 1 Oct 2021 15:23:46 +0800 Subject: [PATCH 21/23] Added user guide --- docs/README.md | 128 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 118 insertions(+), 10 deletions(-) diff --git a/docs/README.md b/docs/README.md index 8077118eb..837626489 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,28 +2,136 @@ ## Features -### Feature-ABC +### Listing +List out all tasks in the tasklist. -Description of the feature. +### Add/Delete tasks +Add different type of tasks into the tasklist. +Delete a task anytime. -### Feature-XYZ +### Find +Find a task using keywords. -Description of the feature. +### Mark done +Mark a task as done. + +### Auto-saving +Tasks in the tasklist are saved automatically when program exits, ready to be loaded next time. ## Usage -### `Keyword` - Describe action +### `list` +List out all tasks in the tasklist. + +Example of usage: + +`list` + +Expected outcome: + +``` +1.[T][X] do wct +2.[E][ ] finish inquiry(at: 6pm) +``` + +### `done` +Mark a task as done. + +Example of usage: + +`done 2` + +Expected outcome: + +``` +Nice! I've marked this task as done: + [X] finish inquiry +``` + +### `todo` +Add a "todo" type task. + +Example of usage: + +`todo do cs2113 ip` + +Expected outcome: + +``` +Got it. I've added this task: + [T][ ] do cs2113 ip +Now you have 3 tasks in the list +``` + +### `deadline` +Add a "deadline" type task. + +Example of usage: + +`deadline cs2113 ip /by tonight` -Describe the action and its outcome. +Expected outcome: + +``` +Got it. I've added this task: + [D][ ] cs2113 ip(by: tonight) +Now you have 5 tasks in the list +``` -Example of usage: +### `event` +Add a "event" type task. -`keyword (optional arguments)` +Example of usage: + +`event go to party /at tonight` Expected outcome: -Description of the outcome. +``` +Got it. I've added this task: + [E][ ] go to party(at: tonight) +Now you have 6 tasks in the list +``` + +### `find` +Find a task in the tasklist that contains the keyword. + +Example of usage: +`find cs2113` + +Expected outcome: + +``` +Here are the matching tasks in your list: +1.[T][ ] do cs2113 ip +2.[D][ ] cs2113 ip(by: tonight) ``` -expected output + +### `delete` +Delete a task in the task list using the index. + +Example of usage: + +`delete 1` + +Expected outcome: + +``` +Noted. I've removed this task: + [T][X] do wct +Now you have 4 tasks in the list +``` + +### `bye` +Terminates the program, saves all changes. + +Example of usage: + +`bye` + +Expected outcome: + ``` +Bye. Hope to see you again soon! +``` \ No newline at end of file From ebba67bf999f4b53123b51509e3f299929ae81f9 Mon Sep 17 00:00:00 2001 From: silinche <70053809+silinche@users.noreply.github.com> Date: Fri, 1 Oct 2021 15:26:17 +0800 Subject: [PATCH 22/23] Set theme jekyll-theme-cayman --- docs/_config.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/_config.yml diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 000000000..c4192631f --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-cayman \ No newline at end of file From 999995d0e278a71d87a19933164c1680818c5c79 Mon Sep 17 00:00:00 2001 From: silinche Date: Fri, 1 Oct 2021 16:12:48 +0800 Subject: [PATCH 23/23] fixed issues with saving in files --- src/main/java/duke/command/Duke.java | 4 ++-- src/main/java/duke/command/Storage.java | 22 ++++++++++++++++++---- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/main/java/duke/command/Duke.java b/src/main/java/duke/command/Duke.java index 96e69803b..e38170bb8 100644 --- a/src/main/java/duke/command/Duke.java +++ b/src/main/java/duke/command/Duke.java @@ -5,7 +5,7 @@ public class Duke { private static Parser parser = new Parser(); private static Ui ui = new Ui(); private static TaskList taskList = new TaskList(); - private static Storage s = new Storage("data/tasks.txt"); + private static Storage s = new Storage(); public static void running() { s.loadFromFile(taskList); @@ -30,7 +30,7 @@ public static void running() { } else if (line.startsWith("event")) { taskList.addEvent(line); } else if (line.equals("bye")) { - s.saveToFile("data/tasks.txt", taskList); + s.saveToFile("data/data.txt", taskList); return; } else { System.out.println("☹ OOPS!!! I'm sorry, but I don't know what that means :-("); diff --git a/src/main/java/duke/command/Storage.java b/src/main/java/duke/command/Storage.java index bdd12bfdd..8a893f039 100644 --- a/src/main/java/duke/command/Storage.java +++ b/src/main/java/duke/command/Storage.java @@ -14,10 +14,24 @@ * Represents a storage space for a TaskList object. */ public class Storage { - protected String filePath; + protected File directory; + protected File file; - public Storage(String filePath) { - this.filePath = filePath; + public Storage() { + + directory = new File("data"); + if (!directory.exists()) { + directory.mkdirs(); + } + //create txt file if file does not exist + file = new File("data/data.txt"); + if(!file.exists()) { + try { + file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } } /** @@ -30,7 +44,7 @@ public Storage(String filePath) { public void loadFromFile(TaskList taskList) { int taskNumber = 0; try { - File f = new File(filePath); + File f = new File("data/data.txt"); if (!f.createNewFile()) { Scanner s = new Scanner(f); while (s.hasNext()) {