-
Notifications
You must be signed in to change notification settings - Fork 482
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[vivienherq] iP #529
base: master
Are you sure you want to change the base?
[vivienherq] iP #529
Changes from 14 commits
28ad2b8
ed6d4d2
4b12bd6
a6f13d3
6ae3cc1
cfc7c19
ae180ce
07d666a
4cec3c5
a056e50
acbfead
0dadc72
91b96cf
2445b29
8f55d5e
4fc7fc4
725c47e
34281a2
6bcc6ec
85e358c
8144a1c
89204e3
23714e1
88e778a
9b188fa
1fef7f7
0314cf6
1e5aa08
9dcbe69
b4f582c
fbeeb36
5e0e18e
69be13d
c6507ac
6fbf6bd
1f85905
0e72557
904825f
e0f8bf4
b9eff0b
b57f610
46ac71c
cc740a9
2a9f2ab
5f3101e
bd2e27d
1130fc3
35e7c49
19c71fe
ffb7e1f
44cfd21
c963ac1
af043e0
d2a8732
999bd2d
1c87ec3
2a15d2d
94c8ed9
fa95713
c40cdf4
e3b47f8
a527597
3a58feb
7197092
8abaff7
14375d2
1c14b2f
fbe3510
4044a2c
224d2a7
8ec8d9e
ddb13e1
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
T | 0 | borrow book | ||
D | 0 | return book | 2023-09-06T14:30 | ||
E | 0 | project meeting | Mon 2pm | 4pm |
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,33 @@ | ||||||
import java.time.LocalDateTime; | ||||||
import java.time.format.DateTimeFormatter; | ||||||
import java.util.Locale; | ||||||
|
||||||
public class Deadline extends Task { | ||||||
LocalDateTime by; | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Variables should be non-public.
Suggested change
|
||||||
Deadline(String description, LocalDateTime by) { | ||||||
super(description); | ||||||
this.by = by; | ||||||
} | ||||||
@Override | ||||||
public String getType() { | ||||||
return "deadline"; | ||||||
} | ||||||
@Override | ||||||
public String saveTask() { | ||||||
String data = "D | "; | ||||||
if (this.isDone()) { | ||||||
data += "1 | "; | ||||||
} else { | ||||||
data += "0 | "; | ||||||
} | ||||||
data += this.getDescription(); | ||||||
data = data + " | " + this.by + "\n"; // ISO-8601 e.g. 2023-09-06T14:30 | ||||||
return data; | ||||||
} | ||||||
@Override | ||||||
public String toString() { | ||||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd MMM yyyy hh:mm a", Locale.ENGLISH); | ||||||
String formattedDateTime = by.format(formatter); | ||||||
return "[D]" + super.toString() + " (by: " + formattedDateTime + ")"; | ||||||
} | ||||||
} |
Original file line number | Diff line number | Diff line change | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,213 @@ | ||||||||||||||||
import java.io.*; | ||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Imported classes should be listed explicitly 😁
Suggested change
|
||||||||||||||||
import java.util.Scanner; | ||||||||||||||||
import java.util.ArrayList; | ||||||||||||||||
import java.time.LocalDateTime; | ||||||||||||||||
import java.time.format.DateTimeFormatter; | ||||||||||||||||
|
||||||||||||||||
public class Dude { | ||||||||||||||||
|
||||||||||||||||
static ArrayList<Task> taskList = new ArrayList<Task>(); | ||||||||||||||||
static int nTasks = 0; | ||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Instead of having an |
||||||||||||||||
|
||||||||||||||||
private static final String FILE_PATH = "./data/dude.txt"; | ||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This constant doesn't seem to be used. Did you forget to replace your instances of |
||||||||||||||||
|
||||||||||||||||
public static void addTodo(String task) { | ||||||||||||||||
ToDo newTask = new ToDo(task); | ||||||||||||||||
// taskList[nTasks] = newTask; | ||||||||||||||||
taskList.add(newTask); | ||||||||||||||||
System.out.printf("Got it. I've added this task:\n%s\n", newTask.toString()); | ||||||||||||||||
nTasks += 1; | ||||||||||||||||
System.out.printf("Now you have %d tasks in the list. \n", nTasks); | ||||||||||||||||
} | ||||||||||||||||
public static void addDeadline(String task, LocalDateTime by) { | ||||||||||||||||
Deadline newTask = new Deadline(task, by); | ||||||||||||||||
// taskList[nTasks] = newTask; | ||||||||||||||||
taskList.add(newTask); | ||||||||||||||||
System.out.printf("Got it. I've added this task:\n%s\n", newTask.toString()); | ||||||||||||||||
nTasks += 1; | ||||||||||||||||
System.out.printf("Now you have %d tasks in the list. \n", nTasks); | ||||||||||||||||
} | ||||||||||||||||
public static void addEvent(String task, String from, String to) { | ||||||||||||||||
Event newTask = new Event(task, from, to); | ||||||||||||||||
// taskList[nTasks] = newTask; | ||||||||||||||||
taskList.add(newTask); | ||||||||||||||||
System.out.printf("Got it. I've added this task:\n%s\n", newTask.toString()); | ||||||||||||||||
nTasks += 1; | ||||||||||||||||
System.out.printf("Now you have %d tasks in the list. \n", nTasks); | ||||||||||||||||
} | ||||||||||||||||
|
||||||||||||||||
public static void delete(int n) { | ||||||||||||||||
Task removedTask = taskList.get(n-1); | ||||||||||||||||
taskList.remove(n-1); | ||||||||||||||||
nTasks -= 1; | ||||||||||||||||
System.out.println("Noted. I've removed this task:"); | ||||||||||||||||
System.out.println(removedTask.toString()); | ||||||||||||||||
System.out.printf("Now you have %d tasks in the list.\n", nTasks); | ||||||||||||||||
|
||||||||||||||||
} | ||||||||||||||||
|
||||||||||||||||
public static void list() { | ||||||||||||||||
for (int i = 0; i < nTasks; i++) { | ||||||||||||||||
Task task = taskList.get(i); | ||||||||||||||||
// Task task = taskList[i]; | ||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You are using comments to temporarily remove code, however comments should be used to describe the code to the reader. They should also be indented to the relative position to your code i.e. the |
||||||||||||||||
System.out.printf("%d. %s\n", i+1, task.toString()); | ||||||||||||||||
} | ||||||||||||||||
} | ||||||||||||||||
|
||||||||||||||||
public static void mark(int n) { | ||||||||||||||||
taskList.get(n-1).setDone(true); | ||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. For clarity, perhaps you can split this line up into
|
||||||||||||||||
System.out.println("Nice! I've marked this task as done:"); | ||||||||||||||||
System.out.printf("%d. %s\n", n, taskList.get(n-1).toString()); | ||||||||||||||||
} | ||||||||||||||||
|
||||||||||||||||
public static void unmark(int n) throws IOException { | ||||||||||||||||
taskList.get(n-1).setDone(false); | ||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Operators should be surrounded by a space character.
Suggested change
|
||||||||||||||||
System.out.println("OK, I've marked this task as not done yet:"); | ||||||||||||||||
System.out.printf("%d. %s\n", n, taskList.get(n-1).toString()); | ||||||||||||||||
} | ||||||||||||||||
|
||||||||||||||||
public static void bye() { | ||||||||||||||||
String greeting = "Bye. Hope to see you again soon!"; | ||||||||||||||||
System.out.println(greeting); | ||||||||||||||||
} | ||||||||||||||||
|
||||||||||||||||
public static void saveTasksToDisk() throws IOException { | ||||||||||||||||
String directoryPath = "./data"; | ||||||||||||||||
String filePath = "./data/dude.txt"; | ||||||||||||||||
|
||||||||||||||||
File directory = new File(directoryPath); | ||||||||||||||||
if (!directory.exists()) { | ||||||||||||||||
if (directory.mkdirs()) { | ||||||||||||||||
System.out.println("Directory created at: " + directoryPath); | ||||||||||||||||
} else { | ||||||||||||||||
System.err.println("Failed to create directory."); | ||||||||||||||||
return; | ||||||||||||||||
} | ||||||||||||||||
} | ||||||||||||||||
|
||||||||||||||||
File file = new File(filePath); | ||||||||||||||||
if (!file.exists()) { | ||||||||||||||||
try { | ||||||||||||||||
if (file.createNewFile()) { | ||||||||||||||||
System.out.println("File created at: " + filePath); | ||||||||||||||||
} else { | ||||||||||||||||
System.err.println("Failed to create the file."); | ||||||||||||||||
} | ||||||||||||||||
} catch (IOException e) { | ||||||||||||||||
System.err.println("An error occurred while creating the file: " + e.getMessage()); | ||||||||||||||||
} | ||||||||||||||||
} | ||||||||||||||||
|
||||||||||||||||
String data = ""; | ||||||||||||||||
for (int i = 0; i < nTasks; i++) { | ||||||||||||||||
Task task = taskList.get(i); | ||||||||||||||||
data += task.saveTask(); | ||||||||||||||||
} | ||||||||||||||||
try { | ||||||||||||||||
FileWriter fw = new FileWriter(file); | ||||||||||||||||
fw.write(data); | ||||||||||||||||
fw.close(); | ||||||||||||||||
} catch (IOException e) { | ||||||||||||||||
System.out.println(e.toString()); | ||||||||||||||||
} | ||||||||||||||||
} | ||||||||||||||||
|
||||||||||||||||
public static void loadTasksFromDisk() throws FileNotFoundException { | ||||||||||||||||
String filePath = "./data/dude.txt"; | ||||||||||||||||
|
||||||||||||||||
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { | ||||||||||||||||
String line; | ||||||||||||||||
while ((line = reader.readLine()) != null) { | ||||||||||||||||
//System.out.println(line); | ||||||||||||||||
String[] taskInfo = line.split("\\s+\\|\\s+"); | ||||||||||||||||
|
||||||||||||||||
Task task; | ||||||||||||||||
|
||||||||||||||||
if (taskInfo[0].equals("T")) { | ||||||||||||||||
task = new ToDo(taskInfo[2]); | ||||||||||||||||
task.setDone(taskInfo[1] == "1"); | ||||||||||||||||
taskList.add(task); | ||||||||||||||||
nTasks += 1; | ||||||||||||||||
} else if (taskInfo[0].equals("D")) { | ||||||||||||||||
String byInput = taskInfo[3]; // ISO-8601 e.g. 2023-09-06T14:30 | ||||||||||||||||
LocalDateTime by = LocalDateTime.parse(byInput); | ||||||||||||||||
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm"); | ||||||||||||||||
// LocalDateTime by = LocalDateTime.parse(byInput, formatter); | ||||||||||||||||
task = new Deadline(taskInfo[2], by); | ||||||||||||||||
task.setDone(taskInfo[1] == "1"); | ||||||||||||||||
taskList.add(task); | ||||||||||||||||
nTasks += 1; | ||||||||||||||||
} else if (taskInfo[0].equals("E")) { | ||||||||||||||||
task = new Event(taskInfo[2], taskInfo[3], taskInfo[4]); | ||||||||||||||||
task.setDone(taskInfo[1] == "1"); | ||||||||||||||||
taskList.add(task); | ||||||||||||||||
nTasks += 1; | ||||||||||||||||
} | ||||||||||||||||
} | ||||||||||||||||
} catch (IOException e) { | ||||||||||||||||
System.err.println("An error occurred while reading the file: " + e.getMessage()); | ||||||||||||||||
} | ||||||||||||||||
} | ||||||||||||||||
|
||||||||||||||||
public static void main(String[] args) throws IOException { | ||||||||||||||||
String greeting = "Hello, I'm Dude!\n" + | ||||||||||||||||
"What can I do for you?"; | ||||||||||||||||
System.out.println(greeting); | ||||||||||||||||
|
||||||||||||||||
loadTasksFromDisk(); | ||||||||||||||||
System.out.printf("You have %d saved tasks:\n", nTasks); | ||||||||||||||||
list(); | ||||||||||||||||
while (true) { | ||||||||||||||||
Scanner scanner = new Scanner(System.in); | ||||||||||||||||
String input = scanner.nextLine(); | ||||||||||||||||
String[] words = input.split(" "); | ||||||||||||||||
|
||||||||||||||||
if (words[0].equals("list")) { | ||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Perhaps you can use |
||||||||||||||||
list(); | ||||||||||||||||
} else if (words[0].equals("bye")) { | ||||||||||||||||
bye(); | ||||||||||||||||
break; | ||||||||||||||||
} else if (words[0].equals("mark")) { | ||||||||||||||||
mark(Integer.valueOf(words[1])); | ||||||||||||||||
saveTasksToDisk(); | ||||||||||||||||
} else if (words[0].equals("unmark")) { | ||||||||||||||||
unmark(Integer.valueOf(words[1])); | ||||||||||||||||
saveTasksToDisk(); | ||||||||||||||||
} else if (words[0].equals("todo")) { | ||||||||||||||||
if (words.length > 1) { | ||||||||||||||||
addTodo(input.substring(5)); | ||||||||||||||||
saveTasksToDisk(); | ||||||||||||||||
} else { | ||||||||||||||||
System.out.println("OOPS!!! The description of a todo cannot be empty."); | ||||||||||||||||
} | ||||||||||||||||
} else if (words[0].equals("deadline")) { | ||||||||||||||||
if (words.length == 1) { | ||||||||||||||||
System.out.println("OOPS!!! The description of a deadline cannot be empty."); | ||||||||||||||||
} | ||||||||||||||||
|
||||||||||||||||
String[] taskWords = input.substring(9).split(" /by "); | ||||||||||||||||
String byInput = taskWords[1]; //dd/mm/yyyy hh:mm format | ||||||||||||||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm"); | ||||||||||||||||
LocalDateTime by = LocalDateTime.parse(byInput, formatter); | ||||||||||||||||
addDeadline(taskWords[0], by); | ||||||||||||||||
saveTasksToDisk(); | ||||||||||||||||
} else if (words[0].equals("event")) { | ||||||||||||||||
if (words.length == 1) { | ||||||||||||||||
System.out.println("OOPS!!! The description of an event cannot be empty."); | ||||||||||||||||
} | ||||||||||||||||
String[] taskWords = input.substring(6).split(" /"); | ||||||||||||||||
String from = taskWords[1].substring(5); | ||||||||||||||||
String to = taskWords[2].substring(3); | ||||||||||||||||
addEvent(taskWords[0], from, to); | ||||||||||||||||
saveTasksToDisk(); | ||||||||||||||||
} else if (words[0].equals("delete")) { | ||||||||||||||||
delete(Integer.valueOf(words[1])); | ||||||||||||||||
} else { | ||||||||||||||||
System.out.println(" OOPS!!! I'm sorry, but I don't know what that means :-("); | ||||||||||||||||
} | ||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
} | ||||||||||||||||
} | ||||||||||||||||
} |
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
public class Event extends Task { | ||
private String from; | ||
private String to; | ||
Event(String description, String from, String to) { | ||
super(description); | ||
this.from = from; | ||
this.to = to; | ||
} | ||
@Override | ||
public String getType() { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Perhaps you can add a |
||
return "event"; | ||
} | ||
@Override | ||
public String saveTask() { | ||
String data = "E | "; | ||
if (this.isDone()) { | ||
data += "1 | "; | ||
} else { | ||
data += "0 | "; | ||
} | ||
data += this.getDescription(); | ||
data = data + " | " + this.from + " | " + this.to + "\n"; | ||
return data; | ||
} | ||
@Override | ||
public String toString() { | ||
return "[E]" + super.toString() + " (from: " + from + " to: " + to + ")"; | ||
} | ||
} |
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,35 @@ | ||||||
public class Task { | ||||||
private String description; | ||||||
private boolean done; | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. booleans variables should be named to sound like booleans
Suggested change
|
||||||
|
||||||
Task(String description) { | ||||||
this.description = description; | ||||||
this.done = false; | ||||||
} | ||||||
|
||||||
public boolean isDone() { | ||||||
return this.done; | ||||||
} | ||||||
|
||||||
public String getDescription() { | ||||||
return this.description; | ||||||
} | ||||||
|
||||||
public void setDone(boolean done) { | ||||||
this.done = done; | ||||||
} | ||||||
|
||||||
public String getType() { | ||||||
return "task"; | ||||||
} | ||||||
public String saveTask () {return this.description; } | ||||||
|
||||||
@Override | ||||||
public String toString() { | ||||||
String doneStatus = "[ ]"; | ||||||
if (this.isDone()) { | ||||||
doneStatus = "[X]"; | ||||||
} | ||||||
return doneStatus + " " + this.description; | ||||||
} | ||||||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
public class ToDo extends Task { | ||
ToDo(String description) { | ||
super(description); | ||
} | ||
@Override | ||
public String getType() { | ||
return "todo"; | ||
} | ||
@Override | ||
public String saveTask() { | ||
String data = "T | "; | ||
if (this.isDone()) { | ||
data += "1 | "; | ||
} else { | ||
data += "0 | "; | ||
} | ||
data = data + this.getDescription() + "\n"; | ||
return data; | ||
} | ||
@Override | ||
public String toString() { | ||
return "[T]" + super.toString(); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,2 @@ | ||
Hello from | ||
____ _ | ||
| _ \ _ _| | _____ | ||
| | | | | | | |/ / _ \ | ||
| |_| | |_| | < __/ | ||
|____/ \__,_|_|\_\___| | ||
|
||
Hello, I'm Dude! | ||
What can I do for you? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This file can be excluded from commits!