diff --git a/src/main/java/TutorLink.java b/src/main/java/TutorLink.java
new file mode 100644
index 0000000000..f65a5c4c59
--- /dev/null
+++ b/src/main/java/TutorLink.java
@@ -0,0 +1,23 @@
+import java.util.Scanner;
+
+/**
+ * Represents the main class containing the entry point for the TutorLink application
+ */
+public class TutorLink {
+ /**
+ * Main entry-point for the java.duke.Duke application.
+ */
+ public static void main(String[] args) {
+ String logo = "___________ __ .____ .__ __ \n"
+ + "\\__ ___/_ ___/ |_ ___________| | |__| ____ | | __\n"
+ + " | | | | \\ __\\/ _ \\_ __ \\ | | |/ \\| |/ /\n"
+ + " | | | | /| | ( <_> ) | \\/ |___| | | \\ < \n"
+ + " |____| |____/ |__| \\____/|__| |_______ \\__|___| /__|_ \\\n"
+ + " \\/ \\/ \\/\n";
+ System.out.println("Hello from\n" + logo);
+ System.out.println("What is your name?");
+
+ Scanner in = new Scanner(System.in);
+ System.out.println("Hello " + in.nextLine());
+ }
+}
diff --git a/src/main/java/exception/StudentNotFoundException.java b/src/main/java/exception/StudentNotFoundException.java
new file mode 100644
index 0000000000..876a447e54
--- /dev/null
+++ b/src/main/java/exception/StudentNotFoundException.java
@@ -0,0 +1,5 @@
+package exception;
+
+public class StudentNotFoundException extends Exception{
+ //no other code needed
+}
diff --git a/src/main/java/tutorlink/assignmentpackage/Assignment.java b/src/main/java/tutorlink/assignmentpackage/Assignment.java
new file mode 100644
index 0000000000..7398811fcf
--- /dev/null
+++ b/src/main/java/tutorlink/assignmentpackage/Assignment.java
@@ -0,0 +1,33 @@
+package tutorlink.assignmentpackage;
+
+import java.util.Objects;
+
+public class Assignment {
+ private String assginmentDescription;
+ private double receivedScore;
+ private double totalScore;
+ private double weighting;
+
+ public Assignment(String assginmentDescription, double receivedScore, double totalScore, double weighting) {
+ this.assginmentDescription = assginmentDescription;
+ this.receivedScore = receivedScore;
+ this.totalScore = totalScore;
+ this.weighting = weighting;
+ }
+
+ public double getWeightedScore() {
+ return (receivedScore / totalScore) * weighting;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null || getClass() != obj.getClass()){
+ return false;
+ }
+ Assignment that = (Assignment) obj;
+ return Objects.equals(assginmentDescription, that.assginmentDescription);
+ }
+}
diff --git a/src/main/java/tutorlink/attendancepackage/Attendance.java b/src/main/java/tutorlink/attendancepackage/Attendance.java
new file mode 100644
index 0000000000..5ce68bc1f7
--- /dev/null
+++ b/src/main/java/tutorlink/attendancepackage/Attendance.java
@@ -0,0 +1,23 @@
+package tutorlink.attendancepackage;
+
+public class Attendance {
+ private String attendanceVenue;
+ private String attendanceDateTime; //modify this to accept LocalDateTime
+ private boolean isPresent;
+
+ public Attendance(String attendanceVenue, String localDateTime, boolean isPresent){
+ this.attendanceVenue = attendanceVenue;
+ this.attendanceDateTime = localDateTime;
+ this.isPresent = isPresent;
+ }
+
+ public String getAttendanceDateTime() {
+ return attendanceDateTime;
+ }
+ public String getAttendanceVenue() {
+ return attendanceVenue;
+ }
+ public boolean getIsPresent() {
+ return isPresent;
+ }
+}
diff --git a/src/main/java/tutorlink/commandpackage/Command.java b/src/main/java/tutorlink/commandpackage/Command.java
new file mode 100644
index 0000000000..dae3d4c936
--- /dev/null
+++ b/src/main/java/tutorlink/commandpackage/Command.java
@@ -0,0 +1,21 @@
+package tutorlink.commandpackage;
+
+import tutorlink.listpackage.ItemList;
+
+/**
+ * Represents an interpreted Command from the user. A Command
object corresponds to a
+ * single user-issued command from the terminal.
+ */
+public abstract class Command {
+ /**
+ * Executes the required operations to perform the command issued by the user.
+ */
+ public abstract void execute(ItemList list);
+
+ /**
+ * Checks if the command is an exit command.
+ *
+ * @return whether the current command is an ExitCommand
+ */
+ public abstract boolean isExit();
+}
diff --git a/src/main/java/tutorlink/commandpackage/assignmentcommand/AddAssignmentCommand.java b/src/main/java/tutorlink/commandpackage/assignmentcommand/AddAssignmentCommand.java
new file mode 100644
index 0000000000..11b0dfa367
--- /dev/null
+++ b/src/main/java/tutorlink/commandpackage/assignmentcommand/AddAssignmentCommand.java
@@ -0,0 +1,24 @@
+package tutorlink.commandpackage.assignmentcommand;
+
+import tutorlink.assignmentpackage.Assignment;
+import tutorlink.listpackage.AssignmentList;
+import tutorlink.listpackage.ItemList;
+
+public class AddAssignmentCommand extends AssignmentCommand {
+ public AddAssignmentCommand(Assignment assignment) {
+ super(assignment);
+ }
+
+ public void execute(ItemList list) {
+ if (list instanceof AssignmentList) {
+ ((AssignmentList) list).addAssignment(assignment);
+ } else {
+ throw new IllegalArgumentException("Invalid list type. Expected StudentList.");
+ }
+ }
+
+ @Override
+ public boolean isExit() {
+ return false;
+ }
+}
diff --git a/src/main/java/tutorlink/commandpackage/assignmentcommand/AssignmentCommand.java b/src/main/java/tutorlink/commandpackage/assignmentcommand/AssignmentCommand.java
new file mode 100644
index 0000000000..b0c1db91fc
--- /dev/null
+++ b/src/main/java/tutorlink/commandpackage/assignmentcommand/AssignmentCommand.java
@@ -0,0 +1,16 @@
+package tutorlink.commandpackage.assignmentcommand;
+
+import tutorlink.commandpackage.Command;
+import tutorlink.assignmentpackage.Assignment;
+
+public abstract class AssignmentCommand extends Command {
+ protected Assignment assignment;
+
+ public AssignmentCommand(Assignment assignment) {
+ this.assignment = assignment;
+ }
+
+ public boolean isExit() {
+ return false;
+ }
+}
diff --git a/src/main/java/tutorlink/commandpackage/assignmentcommand/DeleteAssignmentCommand.java b/src/main/java/tutorlink/commandpackage/assignmentcommand/DeleteAssignmentCommand.java
new file mode 100644
index 0000000000..8984dd833d
--- /dev/null
+++ b/src/main/java/tutorlink/commandpackage/assignmentcommand/DeleteAssignmentCommand.java
@@ -0,0 +1,16 @@
+package tutorlink.commandpackage.assignmentcommand;
+
+import tutorlink.listpackage.ItemList;
+import tutorlink.assignmentpackage.Assignment;
+
+public class DeleteAssignmentCommand extends AssignmentCommand{
+ public DeleteAssignmentCommand(Assignment assignment) {
+ super(assignment);
+ }
+
+
+ @Override
+ public void execute(ItemList list) {
+
+ }
+}
diff --git a/src/main/java/tutorlink/commandpackage/attendancecommand/AddAttendanceCommand.java b/src/main/java/tutorlink/commandpackage/attendancecommand/AddAttendanceCommand.java
new file mode 100644
index 0000000000..0ce5654bf2
--- /dev/null
+++ b/src/main/java/tutorlink/commandpackage/attendancecommand/AddAttendanceCommand.java
@@ -0,0 +1,16 @@
+package tutorlink.commandpackage.attendancecommand;
+
+import tutorlink.listpackage.ItemList;
+import tutorlink.attendancepackage.Attendance;
+
+public class AddAttendanceCommand extends AttendanceCommand{
+
+ public AddAttendanceCommand(Attendance attendance) {
+ super(attendance);
+ }
+
+ @Override
+ public void execute(ItemList list) {
+
+ }
+}
diff --git a/src/main/java/tutorlink/commandpackage/attendancecommand/AttendanceCommand.java b/src/main/java/tutorlink/commandpackage/attendancecommand/AttendanceCommand.java
new file mode 100644
index 0000000000..8bef10cb79
--- /dev/null
+++ b/src/main/java/tutorlink/commandpackage/attendancecommand/AttendanceCommand.java
@@ -0,0 +1,17 @@
+package tutorlink.commandpackage.attendancecommand;
+
+import tutorlink.commandpackage.Command;
+import tutorlink.attendancepackage.Attendance;
+
+public abstract class AttendanceCommand extends Command {
+ private Attendance attendance;
+
+ public AttendanceCommand(Attendance attendance) {
+ this.attendance = attendance;
+ }
+
+ @Override
+ public boolean isExit() {
+ return false;
+ }
+}
diff --git a/src/main/java/tutorlink/commandpackage/attendancecommand/DeleteAttendanceCommand.java b/src/main/java/tutorlink/commandpackage/attendancecommand/DeleteAttendanceCommand.java
new file mode 100644
index 0000000000..11b0303cbc
--- /dev/null
+++ b/src/main/java/tutorlink/commandpackage/attendancecommand/DeleteAttendanceCommand.java
@@ -0,0 +1,16 @@
+package tutorlink.commandpackage.attendancecommand;
+
+import tutorlink.listpackage.ItemList;
+import tutorlink.attendancepackage.Attendance;
+
+public class DeleteAttendanceCommand extends AttendanceCommand{
+
+ public DeleteAttendanceCommand(Attendance attendance) {
+ super(attendance);
+ }
+
+ @Override
+ public void execute(ItemList list) {
+
+ }
+}
diff --git a/src/main/java/tutorlink/commandpackage/studentcommand/AddStudentCommand.java b/src/main/java/tutorlink/commandpackage/studentcommand/AddStudentCommand.java
new file mode 100644
index 0000000000..45b5f4b00e
--- /dev/null
+++ b/src/main/java/tutorlink/commandpackage/studentcommand/AddStudentCommand.java
@@ -0,0 +1,27 @@
+package tutorlink.commandpackage.studentcommand;
+
+import tutorlink.listpackage.ItemList;
+import tutorlink.listpackage.StudentList;
+import tutorlink.studentpackage.StudentClass;
+
+public class AddStudentCommand extends StudentCommand {
+
+ public AddStudentCommand(StudentClass student) {
+ super(student);
+ }
+
+ // Implement the generic execute method to handle the List type
+ @Override
+ public void execute(ItemList list) {
+ if (list instanceof StudentList) {
+ ((StudentList) list).addStudent(student);
+ } else {
+ throw new IllegalArgumentException("Invalid list type. Expected StudentList.");
+ }
+ }
+
+ @Override
+ public boolean isExit() {
+ return super.isExit();
+ }
+}
diff --git a/src/main/java/tutorlink/commandpackage/studentcommand/DeleteStudentCommand.java b/src/main/java/tutorlink/commandpackage/studentcommand/DeleteStudentCommand.java
new file mode 100644
index 0000000000..d0e754124d
--- /dev/null
+++ b/src/main/java/tutorlink/commandpackage/studentcommand/DeleteStudentCommand.java
@@ -0,0 +1,23 @@
+package tutorlink.commandpackage.studentcommand;
+
+import tutorlink.listpackage.ItemList;
+import tutorlink.listpackage.StudentList;
+import tutorlink.studentpackage.StudentClass;
+
+
+public class DeleteStudentCommand extends StudentCommand {
+
+ public DeleteStudentCommand(StudentClass student) {
+ super(student);
+ }
+
+ // Implement the generic execute method to handle the List type
+ @Override
+ public void execute(ItemList list) {
+ if (list instanceof StudentList) {
+ ((StudentList) list).deleteStudent(student);
+ } else {
+ throw new IllegalArgumentException("Invalid list type. Expected StudentList.");
+ }
+ }
+}
diff --git a/src/main/java/tutorlink/commandpackage/studentcommand/StudentCommand.java b/src/main/java/tutorlink/commandpackage/studentcommand/StudentCommand.java
new file mode 100644
index 0000000000..6de1b3ca86
--- /dev/null
+++ b/src/main/java/tutorlink/commandpackage/studentcommand/StudentCommand.java
@@ -0,0 +1,17 @@
+package tutorlink.commandpackage.studentcommand;
+
+import tutorlink.commandpackage.Command;
+import tutorlink.studentpackage.StudentClass;
+
+public abstract class StudentCommand extends Command {
+ protected StudentClass student;
+
+ public StudentCommand(StudentClass student) {
+ this.student = student;
+ }
+
+ @Override
+ public boolean isExit() {
+ return false;
+ }
+}
diff --git a/src/main/java/tutorlink/coursepackage/Course.java b/src/main/java/tutorlink/coursepackage/Course.java
new file mode 100644
index 0000000000..abfbcc14aa
--- /dev/null
+++ b/src/main/java/tutorlink/coursepackage/Course.java
@@ -0,0 +1,29 @@
+package tutorlink.coursepackage;
+
+import tutorlink.listpackage.AssignmentList;
+import tutorlink.listpackage.AttendanceList;
+import tutorlink.assignmentpackage.Assignment;
+
+public class Course {
+ private String courseID;
+ private int courseMCs;
+ private LetterGrade grade;
+ private AssignmentList assignments;
+ private AttendanceList attendances;
+
+
+ public Course(String courseID, int courseMCs) {
+ this.courseID = courseID;
+ this.courseMCs = courseMCs;
+ assignments = new AssignmentList();
+ attendances = new AttendanceList();
+ }
+
+ public void addAssignment(Assignment assignment) {
+ assignments.addAssignment(assignment);
+ }
+
+ public void deleteAssignment(Assignment assignment) {
+ assignments.deleteAssignment(assignment);
+ }
+}
diff --git a/src/main/java/tutorlink/coursepackage/LetterGrade.java b/src/main/java/tutorlink/coursepackage/LetterGrade.java
new file mode 100644
index 0000000000..979c1035cf
--- /dev/null
+++ b/src/main/java/tutorlink/coursepackage/LetterGrade.java
@@ -0,0 +1,29 @@
+package tutorlink.coursepackage;
+
+public enum LetterGrade {
+ A_plus,A,A_minus,
+ B_plus,B,B_minus,
+ C_plus,C,
+ D_plus,D,
+ F,
+ IP; //In-Progress, no grade available
+
+ public double getGPA(LetterGrade grade) {
+ double result = 0.0;
+ switch (grade) {
+ case A_plus -> result = 5.0;
+ case A -> result = 5.0;
+ case A_minus -> result = 4.5;
+ case B_plus -> result = 4.0;
+ case B -> result = 3.5;
+ case B_minus -> result = 3.0;
+ case C_plus -> result = 2.5;
+ case C -> result = 2.0;
+ case D_plus -> result = 1.5;
+ case D -> result = 1.0;
+ case F -> result = 0.0;
+ default -> result = -1.0; //IP case will be -1.0
+ }
+ return result;
+ }
+}
diff --git a/src/main/java/tutorlink/listpackage/AssignmentList.java b/src/main/java/tutorlink/listpackage/AssignmentList.java
new file mode 100644
index 0000000000..1dad1664f4
--- /dev/null
+++ b/src/main/java/tutorlink/listpackage/AssignmentList.java
@@ -0,0 +1,27 @@
+package tutorlink.listpackage;
+
+import tutorlink.assignmentpackage.Assignment;
+
+import java.util.ArrayList;
+
+public class AssignmentList extends ItemList {
+ private int numberOfAssignments;
+ private ArrayList assignmentArrayList;
+
+ public AssignmentList() {
+ this.numberOfAssignments = 0;
+ this.assignmentArrayList = new ArrayList<>();
+ }
+
+ public void deleteAssignment(Assignment assignment){
+ assignmentArrayList.remove(assignment);
+ }
+
+ public void addAssignment(Assignment assignment){
+ assignmentArrayList.add(assignment);
+ }
+
+ public ArrayList getAssignmentArrayList() {
+ return assignmentArrayList;
+ }
+}
diff --git a/src/main/java/tutorlink/listpackage/AttendanceList.java b/src/main/java/tutorlink/listpackage/AttendanceList.java
new file mode 100644
index 0000000000..e641007fdd
--- /dev/null
+++ b/src/main/java/tutorlink/listpackage/AttendanceList.java
@@ -0,0 +1,23 @@
+package tutorlink.listpackage;
+
+import tutorlink.attendancepackage.Attendance;
+
+import java.util.ArrayList;
+
+public class AttendanceList extends ItemList {
+ private ArrayList attendanceArrayList;
+ private int numberOfAttendance;
+
+ public AttendanceList() {
+ this.numberOfAttendance = 0;
+ this.attendanceArrayList = new ArrayList<>();
+ }
+
+ public void markAttendance(Attendance attendance){
+ this.attendanceArrayList.add(attendance);
+ }
+
+ public void unmarkAttendance(Attendance attendance){
+ this.attendanceArrayList.remove(attendance);
+ }
+}
diff --git a/src/main/java/tutorlink/listpackage/CourseList.java b/src/main/java/tutorlink/listpackage/CourseList.java
new file mode 100644
index 0000000000..3ce9b38ace
--- /dev/null
+++ b/src/main/java/tutorlink/listpackage/CourseList.java
@@ -0,0 +1,24 @@
+package tutorlink.listpackage;
+
+
+import tutorlink.coursepackage.Course;
+
+import java.util.ArrayList;
+
+public class CourseList extends ItemList {
+ private int numberOfCourses;
+ private ArrayList courseArrayList;
+
+ public CourseList() {
+ this.numberOfCourses = 0;
+ this.courseArrayList = new ArrayList<>();
+ }
+
+ public void dropCourse(Course course) {
+ this.courseArrayList.remove(course);
+ }
+
+ public void addCourse(Course course) {
+ this.courseArrayList.add(course);
+ }
+}
diff --git a/src/main/java/tutorlink/listpackage/ItemList.java b/src/main/java/tutorlink/listpackage/ItemList.java
new file mode 100644
index 0000000000..f07e3fbcf4
--- /dev/null
+++ b/src/main/java/tutorlink/listpackage/ItemList.java
@@ -0,0 +1,4 @@
+package tutorlink.listpackage;
+
+public class ItemList {
+}
diff --git a/src/main/java/tutorlink/listpackage/StudentList.java b/src/main/java/tutorlink/listpackage/StudentList.java
new file mode 100644
index 0000000000..cf730fd37a
--- /dev/null
+++ b/src/main/java/tutorlink/listpackage/StudentList.java
@@ -0,0 +1,29 @@
+package tutorlink.listpackage;
+
+import tutorlink.studentpackage.StudentClass;
+
+import java.util.ArrayList;
+
+public class StudentList extends ItemList {
+ private ArrayList studentArrayList;
+
+ public StudentList() {
+ this.studentArrayList = new ArrayList<>();
+ }
+
+ public void deleteStudent(StudentClass student) {
+ studentArrayList.remove(student);
+ }
+
+ public void addStudent(StudentClass student) {
+ studentArrayList.add(student);
+ }
+
+ public int getNumberOfStudents() {
+ return studentArrayList.size();
+ }
+
+ public ArrayList getStudentArrayList() {
+ return studentArrayList;
+ }
+}
diff --git a/src/main/java/tutorlink/parserpackage/Parser.java b/src/main/java/tutorlink/parserpackage/Parser.java
new file mode 100644
index 0000000000..a7a0bf50cf
--- /dev/null
+++ b/src/main/java/tutorlink/parserpackage/Parser.java
@@ -0,0 +1,59 @@
+package tutorlink.parserpackage;
+
+import tutorlink.commandpackage.studentcommand.AddStudentCommand;
+import tutorlink.commandpackage.studentcommand.DeleteStudentCommand;
+import tutorlink.listpackage.StudentList;
+import tutorlink.studentpackage.StudentClass;
+import exception.StudentNotFoundException;
+
+public class Parser {
+
+ /**
+ * Finds a student in the provided student list by matriculation number.
+ *
+ * @param matricNumber the matriculation number of the student to find
+ * @param studentList the list of students to search in
+ * @return the Student object with the given matriculation number
+ * @throws StudentNotFoundException if no student with the given matriculation number is found
+ */
+ private StudentClass findStudent(String matricNumber, StudentList studentList) throws StudentNotFoundException {
+ for (StudentClass a : studentList.getStudentArrayList()) {
+ if (a.getMatricNumber().equals(matricNumber)) {
+ return a;
+ }
+ }
+ throw new StudentNotFoundException();
+ }
+
+ /**
+ * Creates an AddStudentCommand for adding a new student.
+ *
+ * @param matricNumber the matriculation number of the new student
+ * @param gpa the gpa of the new student
+ * @return an AddStudentCommand object to add the new student
+ */
+ public AddStudentCommand addStudentCommand(String matricNumber, double gpa) {
+ StudentClass newStudent = new StudentClass(matricNumber, gpa);
+ AddStudentCommand addStudentCommand = new AddStudentCommand(newStudent);
+ return addStudentCommand;
+ }
+
+ /**
+ * Creates a DeleteStudentCommand for deleting a student with the given matriculation number.
+ *
+ * @param matricNumber the matriculation number of the student to delete
+ * @param studentList the list of students to search for the student
+ * @return a DeleteStudentCommand object to delete the student
+ */
+ public DeleteStudentCommand deleteStudentCommand(String matricNumber, StudentList studentList) {
+ try {
+ StudentClass selectedStudent = findStudent(matricNumber, studentList);
+ DeleteStudentCommand deleteStudentCommand = new DeleteStudentCommand(selectedStudent);
+ return deleteStudentCommand;
+ } catch (StudentNotFoundException e) {
+ System.out.println("Student Not Found.");
+ }
+ return null; // Return null if the student is not found
+ }
+
+}
diff --git a/src/main/java/tutorlink/studentpackage/StudentClass.java b/src/main/java/tutorlink/studentpackage/StudentClass.java
new file mode 100644
index 0000000000..fa23bb3128
--- /dev/null
+++ b/src/main/java/tutorlink/studentpackage/StudentClass.java
@@ -0,0 +1,28 @@
+package tutorlink.studentpackage;
+
+public class StudentClass {
+ private String matricNumber;
+ private double gpa;
+
+ public StudentClass(String matricNumber) {
+ this.matricNumber = matricNumber;
+ this.gpa = 5.0; // Default gpa value if not given
+ }
+
+ public StudentClass(String matricNumber, double gpa) {
+ this.matricNumber = matricNumber;
+ this.gpa = gpa;
+ }
+
+ public String getMatricNumber() {
+ return matricNumber;
+ }
+
+ public double getGpa() {
+ return gpa;
+ }
+
+ public void setGPA(double gpa) {
+ this.gpa = gpa;
+ }
+}
diff --git a/src/test/java/TutorLink/command/assignmentcommand/AddAssignmentCommandTest.java b/src/test/java/TutorLink/command/assignmentcommand/AddAssignmentCommandTest.java
new file mode 100644
index 0000000000..91f72fd45d
--- /dev/null
+++ b/src/test/java/TutorLink/command/assignmentcommand/AddAssignmentCommandTest.java
@@ -0,0 +1,24 @@
+package tutorlink.command.assignmentcommand;
+
+import org.junit.jupiter.api.Test;
+import tutorlink.assignmentpackage.Assignment;
+import tutorlink.commandpackage.assignmentcommand.AddAssignmentCommand;
+import tutorlink.listpackage.AssignmentList;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+
+class AddAssignmentCommandTest {
+ @Test
+ void execute_addOne_expectOne() {
+ // setup
+ AssignmentList assignmentList = new AssignmentList();
+ Assignment assignment1 = new Assignment("Test_1",100,100,0.2);
+ AddAssignmentCommand addAssignmentCommand = new AddAssignmentCommand(assignment1);
+ // execute
+ addAssignmentCommand.execute(assignmentList);
+ assertFalse(assignmentList.getAssignmentArrayList().isEmpty());
+ assertEquals(1, assignmentList.getAssignmentArrayList().size());
+ assertEquals(assignment1, assignmentList.getAssignmentArrayList().get(0));
+ }
+}
diff --git a/src/test/java/listpackage/AssignmentListTest.java b/src/test/java/listpackage/AssignmentListTest.java
new file mode 100644
index 0000000000..706208ced2
--- /dev/null
+++ b/src/test/java/listpackage/AssignmentListTest.java
@@ -0,0 +1,63 @@
+package listpackage;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import tutorlink.assignmentpackage.Assignment;
+import tutorlink.listpackage.AssignmentList;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class AssignmentListTest {
+
+ private AssignmentList assignmentList;
+ private Assignment assignment1;
+ private Assignment assignment2;
+
+ @BeforeEach
+ void setUp() {
+ assignmentList = new AssignmentList();
+ assignment1 = new Assignment("Assignment 1",1,1,1);
+ assignment2 = new Assignment("Assignment 2",1,2,1);
+ }
+
+ @Test
+ void testAddAssignment() {
+ // Initially, the list should be empty
+ assertTrue(assignmentList.getAssignmentArrayList().isEmpty());
+
+ // Add an assignment
+ assignmentList.addAssignment(assignment1);
+
+ // Check that the assignment was added
+ assertFalse(assignmentList.getAssignmentArrayList().isEmpty());
+ assertEquals(1, assignmentList.getAssignmentArrayList().size());
+ assertEquals(assignment1, assignmentList.getAssignmentArrayList().get(0));
+ }
+
+ @Test
+ void testDeleteAssignment() {
+ // Add an assignment first
+ assignmentList.addAssignment(assignment1);
+ assertEquals(1, assignmentList.getAssignmentArrayList().size());
+
+ // Now delete the assignment
+ assignmentList.deleteAssignment(assignment1);
+
+ // Check that the assignment was removed
+ assertEquals(0, assignmentList.getAssignmentArrayList().size());
+ }
+
+ @Test
+ void testDeleteNonExistentAssignment() {
+ // Initially, the list should be empty
+ assertTrue(assignmentList.getAssignmentArrayList().isEmpty());
+
+ // Attempt to delete a non-existent assignment
+ assignmentList.deleteAssignment(assignment1);
+
+ // The size should still be zero
+ assertEquals(0, assignmentList.getAssignmentArrayList().size());
+ }
+}
diff --git a/src/test/java/listpackage/AttendanceListTest.java b/src/test/java/listpackage/AttendanceListTest.java
new file mode 100644
index 0000000000..05d07db214
--- /dev/null
+++ b/src/test/java/listpackage/AttendanceListTest.java
@@ -0,0 +1,4 @@
+package listpackage;
+
+public class AttendanceListTest {
+}
diff --git a/src/test/java/listpackage/CourseListTest.java b/src/test/java/listpackage/CourseListTest.java
new file mode 100644
index 0000000000..50d34ffe99
--- /dev/null
+++ b/src/test/java/listpackage/CourseListTest.java
@@ -0,0 +1,4 @@
+package listpackage;
+
+public class CourseListTest {
+}
diff --git a/src/test/java/listpackage/StudentListTest.java b/src/test/java/listpackage/StudentListTest.java
new file mode 100644
index 0000000000..d5fc97fc62
--- /dev/null
+++ b/src/test/java/listpackage/StudentListTest.java
@@ -0,0 +1,41 @@
+package tutorlink.list;
+import tutorlink.listpackage.StudentList;
+import tutorlink.commandpackage.studentcommand.AddStudentCommand;
+import tutorlink.commandpackage.studentcommand.DeleteStudentCommand;
+
+import org.junit.jupiter.api.Test;
+import tutorlink.parserpackage.Parser;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class StudentListTest {
+
+ @Test
+ public void addStudentCommand_nonEmptyMatricNumberAndGPA_success() throws Exception {
+ Parser parser = new Parser();
+ StudentList studentList = new StudentList();
+ assertEquals(0, studentList.getNumberOfStudents());
+ AddStudentCommand addStudentCommand = parser.addStudentCommand("A0123456X", 5.0);
+
+ addStudentCommand.execute(studentList);
+ assertEquals(1, studentList.getNumberOfStudents());
+ }
+
+ @Test
+ public void deleteStudentCommand_nonEmptyMatricNumberAndGPA_success() throws Exception {
+ Parser parser = new Parser();
+ StudentList studentList = new StudentList();
+
+ assertEquals(0, studentList.getNumberOfStudents());
+ AddStudentCommand addStudentCommand = parser.addStudentCommand("A0123456X", 5.0);
+ addStudentCommand.execute(studentList);
+
+ assertEquals(1, studentList.getNumberOfStudents());
+
+ DeleteStudentCommand deleteStudentCommand = parser.deleteStudentCommand("A0123456X", studentList);
+
+ deleteStudentCommand.execute(studentList);
+ assertEquals(0, studentList.getNumberOfStudents());
+ }
+
+}