This project is based on the AddressBook-Level3 project created by the SE-EDU initiative.
Refer to the guide Setting up and getting started.
The Architecture Diagram given above explains the high-level design of the App.
Given below is a quick overview of main components and how they interact with each other.
Main components of the architecture
Main (consisting of classes Main and MainApp) is in charge of the app launch and shut down.
The bulk of the app's work is done by the following four components:
UI: The UI of the App.Logic: The command executor.Model: Holds the data of the App in memory.Storage: Reads data from, and writes data to, the hard disk.Commons represents a collection of classes used by multiple other components.
How the architecture components interact with each other
The Sequence Diagram below shows how the components interact with each other for the scenario where the user issues the command delete 1.
Each of the four main components (also shown in the diagram above),
interface with the same name as the Component.{Component Name}Manager class (which follows the corresponding API interface mentioned in the previous point.For example, the Logic component defines its API in the Logic.java interface and implements its functionality using the LogicManager.java class which follows the Logic interface. Other components interact with a given component through its interface rather than the concrete class (reason: to prevent outside component's being coupled to the implementation of a component), as illustrated in the (partial) class diagram below.
The sections below give more details of each component.
The API of this component is specified in Ui.java
The UI consists of a MainWindow that is made up of parts e.g.CommandBox, ResultDisplay, PersonListPanel, StatusBarFooter etc. All these, including the MainWindow, inherit from the abstract UiPart class which captures the commonalities between classes that represent parts of the visible GUI.
The UI component uses the JavaFx UI framework. The layout of these UI parts are defined in matching .fxml files that are in the src/main/resources/view folder. For example, the layout of the MainWindow is specified in MainWindow.fxml
The UI component,
Logic component.Model data so that the UI can be updated with the modified data.Logic component, because the UI relies on the Logic to execute commands.Model component, as it displays Person object residing in the Model.API : Logic.java
Here's a (partial) class diagram of the Logic component:
The sequence diagram below illustrates the interactions within the Logic component, taking execute("delete 1") API call as an example.
Note: The lifeline for DeleteCommandParser should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram.
How the Logic component works:
Logic is called upon to execute a command, it is passed to an AddressBookParser object which in turn creates a parser that matches the command (e.g., DeleteCommandParser) and uses it to parse the command.Command object (more precisely, an object of one of its subclasses e.g., DeleteCommand) which is executed by the LogicManager.Model when it is executed (e.g. to delete a person).Model) to achieve.CommandResult object which is returned back from Logic.Here are the other classes in Logic (omitted from the class diagram above) that are used for parsing a user
How the parsing works:
AddressBookParser class creates an XYZCommandParser (XYZ is a placeholder for the specific command name e.g., AddCommandParser) which uses the other classes shown above to parse the user command and create a XYZCommand object (e.g., AddCommand) which the AddressBookParser returns back as a Command object.XYZCommandParser classes (e.g., AddCommandParser, DeleteCommandParser, ...) inherit from the Parser interface so that they can be treated similarly where possible e.g, during testing.API : Model.java
The Model component,
Person objects (which are contained in a UniquePersonList object).Person objects (e.g., results of a search query) as a separate filtered list which is exposed to outsiders as an unmodifiable ObservableList<Person> that can be 'observed' e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change.UserPref object that represents the user’s preferences. This is exposed to the outside as a ReadOnlyUserPref objects.Model represents data entities of the domain, they should make sense on their own without depending on other components)API : Storage.java
The Storage component,
AddressBookStorage and UserPrefStorage, which means it can be treated as either one (if only the functionality of only one is needed).Model component (because the Storage component's job is to save/retrieve objects that belong to the Model)Classes used by multiple components are in the seedu.address.commons package.
This section describes some noteworthy details on how certain features are implemented.
The add homework feature allows users to assign a homework task to either a specific student or all students. Each homework is identified by an assignment ID.
The sequence diagram below illustrates the interactions within the Logic component for adding homework:
Note: The lifeline for AddHomeworkCommandParser should end at the destroy marker (X), but due to a limitation of PlantUML, the lifeline continues till the end of the diagram.
How the add_hw command works:
add_hw command, LogicManager passes it to AddressBookParser.AddressBookParser creates an AddHomeworkCommandParser to parse the command arguments.AddHomeworkCommandParser validates and parses the NUSNET ID (or the keyword all) and the assignment ID.AddHomeworkCommand object is created and executed.AddHomeworkCommand checks if the homework assignment already exists for the specified student(s).The delete homework feature allows users to remove an existing homework assignment from a specific student or from all students.
The sequence diagram below illustrates the interactions within the Logic component for deleting homework:
Note: The lifeline for DeleteHomeworkCommandParser should end at the destroy marker (X), but due to a limitation of PlantUML, the lifeline continues till the end of the diagram.
How the delete_hw command works:
delete_hw command, LogicManager passes it to AddressBookParser.AddressBookParser creates a DeleteHomeworkCommandParser to parse the command arguments.DeleteHomeworkCommandParser validates and parses the NUSNET ID (or the keyword all) and the assignment ID.DeleteHomeworkCommand object is created and executed.DeleteHomeworkCommand verifies that the homework exists for the specified student(s).The mark homework feature allows users to update the status (e.g., complete, incomplete, late) of a homework assignment for a specific student.
The sequence diagram below illustrates the interactions within the Logic component for marking homework:
Note: The lifeline for MarkHomeworkCommandParser should end at the destroy marker (X), but due to a limitation of PlantUML, the lifeline continues till the end of the diagram.
How the mark_hw command works:
mark_hw command, LogicManager passes it to AddressBookParser.AddressBookParser creates a MarkHomeworkCommandParser to parse the command arguments.MarkHomeworkCommandParser validates and parses the NUSNET ID, assignment ID, and status.MarkHomeworkCommand object is created and executed.MarkHomeworkCommand checks whether the specified homework exists for the student.The mark attendance feature allows users to mark the attendance status (e.g., present, absent, excused) of a single student in a particular week.
The sequence diagram below illustrates the interactions within the Logic component for marking attendance:
Note: The lifeline for MarkAttendanceCommandParser should end at the destroy marker (X), but due to a limitation of PlantUML, the lifeline continues till the end of the diagram.Due to limited space in the diagram, some input parameters(command text, markAttendanceMessage) are not explicitly shown in the diagram.
How the mark_attendance command works:
mark_attendance command, LogicManager passes it to AddressBookParser.AddressBookParser creates a MarkAttendanceCommandParser to parse the command arguments.MarkAttendanceCommandParser validates and parses the NUSNET ID, week number, and attendance status.MarkAttendanceCommand object is created and executed.MarkAttendanceCommand checks whether the specified student exists.The mark all attendance feature allows users to mark the attendance status (e.g., present, absent, excused) of a group of students in a particular week.
The sequence diagram below illustrates the interactions within the Logic component for marking attendance:
Note: The lifeline for MarkAllAttendanceCommandParser should end at the destroy marker (X), but due to a limitation of PlantUML, the lifeline continues till the end of the diagram. Due to limited space in the diagram, some input parameters(command text, markAttendanceMessage) are not explicitly shown in the diagram.
How the mark_all_attendance command works:
mark_all_attendance command, LogicManager passes it to AddressBookParser.AddressBookParser creates a MarkAllAttendanceCommandParser to parse the command arguments.MarkAllAttendanceCommandParser validates and parses the GroupId, week number, and attendance status.MarkAllAttendanceCommand object is created and executed.MarkAllAttendanceCommand checks whether the specified group exists.The add consultation feature allows users to add consultation slots for students.
The sequence diagram below illustrates the interactions within the Logic component for adding a consultation:
The sequence diagram below illustrates the interactions within the Model component for adding a consultation:
How the add_consult command works:
add_consult command, LogicManager passes it to AddressBookParser.AddressBookParser creates an AddConsultationCommandParser to parse the command arguments.AddConsultationCommandParser validates and parses the NUSNET ID, start time and end time.AddConsultationCommand object is created and executed.AddConsultationCommand checks if the student exists in the model, if the consultation overlaps with other existing consultations in the model, and if the student already has a consultation.The delete consultation feature allows users to delete existing consultations from students.
The sequence diagram below illustrates the interactions within the Logic component for deleting a consultation:
The sequence diagram below illustrates the interactions within the Model component for deleting a consultation:
How the delete_consult command works:
delete_consult command, LogicManager passes it to AddressBookParser.AddressBookParser creates a DeleteConsultationCommandParser to parse the command arguments.DeleteConsultationCommandParser validates and parses the NUSNET ID.DeleteConsultationCommand object is created and executed.DeleteConsultationCommand checks if the student exists in the model and if the student has an existing consultation.The list consultation feature allows users to view all scheduled consultations.
The sequence diagram below illustrates the interactions within the Logic component for listing consultations:
The sequence diagram below illustrates the interactions within the Model component for listing consultations:
How the list_consult command works:
list_consult command, LogicManager passes it to AddressBookParser.AddressBookParser creates a ListConsultationCommand object.ListConsultationCommand object is executed.ListConsultationCommand updates the filtered consultation list in the model.The create group feature allows users to create a new group by specifying a unique group ID.
The sequence diagram below illustrates the interactions within the Logic and Model component for creating a group:
Note: The lifeline for CreateGroupCommandParser should end at the destroy marker (X), but due to a limitation of PlantUML, the lifeline continues till the end of the diagram.
How the create_group command works:
create_group command, LogicManager passes it to AddressBookParser.AddressBookParser creates a CreateGroupCommandParser to parse the command arguments.CreateGroupCommandParser validates and parses the group ID.CreateGroupCommand object is created and executed.CreateGroupCommand checks if the group ID already exists.The add student to group feature allows users to assign a student to an existing group by specifying the student's NUSNET ID and the group ID.
The sequence diagram below illustrates the interactions within the Logic and Model component for adding a student to a group:
Note: The lifeline for AddToGroupCommandParser should end at the destroy marker (X), but due to a limitation of PlantUML, the lifeline continues till the end of the diagram.
How the add_to_group command works:
add_to_group command, LogicManager passes it to AddressBookParser.AddressBookParser creates an AddToGroupCommandParser to parse the command arguments.AddToGroupCommandParser validates and parses the NUSNET ID and group ID.AddToGroupCommand object is created and executed.AddToGroupCommand checks if the specified student exist.AddToGroupCommand checks if the specified group already exist.The find student by group feature allows users to search for students belonging to a specific group by specifying the group ID.
The sequence diagram below illustrates the interactions within the Logic and Model component for finding students by group:
Note: The lifeline for FindGroupCommandParser should end at the destroy marker (X), but due to a limitation of PlantUML, the lifeline continues till the end of the diagram.
How the find_group command works:
find_group command, LogicManager passes it to AddressBookParser.AddressBookParser creates a FindGroupCommandParser to parse the command arguments.FindGroupCommandParser validates and parses the group ID.FindGroupCommand object is created and executed.FindGroupCommand retrieves the list of students belonging to the specified group from the Model.Model is updated to only include students from the specified group.Target user profile:
Teaching assistants (TAs) for Computer Science courses at the National University of Singapore (NUS) who
Value proposition: a one-stop solution for TAs to manage their students more easily than a typical mouse/GUI driven app
Priorities: High (must have) - * * *, Medium (nice to have) - * *, Low (unlikely to have) - *
| Priority | As a … | I want to … | So that I can… |
|---|---|---|---|
* * * | TA | add a new student | |
* * * | TA | delete a student | remove entries I no longer need or added by mistake |
* * * | TA | mark students' attendance | record all students' tutorial attendance |
* * * | TA | track each individual student's homework completeness | view their learning progress and identify students who are falling behind |
* * | new user | have a step-by-step usage instruction guide | learn how to use the app |
* * | course coordinator | view all TAs' availability | assign TAs to their preferred tutorial group |
* * | head TA | create subgroups within the course | assign students and TAs to their respective tutorial groups |
* * | head TA | key in students' scores | update students' scores after every exam |
* * | head TA | view overall course feedback from students | gather data to perform course analysis |
* * | TA | search for a specific student | view his/her contact details and progress |
* * | TA | create subgroups within the tutorial group | assign students to their project groups |
* * | TA | add consultation slots | schedule consultations with students |
* * | TA | check students' scores | track students' performance |
* * | TA | view students' feedback | gain insights on my teaching style and method |
* * | TA | update my availability | update my consultation schedule |
* | TA | copy contact information onto my clipboard | save time from manually copying students' contact details |
* | TA | export student list as PDF | print it out for marking attendance |
(For all use cases below, the System is the SocTAssist and the Actor is the user, unless specified otherwise)
Use case: UC01 - Add a student
Actor: TA
MSS
User requests to add a student by specifying required fields: full name, NUSNET ID, email, Telegram handle and optional fields: phone number, group ID.
SoCTAssist validates all fields.
SoCTAssist adds the student into the directory.
SoCTAssist shows the updated student list in the UI table.
Use case ends.
Extensions
2a. One or more required fields are missing.
2a1. SoCTAssist shows error.
Use case ends.
2b. Email format is invalid.
2b1. SoCTAssist shows error.
Use case ends.
2c. Group ID format is invalid.
2c1. SoCTAssist shows error message.
Use case ends.
2d. A student with the same nusnetid already exists.
Use case: UC02 - Edit a student
Actor: TA
MSS
User requests to edit a student by specifying the index and updated fields.
SoCTAssist validates that the student exists.
SoCTAssist updates the student's details.
SoCTAssist shows confirmation message with updated student details.
Use case ends.
Extensions
2a. Student index does not exist.
2a1. SoCTAssist shows error: The person index provided is invalid.
Use case ends.
2b. Any updated field is invalid.
2b1. SoCTAssist shows corresponding validation error. (UC01 Extensions 2b, 2c).
Use case ends.
2c. Try to update group id.
2c1. SoCTAssist shows error and states the correct format.
Use case ends.
Use case: UC03 - Delete a student
Actor: TA
MSS
User requests to list students.
SoCTAssist shows a list of students.
User requests to delete a specific student in the list.
SoCTAssist deletes the student.
SoCTAssist UI updated. Use case ends.
Extensions
1a. The list is empty.
1a1. SoCTAssist shows error.
Use case ends.
3a. Student index does not exist.
Use case ends.
3b. Student index is invalid (not a number or is not positive).
3b1. SoCTAssist shows error.
Use case ends.
Use Case: UC04 - Create Homework
Actor: TA
MSS
User enters a command to create a new homework numbered 1 to 3 for a student using their NUSNET ID.
SoCTAssist locates the student homework record.
SoCTAssist validates the assignment ID.
SoCTAssist creates the new assignment with an initial status of incomplete.
SoCTAssist displays a success message.
Use case ends.
Extensions
2a. Student with the given NUSNET ID does not exist
2a1. SoCTAssist displays an error message.
Use case ends.
3a. Homework ID already exists for this student
3a1. SoCTAssist displays an error message.
Use case ends.
3b. Homework ID is invalid (not between 1–13)
3b1. SoCTAssist displays an error message.
Use case ends.
Use case: UC05 - Mark Homework completion
Actor: TA
MSS
User requests to mark a homework status for a student using their NUSNET ID.
SoCTAssist locates the student homework record.
SoCTAssist verifies the homework ID.
SoCTAssist updates the homework status (complete / incomplete / late).
SoCTAssist shows a confirmation message.
Use case ends.
Extensions
1a. The list is empty.
Use case ends.
2a. The student with the given NUSNET ID does not exist.
2a1. SoCTAssist shows error message: Student not found.
Use case ends.
3a. The given assignment ID is invalid (not between 1-13).
3a1. SoCTAssist shows error message.
Use case ends.
4a. The given status is invalid (not one of complete / incomplete / late).
4a1. SoCTAssist shows error message.
Use case ends.
4b. The student already has a status recorded for this assignment.
4b1. SoCTAssist updates the record with the new status (last write wins).
Use case resumes at step 5.
Use case: UC06 - Delete a homework
Actor: TA
MSS
User requests to delete a homework for a student using their NUSNET ID.
SoCTAssist locates the student homework record.
SoCTAssist verifies the homework ID.
SoCTAssist removes the corresponding homework record from the student’s tracker.
SoCTAssist shows a confirmation message.
Use case ends.
Extensions
1a. The list is empty.
Use case ends.
2a. The student with the given NUSNET ID does not exist.
2a1. SoCTAssist shows error message.
Use case ends.
3a. The given assignment ID is invalid.
3a1. SoCTAssist shows error message.
Use case ends.
4a. The specified homework does not exist for the student.
4a1. SoCTAssist shows error message.
Use case ends.
Use case: UC07 - Add a consultation
Actor: TA
MSS
User requests to add a consultation by specifying student's NUSNET ID, start date & time, and end date & time.
SoCTAssist validates the NUSNET ID, dates, and times.
SoCTAssist creates the consultation booking for the student.
SoCTAssist shows success message with consultation details and displays list of consultations to user.
Use case ends.
Extensions
2a. Student NUSNET ID does not exist in the directory.
2a1. SoCTAssist shows an error message.
Use case ends.
2b. End time is not after start time.
2b1. SoCTAssist shows an error message.
Use case ends.
2c. The new consultation overlaps with an existing one.
2c1. SoCTAssist shows an error message.
Use case ends.
2d. A consultation with identical date and time already exists.
2d1. SoCTAssist shows an error message.
Use case ends.
2d. Student already has an existing consultation.
2d1. SoCTAssist shows an error message.
Use case ends.
4a. The consultation exceeds 3 hours in duration.
4a1. SoCTAssist displays a reminder message.
Use case ends.
4b. The consultation is over or ongoing.
4b1. SoCTAssist displays a reminder message.
Use case ends.
Use case: UC08 - Delete a consultation
Actor: TA
MSS
User requests to delete a consultation by specifying student's NUSNET ID.
SoCTAssist validates the NUSNET ID.
SoCTAssist locates the consultation record that matches the provided details.
SoCTAssist deletes the consultation from the system.
SoCTAssist shows success message confirming the deletion and displays list of consultations to user.
Use case ends.
Extensions
2a. NUSNET ID does not exist in the directory.
2a1. SoCTAssist shows an error message.
Use case ends.
3a. Student with specified NUSNET ID does not have a consultation.
3a1. SoCTAssist shows an error message.
Use case ends.
Use case: UC09 - Mark attendance
Actor: TA
MSS
User requests to mark attendance for a student by specifying student NUSNET ID, week, and attendance status.
SoCTAssist validates that the student exists and the week and status are valid.
SoCTAssist records the attendance for the student.
SoCTAssist shows a confirmation message with details.
Use case ends.
Extensions
2a. Student NUSNET ID does not exist.
2a1. SoCTAssist shows error: Student not found.
Use case ends.
2b. Attendance status is invalid (not Present or Absent or Excused).
2b1. SoCTAssist shows error: Please enter present/absent/excused only.
Use case ends.
Use case: Mark all attendance
Actor: TA
MSS
User requests to mark attendance for a group of student by specifying GroupId, week, and attendance status.
SoCTAssist validates that the group exists and the week and status are valid.
SoCTAssist records the attendance for the student.
SoCTAssist shows a confirmation message with details.
Use case ends.
Extensions
2a. GroupId does not exist.
2a1. SoCTAssist shows error: Group not found.
Use case ends.
2b. Attendance status is invalid (not Present or Absent or Excused).
2b1. SoCTAssist shows error: Please enter present/absent/excused only.
Use case ends.
2c. Week is invalid (input is not between 2 and 13 or is not an integer.").
2c1. SoCTAssist shows error: Invalid Week. Week should be between 2 and 13 and be a positive integer..
Use case ends.
2d. Group does not have students.
2d1. SoCTAssist shows error: No students in the group..
Use case ends.
Use case: UC10 - Create student groups
Actor: TA
MSS
User requests to create a new group with a specified GroupId.
SoCTAssist validates the GroupId.
SoCTAssist creates the group.
SoCTAssist shows confirmation message.
Use case ends.
Extensions
2a. The GroupId is missing.
Use case ends.
2b. The GroupId is invalid.
2c1. SoCTAssist shows error message and indicates the valid format for GroupId.
Use case ends.
2c. The GroupId is a duplicate.
2b1. SoCTAssist shows error message, saying GroupId already exists
Use case ends.
Use case: UC11 - Add student to a group
Actor: TA
MSS
User requests to add a student to an existing group using the student’s NUSNET ID and GroupId.
SoCTAssist verifies the student exists.
SoCTAssist checks whether the group id is the same as the student's existing group.
SoCTAssist checks whether the group exists.
SoCTAssist adds the student to the specified group.
SoCTAssist shows confirmation message.
Use case ends.
Extensions
2a. The student with the NUSNET ID does not exist.
2a1. SoCTAssist shows error message.
Use case ends.
3a. The group id is the same as the student's existing group.
3a1. SoCTAssist shows error message, saying student already in that group.
Use case ends.
4a. The group does not exist.
4a1. SoCTAssist creates the group.
Use case resumes at step 5.
Use case: UC12 - Find students by group
Actor: TA
Guarantees:
MSS
User requests to find students by specifying a GroupId.
SoCTAssist verifies the GroupId is valid.
SoCTAssist checks whether the group exists.
SoCTAssist retrieves the list of students in the specified group.
SoCTAssist displays the list of students in the UI.
Use case ends.
Extensions
2a. The GroupId is invalid.
2a1. SoCTAssist shows error message and indicates the valid format for Group Id.
Use case ends.
3a. The group does not exist.
3a1. SoCTAssist informs the user that no such group exists.
Use case ends.
High Volatility Data (changes very frequently):
Medium Volatility Data (changes occasionally):
Low Volatility Data (rarely changes):
add_student, mark_attendance, delete.Homework terms
Attendance terms
Consultation terms
Ongoing: A consultation is ongoing if it has a start time before the current time and a end time after the current time.
(E.g. if the current time is 20251010 1700, a consultation from 20251010 1600 to 20251010 1800 is ongoing.)
Over: A consultation is over if its end time is before the current time.
(E.g. if the current time is 20251010 1700, a consultation from 20251010 1400 to 20251010 1600 is over.)
Overlap: A consultation overlaps with another consultation if its start time is before the other consultation's end time and its end time is after the other consultation's start time.
(E.g. a consultation from 20251010 1400 to 20251010 1600 overlaps with a consultation from 20251010 1559 to 20251010 1759 but does not overlap with a consultation from 20251010 1600 to 20251010 1800.)
This section provides step-by-step, comprehensive instructions for performing manual testing of the application. These steps ensure that testers can validate the app’s functionality, usability, and reliability without the need for automated test tools.
Note: These instructions serve as a foundation for manual testing. Testers are strongly encouraged to perform exploratory testing beyond the described cases to uncover edge cases and unexpected behaviors.
Download and Setup:
soctassist.jar file of the application.soctassist.jar file into a new, empty folder to avoid interference from previous data files.Launch Application:
soctassist.jar file to start the application.java -jar soctassist.jarChange and Save Window State:
Re-launch Application:
soctassist.jar file again.Preparation:
list command to ensure that multiple persons are visible in the list.Valid Deletion Command:
delete 1Command: delete 1
Expected Result:
Invalid Deletion Commands:
Try the following commands:
delete 0delete (no index)delete x (where x is greater than the list size)Expected Result:
Add a few entries (new students).
Close and reopen the application.
Expected Result:
Test all supported commands (e.g., add, edit, list, help) with correct and incorrect parameters.
Expected Result:
Trigger various input errors intentionally.
Expected Result:
Add homework to a single student
E1234567.add_hw i/E1234567 a/1Added assignment 1 for <STUDENT_NAME> (default incomplete).
Add homework to all students
add_hw i/all a/2Added assignment 2 for all students (default incomplete).
Add homework (Student not found)
add_hw i/E0000000 a/3Student with NUSNET ID E0000000 does not exist.
Add homework (Missing parameters)
add_hw a/1Invalid command format! <With the rest of helping information>
Add homework (Invalid homework ID: out of range)
add_hw i/E1234567 a/100Homework id must be between 1 and 13.
Add homework (Duplicate prefixes)
add_hw i/E1234567 a/1Homework 1 already exists for <STUDNET_NAME>.
Summary of Expected Results
| Test Case | Command | Expected Outcome |
|---|---|---|
| 1 | add_hw i/E1234567 a/1 | ✅ Homework 1 added to student E1234567 |
| 2 | add_hw i/all a/2 | ✅ Homework 2 added to all students |
| 3 | add_hw i/E0000000 a/3 | ❌ Student not found |
| 4 | add_hw a/4 | ❌ Missing NUSNET ID |
| 5 | add_hw i/E1234567 a/14 | ❌ Homework ID out of range |
| 6 | add_hw i/E1234567 i/E7654321 a/1 | ❌ Duplicate prefixes |
Delete homework from a single student
E1234567, and that the student already has homework 1 assigned.delete_hw i/E1234567 a/1Deleted homework 1 for <STUDENT_NAME>.
Delete homework from all students
delete_hw i/all a/2Deleted homework 2 for all students.
Delete homework (Student not found)
E0000000 in the system.delete_hw i/E0000000 a/1Invalid NUSNET ID format.
Delete homework (Missing parameters)
delete_hw a/1Invalid command format! <With the rest of helping information>
Delete homework (Invalid homework ID: out of range)
delete_hw i/E1234567 a/100Homework id must be between 1 and 13.
Delete homework (Homework not found)
E1234567 does not have homework 3 assigned.delete_hw i/E1234567 a/3Homework 3 not found for Alex Yeoh.
Delete homework (Duplicate prefixes)
delete_hw i/E1234567 i/E7654321 a/1Invalid command format! <With the rest of helping information>
Summary of Expected Results
| Test Case | Command | Expected Outcome |
|---|---|---|
| 1 | delete_hw i/E1234567 a/1 | ✅ Homework 1 deleted from student E1234567 |
| 2 | delete_hw i/all a/2 | ✅ Homework 2 deleted from all students |
| 3 | delete_hw i/E0000000 a/1 | ❌ Student not found |
| 4 | delete_hw a/1 | ❌ Missing NUSNET ID |
| 5 | delete_hw i/E1234567 a/100 | ❌ Homework ID out of range |
| 6 | delete_hw i/E1234567 a/3 | ❌ Homework does not exist |
| 7 | delete_hw i/E1234567 i/E7654321 a/1 | ❌ Duplicate prefixes |
Mark homework as completed for a single student
E1234567, and that the student has homework 1 assigned.mark_hw i/E1234567 a/1 status/completeAssignment 1 for <STUDENT_NAME> marked complete.
- Homework **1** is now marked as **completed** in the student’s homework tracker.
- The command box is cleared and ready for the next input.
Mark homework as incomplete for a single student
E1234567 is currently marked as completed.mark_hw i/E1234567 a/1 status/incompleteAssignment 1 for <STUDENT_NAME> marked incomplete.
Mark homework as late for a single student
E1234567.mark_hw i/E1234567 a/2 status/lateAssignment 1 for <STUDENT_NAME> marked late.
Mark homework (Student not found)
mark_hw i/E0000000 a/1 status/completeStudent not found
Mark homework (Homework not assigned)
E1234567 does not have homework 3 assigned.mark_hw i/E1234567 a/3 status/completeHomework 3 does not exist for <STUDENT_NAME>. Add it first using 'add_hw'.
Mark homework (Invalid status)
mark_hw i/E1234567 a/1 status/doneStatus must be one of: complete, incomplete, late.
Mark homework (Missing parameters)
mark_hw i/E1234567 a/1Invalid command format! <With the rest of helping information>
Mark homework (Duplicate prefixes)
mark_hw i/E1234567 i/E7654321 a/1 status/completeMultiple values specified for the following single-valued field(s): i/
Summary of Expected Results
| Test Case | Command | Expected Outcome |
|---|---|---|
| 1 | mark_hw i/E1234567 a/1 status/completed | ✅ Homework 1 marked completed |
| 2 | mark_hw i/E1234567 a/1 status/incomplete | ✅ Homework 1 marked incomplete |
| 3 | mark_hw i/E1234567 a/2 status/late | ✅ Homework 2 marked late |
| 4 | mark_hw i/E0000000 a/1 status/completed | ❌ Invalid NUSNET ID |
| 5 | mark_hw i/E1234567 a/3 status/completed | ❌ Homework does not exist |
| 6 | mark_hw i/E1234567 a/1 status/done | ❌ Invalid status |
| 7 | mark_hw i/E1234567 a/1 | ❌ Missing status parameter |
| 8 | mark_hw i/E1234567 i/E7654321 a/1 status/completed | ❌ Duplicate prefixes |
Mark attendance for a single student
E1234567.mark_attendance i/E1234567 w/2 status/presentMark attendance (Student not found)
E0000000 in the system.mark_attendance i/E0000000 w/2 status/presentMark attendance (Invalid week)
E1234567.mark_attendance i/E1234567 w/20 status/presentMark attendance (Invalid status)
E1234567.mark_attendance i/E1234567 w/2 status/lateMark attendance for all students in one group
mark_all_attendance g/T01 w/2 status/absentMark all attendance (Group not found)
mark_all_attendance g/T02 w/2 status/presentMark all attendance (Invalid week)
mark_all_attendance g/T01 w/20 status/presentMark all attendance (Invalid status)
mark_all_attendance g/T01 w/2 status/lateMark all attendance (Group has no students)
mark_all_attendance g/T03 w/2 status/presentAdd a consultation for a student
E1234567 that has no consultation.add_consult i/E1234567 from/20251010 1400 to/20251010 1500Add a consultation (Student not found)
E0000000 in the system.add_consult i/E0000000 from/20251010 1400 to/20251010 1500Add a consultation (End time before start time)
E1234568.add_consult i/E1234568 from/20251010 1500 to/20251010 1400Add a consultation (Overlapping consultation)
20251010 1400 to 20251010 1500. Ensure that there is a another student in the system with NUSNET ID E1234569 without consultation.add_consult i/E1234569 from/20251010 1430 to/20251010 1530Add a consultation (Incorrect date/time format)
E1234567.add_consult i/E1234567 from/2025-10-10 14:00 to/2025-10-10 15:00Add a consultation (Invalid date)
E1234567.add_consult i/E1234567 from/20251310 1400 to/20251310 1500Delete a consultation for a student
E1234567, and that the student has a consultation scheduled.delete_consult i/E1234567Delete a consultation (Student not found)
E0000000 in the system.delete_consult i/E0000000Delete a consultation (No consultation found)
E1234568, and that the student does not have any consultation scheduled.delete_consult i/E1234568Create a new group
T01 does not exist.create_group g/T01Create group (Group already exists)
T01 already exists in the system.create_group g/T01Add a student to an existing group
E1234567.add_to_group i/E1234567 g/T01Add student to group (Student not found)
E0000000 in the system, and that group T01 exists.add_to_group i/E0000000 g/T01Add student to group (Group already contains the student)
E1234567 that is in group T01.add_to_group i/E1234567 g/T01T01 exists and has students assigned to it.find_group g/T01T01 is displayed.This section outlines potential future enhancements for the application that could improve its functionality, usability, or performance. These enhancements are not part of the current scope but may be considered for future development. Team size: 5
create_group command: Since group creation is now integrated into the add_student and add_to_group command, the standalone create_group command can be removed to streamline the command set and reduce redundancy.mark_attendance and mark_all_attendance command with attendance status unmark: Introduce an unmark status option to allow TAs to easily revert a student's attendance for a specific week if they accidentally marked them as present, absent, or excused. For example, if they accidentally marked a student as present in week 5, they can now use mark_attendance i/E1234567 w/5 status/unmark to clear the attendance for week 5 and the icon will turn grey.add_consult commands by allowing one student to book multiple consultation slot: Allow students to book multiple consultation slots instead of being limited to one. This would accommodate students with varying schedules and needs.add_consult commands by allowing multiple student to book the same consultation slot: Allow multiple students to book the same consultation slot, enabling group consultations.delete_hw i/all a/<hw id> commands by adding confirmation prompt: Before deleting a homework assignment for all students, prompt the user for confirmation to prevent accidental deletions. For example, after entering the delete command, the system could ask "Are you sure you want to delete homework for all student (yes/no)".add_student to as, mark_attendance to ma, mark_all_attendance to maa and delete_hw to dh.add_to_group command by allowing adding one student into multiple groups: For example, a TA can teach both CS2030S and CS2040S, and the same student can be added to both groups.