From 1c143ba63cc5e12d7439b172753d079bf862f6c1 Mon Sep 17 00:00:00 2001 From: timchang27 Date: Thu, 27 Jan 2022 23:10:51 +0800 Subject: [PATCH 01/12] Greet for Duke --- src/main/java/Duke.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 5d313334c..c3327bbec 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -6,5 +6,7 @@ public static void main(String[] args) { + "| |_| | |_| | < __/\n" + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println("Hello from\n" + logo); + System.out.println("Hello! I'm Duke\n" + "What can I do for you?"); + System.out.println("Bye. Hope to see you again soon!"); } } From 89318632f563a4cf6141a04de8c0fd74cff7769a Mon Sep 17 00:00:00 2001 From: timchang27 Date: Thu, 27 Jan 2022 23:34:59 +0800 Subject: [PATCH 02/12] Greet, Echo, Exit for Duke --- src/main/java/Duke.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index c3327bbec..fded48884 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,5 +1,10 @@ +import java.util.*; + public class Duke { public static void main(String[] args) { + + Scanner sc = new Scanner(System.in); + String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" + "| | | | | | | |/ / _ \\\n" @@ -7,6 +12,14 @@ public static void main(String[] args) { + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println("Hello from\n" + logo); System.out.println("Hello! I'm Duke\n" + "What can I do for you?"); + String greet; + do { + greet = sc.nextLine(); + System.out.println("-------------------------------------------------------------------------"); + System.out.println(greet); + System.out.println("-------------------------------------------------------------------------"); + }while(!greet.equals("bye")); + System.out.println("Bye. Hope to see you again soon!"); } } From 2f454977612a34e7ceb7d0a6eb0ddd8fabc48d91 Mon Sep 17 00:00:00 2001 From: timchang27 Date: Fri, 28 Jan 2022 00:28:35 +0800 Subject: [PATCH 03/12] Week 3 IP --- src/main/java/Duke.java | 48 +++++++++++++++++++++++++++++++++++------ src/main/java/Task.java | 28 ++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 6 deletions(-) create mode 100644 src/main/java/Task.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index fded48884..e9fddf08c 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -10,15 +10,51 @@ public static void main(String[] args) { + "| | | | | | | |/ / _ \\\n" + "| |_| | |_| | < __/\n" + "|____/ \\__,_|_|\\_\\___|\n"; + + ArrayList tasks = new ArrayList(); + System.out.println("Hello from\n" + logo); System.out.println("Hello! I'm Duke\n" + "What can I do for you?"); - String greet; + String userInput; do { - greet = sc.nextLine(); - System.out.println("-------------------------------------------------------------------------"); - System.out.println(greet); - System.out.println("-------------------------------------------------------------------------"); - }while(!greet.equals("bye")); + userInput = sc.nextLine(); + if(userInput.equals("list")){ + System.out.println("-------------------------------------------------------------------------\n" + "Here are the tasks in your list:"); + + int i=1; + for(Task task: tasks){ + System.out.println(i + ": " + task.getDescription()); + i++; + } + i=0; + System.out.println("-------------------------------------------------------------------------"); + } + else if(userInput.equals("bye")){ + break; + } + else if(userInput.contains("mark")){ + String[] input = new String[10]; + input = userInput.split(" "); + int index = Integer.parseInt(input[1]); //index of task to be marked + tasks.get(index-1).setMark(); + System.out.println("-------------------------------------------------------------------------\n" + "Nice! I've marked this task as done: "); + System.out.println("[X] "+ tasks.get(index-1).getDescription()); + } + else if(userInput.contains("unmark")){ + String[] input = new String[10]; + input = userInput.split(" "); + int index = Integer.parseInt(input[1]); //index of task to be unmarked + tasks.get(index-1).setUnmark(); + System.out.println("-------------------------------------------------------------------------\n" + "OK, I've marked this task as not done yet:"); + System.out.println("[ ] "+ tasks.get(index-1).getDescription()); + } + else{ + Task newTask = new Task(userInput); + tasks.add(newTask); + System.out.println("added: "+ userInput); + } + + }while(!userInput.equals("bye")); System.out.println("Bye. Hope to see you again soon!"); } diff --git a/src/main/java/Task.java b/src/main/java/Task.java new file mode 100644 index 000000000..179edefc8 --- /dev/null +++ b/src/main/java/Task.java @@ -0,0 +1,28 @@ +public class Task { + + protected String description; + protected boolean isTaskDone; + + public Task(String description){ + this.description = description; + this.isTaskDone = false; + } + + public String getDescription(){ + return description; + } + public void setDescription(String input){ + description = input; + } + public boolean getTaskStatus(){ + return isTaskDone; + } + public void setMark(){ + this.isTaskDone = true; + } + public void setUnmark(){ + this.isTaskDone = false; + } + + +} From 97529e9270fe1767b03c9245869187021d6fed60 Mon Sep 17 00:00:00 2001 From: timchang27 Date: Fri, 28 Jan 2022 00:45:21 +0800 Subject: [PATCH 04/12] Week 3 IP --- src/main/java/Duke.java | 30 +++++++++++++++++++++--------- src/main/java/Task.java | 9 ++++++++- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index e9fddf08c..2dc6b8da5 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -23,7 +23,7 @@ public static void main(String[] args) { int i=1; for(Task task: tasks){ - System.out.println(i + ": " + task.getDescription()); + System.out.println(i + ": " + task.showStatus() + " " + task.getDescription()); i++; } i=0; @@ -32,21 +32,33 @@ public static void main(String[] args) { else if(userInput.equals("bye")){ break; } - else if(userInput.contains("mark")){ + else if(userInput.startsWith("mark")){ String[] input = new String[10]; input = userInput.split(" "); int index = Integer.parseInt(input[1]); //index of task to be marked - tasks.get(index-1).setMark(); - System.out.println("-------------------------------------------------------------------------\n" + "Nice! I've marked this task as done: "); - System.out.println("[X] "+ tasks.get(index-1).getDescription()); + if(tasks.get(index-1).getTaskStatus() == true){ + System.out.println("The task is already marked!"); + System.out.println("-------------------------------------------------------------------------"); + } + else{ + tasks.get(index-1).setMark(); + System.out.println("-------------------------------------------------------------------------\n" + "Nice! I've marked this task as done: "); + System.out.println("[X] "+ tasks.get(index-1).getDescription()); + } } - else if(userInput.contains("unmark")){ + else if(userInput.startsWith("unmark")){ String[] input = new String[10]; input = userInput.split(" "); int index = Integer.parseInt(input[1]); //index of task to be unmarked - tasks.get(index-1).setUnmark(); - System.out.println("-------------------------------------------------------------------------\n" + "OK, I've marked this task as not done yet:"); - System.out.println("[ ] "+ tasks.get(index-1).getDescription()); + if(tasks.get(index-1).getTaskStatus()==false){ + System.out.println("The task is not completed yet!"); + System.out.println("-------------------------------------------------------------------------"); + } + else { + tasks.get(index - 1).setUnmark(); + System.out.println("-------------------------------------------------------------------------\n" + "OK, I've marked this task as not done yet:"); + System.out.println("[ ] " + tasks.get(index - 1).getDescription()); + } } else{ Task newTask = new Task(userInput); diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 179edefc8..16d6a4a54 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -23,6 +23,13 @@ public void setMark(){ public void setUnmark(){ this.isTaskDone = false; } - + public String showStatus(){ + if(isTaskDone==true){ + return("[X]"); + } + else{ + return("[ ]"); + } + } } From ad53131f58753b2bc902b04a9a81abc0441841a2 Mon Sep 17 00:00:00 2001 From: timchang27 Date: Fri, 4 Feb 2022 00:05:18 +0800 Subject: [PATCH 05/12] Week 4 IP: Todo, Deadline, Event --- src/main/java/Deadline.java | 17 +++++++++++++++++ src/main/java/Duke.java | 37 ++++++++++++++++++++++++++++++++++--- src/main/java/Event.java | 16 ++++++++++++++++ src/main/java/Task.java | 7 ++++++- src/main/java/Todo.java | 13 +++++++++++++ 5 files changed, 86 insertions(+), 4 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..1c7ae2a8b --- /dev/null +++ b/src/main/java/Deadline.java @@ -0,0 +1,17 @@ +public class Deadline extends Task { + protected String ddate; + + public Deadline(String description, String ddate){ + super(description); + this.ddate = ddate; + } + + public Deadline(String description, boolean isTaskDone, String ddate) { + super(description, isTaskDone); + this.ddate = ddate; + } + + public String getDescription(){ + return "[D]" + super.getDescription() + " (by: " + ddate + ")"; + } +} diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 2dc6b8da5..3709a321a 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -23,7 +23,7 @@ public static void main(String[] args) { int i=1; for(Task task: tasks){ - System.out.println(i + ": " + task.showStatus() + " " + task.getDescription()); + System.out.println(i + ": " + task.getDescription()); i++; } i=0; @@ -43,7 +43,7 @@ else if(userInput.startsWith("mark")){ else{ tasks.get(index-1).setMark(); System.out.println("-------------------------------------------------------------------------\n" + "Nice! I've marked this task as done: "); - System.out.println("[X] "+ tasks.get(index-1).getDescription()); + System.out.println(tasks.get(index-1).getDescription()); } } else if(userInput.startsWith("unmark")){ @@ -57,9 +57,40 @@ else if(userInput.startsWith("unmark")){ else { tasks.get(index - 1).setUnmark(); System.out.println("-------------------------------------------------------------------------\n" + "OK, I've marked this task as not done yet:"); - System.out.println("[ ] " + tasks.get(index - 1).getDescription()); + System.out.println(tasks.get(index - 1).getDescription()); } } + else if(userInput.startsWith("todo")){ + String newtodo = userInput.split("todo")[1].trim(); + Todo newTodo = new Todo(newtodo); + tasks.add(newTodo); + System.out.println("-------------------------------------------------------------------------"); + System.out.println("Got it! I've added this task: "); + System.out.println(newTodo.getDescription()); + System.out.println("Now you have " + tasks.size() + " tasks in the list."); + } + else if(userInput.startsWith("deadline")){ + String[] input = userInput.split("/by"); + String ddate = input[1].trim(); + String deadline = input[0].split("deadline")[1].trim(); + Deadline newDeadline = new Deadline(deadline, ddate); + tasks.add(newDeadline); + System.out.println("-------------------------------------------------------------------------"); + System.out.println("Got it! I've added this task: "); + System.out.println(newDeadline.getDescription()); + System.out.println("Now you have " + tasks.size() + " tasks in the list."); + } + else if(userInput.startsWith("event")){ + String[] input = userInput.split("/at"); + String edate = input[1].trim(); + String event = input[0].split("event")[1].trim(); + Event newEvent = new Event(event, edate); + tasks.add(newEvent); + System.out.println("-------------------------------------------------------------------------"); + System.out.println("Got it! I've added this task: "); + System.out.println(newEvent.getDescription()); + System.out.println("Now you have " + tasks.size() + " tasks in the list."); + } else{ Task newTask = new Task(userInput); tasks.add(newTask); diff --git a/src/main/java/Event.java b/src/main/java/Event.java new file mode 100644 index 000000000..fc6ad65cd --- /dev/null +++ b/src/main/java/Event.java @@ -0,0 +1,16 @@ +public class Event extends Task{ + protected String edate; + + public Event(String description, String edate){ + super(description); + this.edate = edate; + } + public Event(String description, boolean isTaskDone, String edate) { + super(description, isTaskDone); + this.edate = edate; + } + public String getDescription(){ + return "[E]" + super.getDescription() + " (by: " + edate + ")"; + } + +} diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 16d6a4a54..eb4053e7e 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -8,8 +8,13 @@ public Task(String description){ this.isTaskDone = false; } + public Task(String description, boolean isTaskDone){ + this.description = description; + this.isTaskDone = isTaskDone; + } + public String getDescription(){ - return description; + return showStatus() + description; } public void setDescription(String input){ description = input; diff --git a/src/main/java/Todo.java b/src/main/java/Todo.java new file mode 100644 index 000000000..3de01b730 --- /dev/null +++ b/src/main/java/Todo.java @@ -0,0 +1,13 @@ +public class Todo extends Task{ + + public Todo(String description){ + super(description); + } + public Todo(String description, boolean isTaskDone){ + super(description); + } + public String getDescription(){ + return "[T]" + super.getDescription(); + } + +} From 530e6423c30faeac913d500c61694e0ba86f6960 Mon Sep 17 00:00:00 2001 From: timchang27 Date: Thu, 10 Feb 2022 17:41:24 +0800 Subject: [PATCH 06/12] Week 5: Added Exception Handlers --- README.md | 4 +- src/main/java/Deadline.java | 17 ----- src/main/java/Event.java | 16 ----- src/main/java/{ => duke}/Duke.java | 88 +++++++++++++++++-------- src/main/java/duke/DukeException.java | 10 +++ src/main/java/duke/task/Deadline.java | 19 ++++++ src/main/java/duke/task/Event.java | 18 +++++ src/main/java/{ => duke/task}/Task.java | 2 + src/main/java/{ => duke/task}/Todo.java | 4 +- text-ui-test/runtest.bat | 2 +- 10 files changed, 115 insertions(+), 65 deletions(-) delete mode 100644 src/main/java/Deadline.java delete mode 100644 src/main/java/Event.java rename src/main/java/{ => duke}/Duke.java (51%) create mode 100644 src/main/java/duke/DukeException.java create mode 100644 src/main/java/duke/task/Deadline.java create mode 100644 src/main/java/duke/task/Event.java rename src/main/java/{ => duke/task}/Task.java (97%) rename src/main/java/{ => duke/task}/Todo.java (82%) diff --git a/README.md b/README.md index 8715d4d91..a8111be76 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Duke project template +# duke.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.duke.java` file, right-click it, and choose `Run duke.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/Deadline.java b/src/main/java/Deadline.java deleted file mode 100644 index 1c7ae2a8b..000000000 --- a/src/main/java/Deadline.java +++ /dev/null @@ -1,17 +0,0 @@ -public class Deadline extends Task { - protected String ddate; - - public Deadline(String description, String ddate){ - super(description); - this.ddate = ddate; - } - - public Deadline(String description, boolean isTaskDone, String ddate) { - super(description, isTaskDone); - this.ddate = ddate; - } - - public String getDescription(){ - return "[D]" + super.getDescription() + " (by: " + ddate + ")"; - } -} diff --git a/src/main/java/Event.java b/src/main/java/Event.java deleted file mode 100644 index fc6ad65cd..000000000 --- a/src/main/java/Event.java +++ /dev/null @@ -1,16 +0,0 @@ -public class Event extends Task{ - protected String edate; - - public Event(String description, String edate){ - super(description); - this.edate = edate; - } - public Event(String description, boolean isTaskDone, String edate) { - super(description, isTaskDone); - this.edate = edate; - } - public String getDescription(){ - return "[E]" + super.getDescription() + " (by: " + edate + ")"; - } - -} diff --git a/src/main/java/Duke.java b/src/main/java/duke/Duke.java similarity index 51% rename from src/main/java/Duke.java rename to src/main/java/duke/Duke.java index 3709a321a..cbfa774a2 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/duke/Duke.java @@ -1,9 +1,18 @@ +package duke; + +import duke.task.Deadline; +import duke.task.Event; +import duke.task.Task; +import duke.task.Todo; + import java.util.*; +import java.lang.*; public class Duke { - public static void main(String[] args) { + public static void main(String[] args) throws IndexOutOfBoundsException { Scanner sc = new Scanner(System.in); + DukeException ex = new DukeException(); String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" @@ -14,7 +23,8 @@ public static void main(String[] args) { ArrayList tasks = new ArrayList(); System.out.println("Hello from\n" + logo); - System.out.println("Hello! I'm Duke\n" + "What can I do for you?"); + System.out.println("Hello! I'm Duke.Duke\n" + "What can I do for you?"); + displayOptions(); String userInput; do { userInput = sc.nextLine(); @@ -61,44 +71,66 @@ else if(userInput.startsWith("unmark")){ } } else if(userInput.startsWith("todo")){ - String newtodo = userInput.split("todo")[1].trim(); - Todo newTodo = new Todo(newtodo); - tasks.add(newTodo); - System.out.println("-------------------------------------------------------------------------"); - System.out.println("Got it! I've added this task: "); - System.out.println(newTodo.getDescription()); - System.out.println("Now you have " + tasks.size() + " tasks in the list."); + try{ + String newtodo = userInput.split("todo")[1].trim(); + Todo newTodo = new Todo(newtodo); + tasks.add(newTodo); + System.out.println("-------------------------------------------------------------------------"); + System.out.println("Got it! I've added this task: " + newTodo.getDescription()); + System.out.println("Now you have " + tasks.size() + " tasks in the list."); + } catch(IndexOutOfBoundsException e){ + ex.missingDescription("todo"); + } finally{ + System.out.println("What else should I do for you?"); + } } else if(userInput.startsWith("deadline")){ - String[] input = userInput.split("/by"); - String ddate = input[1].trim(); - String deadline = input[0].split("deadline")[1].trim(); - Deadline newDeadline = new Deadline(deadline, ddate); - tasks.add(newDeadline); - System.out.println("-------------------------------------------------------------------------"); - System.out.println("Got it! I've added this task: "); - System.out.println(newDeadline.getDescription()); - System.out.println("Now you have " + tasks.size() + " tasks in the list."); + try{ + String[] input = userInput.split("/by"); + String ddate = input[1].trim(); + String deadline = input[0].split("deadline")[1].trim(); + Deadline newDeadline = new Deadline(deadline, ddate); + tasks.add(newDeadline); + System.out.println("-------------------------------------------------------------------------"); + System.out.println("Got it! I've added this task: "); + System.out.println(newDeadline.getDescription()); + System.out.println("Now you have " + tasks.size() + " tasks in the list."); + } catch(IndexOutOfBoundsException e){ + ex.missingDescription("deadline"); + } finally{ + System.out.println("What else should I do for you?"); + } } else if(userInput.startsWith("event")){ - String[] input = userInput.split("/at"); - String edate = input[1].trim(); - String event = input[0].split("event")[1].trim(); - Event newEvent = new Event(event, edate); - tasks.add(newEvent); - System.out.println("-------------------------------------------------------------------------"); - System.out.println("Got it! I've added this task: "); - System.out.println(newEvent.getDescription()); - System.out.println("Now you have " + tasks.size() + " tasks in the list."); + try{ + String[] input = userInput.split("/at"); + String eventDate = input[1].trim(); + String event = input[0].split("event")[1].trim(); + Event newEvent = new Event(event, eventDate); + tasks.add(newEvent); + System.out.println("-------------------------------------------------------------------------"); + System.out.println("Got it! I've added this task: "); + System.out.println(newEvent.getDescription()); + System.out.println("Now you have " + tasks.size() + " tasks in the list."); + } catch(IndexOutOfBoundsException e){ + ex.missingDescription("event"); + } finally{ + System.out.println("What else should I do for you?"); + } } else{ Task newTask = new Task(userInput); tasks.add(newTask); System.out.println("added: "+ userInput); } - }while(!userInput.equals("bye")); System.out.println("Bye. Hope to see you again soon!"); } + + public static void displayOptions(){ + System.out.println("Enter todo to create new todo (...)\n" + + "Enter event (... /at {eventDate}) to create new event\n" + + "Enter deadline (... /by {dueDate}) to create new Deadline"); + } } diff --git a/src/main/java/duke/DukeException.java b/src/main/java/duke/DukeException.java new file mode 100644 index 000000000..c46c44d52 --- /dev/null +++ b/src/main/java/duke/DukeException.java @@ -0,0 +1,10 @@ +package duke; + +public class DukeException extends Exception { + public void missingDescription(String command){ + System.out.println("☹ OOPS!!! The description of a " + command + " cannot be empty."); + } + public void missingCommand(){ + System.out.println("☹ OOPS!!! I'm sorry, but I don't know what that means :-("); + } +} \ No newline at end of file diff --git a/src/main/java/duke/task/Deadline.java b/src/main/java/duke/task/Deadline.java new file mode 100644 index 000000000..4e6d9c5d3 --- /dev/null +++ b/src/main/java/duke/task/Deadline.java @@ -0,0 +1,19 @@ +package duke.task; + +public class Deadline extends Task { + protected String dueDate; + + public Deadline(String description, String dueDate){ + super(description); + this.dueDate = dueDate; + } + + public Deadline(String description, boolean isTaskDone, String dueDate) { + super(description, isTaskDone); + this.dueDate = dueDate; + } + + public String getDescription(){ + return "[D]" + super.getDescription() + " (by: " + dueDate + ")"; + } +} diff --git a/src/main/java/duke/task/Event.java b/src/main/java/duke/task/Event.java new file mode 100644 index 000000000..7b61d79af --- /dev/null +++ b/src/main/java/duke/task/Event.java @@ -0,0 +1,18 @@ +package duke.task; + +public class Event extends Task { + protected String eventDate; + + public Event(String description, String eventDate){ + super(description); + this.eventDate = eventDate; + } + public Event(String description, boolean isTaskDone, String eventDate) { + super(description, isTaskDone); + this.eventDate = eventDate; + } + public String getDescription(){ + return "[E]" + super.getDescription() + " (by: " + eventDate + ")"; + } + +} diff --git a/src/main/java/Task.java b/src/main/java/duke/task/Task.java similarity index 97% rename from src/main/java/Task.java rename to src/main/java/duke/task/Task.java index eb4053e7e..35a1774f0 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; diff --git a/src/main/java/Todo.java b/src/main/java/duke/task/Todo.java similarity index 82% rename from src/main/java/Todo.java rename to src/main/java/duke/task/Todo.java index 3de01b730..229214562 100644 --- a/src/main/java/Todo.java +++ b/src/main/java/duke/task/Todo.java @@ -1,4 +1,6 @@ -public class Todo extends Task{ +package duke.task; + +public class Todo extends Task { public Todo(String description){ super(description); diff --git a/text-ui-test/runtest.bat b/text-ui-test/runtest.bat index 087374464..7eb6d3cdd 100644 --- a/text-ui-test/runtest.bat +++ b/text-ui-test/runtest.bat @@ -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 62d9872baea096586dc6b8a38a305ed460988a8f Mon Sep 17 00:00:00 2001 From: timchang27 Date: Thu, 17 Feb 2022 22:29:25 +0800 Subject: [PATCH 07/12] Week 6: Implement Delete and Save --- src/main/java/duke/Duke.java | 43 ++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index cbfa774a2..be14a02fd 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -4,11 +4,19 @@ import duke.task.Event; import duke.task.Task; import duke.task.Todo; - import java.util.*; import java.lang.*; +import java.io.File; +import java.io.FileNotFoundException; +import java.util.Scanner; +import java.io.FileWriter; +import java.io.IOException; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; public class Duke { + static ArrayList tasks = new ArrayList(); public static void main(String[] args) throws IndexOutOfBoundsException { Scanner sc = new Scanner(System.in); @@ -20,7 +28,7 @@ public static void main(String[] args) throws IndexOutOfBoundsException { + "| |_| | |_| | < __/\n" + "|____/ \\__,_|_|\\_\\___|\n"; - ArrayList tasks = new ArrayList(); + System.out.println("Hello from\n" + logo); System.out.println("Hello! I'm Duke.Duke\n" + "What can I do for you?"); @@ -118,6 +126,20 @@ else if(userInput.startsWith("event")){ System.out.println("What else should I do for you?"); } } + else if(userInput.startsWith("delete")){ + String[] input = new String[10]; + input = userInput.split(" "); + //index of task to be deleted + int index = Integer.parseInt(input[1]) - 1; + if(tasks.size() > index){ + System.out.println("-------------------------------------------------------------------------"); + System.out.println("Noted. I've removed this task: \n" + tasks.get(index).getDescription()); + tasks.remove(index); + System.out.println("Now you have " + tasks.size() + " tasks in the list."); + } else { + System.out.println("Task index not found"); + } + } else{ Task newTask = new Task(userInput); tasks.add(newTask); @@ -133,4 +155,21 @@ public static void displayOptions(){ "Enter event (... /at {eventDate}) to create new event\n" + "Enter deadline (... /by {dueDate}) to create new Deadline"); } + + public static void saveTasks() { + String toFile = ""; + try { + FileWriter writer = new FileWriter("src/main/java/duke/tasks.txt"); + for (int i = 0; i < tasks.size(); i++) { + toFile += tasks.get(i).getDescription() + "\n"; + } + writer.write(toFile); + writer.close(); + System.out.println("Task saved"); + System.out.println("______________________________________"); + } catch (Exception e) { + System.out.println("Error occurred"); + } + } + } From d835cf7375d2de59bc9685c1c0f0c6423c46410c Mon Sep 17 00:00:00 2001 From: timchang27 Date: Thu, 17 Feb 2022 23:37:51 +0800 Subject: [PATCH 08/12] Week 7: Implement Save --- ip.zip | Bin 0 -> 15702 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ip.zip diff --git a/ip.zip b/ip.zip new file mode 100644 index 0000000000000000000000000000000000000000..eaf1f310a67d1cca448388fa5e84c6f616f64658 GIT binary patch literal 15702 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 S69|at?jPJ;T*t%+`1L==TkUZG literal 0 HcmV?d00001 From bf0e78460e9376d58add9f46c73930cde53e5118 Mon Sep 17 00:00:00 2001 From: timchang27 Date: Fri, 18 Feb 2022 10:47:48 +0800 Subject: [PATCH 09/12] Week 7: Implement Save --- META-INF/MANIFEST.MF | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 META-INF/MANIFEST.MF diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF new file mode 100644 index 000000000..59499bce4 --- /dev/null +++ b/META-INF/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + From 8aea02d58bb5ba9f8942bd9edaa76ca40f7f5cb8 Mon Sep 17 00:00:00 2001 From: timchang27 Date: Thu, 3 Mar 2022 16:32:43 +0800 Subject: [PATCH 10/12] Week 7: MoreOOP --- src/main/java/duke/Duke.java | 192 +++--------------- src/main/java/duke/DukeException.java | 7 +- src/main/java/duke/Parser.java | 83 ++++++++ src/main/java/duke/Storage.java | 100 +++++++++ src/main/java/duke/TaskList.java | 41 ++++ src/main/java/duke/Ui.java | 93 +++++++++ src/main/java/duke/command/AddCommand.java | 21 ++ src/main/java/duke/command/Command.java | 23 +++ src/main/java/duke/command/DeleteCommand.java | 21 ++ src/main/java/duke/command/ExitCommand.java | 15 ++ src/main/java/duke/command/FindCommand.java | 20 ++ src/main/java/duke/command/ListCommand.java | 13 ++ src/main/java/duke/command/MarkCommand.java | 24 +++ src/main/java/duke/task/Task.java | 21 +- 14 files changed, 496 insertions(+), 178 deletions(-) create mode 100644 src/main/java/duke/Parser.java create mode 100644 src/main/java/duke/Storage.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/command/AddCommand.java create mode 100644 src/main/java/duke/command/Command.java create mode 100644 src/main/java/duke/command/DeleteCommand.java create mode 100644 src/main/java/duke/command/ExitCommand.java create mode 100644 src/main/java/duke/command/FindCommand.java create mode 100644 src/main/java/duke/command/ListCommand.java create mode 100644 src/main/java/duke/command/MarkCommand.java diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index be14a02fd..047f3835d 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -1,175 +1,39 @@ package duke; - -import duke.task.Deadline; -import duke.task.Event; -import duke.task.Task; -import duke.task.Todo; -import java.util.*; -import java.lang.*; -import java.io.File; -import java.io.FileNotFoundException; -import java.util.Scanner; -import java.io.FileWriter; -import java.io.IOException; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; +import duke.command.Command; +import duke.task.*; public class Duke { - static ArrayList tasks = new ArrayList(); - public static void main(String[] args) throws IndexOutOfBoundsException { - - Scanner sc = new Scanner(System.in); - DukeException ex = new DukeException(); - - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; - - - - System.out.println("Hello from\n" + logo); - System.out.println("Hello! I'm Duke.Duke\n" + "What can I do for you?"); - displayOptions(); - String userInput; - do { - userInput = sc.nextLine(); - if(userInput.equals("list")){ - System.out.println("-------------------------------------------------------------------------\n" + "Here are the tasks in your list:"); - - int i=1; - for(Task task: tasks){ - System.out.println(i + ": " + task.getDescription()); - i++; - } - i=0; - System.out.println("-------------------------------------------------------------------------"); - } - else if(userInput.equals("bye")){ - break; - } - else if(userInput.startsWith("mark")){ - String[] input = new String[10]; - input = userInput.split(" "); - int index = Integer.parseInt(input[1]); //index of task to be marked - if(tasks.get(index-1).getTaskStatus() == true){ - System.out.println("The task is already marked!"); - System.out.println("-------------------------------------------------------------------------"); - } - else{ - tasks.get(index-1).setMark(); - System.out.println("-------------------------------------------------------------------------\n" + "Nice! I've marked this task as done: "); - System.out.println(tasks.get(index-1).getDescription()); - } - } - else if(userInput.startsWith("unmark")){ - String[] input = new String[10]; - input = userInput.split(" "); - int index = Integer.parseInt(input[1]); //index of task to be unmarked - if(tasks.get(index-1).getTaskStatus()==false){ - System.out.println("The task is not completed yet!"); - System.out.println("-------------------------------------------------------------------------"); - } - else { - tasks.get(index - 1).setUnmark(); - System.out.println("-------------------------------------------------------------------------\n" + "OK, I've marked this task as not done yet:"); - System.out.println(tasks.get(index - 1).getDescription()); - } - } - else if(userInput.startsWith("todo")){ - try{ - String newtodo = userInput.split("todo")[1].trim(); - Todo newTodo = new Todo(newtodo); - tasks.add(newTodo); - System.out.println("-------------------------------------------------------------------------"); - System.out.println("Got it! I've added this task: " + newTodo.getDescription()); - System.out.println("Now you have " + tasks.size() + " tasks in the list."); - } catch(IndexOutOfBoundsException e){ - ex.missingDescription("todo"); - } finally{ - System.out.println("What else should I do for you?"); - } - } - else if(userInput.startsWith("deadline")){ - try{ - String[] input = userInput.split("/by"); - String ddate = input[1].trim(); - String deadline = input[0].split("deadline")[1].trim(); - Deadline newDeadline = new Deadline(deadline, ddate); - tasks.add(newDeadline); - System.out.println("-------------------------------------------------------------------------"); - System.out.println("Got it! I've added this task: "); - System.out.println(newDeadline.getDescription()); - System.out.println("Now you have " + tasks.size() + " tasks in the list."); - } catch(IndexOutOfBoundsException e){ - ex.missingDescription("deadline"); - } finally{ - System.out.println("What else should I do for you?"); - } - } - else if(userInput.startsWith("event")){ - try{ - String[] input = userInput.split("/at"); - String eventDate = input[1].trim(); - String event = input[0].split("event")[1].trim(); - Event newEvent = new Event(event, eventDate); - tasks.add(newEvent); - System.out.println("-------------------------------------------------------------------------"); - System.out.println("Got it! I've added this task: "); - System.out.println(newEvent.getDescription()); - System.out.println("Now you have " + tasks.size() + " tasks in the list."); - } catch(IndexOutOfBoundsException e){ - ex.missingDescription("event"); - } finally{ - System.out.println("What else should I do for you?"); - } - } - else if(userInput.startsWith("delete")){ - String[] input = new String[10]; - input = userInput.split(" "); - //index of task to be deleted - int index = Integer.parseInt(input[1]) - 1; - if(tasks.size() > index){ - System.out.println("-------------------------------------------------------------------------"); - System.out.println("Noted. I've removed this task: \n" + tasks.get(index).getDescription()); - tasks.remove(index); - System.out.println("Now you have " + tasks.size() + " tasks in the list."); - } else { - System.out.println("Task index not found"); - } - } - else{ - Task newTask = new Task(userInput); - tasks.add(newTask); - System.out.println("added: "+ userInput); - } - }while(!userInput.equals("bye")); - System.out.println("Bye. Hope to see you again soon!"); - } + private TaskList tasks; + private Storage storage; + private Ui ui; - public static void displayOptions(){ - System.out.println("Enter todo to create new todo (...)\n" + - "Enter event (... /at {eventDate}) to create new event\n" + - "Enter deadline (... /by {dueDate}) to create new Deadline"); + public Duke() { + storage = new Storage("list.txt"); + tasks = new TaskList(storage.convertFileToList()); + ui = new Ui(); } - public static void saveTasks() { - String toFile = ""; - try { - FileWriter writer = new FileWriter("src/main/java/duke/tasks.txt"); - for (int i = 0; i < tasks.size(); i++) { - toFile += tasks.get(i).getDescription() + "\n"; + public void run() { + ui.showWelcome(); + boolean isExit = false; + while (!isExit) { + try { + ui.showLine(); + String command = ui.getUserInput(); + Command newCommand = Parser.parse(command); + newCommand.execute(tasks, ui, storage); + isExit = newCommand.getIsExit(); + } catch (DukeException e) { + ui.showError(e.getMessage()); + } finally { + ui.showLine(); } - writer.write(toFile); - writer.close(); - System.out.println("Task saved"); - System.out.println("______________________________________"); - } catch (Exception e) { - System.out.println("Error occurred"); } } -} + public static void main(String[] args) { + Duke duke = new Duke(); + duke.run(); + } +} \ No newline at end of file diff --git a/src/main/java/duke/DukeException.java b/src/main/java/duke/DukeException.java index c46c44d52..761c3c441 100644 --- a/src/main/java/duke/DukeException.java +++ b/src/main/java/duke/DukeException.java @@ -1,10 +1,7 @@ package duke; public class DukeException extends Exception { - public void missingDescription(String command){ - System.out.println("☹ OOPS!!! The description of a " + command + " cannot be empty."); - } - public void missingCommand(){ - System.out.println("☹ OOPS!!! I'm sorry, but I don't know what that means :-("); + public DukeException(String message) { + super(message); } } \ No newline at end of file diff --git a/src/main/java/duke/Parser.java b/src/main/java/duke/Parser.java new file mode 100644 index 000000000..ff422aa0f --- /dev/null +++ b/src/main/java/duke/Parser.java @@ -0,0 +1,83 @@ +package duke; + +import duke.command.AddCommand; +import duke.command.Command; +import duke.command.DeleteCommand; +import duke.command.ExitCommand; +import duke.command.FindCommand; +import duke.command.ListCommand; +import duke.command.MarkCommand; +import duke.task.Deadline; +import duke.task.Event; +import duke.task.Todo; + +public class Parser { + + public static Command parse(String command) throws DukeException { + + String[] initialParse = command.split(" "); + int taskIndexString = 1; + String commandType = initialParse[0]; + String description; + String processedString[]; + int taskIndex; + + switch (commandType) { + case "list": + return new ListCommand(); + case "todo": + if (initialParse.length < 2) { + throw new DukeException("The description of a todo cannot be empty."); + } + description = command.split("todo")[1].trim(); + return new AddCommand(new Todo(description)); + case "deadline": + processedString = command.split("/by"); + return new AddCommand(processDeadline(processedString)); + case "event": + processedString = command.split("/at"); + return new AddCommand(processEvent(processedString)); + case "mark": + taskIndex = Integer.parseInt(initialParse[taskIndexString]) - 1; + return new MarkCommand(taskIndex, true); + case "unmark": + taskIndex = Integer.parseInt(initialParse[taskIndexString]) - 1; + return new MarkCommand(taskIndex, false); + case "delete": + taskIndex = Integer.parseInt(initialParse[taskIndexString]) - 1; + return new DeleteCommand(taskIndex); + case "find": + String searchTerm = initialParse[taskIndexString].trim(); + return new FindCommand(searchTerm); + case "bye": + return new ExitCommand(); + default: + throw new DukeException("Invalid command given"); + } + } + + private static String processTime(String[] processedString, String separator) { + final int TIMEINDEX = 1; + String time = processedString[TIMEINDEX].trim(); + return time; + } + + private static String processDescription(String[] processedString, String separator) { + final int PRETIMEINDEX = 0; + final int DESCRIPTIONINDEX = 1; + String description = processedString[PRETIMEINDEX].split(separator)[DESCRIPTIONINDEX].trim(); + return description; + } + + private static Event processEvent(String[] processedString) { + String at = processTime(processedString, "/at"); + String task = processDescription(processedString, "event"); + return new Event(task, at); + } + + private static Deadline processDeadline(String[] processedString) { + String by = processTime(processedString, "/by"); + String task = processDescription(processedString, "deadline"); + return new Deadline(task, by); + } +} \ No newline at end of file diff --git a/src/main/java/duke/Storage.java b/src/main/java/duke/Storage.java new file mode 100644 index 000000000..1c82dfd88 --- /dev/null +++ b/src/main/java/duke/Storage.java @@ -0,0 +1,100 @@ +package duke; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Scanner; + +import duke.task.Deadline; +import duke.task.Event; +import duke.task.Task; +import duke.task.Todo; + +/** + * Represents the controller to parse and write to a save file for tasks + */ +public class Storage { + private String filePath; + + + public Storage(String filePath) { + this.filePath = filePath; + } + + public void convertListToFile(ArrayList list) { + String text = ""; + for (int i = 0; i < list.size(); i++) { + Task currentTask = list.get(i); + text = text + currentTask.toString() + System.lineSeparator(); + } + try { + FileWriter fw = new FileWriter(filePath); + fw.write(text); + fw.close(); + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } + + public ArrayList convertFileToList() { + ArrayList list = new ArrayList<>(); + File f = new File(filePath); + try { + Scanner s = new Scanner(f); + while (s.hasNext()) { + String currentLine = s.nextLine(); + String[] arrayElements = currentLine.split("\\|"); + String taskType = arrayElements[0].trim(); + Task newTask; + switch (taskType) { + case "T": + newTask = convertTodo(arrayElements); + list.add(newTask); + break; + case "D": + newTask = convertDeadline(arrayElements); + list.add(newTask); + break; + case "E": + newTask = convertEvent(arrayElements); + list.add(newTask); + break; + default: + break; + } + } + return list; + } catch (FileNotFoundException e) { + return list; + } + } + + private String getDescription(String[] arrayElements) { + int descriptionIndex = 2; + return arrayElements[descriptionIndex].trim(); + } + + private boolean getIsDone(String[] arrayElements) { + int booleanIndex = 1; + return arrayElements[booleanIndex].trim().equals("1"); + } + + private String getTime(String[] arrayElements) { + int timeIndex = 3; + return arrayElements[timeIndex].trim(); + } + + private Todo convertTodo(String[] arrayElements) { + return new Todo(getDescription(arrayElements), getIsDone(arrayElements)); + } + + private Deadline convertDeadline(String[] arrayElements) { + return new Deadline(getDescription(arrayElements), getIsDone(arrayElements), getTime(arrayElements)); + } + + private Event convertEvent(String[] arrayElements) { + return new Event(getDescription(arrayElements), getIsDone(arrayElements), getTime(arrayElements)); + } +} \ No newline at end of file diff --git a/src/main/java/duke/TaskList.java b/src/main/java/duke/TaskList.java new file mode 100644 index 000000000..94c07a094 --- /dev/null +++ b/src/main/java/duke/TaskList.java @@ -0,0 +1,41 @@ +package duke; + +import java.util.ArrayList; +import duke.task.Task; + +public class TaskList { + private ArrayList taskList; + public TaskList(ArrayList taskList) { + this.taskList = taskList; + } + + public Task getTask(int index) { + return taskList.get(index); + } + + public ArrayList getTaskList() { + return this.taskList; + } + + public int getSize() { + return taskList.size(); + } + + public void removeTask(Task task) { + taskList.remove(task); + } + + public void addTask(Task task) { + taskList.add(task); + } + + public void markTask(Task task, boolean isDone) { + if(isDone){ + task.setMark(); + } + else{ + task.setUnmark(); + } + } + +} \ No newline at end of file diff --git a/src/main/java/duke/Ui.java b/src/main/java/duke/Ui.java new file mode 100644 index 000000000..4c88a5240 --- /dev/null +++ b/src/main/java/duke/Ui.java @@ -0,0 +1,93 @@ +package duke; + +import java.util.Scanner; +import duke.task.Task; + +public class Ui { + + private Scanner inputScanner; + + public Ui() { + inputScanner = new Scanner(System.in); + } + + public void showWelcome() { + String logo = " ____ _ \n" + + "| _ \\ _ _| | _____ \n" + + "| | | | | | | |/ / _ \\\n" + + "| |_| | |_| | < __/\n" + + "|____/ \\__,_|_|\\_\\___|\n"; + System.out.println("Hello from\n" + logo); + System.out.println("Hello! I'm Duke!\n What can I do for you?"); + } + + + public String getUserInput() { + String userInput = inputScanner.nextLine(); + return userInput; + } + + + public void showLine() { + System.out.println("____________________________________________________________"); + } + + + public void showBye() { + System.out.println("Bye. Hope to see you again soon!"); + } + + public void showError(String message) { + System.out.println(message); + } + + + public void printTask(Task task) { + System.out.println(task.getTask()); + } + + + public void printSize(int size) { + System.out.println("Now you have " + size + " tasks in the list"); + } + + + public void printMarkMessage(boolean isDone) { + if (isDone) { + System.out.println("Nice! I've marked this task as done:"); + } else { + System.out.println("OK, I've marked this task as not done yet:"); + } + } + + public void printAddMessage(Task task, int size) { + System.out.println("Got it. I've added this task:"); + printTask(task); + printSize(size); + } + + public void printRemoveMessage(Task task, int size) { + System.out.println("Noted. I've removed this task:"); + printTask(task); + printSize(size); + } + + public void printMatchingTasks(TaskList tasks, String searchTerm) { + System.out.println("Here are the matching tasks in your list:"); + for (int i = 0; i < tasks.getSize(); i++) { + Task task = tasks.getTask(i); + if (task.getTask().contains(searchTerm)) { + System.out.println(i + 1 + ". " + task.getTask()); + } + } + } + + + public void printTaskList(TaskList tasks) { + System.out.println("Here are the tasks in your list:"); + for (int i = 0; i < tasks.getSize(); i++) { + System.out.println(i + 1 + ". " + tasks.getTask(i).getTask()); + } + } + +} \ No newline at end of file diff --git a/src/main/java/duke/command/AddCommand.java b/src/main/java/duke/command/AddCommand.java new file mode 100644 index 000000000..e5256133d --- /dev/null +++ b/src/main/java/duke/command/AddCommand.java @@ -0,0 +1,21 @@ +package duke.command; + +import duke.Storage; +import duke.TaskList; +import duke.Ui; +import duke.task.Task; + + +public class AddCommand extends Command { + private Task newTask; + + public AddCommand(Task task) { + super(); + this.newTask = task; + } + + public void execute(TaskList tasks, Ui ui, Storage storage) { + tasks.addTask(newTask); + ui.printAddMessage(newTask, tasks.getSize()); + } +} \ No newline at end of file diff --git a/src/main/java/duke/command/Command.java b/src/main/java/duke/command/Command.java new file mode 100644 index 000000000..0625130a1 --- /dev/null +++ b/src/main/java/duke/command/Command.java @@ -0,0 +1,23 @@ +package duke.command; + +import duke.Storage; +import duke.TaskList; +import duke.Ui; + +public abstract class Command { + private boolean isExit; + + public Command() { + this.isExit = false; + } + + public void setIsExit(boolean isExit) { + this.isExit = isExit; + } + + public boolean getIsExit() { + return this.isExit; + } + + public abstract void execute(TaskList tasks, Ui ui, Storage storage); +} diff --git a/src/main/java/duke/command/DeleteCommand.java b/src/main/java/duke/command/DeleteCommand.java new file mode 100644 index 000000000..c7704bb27 --- /dev/null +++ b/src/main/java/duke/command/DeleteCommand.java @@ -0,0 +1,21 @@ +package duke.command; + +import duke.Storage; +import duke.TaskList; +import duke.Ui; +import duke.task.Task; + + +public class DeleteCommand extends Command { + private int taskIndex; + + public DeleteCommand(int index) { + this.taskIndex = index; + } + + public void execute(TaskList tasks, Ui ui, Storage storage) { + Task task = tasks.getTask(taskIndex); + tasks.removeTask(task); + ui.printRemoveMessage(task, tasks.getSize()); + } +} \ No newline at end of file diff --git a/src/main/java/duke/command/ExitCommand.java b/src/main/java/duke/command/ExitCommand.java new file mode 100644 index 000000000..65af65d4a --- /dev/null +++ b/src/main/java/duke/command/ExitCommand.java @@ -0,0 +1,15 @@ +package duke.command; + +import duke.Storage; +import duke.TaskList; +import duke.Ui; + +public class ExitCommand extends Command { + + @Override + public void execute(TaskList tasks, Ui ui, Storage storage) { + ui.showBye(); + storage.convertListToFile(tasks.getTaskList()); + setIsExit(true); + } +} \ No newline at end of file diff --git a/src/main/java/duke/command/FindCommand.java b/src/main/java/duke/command/FindCommand.java new file mode 100644 index 000000000..9f1b7ad87 --- /dev/null +++ b/src/main/java/duke/command/FindCommand.java @@ -0,0 +1,20 @@ +package duke.command; + +import duke.Storage; +import duke.TaskList; +import duke.Ui; + + +public class FindCommand extends Command { + private String searchTerm; + + public FindCommand(String searchTerm) { + super(); + this.searchTerm = searchTerm; + } + + @Override + public void execute(TaskList tasks, Ui ui, Storage storage) { + ui.printMatchingTasks(tasks, searchTerm); + } +} \ No newline at end of file diff --git a/src/main/java/duke/command/ListCommand.java b/src/main/java/duke/command/ListCommand.java new file mode 100644 index 000000000..fb34fdfac --- /dev/null +++ b/src/main/java/duke/command/ListCommand.java @@ -0,0 +1,13 @@ +package duke.command; + +import duke.Storage; +import duke.TaskList; +import duke.Ui; + + +public class ListCommand extends Command { + @Override + public void execute(TaskList tasks, Ui ui, Storage storage) { + ui.printTaskList(tasks); + } +} \ No newline at end of file diff --git a/src/main/java/duke/command/MarkCommand.java b/src/main/java/duke/command/MarkCommand.java new file mode 100644 index 000000000..d362ea35e --- /dev/null +++ b/src/main/java/duke/command/MarkCommand.java @@ -0,0 +1,24 @@ +package duke.command; + +import duke.Storage; +import duke.TaskList; +import duke.Ui; +import duke.task.Task; + +public class MarkCommand extends Command { + private int taskIndex; + private boolean isDone; + + + public MarkCommand(int index, boolean isDone) { + this.taskIndex = index; + this.isDone = isDone; + } + + public void execute(TaskList tasks, Ui ui, Storage storage) { + Task task = tasks.getTask(taskIndex); + tasks.markTask(task, isDone); + ui.printMarkMessage(isDone); + ui.printTask(task); + } +} \ No newline at end of file diff --git a/src/main/java/duke/task/Task.java b/src/main/java/duke/task/Task.java index 35a1774f0..0b9e9a1f0 100644 --- a/src/main/java/duke/task/Task.java +++ b/src/main/java/duke/task/Task.java @@ -3,18 +3,21 @@ public class Task { protected String description; - protected boolean isTaskDone; + protected boolean isDone; public Task(String description){ this.description = description; - this.isTaskDone = false; + this.isDone = false; } public Task(String description, boolean isTaskDone){ this.description = description; - this.isTaskDone = isTaskDone; + this.isDone = isTaskDone; } + public String getTask() { + return showStatus() + this.description; + } public String getDescription(){ return showStatus() + description; } @@ -22,20 +25,20 @@ public void setDescription(String input){ description = input; } public boolean getTaskStatus(){ - return isTaskDone; + return isDone; } public void setMark(){ - this.isTaskDone = true; + this.isDone = true; } public void setUnmark(){ - this.isTaskDone = false; + this.isDone = false; } public String showStatus(){ - if(isTaskDone==true){ - return("[X]"); + if(isDone==true){ + return("[X] "); } else{ - return("[ ]"); + return("[ ] "); } } From 3b40cec076673db276c7715ac4c45a305eeaf5ca Mon Sep 17 00:00:00 2001 From: timchang27 <64303732+timchang27@users.noreply.github.com> Date: Thu, 3 Mar 2022 18:17:23 +0800 Subject: [PATCH 11/12] Set theme jekyll-theme-slate --- 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..c74188174 --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-slate \ No newline at end of file From d25130e3ddabdc59fac1e7f2d9cdcb8f3d63fb7e Mon Sep 17 00:00:00 2001 From: timchang27 <64303732+timchang27@users.noreply.github.com> Date: Thu, 3 Mar 2022 18:55:30 +0800 Subject: [PATCH 12/12] Update README.md New README --- docs/README.md | 73 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 61 insertions(+), 12 deletions(-) diff --git a/docs/README.md b/docs/README.md index 8077118eb..c6a3b7add 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,28 +2,77 @@ ## Features -### Feature-ABC +### Feature 1: Add Tasks -Description of the feature. +There are 3 types of tasks: **Todo, Event, and Deadline**. -### Feature-XYZ +- Create a Todo item by entering `todo DESCRIPTION` + + - e.g. todo Write User Guide + +- Create an Event item by entering `event DESCRIPTION /at EVENTDATE` + + - e.g. event CS2113 Tutorial /at 04032022 + +- Create a Deadline item by entering `deadline DESCRIPTION /by DUEDATETIME` + + - e.g. Submit IP /by 04032022 0000 -Description of the feature. +### Feature 2: List all Tasks -## Usage +Print a list of all tasks and their statuses. + +`list` + +### Feature 3: Mark/Unmark Tasks + +Mark tasks as completed as you complete them! -### `Keyword` - Describe action +- `mark INDEX` + - e.g. `mark 1` + - e.g. `unmark 2` -Describe the action and its outcome. -Example of usage: +### Feature 4: Delete Tasks -`keyword (optional arguments)` +Remove a task that shouldn't be there! -Expected outcome: +`delete INDEX` -Description of the outcome. +### Feature 5: List all Tasks + +Print a list of all tasks and their statuses. + +`list` + +## Usage +`todo Write User Guide` +`event CS2113 Tutorial /at 04032022` +`Submit IP /by 04032022 0000` + +```Expected Outcome +____________________________________________________________ +Here are the tasks in your list: +1. [T][ ] Write User Guide +2. [E][ ] CS2113 Tutorial (at: 03 Mar 2022) +3. [D][ ] Submit IP (by: 04 Mar 2022 00:00) +____________________________________________________________ +``` + +`mark 2` ``` -expected output +____________________________________________________________ +Nice! I've marked this task as done: +[E][X] CS2113 Tutorial (at: 03 Mar 2022) +____________________________________________________________ ``` + +`delete 2` +``` +Noted. I've removed this task: +[E][X] CS2113 Tutorial (at: 03 Mar 2022) +Now you have 2 tasks in the list +____________________________________________________________ +``` +