From 693292fc7addb6b17a1a2b3fd4e11833d424cd62 Mon Sep 17 00:00:00 2001 From: RozalieSmit <> Date: Fri, 31 Jan 2025 16:14:31 +0800 Subject: [PATCH 01/21] commit level 0 --- src/main/java/Daisy.java | 17 +++++++++++++++++ src/main/java/Duke.java | 10 ---------- 2 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 src/main/java/Daisy.java delete mode 100644 src/main/java/Duke.java diff --git a/src/main/java/Daisy.java b/src/main/java/Daisy.java new file mode 100644 index 000000000..42899e1e7 --- /dev/null +++ b/src/main/java/Daisy.java @@ -0,0 +1,17 @@ +public class Daisy { + public static void main(String[] args) { + String logo = " ____ _ \n" + + "| _ \\ _ _| | _____ \n" + + "| | | | | | | |/ / _ \\\n" + + "| |_| | |_| | < __/\n" + + "|____/ \\__,_|_|\\_\\___|\n"; + + System.out.println("Hello from\n" + logo); + System.out.println("____________________________________________________________"); + System.out.println(" Hello! I'm Daisy"); + System.out.println(" What can I do for you?"); + System.out.println("____________________________________________________________"); + System.out.println(" Bye. Hope to see you again soon!"); + System.out.println("____________________________________________________________"); + } +} diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java deleted file mode 100644 index 5d313334c..000000000 --- a/src/main/java/Duke.java +++ /dev/null @@ -1,10 +0,0 @@ -public class Duke { - public static void main(String[] args) { - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println("Hello from\n" + logo); - } -} From 9554bee270a95b874ef7001844333cb6fc175d9b Mon Sep 17 00:00:00 2001 From: RozalieSmit <> Date: Thu, 6 Feb 2025 14:42:42 +0800 Subject: [PATCH 02/21] commit exit and repeat function --- src/main/java/Daisy.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main/java/Daisy.java b/src/main/java/Daisy.java index 42899e1e7..e5d80324b 100644 --- a/src/main/java/Daisy.java +++ b/src/main/java/Daisy.java @@ -1,3 +1,5 @@ +import java.util.Scanner; + public class Daisy { public static void main(String[] args) { String logo = " ____ _ \n" @@ -11,7 +13,19 @@ public static void main(String[] args) { System.out.println(" Hello! I'm Daisy"); System.out.println(" What can I do for you?"); System.out.println("____________________________________________________________"); + + Scanner scanner = new Scanner(System.in); + String input = ""; + while (true){ + input = scanner.nextLine(); + if (input.equals("bye")){ + break; + } + System.out.println(input); + } + System.out.println(" Bye. Hope to see you again soon!"); System.out.println("____________________________________________________________"); } } + From b49cc8d2590bb5bc2c7e245d7e5ae6994c0cd762 Mon Sep 17 00:00:00 2001 From: RozalieSmit <> Date: Thu, 6 Feb 2025 14:54:46 +0800 Subject: [PATCH 03/21] commit add and list function --- src/main/java/Daisy.java | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/main/java/Daisy.java b/src/main/java/Daisy.java index e5d80324b..af7ee6b6c 100644 --- a/src/main/java/Daisy.java +++ b/src/main/java/Daisy.java @@ -1,6 +1,10 @@ import java.util.Scanner; public class Daisy { + private static final int MAX_ITEMS = 100; + private static String[] items = new String[MAX_ITEMS]; + private static int itemCount = 0; + public static void main(String[] args) { String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" @@ -20,6 +24,10 @@ public static void main(String[] args) { input = scanner.nextLine(); if (input.equals("bye")){ break; + } else if (input.equals("list")){ + listItems(); + } else { + addItem(input); } System.out.println(input); } @@ -27,5 +35,27 @@ public static void main(String[] args) { System.out.println(" Bye. Hope to see you again soon!"); System.out.println("____________________________________________________________"); } + + private static void listItems() { + System.out.println("____________________________________________________________"); + for (int i = 0; i < itemCount; i++) { + System.out.println((i + 1) + ". " + items[i]); + } + } + + private static void addItem(String item) { + if (itemCount < MAX_ITEMS) { + items[itemCount] = item; + itemCount++; + System.out.println("____________________________________________________________"); + System.out.println(" added: " + item); + System.out.println("____________________________________________________________"); + } + else { + System.out.println("____________________________________________________________"); + System.out.println("The list is full. Cannot add any more items."); + System.out.println("____________________________________________________________"); + } + } } From 3632f0f1aa65d6ab46a41beec2ef4627774bfc2b Mon Sep 17 00:00:00 2001 From: RozalieSmit <> Date: Fri, 7 Feb 2025 10:27:03 +0800 Subject: [PATCH 04/21] commit mark as done function --- src/main/java/Daisy.java | 98 ++++++++++++++++++++++++++++++++-------- 1 file changed, 80 insertions(+), 18 deletions(-) diff --git a/src/main/java/Daisy.java b/src/main/java/Daisy.java index af7ee6b6c..4ce58fc62 100644 --- a/src/main/java/Daisy.java +++ b/src/main/java/Daisy.java @@ -2,8 +2,8 @@ public class Daisy { private static final int MAX_ITEMS = 100; - private static String[] items = new String[MAX_ITEMS]; - private static int itemCount = 0; + private static Task[] tasks = new Task[MAX_ITEMS]; + private static int taskCount = 0; public static void main(String[] args) { String logo = " ____ _ \n" @@ -20,42 +20,104 @@ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String input = ""; - while (true){ + + while (true) { input = scanner.nextLine(); - if (input.equals("bye")){ + if (input.equals("bye")) { break; - } else if (input.equals("list")){ - listItems(); + } else if (input.equals("list")) { + listTasks(); + } else if (input.equals("mark ")) { + int taskNumber = Integer.parseInt(input.split(" ")[1]); + markTask(taskNumber); + } else if (input.equals("unmark ")) { + int taskNumber = Integer.parseInt(input.split(" ")[1]); + unmarkTask(taskNumber); } else { - addItem(input); + addTask(input); } - System.out.println(input); } System.out.println(" Bye. Hope to see you again soon!"); System.out.println("____________________________________________________________"); + + scanner.close(); + } + + private static void addTask(String description) { + if (taskCount < MAX_ITEMS) { + tasks[taskCount] = new Task(description); + taskCount++; + System.out.println("____________________________________________________________"); + System.out.println(" added: " + description); + System.out.println("____________________________________________________________"); + } else { + System.out.println("____________________________________________________________"); + System.out.println(" List is full, cannot add more tasks."); + System.out.println("____________________________________________________________"); + } } - private static void listItems() { + private static void listTasks() { System.out.println("____________________________________________________________"); - for (int i = 0; i < itemCount; i++) { - System.out.println((i + 1) + ". " + items[i]); + System.out.println(" Here are the tasks in your list:"); + for (int i = 0; i < taskCount; i++) { + System.out.println((i + 1) + ".[" + tasks[i].getStatusIcon() + "] " + tasks[i].getDescription()); } + System.out.println("____________________________________________________________"); } - private static void addItem(String item) { - if (itemCount < MAX_ITEMS) { - items[itemCount] = item; - itemCount++; + private static void markTask(int taskNumber) { + if (taskNumber > 0 && taskNumber <= taskCount) { + tasks[taskNumber - 1].markAsDone(); + System.out.println("____________________________________________________________"); + System.out.println(" Nice! I've marked this task as done:"); + System.out.println(" [X] " + tasks[taskNumber - 1].getDescription()); System.out.println("____________________________________________________________"); - System.out.println(" added: " + item); + } else { + System.out.println("____________________________________________________________"); + System.out.println(" Invalid task number."); System.out.println("____________________________________________________________"); } - else { + } + + private static void unmarkTask(int taskNumber) { + if (taskNumber > 0 && taskNumber <= taskCount) { + tasks[taskNumber - 1].markAsNotDone(); System.out.println("____________________________________________________________"); - System.out.println("The list is full. Cannot add any more items."); + System.out.println(" OK, I've marked this task as not done yet:"); + System.out.println(" [ ] " + tasks[taskNumber - 1].getDescription()); + System.out.println("____________________________________________________________"); + } else { + System.out.println("____________________________________________________________"); + System.out.println(" Invalid task number."); System.out.println("____________________________________________________________"); } } } +class Task { + protected String description; + protected boolean isDone; + + public Task(String description) { + this.description = description; + this.isDone = false; + } + + public String getStatusIcon() { + return (isDone ? "X" : " "); + } + + public String getDescription() { + return description; + } + + public void markAsDone() { + isDone = true; + } + + public void markAsNotDone() { + isDone = false; + } +} From de5197009ec9fd4c308b633293f01589a2d9f574 Mon Sep 17 00:00:00 2001 From: Rozalie Smit Date: Fri, 14 Feb 2025 03:12:10 +0800 Subject: [PATCH 05/21] code quality update --- src/main/java/Daisy.java | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/main/java/Daisy.java b/src/main/java/Daisy.java index 4ce58fc62..dac1229c9 100644 --- a/src/main/java/Daisy.java +++ b/src/main/java/Daisy.java @@ -1,18 +1,14 @@ import java.util.Scanner; public class Daisy { + // Maximum number of tasks private static final int MAX_ITEMS = 100; private static Task[] tasks = new Task[MAX_ITEMS]; private static int taskCount = 0; public static void main(String[] args) { - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; - - System.out.println("Hello from\n" + logo); + // Introduction message + System.out.println("Hello from\n"); System.out.println("____________________________________________________________"); System.out.println(" Hello! I'm Daisy"); System.out.println(" What can I do for you?"); @@ -21,18 +17,24 @@ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String input = ""; + // Respond to user commands while (true) { input = scanner.nextLine(); + // End conversation if (input.equals("bye")) { break; + // Display list } else if (input.equals("list")) { listTasks(); - } else if (input.equals("mark ")) { + // Mark task as done + } else if (input.startsWith("mark ")) { int taskNumber = Integer.parseInt(input.split(" ")[1]); markTask(taskNumber); - } else if (input.equals("unmark ")) { + // Unmark task + } else if (input.startsWith("unmark ")) { int taskNumber = Integer.parseInt(input.split(" ")[1]); unmarkTask(taskNumber); + // Add task to list } else { addTask(input); } @@ -44,6 +46,7 @@ public static void main(String[] args) { scanner.close(); } + // Add task private static void addTask(String description) { if (taskCount < MAX_ITEMS) { tasks[taskCount] = new Task(description); @@ -58,6 +61,7 @@ private static void addTask(String description) { } } + // List task private static void listTasks() { System.out.println("____________________________________________________________"); System.out.println(" Here are the tasks in your list:"); @@ -67,6 +71,7 @@ private static void listTasks() { System.out.println("____________________________________________________________"); } + // Mark task as done private static void markTask(int taskNumber) { if (taskNumber > 0 && taskNumber <= taskCount) { tasks[taskNumber - 1].markAsDone(); @@ -81,6 +86,7 @@ private static void markTask(int taskNumber) { } } + // Unmark task private static void unmarkTask(int taskNumber) { if (taskNumber > 0 && taskNumber <= taskCount) { tasks[taskNumber - 1].markAsNotDone(); From 2288ae69012f501ddf640877c697f6b7c9dadd0f Mon Sep 17 00:00:00 2001 From: Rozalie Smit Date: Fri, 14 Feb 2025 03:44:40 +0800 Subject: [PATCH 06/21] deadline, todo, event tasks --- src/main/java/Daisy.java | 87 ++++++++++++++++++++++++++++++++++------ 1 file changed, 75 insertions(+), 12 deletions(-) diff --git a/src/main/java/Daisy.java b/src/main/java/Daisy.java index dac1229c9..49a01e862 100644 --- a/src/main/java/Daisy.java +++ b/src/main/java/Daisy.java @@ -23,23 +23,35 @@ public static void main(String[] args) { // End conversation if (input.equals("bye")) { break; - // Display list + // Display list } else if (input.equals("list")) { listTasks(); - // Mark task as done + // Mark task as done } else if (input.startsWith("mark ")) { int taskNumber = Integer.parseInt(input.split(" ")[1]); markTask(taskNumber); - // Unmark task + // Unmark task } else if (input.startsWith("unmark ")) { int taskNumber = Integer.parseInt(input.split(" ")[1]); unmarkTask(taskNumber); - // Add task to list + // Add Todo task + } else if (input.startsWith("todo ")) { + addTask(new Todo(input.substring(5))); + // Add Deadline task + } else if (input.startsWith("deadline ")) { + String[] parts = input.substring(9).split(" /by "); + addTask(new Deadline(parts[0], parts[1])); + // Add Event task + } else if (input.startsWith("event ")) { + String[] parts = input.substring(6).split(" /from | /to "); + addTask(new Event(parts[0], parts[1], parts[2])); + // Add normal task } else { - addTask(input); + addTask(new Task(input)); } } + // Goodbye message System.out.println(" Bye. Hope to see you again soon!"); System.out.println("____________________________________________________________"); @@ -47,12 +59,14 @@ public static void main(String[] args) { } // Add task - private static void addTask(String description) { + private static void addTask(Task task) { if (taskCount < MAX_ITEMS) { - tasks[taskCount] = new Task(description); + tasks[taskCount] = task; taskCount++; System.out.println("____________________________________________________________"); - System.out.println(" added: " + description); + System.out.println(" Got it. I've added this task:"); + System.out.println(" " + task); + System.out.println(" Now you have " + taskCount + " tasks in the list."); System.out.println("____________________________________________________________"); } else { System.out.println("____________________________________________________________"); @@ -61,12 +75,12 @@ private static void addTask(String description) { } } - // List task + // List tasks private static void listTasks() { System.out.println("____________________________________________________________"); System.out.println(" Here are the tasks in your list:"); for (int i = 0; i < taskCount; i++) { - System.out.println((i + 1) + ".[" + tasks[i].getStatusIcon() + "] " + tasks[i].getDescription()); + System.out.println((i + 1) + "." + tasks[i]); } System.out.println("____________________________________________________________"); } @@ -77,7 +91,7 @@ private static void markTask(int taskNumber) { tasks[taskNumber - 1].markAsDone(); System.out.println("____________________________________________________________"); System.out.println(" Nice! I've marked this task as done:"); - System.out.println(" [X] " + tasks[taskNumber - 1].getDescription()); + System.out.println(" " + tasks[taskNumber - 1]); System.out.println("____________________________________________________________"); } else { System.out.println("____________________________________________________________"); @@ -92,7 +106,7 @@ private static void unmarkTask(int taskNumber) { tasks[taskNumber - 1].markAsNotDone(); System.out.println("____________________________________________________________"); System.out.println(" OK, I've marked this task as not done yet:"); - System.out.println(" [ ] " + tasks[taskNumber - 1].getDescription()); + System.out.println(" " + tasks[taskNumber - 1]); System.out.println("____________________________________________________________"); } else { System.out.println("____________________________________________________________"); @@ -126,4 +140,53 @@ public void markAsDone() { public void markAsNotDone() { isDone = false; } + + @Override + public String toString() { + return "[" + getStatusIcon() + "] " + description; + } +} + +// Todo task +class Todo extends Task { + public Todo(String description) { + super(description); + } + + @Override + public String toString() { + return "[T]" + super.toString(); + } +} + +// Deadline task +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 + ")"; + } +} + +// Event task +class Event extends Task { + protected String from; + protected String to; + + public Event(String description, String from, String to) { + super(description); + this.from = from; + this.to = to; + } + + @Override + public String toString() { + return "[E]" + super.toString() + " (from: " + from + " to: " + to + ")"; + } } From 2c942dc599f971070f5f79f91268a610ab12cbb6 Mon Sep 17 00:00:00 2001 From: Rozalie Smit Date: Fri, 14 Feb 2025 04:03:16 +0800 Subject: [PATCH 07/21] TextUITesting --- src/main/java/Daisy.java | 1 - text-ui-test/EXPECTED.TXT | 32 +++++++++++++++++++++++++------- text-ui-test/input.txt | 5 +++++ text-ui-test/runtest.sh | 2 +- 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/main/java/Daisy.java b/src/main/java/Daisy.java index 49a01e862..e11d3a30f 100644 --- a/src/main/java/Daisy.java +++ b/src/main/java/Daisy.java @@ -8,7 +8,6 @@ public class Daisy { public static void main(String[] args) { // Introduction message - System.out.println("Hello from\n"); System.out.println("____________________________________________________________"); System.out.println(" Hello! I'm Daisy"); System.out.println(" What can I do for you?"); diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 657e74f6e..63918c9b0 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,7 +1,25 @@ -Hello from - ____ _ -| _ \ _ _| | _____ -| | | | | | | |/ / _ \ -| |_| | |_| | < __/ -|____/ \__,_|_|\_\___| - +____________________________________________________________ + Hello! I'm Daisy + What can I do for you? +____________________________________________________________ +____________________________________________________________ + Got it. I've added this task: + [T][ ] borrow book + Now you have 1 tasks in the list. +____________________________________________________________ +____________________________________________________________ + Here are the tasks in your list: +1.[T][ ] borrow book +____________________________________________________________ +____________________________________________________________ + Got it. I've added this task: + [D][ ] return book (by: Sunday) + Now you have 2 tasks in the list. +____________________________________________________________ +____________________________________________________________ + Got it. I've added this task: + [E][ ] project meeting (from: Mon 2pm to: 4pm) + Now you have 3 tasks in the list. +____________________________________________________________ + Bye. Hope to see you again soon! +____________________________________________________________ diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index e69de29bb..47e576978 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -0,0 +1,5 @@ +todo borrow book +list +deadline return book /by Sunday +event project meeting /from Mon 2pm /to 4pm +bye diff --git a/text-ui-test/runtest.sh b/text-ui-test/runtest.sh index c9ec87003..e887b2500 100644 --- a/text-ui-test/runtest.sh +++ b/text-ui-test/runtest.sh @@ -20,7 +20,7 @@ then fi # 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 Daisy < input.txt > ACTUAL.TXT # convert to UNIX format cp EXPECTED.TXT EXPECTED-UNIX.TXT From 6756834ac48a8cfe5a55811a91f1a54909317415 Mon Sep 17 00:00:00 2001 From: Rozalie Smit Date: Fri, 14 Feb 2025 04:19:30 +0800 Subject: [PATCH 08/21] Improve code quality --- src/main/java/Daisy.java | 140 ++++++++++++++++++++++++++------------- 1 file changed, 95 insertions(+), 45 deletions(-) diff --git a/src/main/java/Daisy.java b/src/main/java/Daisy.java index e11d3a30f..6ae6a953b 100644 --- a/src/main/java/Daisy.java +++ b/src/main/java/Daisy.java @@ -2,19 +2,16 @@ public class Daisy { // Maximum number of tasks - private static final int MAX_ITEMS = 100; - private static Task[] tasks = new Task[MAX_ITEMS]; + private static final int MAX_TASKS = 100; + private static Task[] tasks = new Task[MAX_TASKS]; private static int taskCount = 0; public static void main(String[] args) { // Introduction message - System.out.println("____________________________________________________________"); - System.out.println(" Hello! I'm Daisy"); - System.out.println(" What can I do for you?"); - System.out.println("____________________________________________________________"); + printIntroduction(); Scanner scanner = new Scanner(System.in); - String input = ""; + String input; // Respond to user commands while (true) { @@ -22,58 +19,102 @@ public static void main(String[] args) { // End conversation if (input.equals("bye")) { break; - // Display list } else if (input.equals("list")) { listTasks(); - // Mark task as done } else if (input.startsWith("mark ")) { - int taskNumber = Integer.parseInt(input.split(" ")[1]); - markTask(taskNumber); - // Unmark task + invalidMarkTask(input); } else if (input.startsWith("unmark ")) { - int taskNumber = Integer.parseInt(input.split(" ")[1]); - unmarkTask(taskNumber); - // Add Todo task + invalidUnmarkTask(input); } else if (input.startsWith("todo ")) { - addTask(new Todo(input.substring(5))); - // Add Deadline task + invalidTodoTask(input); } else if (input.startsWith("deadline ")) { - String[] parts = input.substring(9).split(" /by "); - addTask(new Deadline(parts[0], parts[1])); - // Add Event task + invalidDeadlineTask(input); } else if (input.startsWith("event ")) { - String[] parts = input.substring(6).split(" /from | /to "); - addTask(new Event(parts[0], parts[1], parts[2])); - // Add normal task + invalidEventTask(input); } else { addTask(new Task(input)); } } // Goodbye message + printGoodbye(); + + scanner.close(); + } + + private static void printIntroduction() { + System.out.println("____________________________________________________________"); + System.out.println(" Hello! I'm Daisy"); + System.out.println(" What can I do for you?"); + System.out.println("____________________________________________________________"); + } + + private static void printGoodbye() { System.out.println(" Bye. Hope to see you again soon!"); System.out.println("____________________________________________________________"); + } - scanner.close(); + private static void invalidMarkTask(String input) { + try { + int taskNumber = Integer.parseInt(input.split(" ")[1]); + markTask(taskNumber); + } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) { + System.out.println("Oh no! Seems like the command format was invalid. Please use the format 'mark ' instead."); + } + } + + private static void invalidUnmarkTask(String input) { + try { + int taskNumber = Integer.parseInt(input.split(" ")[1]); + unmarkTask(taskNumber); + } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) { + System.out.println("Oh no! Seems like the command format was invalid. Please use the format 'unmark ' instead."); + } + } + + private static void invalidTodoTask(String input) { + addTask(new TodoTask(input.substring(5))); + } + + private static void invalidDeadlineTask(String input) { + String[] parts = input.substring(9).split(" /by "); + if (parts.length == 2) { + addTask(new DeadlineTask(parts[0], parts[1])); + } else { + System.out.println("Oh no! Seems like the command format was invalid. Please use the format 'deadline /by