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 reaches 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).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 command:
 
  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, Task, Session, GradedTest and Consultation objects (which are contained in a UniquePersonList, TaskList, SessionList, GradedTestList and ConsultationList object respectively. The XYZ here is used as a placeholder to denote the Components that handle Person, Session and Consultation).Person, Task, Session, GradedTest and Consultation objects (e.g., results of a search query) as separate filtered lists which are exposed to outsiders as unmodifiable ObservableList<XYZ> 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 object.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,
XYZ is a placeholder that denotes ConsultationList, AddressBook and SessionList)AddressBookStorage, ConsultationListStorage, GradedTestListStorage, SessionListStorage, TaskListStorage 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.addressbook.commons package.
This section describes some noteworthy details on how certain features are implemented.
The Session component consists of the following set of features: Create Session
The Session Class encompasses several important attributes:
SessionNumber: This unique identifier helps distinguish one session from another. It is an integral part of the Session class and is a primary key when searching for or referencing sessions within the system.
StudentSet: An essential component of every session is the list of students participating. The StudentSet class keeps track of the students present in a particular session. This class allows for efficient management of attendance records and plays a vital role in generating attendance reports.
SessionRemark: Sometimes, additional information about a session is necessary, such as special instructions, topics covered, or any other relevant remarks. The SessionRemark field offers the flexibility to include such notes.
The Session class also provides a set of getter methods that enable access to these attributes. For instance, you can retrieve the session number, list of students, or session remarks using these methods.
Below is a class diagram describing the implementation of Session and its respective fields.
Aspect: How the students are added to a session upon initialisation:
Alternative 1 (current choice): The CreateSession feature takes in arguments of varying number of student names.
Alternative 2: An alternative design could involve creating two separate constructor methods within the CreateSession class. One constructor would be responsible for adding a student to an existing StudentSet, and the other would take an entire StudentSet object as an argument.
By opting for the current choice (Alternative 1), the implementation remains straightforward and user-friendly, allowing for versatile usage scenarios. It ensures that users can efficiently create sessions and add students to them without unnecessary constraints or complications.
Key Takeaway: The chosen approach in the implementation of the CreateSession feature prioritises flexibility and ease of use for users, providing a more intuitive experience when managing class sessions and student attendance.
The Task component consists of the following set of features: Add Task, Delete Task and Update Progress.
The Task Class is made up of a TaskName, TaskDescription, date, TaskPriority, TaskProgress, and a set of getter methods that corresponds to these fields.
Below is a class diagram describing the implementation of Task and its respective fields.
Aspect: How the status of a task is implemented:
Alternative 1 (current choice): TaskProgress Enum for Task Progress. Progress includes not_started, pending, done.
Alternative 2: isDone Boolean for Task Completion.
The Assignment component consists of the following set of features: View Assignments, Edit Grade, Delete Grade, Edit Comment and Delete Comment.
The Assignment Class is made up of an assignmentName, grade, comment, and a set of getter methods that corresponds to most of these fields.
Below is a class diagram describing the implementation of Assignment and its respective fields.
Aspect: How an assignment in being assigned to a person:
Alternative 1 (current choice): AssignmentMap is a field in Person that contains Assignment instances which are assigned to that person.
Alternative 2: Create a PersonList field in every Assignment, which contains Person instances.
PersonList in every Assignment instance.Alternative 3: Create a PersonList field in every Assignment, and an AssignmentMap field in every Person.
The GradedTest component is responsible for tracking and managing graded test scores of individuals. It includes features such as creating and updating graded test scores.
The GradedTest Class is made up of a ReadingAssessment1, ReadingAssessment2, MidTerms, Finals, and
PracticalExam, each representing a different aspect of an individual's graded test scores. GradedTest Class also have a set of getter methods that corresponds to those fields.
Below is a class diagram describing the implementation of GradedTest and its respective fields.
Aspect 1: How to represent the scores of individuals:
Alternative 1 (current choice): Utilizing String for individual graded test score.
-).gt/RA1:<SCORE> | RA2:<SCORE> | MidTerms:<SCORE> | Finals:<SCORE> | PE:<SCORE> is self-explanatory.| causes conflict with the table notation. Hence, more work is needed to get around this issue in markdown.Alternative 2 : Using floats for graded test score.
Aspect 2: What should be the inputs for GradedTest Constructor:
Alternative 1: Using Strings for Graded Test Constructor.
Alternative 2: Using Structured Object for Graded Test Constructors.
ra1, ra2, midterms, finals, pe needs to be present at all times. Need to create 5 objects for 1 graded test.Alternative 3 (current choice): Use both Strings and Structured Objects for Graded Test Calculators.
default values.// Using Structured Object Constructor
GradedTest testFromObjects = new GradedTest(
        new ReadingAssessment1("90"), new ReadingAssessment2("85"),
        new MidTerms("75"), new Finals("80"), new PracticalExam("95")
        );
// Using String Constructor
        GradedTest testFromString = new GradedTest("RA1:90 | RA2:85 | MidTerms:75 | Finals:80 | PE:95");
// Check if both objects are equal
        assertEquals(testFromObjects, testFromString);
Aspect 3: How to store graded test scores for individuals:
Alternative 1(current choice): Edit the graded test field directly on the Person Object.
Alternative 2: Isolate the GradedTest Object as its own.
Aspect 4: How to initialise a graded test instance for users:
Alternative 1: Use the Person methods via the AddCommand and EditCommand class, with add and edit respectively.
Pros:
gt/default.private final and hence immutable, any edits/updates to the person's object will not cause issues to the graded test, as the Person parser logic will handle the new Person object creation.Cons:
For the UML diagram of EditCommand refer to Edit Student Feature. AddCommand is similar to EditCommand.
Alternative 2: Have a separate class EditGradedTest to update graded test scores.
Alternative 3 (current choice): Implement both Alternatives 1 and 2.
Pros:
Cons:
For the UML diagram of EditGradedTest refer to Edit Graded Test.
The Consultation component consists fo the following set of features: Create Consultation, Delete Consultation, Add Student to a Consultation and Remove Student from a Consultation.
The Consultation Class is made up of a LocalDate, LocalTime, a StudentSet and a set of getter methods
that corresponds to these fields.
Below is a class diagram describing the implementation of Consultation and its respective fields.

Consultation Class UML Diagram
Aspect 1: How the students are stored to a consultation:
Alternative 1: Use Set
Alternative 2: Use ArrayList
Alternative 3 (current choice): Use a StudentSet class to keep track of students.
Aspect 2: Adding or removing students to or from a consultation:
Alternative 1 (Current choice): The AddToConsult and RemoveFromConsult features creates a new Consultation object with updated StudentSet
Alternative 2: AddToConsult or RemoveFromConsult directly manipulate the StudentSet in a Consultation object.
This section explains the general implementation of all commands.
The following activity diagram generally shows the overall flow of events that the user will experience.
This section explains the implementation and execution of commands that have their own specific parser.
Below is the sequence diagram for the execution of these commands (denoted by XYZCommand) after user input is sent to LogicManager. The execution of each of the command has been omitted due to their inherent differences and will be covered in their respective command sections below.
Step 1:
The user enters a command with the necessary parameters which is then passed to the LogicManager.
Step 2:
The LogicManager calls AddressBookParser::parseCommand for it to identify the type of command.
Step 3:
The AddressBookParser parses the user input and creates a command parser for that specific command. (denoted by XYZCommandParser)
Step 4:
The command parser is returned to the AddressBookParser which then calls XYZCommandParser::parse to parse the additional parameters.
Step 5:
The XYZCommandParser creates its respective command object (denoted by XYZCommand) and returns it to LogicManager.
Step 6:
The LogicManager calls XYZCommand::execute where the interaction between the command and the model is handled.
Step 7:
The XYZCommand creates a successful CommandResult and returns it to the UI.
This section explains the implementation of the Edit Student feature via the edit command. The EditCommand updates the fields of the existing specified Person. There is 1 compulsory field, which is the Index of the Person to update. However, at least 1 optional field must also be provided. The optional fields are name, phone, telegram handle, tag and graded tests.
Below is the sequence diagram outlining the execution of the EditCommand.
Step 1:
The LogicManager invokes EditCommand::execute, which in turn calls Model::getFilteredPersonList and List<Person>::get to get the specified Person to edit.
Step 2:
The EditCommand::createEditedPerson is invoked to create a new immutable Person object with the updated fields.
Step 3:
The EditCommand will call setPerson in Model to replace the original Person with the new Person object.
Step 4:
The Model will also call setStudent in the respective lists (denoted by List<XYZ>, where XYZ refers to Consultation and Session) to update the relevant lists containing the original Person to the new Person object.
Step 5:
The EditCommand will call its own updateFilteredPersonList method to update the model's filter and display all the students to the user.
Step 6:
The EditCommand then continues its execution as defined by this sequence diagram.
This section explains the implementation of the Delete Student feature via the delete command.
The DeleteCommand causes the specified Person to be deleted from the application. This includes removing the student from any consultations or sessions that the student might be in.
This process is summarised in the activity diagram below
This section explains the implementation of the Create Session feature via the createsession command.
The CreateSessionCommand causes the specified Session to be added to the Session List in the application.
There are two compulsory fields which are the session number of the session, as well as the names of the students involved.
Below is the activity diagram outlining the execution of CreateSessionCommand.
Step 1:
The Avenger(user) enters the command createsession and the command is parsed by the CreateSessionCommandParser.
Step 2: The Session Number parameter is checked for its validity, which will display an error message if invalid. Otherwise, a Session with that session number is temporarily created.
Step 3: The given name(s) of students are then checked if they exist in the Address Book. If there are any invalid names, an error message indicating Student Not Found will be displayed. Otherwise, another check follows.
Step 4: The final check ensures that there are no duplicate sessions being created, before finally adding the created session to the model. If a duplicate session is detected, an error message will be displayed to alert the Avenger that a duplicate session will be created.
Aspect: How to determine if a session is considered a duplicate
Alternative 1 (current choice): Session is considered duplicate if another session with the same session number already exists in the session list.
Alternative 2: Session will be considered duplicate only if all of its fields, session number, students, and session remark are equal.
This section explains the implementation of the Take Attendance feature via the takeattendance command.
The TakeAttendanceCommand causes the specified Person to be added to the specified session.
There are two compulsory fields, which are the session number of the session, as well as the names of the students involved.
This process is shown in the sequence diagram below
Step 1:
The LogicManager invokes TakeAttendanceCommand::execute, which then calls Model::findSessionBySessionNumber to retrieve the specified session to be updated.
Step 2:
The TakeAttendanceCommand then updates the attendance status based on the provided information, utilising the Model::getMatchingStudentName to obtain the corresponding Person object to be updated.
Step 3:
The TakeAttendanceCommand creates an updated Session object using the createUpdatedSession method, which is saved in the Model using Model::setSession.
Step 4:
Finally, the TakeAttendanceCommand triggers the Model to update the filtered session list using the updateFilteredSessionList to display all sessions.
Aspect: How models are modified to store changes
Alternative 1 (current choice): Cause updates to both Session and Person when updating the attendance status of a student to a specified session.
Session or Person involved.StudentSet, only one instance of student is added.Alternative 2: Only update the Session to store the Person
This section explains the implementation of the Add Task feature via the addtask command.
The AddTaskCommand causes the specified Task to be added to the Task List in the application.
There is only one compulsory field which is the name of the task. There are several optional fields such as the description, priority and deadline.
Below is the sequence diagram outlining the execution of AddTaskCommand.
Step 1:
The LogicManager invokes AddTaskCommand::execute, which in turn calls Model::addTask to add the new task into the task list.
Step 2:
The Model will call its own updateFilteredTaskList method to update the model's filter and display all the tasks to the user.
Step 3:
The AddTaskCommand then continues its execution as defined by this sequence diagram.
Aspect: How we execute the AddTaskCommand:
Alternative 1 (current choice): Let the LogicManager pass the model to the command to execute.
AddTaskCommand.Alternative 2: Store the model in the AddTaskCommand itself.
AddTaskCommand might be able to call other methods in the model.This section explains the implementation of the Delete Task feature via the deletetask command. The DeleteTaskCommand causes the specified Task identified using the Index to be deleted from the Task List in the application. There is one compulsory field which is the Index of the Task to delete.
Below is the sequence diagram outlining the execution of DeleteTaskCommand.
Step 1:
The LogicManager invokes DeleteTaskCommand::execute, which in turn calls Model::getFilteredTaskList and List<Task>::get to get the relevant task to be deleted.
Step 2:
The Model then calls deleteTask to remove the specified task from the task list.
Step 3:
The DeleteTaskCommand then continues its execution as defined by this sequence diagram.
Aspect: How we execute the DeleteTaskCommand:
AddTaskCommand, the main considerations for this command is related to the way that the model is stored.This section explains the implementation of the View Tasks feature via the viewtasks command. The ViewTasksCommand displays the Tasks filtered using the predicate specified by the user. There are multiple optional fields that the user can use to filter the list by, such as the progress, priority, name, description and date. However, only one field is able to be applied as a filter at a specific time.
Below is the sequence diagram outlining the execution of ViewTasksCommand.
Step 1:
The LogicManager invokes ViewTasksCommand::execute, which in turn calls Model::updateFilteredTaskList with the given Predicate<Task>.
Step 2:
The ViewTasksCommand then continues its execution as defined by this sequence diagram.
Aspect: How we execute the ViewTasksCommand:
Alternative 1 (current choice): Combine the list and find functionality into one.
Alternative 2: Separate out into 2 separate functions.
This section explains the implementation of the Update Task Progress feature via the updateprogress command. The UpdateTasksProgressCommand updates the progress of the task identified using the Index. There are 2 compulsory fields, which are the Index of the task to update, and the new progress status of the task. The progress must be one of the 3 values: not_started, pending, done.
Below is the sequence diagram outlining the execution of UpdateTasksProgressCommand.
Step 1:
The LogicManager invokes UpdateTaskProgressCommand::execute, which in turn calls Model::getFilteredTaskList and List<Task>::get to get the relevant task to be edited.
Step 2:
The UpdateTaskProgressCommand::createTask is invoked to create a new immutable Task object with the updated progress.
Step 3:
The UpdateTaskProgressCommand will call setTask in Model to replace the existing Task with the new Task object.
Step 4:
The UpdateTaskProgressCommand will call its own updateFilteredTaskList method to update the model's filter and display all the tasks to the user.
Step 5:
The UpdateTaskProgressCommand then continues its execution as defined by this sequence diagram.
Aspect: How we execute the UpdateTasksProgressCommand:
Alternative 1 (current choice): Create a new immutable object of the Task and replace the previous Task with the new Task.
Alternative 2: Mutate the existing Task in the Task list to reflect the new progress.
This section explains the implementation of the View Assignments feature via the viewassignments command. The ViewAssignmentsCommand displays a list of Assignments belonging to a Student identified using the STUDENT_INDEX field. There is one compulsory field which is the Index of the Student to be selected.
Below is the sequence diagram outlining the execution of ViewAssignmentsCommand.
Step 1:
The LogicManager invokes ViewAssignmentsCommand::execute, which in turn calls Model::getFilteredPersonList and List<Person>::get to get the specified Student.
Step 2:
The ViewAssignmentsCommand then continues its execution as defined by this sequence diagram.
Aspect: How we execute the ViewAssignmentsCommand:
Alternative 1 (current choice): Let LogicManager store the Index of the Student whose Assignments are going to be displayed.
Alternative 2: Let LogicManager store the list of Assignments belonging to the Student whose Assignments are going to be displayed.
viewassignments to see the list of Assignments getting updated. This negatively impacts the user experience.This section explains the implementation of the Edit Grade feature via the editgrade command. The EditGradeCommand edits the Grade of an Assignment belonging to a Student identified using the STUDENT_INDEX field. The Assignment is identified using the ASSIGNMENT_NAME field. There are three compulsory fields which are the Index of the Student to be selected, the name of the Assignment and the new Grade of the Assignment.
Below is the sequence diagram outlining the execution of EditGradeCommand.
Step 1:
The LogicManager invokes EditGradeCommand::execute, which in turn calls Model::getFilteredPersonList and List<Person>::get to get the specified Student.
Step 2:
The EditGradeCommand::createGradedPerson is invoked to create a new immutable Person object with the updated Assignment Grade.
Step 3:
The EditGradeCommand will call setPerson in Model to replace the original Person with the new Person object.
Step 4:
The Model will also call setStudent in the respective lists (denoted by List<XYZ>, where XYZ refers to Consultation and Session) to update the relevant lists containing the original Person to the new Person object.
Step 5:
The EditGradeCommand will call its own updateFilteredPersonList method to update the model's filter and display all the students to the user.
Step 6:
The EditGradeCommand then continues its execution as defined by this sequence diagram.
Aspect: How we edit the Grade of a Person object's Assignment:
Alternative 1 (current choice): Create a completely new instance of Person.
Person object to remain immutable.Person found in the Model.Alternative 2: Update the Assignment found in the Person object.
Person object to no longer be immutable, giving rise to potential bugs or complications.This section explains the implementation of the Edit Grade Test feature via the editgradedtest command. The EditGradeTestCommand edits the Scores of a Graded Test belonging to a Student identified using the STUDENT_INDEX field. The Graded Test is identified using the 5 optional graded test fields, namely Reading_Assessment_1, Reading_Assessment_2, MidTerms, Finals and Practical_Exam. At least one of these optional fields must be included after the Student Index of the Student to be selected.
Below is the sequence diagram outlining the execution of EditGradeTestCommand.
Step 1:
The LogicManager invokes EditGradedTestCommand::execute, which in turn calls Model::getFilteredPersonList and List<Person>::get to get the specified Student.
Step 2:
The EditGradeTestCommand::createEditedGradedTestPerson is invoked to create a new immutable Person object with the updated Graded Test Score(s).
Step 3:
The EditGradedTestCommand will call setPerson in Model to replace the original Person with the new Person object.
Step 4:
The EditGradedTestCommand will call its own updateFilteredPersonList method to update the model's filter and display all the students to the user.
Step 5:
The EditGradedTestCommand then continues its execution as defined by this sequence diagram.
createEditedGradedTestPerson is summarised in the activity diagram below:Aspect 1: How we execute the EditGradedTestCommand:
Alternative 1 (current choice): Direct Model Interaction via LogicManager.
Pros:
Person object to remain immutable.Cons:
Alternative 2: Command Dispatcher via LogicManager.
Aspect 2: How we edit the Graded Test Scores of a Person object's Assignment:
Alternative 1 (current choice): Immutable Objects i.e create a completely new instance of Person.
Pros:
Person object to remain immutable.Cons:
Person instances, this may be resource-intensive when done in large-scale.Alternative 2: Dynamic Objects i.e update the GradedTest found in the Person object.
Person object to no longer be immutable, giving rise to potential bugs or complications during the integration process.This section explains the implementation of the Create Consultation feature via the createconsult command.
The CreateConsultCommand creates a Consultation and adds it into the Consultation List in the application.
There are multiple compulsory field: date, time and name of students.
Below is the sequence diagram outlining the execution of CreateConsultCommand.
Step 1:
The LogicManager invokes CreateConsult::execute, which in turn creates a new StudentSet.
Step 2:
Then, Model::getMatchingStudentName is called in a loop to add Person specified by name into the StudentSet.
Step 3:
A new Consultation is created with specified date, time and the new StudentSet.
Step 4:
Model::addConsultation is then called to add the newly created Consultation.
Step 5:
The CreateConsultCommand then continues its execution as defined by this sequence diagram.
Aspect: How we execute the CreateConsultCommand:
Alternative 1 (current choice): Let the LogicManager pass the model to the command to execute.
CreateConsultCommand.Alternative 2: Store the model in the CreateConsultCommand itself.
CreateConsultCommand might be able to call other methods in the model.This section explains the implementation of the Add To Consultation feature via the addtoconsult command.
The AddToConsultCommand adds a new student to the consultation identified using an Index.
There are two compulsory field, which are the Index of the consultation to add student into, and the name of the student.
Below is the sequence diagram outlining the execution of AddToConsultCommand.
Step 1:
The LogicManager invokes AddToConsultCommand::execute, which in turn calls Model::getFilteredConsultationList and List<Consultation>::get to get the relevant consultation to be edited.
Step 2:
The AddToConsultCommand::createUpdatedConsultation is invoked to create a new immutable Consultation object with the updated StudentSet.
Step 3:
The AddToConsultCommand will call setConsultation in Model to replace the existing Consultation with the new Consultation object.
Step 4:
The AddToConsultCommand will call its own updateFilteredConsultationList method to update the model's filter and display all the consultation to the user.
Step 5:
The AddToConsultCommand then continues its execution as defined by this sequence diagram.
Aspect: How we execute the AddToConsultCommand:
Alternative 1 (current choice): Create a new immutable object of the updated Consultation and replace the previous Consultation.
Alternative 2: Mutate the existing Consultation in the Consultation list to reflect the new students added.
This section explains the implementation of the Remove From Consultation feature via the removefromconsult command.
The RemoveFromConsultCommand removes a student specified by name from the consultation identified using an Index.
There are two compulsory fields which are the index of the consultation to remove from, as well as the name of the students to be removed.
Below is the activity diagram outlining the execution of RemoveFromConsultCommand.
Step 1:
The Avenger(user) enters the command removefromconsult and the command is parsed by the RemoveFromConsultCommandParser.
Step 2: The Index parameter is checked for its validity, which will display an error message if invalid. Otherwise, the Consultation at that Index will be retrieved.
Step 3: The given name of student is then checked if there is a matching person in the Address Book and the retrieved Consultation. If there are any invalid names, an error message indicating Student Not Found will be displayed.
Step 4: If all checks are passed, the student will be removed from the Consultation.
Aspect: How we execute the RemoveFromConsultCommand:
Alternative 1 (current choice): Similar to AddToConsult, create a new immutable object of the updated Consultation and replace the previous Consultation.
Alternative 2: Mutate the existing Consultation in the Consultation list to reflect the new students added.
Target user profile:
Value proposition: track assignment gradings, student participation and plan their tutorials, consultations and mastery checks
Priorities: High (must have) - * * *, Medium (nice to have) - * *, Low (unlikely to have) - *
| Priority | As a … | I want to … | So that I can… | 
|---|---|---|---|
| * * * | new user | see usage instructions | refer to instructions when I forget how to use the App. | 
| * * * | organised Avenger | add a new person | keep track of my student's details. | 
| * * * | organised Avenger | delete a person | remove entries that I no longer need. | 
| * * * | curious Avenger | find a person by name | locate details of persons without having to go through the entire list. | 
| * * * | busy Avenger | keep track of what needs to be done | better guide my students. | 
| * * * | conscientious avenger | view my students' grades and comments for their assignments | better assess my students' competency. | 
| * * * | unorganised avenger | edit or delete my student's assignment grades and comments | organise their progress better. | 
| * * * | responsible Avenger | create a new consultation with students | keep track of when and with who the consultation is held. | 
| * * * | accommodating Avenger | add students to an existing consultation | invite more students to join a consultation discussion. | 
| * * * | responsible Avenger | easily track and record my student's attendance | conduct attendance taking more efficiently. | 
| * * * | conscientious Avenger | view my students' attendance | easily identify any sessions that they may have missed. | 
| * * * | organised Avenger | create tutorial sessions with students | keep track of students who have attended each session. | 
| * * * | efficient Avenger | view my student's Graded Test at a glance | more effectively keep track of their performance. | 
| * * * | reflective Avenger | store insightful remarks on each session | improve my teaching methods. | 
| * * | responsible Avenger | store my students' Telegram contacts | easily contact them. | 
| * * | careless Avenger | delete sessions that were wrongly created | clean up my list of sessions. | 
| * * | careful Avenger | hide private contact details | minimize chance of someone else seeing them by accident. | 
| * | user with many persons in the address book | sort persons by name | locate a person easily. | 
(For all use cases below, the System is the F.A.K.E.J.A.R.V.I.S. and the Actor is the user, unless specified otherwise)
Use case 1: Delete a person
MSS
User requests to list persons
F.A.K.E.J.A.R.V.I.S. shows a list of persons
User requests to delete a specific person in the list
F.A.K.E.J.A.R.V.I.S. deletes the person
Use case ends.
Extensions
2a. The list is empty.
Use case ends.
3a. The given index is invalid.
3a1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case resumes at step 2.
Use case 2: Add a task
MSS
User requests to add task.
F.A.K.E.J.A.R.V.I.S. adds and displays the task.
Use case ends.
Extensions
1a. The date input is invalid.
1a1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
1b. The task priority input is invalid.
1b1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
Use case 3: Delete a task
MSS
User requests to list tasks
F.A.K.E.J.A.R.V.I.S. shows a list of tasks
User requests to delete a specific task in the list
F.A.K.E.J.A.R.V.I.S. deletes the task
Use case ends.
Extensions
2a. The list is empty.
Use case ends.
3a. The given index is invalid.
3a1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case resumes at step 2.
Use case 4: View list of tasks
MSS
User requests to view tasks
F.A.K.E.J.A.R.V.I.S. shows a list of tasks matching search criteria.
Use case ends.
Extensions
1a. No fields provided
1a1. F.A.K.E.J.A.R.V.I.S. shows list of all tasks.
Use case ends.
1b. Multiple fields provided
1b1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
1c. Invalid fields provided
1c1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
2a. The list is empty.
Use case ends.
Use case 5: Update task progress
MSS
User requests to update a task progress
F.A.K.E.J.A.R.V.I.S. updates task progress and displays updated progress.
Use case ends.
Extensions
1a. Invalid index provided
1a1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
1b. Invalid task progress provided
1b1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
1c. Task progress provided is the same as current progress
1c1. F.A.K.E.J.A.R.V.I.S. displays success message.
Use case ends.
Use case 6: View a person's list of assignments
MSS
User requests to list persons
F.A.K.E.J.A.R.V.I.S. shows a list of persons
User requests to view the assignments of a specific person in the list
F.A.K.E.J.A.R.V.I.S. displays the assignments of the selected person
Use case ends.
Extensions
2a. The list is empty.
Use case ends.
3a. The given index is invalid.
3a1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case resumes at step 2.
Use case 7: Edit the grade of an assignment
MSS
User requests to list persons
F.A.K.E.J.A.R.V.I.S. shows a list of persons
User requests to edit the grade of an assignment for a specific person in the list
F.A.K.E.J.A.R.V.I.S. edits grade of the person's assignment
Use case ends.
Extensions
2a. The list is empty.
Use case ends.
3a. The given index is invalid.
3a1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case resumes at step 2.
3b. The given assignment name is invalid.
3b1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case resumes at step 2.
3c. The given grade is invalid.
3c1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case resumes at step 2.
Use case 8: Delete the grade of an assignment
MSS
User requests to list persons
F.A.K.E.J.A.R.V.I.S. shows a list of persons
User requests to delete the grade of an assignment for a specific person in the list
F.A.K.E.J.A.R.V.I.S. deletes the grade of the person's assignment
Use case ends.
Extensions
2a. The list is empty.
Use case ends.
3a. The given index is invalid.
3a1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case resumes at step 2.
3b. The given assignment name is invalid.
3b1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case resumes at step 2.
3c. The given assignment has not been commented on.
3c1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case resumes at step 2.
Use case 9: Edit the comment on an assignment
MSS
User requests to list persons
F.A.K.E.J.A.R.V.I.S. shows a list of persons
User requests to edit comment on an assignment for a specific person in the list
F.A.K.E.J.A.R.V.I.S. edits the comment of the person's assignment
Use case ends.
Extensions
2a. The list is empty.
Use case ends.
3a. The given index is invalid.
3a1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case resumes at step 2.
3b. The given assignment name is invalid.
3b1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case resumes at step 2.
3c. The given comment is invalid.
3c1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case resumes at step 2.
Use case 10: Delete the comment of an assignment
MSS
User requests to list persons
F.A.K.E.J.A.R.V.I.S. shows a list of persons
User requests to delete the comment of an assignment for a specific person in the list
F.A.K.E.J.A.R.V.I.S. deletes the comment of the person's assignment
Use case ends.
Extensions
2a. The list is empty.
Use case ends.
3a. The given index is invalid.
3a1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case resumes at step 2.
3b. The given assignment name is invalid.
3b1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case resumes at step 2.
3c. The given assignment has been commented on.
3c1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case resumes at step 2.
Use case 11: Find Student Profile
MSS
User requests to list persons
F.A.K.E.J.A.R.V.I.S. shows a list of persons
User request a search query to find a student's profile
F.A.K.E.J.A.R.V.I.S. returns matching results from the database
Use case ends.
Extensions
2a. The list is empty.
Use case ends.
3a. No matching profiles.
3a1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case resumes at step 2.
Use case 12: Filter Results
MSS
User requests to list persons.
F.A.K.E.J.A.R.V.I.S. shows a list of persons.
User requests to apply filters to the results via attribute FILTER_ATTRIBUTE, or description FILTER_DESCRIPTION.
F.A.K.E.J.A.R.V.I.S. shows the filter results.
Use case ends.
Extensions
2a. The list is empty.
Use case ends.
3a. No filtered results.
3a1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case resumes at step 2.
Use case 13: Create a consultation
MSS
User requests to create a consultation with specified date, time and student name(s).
F.A.K.E.J.A.R.V.I.S. creates a consultation.
Use case ends.
Extensions
1a. The date input is invalid.
1a1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
1b. The time input is invalid.
1b1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
1c. No matching name to students' names.
1c1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
Use case 14: Delete a consultation
MSS
User requests to delete a consultation at a specified index.
F.A.K.E.J.A.R.V.I.S. deletes the consultation.
Use case ends.
Extensions
1a. The index input is invalid.
1a1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
Use case 15: Add a student to a consultation
MSS
User requests to add a student into a consultation at a specified index.
F.A.K.E.J.A.R.V.I.S. updates the consultation.
Use case ends.
Extensions
1a. The index input is invalid.
1a1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
1b. The student name input is invalid.
1b1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
1c. No matching name to students' name found.
1c1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
Use case 16: Removing a student from a consultation
MSS
User requests to remove a student from a consultation at a specified index.
F.A.K.E.J.A.R.V.I.S. updates the consultation.
Use case ends.
Extensions
1a. The index input is invalid.
1a1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
1b. The student name input is invalid.
1b1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
1c. No matching name to students' name found in consultation.
1c1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
1d. No matching name to students' name found in address book.
1d1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
Use case 17: Create a session
MSS
User requests to create a session with session number and student name(s).
F.A.K.E.J.A.R.V.I.S. creates a session.
Use case ends.
Extensions
1a. The session number has already been used.
1a1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
1b. The student name input is invalid.
1b1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
1c. No matching name to students' names.
1c1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
Use case 18: Update a session's remarks
MSS
User requests to update a session's remark.
F.A.K.E.J.A.R.V.I.S. updates the session's remark.
Use case ends.
Extensions
1a. The session number input is invalid.
1a1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
1b. The session remark input is invalid.
1b1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
Use case 19: Delete a session
MSS
User requests to delete a session by a specified session number.
F.A.K.E.J.A.R.V.I.S. deletes the session.
Use case ends.
Extensions
1a. The session number input is invalid.
1a1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
Use case 20: Take the attendance of a student for a session
MSS
User requests to take the attendance of a student for a session by a specified session number.
F.A.K.E.J.A.R.V.I.S. updates the attendance status of that student for that session according to the specified attendance status.
Use case ends.
Extensions
1a. The session number input is invalid.
1a1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
1b. The student name input is invalid.
1b1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
1c. No matching name to students' name found.
1c1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
1d. The attendance status input is invalid.
1d1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
Use case 21: View the overall attendance of a student
MSS
User requests to view the overall attendance of a student.
F.A.K.E.J.A.R.V.I.S. displays the sessions that have been attended by the student.
Use case ends.
Extensions
1a. The student name input is invalid.
1b1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
1b. No matching name to students' name found.
1c1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case ends.
Use case 22: Edit the score(s) of a graded test
MSS
User requests to list persons.
F.A.K.E.J.A.R.V.I.S. shows a list of persons.
User requests to edit the score(s) of a graded test for a specific person in the list.
F.A.K.E.J.A.R.V.I.S. edits score(s) of the person's graded test.
Use case ends.
Extensions
2a. The list is empty.
Use case ends.
3a. The given index is invalid.
3a1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case resumes at step 2.
3b. The parameter(s) given is/are invalid.
3b1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case resumes at step 2.
3c. Extra parameter(s) is/are given (e.g editgradedtest 1 ra1/<SCORE> ra2/<SCORE> mt/<SCORE> f/<SCORE> pe/<SCORE> ra1/<SCORE>)
3c1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case resumes at step 2.
3d. Fewer parameter(s) is/are given (e.g editgradedtest 1 ra1/<SCORE> ra2/<SCORE>)
3d1. F.A.K.E.J.A.R.V.I.S. shows an success message.
Use case resumes at step 4.
3e. The parameter(s) are in different order (e.g editgradedtest 1 ra1/<SCORE> pe/<SCORE> f/<SCORE> ra2/<SCORE> mt/<SCORE>)
3e1. F.A.K.E.J.A.R.V.I.S. shows an success message.
Use case resumes at step 4.
3f. The given parameter is invalid. (e.g editgradedtest 1 ra3/<SCORE> pee/<SCORE>)
3f1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case resumes at step 2.
3g. The given score is invalid.
3g1. F.A.K.E.J.A.R.V.I.S. shows an error message.
Use case resumes at step 2.
11 or above installed.Given below are instructions to test the app manually.
Note: These instructions only provide a starting point for testers to work on; testers are expected to do more exploratory testing.
Initial launch
Download the jar file and copy into an empty folder
Double-click the jar file Expected: Shows the GUI with a set of sample data. The window size will be maximised.
{ more test cases … }
Deleting a person while all persons are being shown
Prerequisites: List all persons using the list command. Multiple persons in the list.
Test case: delete 1
Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated.
Test case: delete 0
Expected: No person is deleted. Error details shown in the status message. Status bar remains the same.
Other incorrect delete commands to try: delete, delete x, ... (where x is larger than the list size)
Expected: Similar to previous.
Viewing assignments with valid parameters
viewasssignments 1 Viewing assignments with invalid index
viewasssignments 0 Editing an assignment grade with valid parameters
editgrade 1 as/Functional Expressionism g/500 Editing an assignment grade with invalid index
editgrade 0 as/Functional Expressionism g/500 Editing an assignment grade with invalid assignment name
editgrade 1 as/Finding Boyd g/500 Editing an assignment grade with invalid grade
editgrade 1 as/Functional Expressionism g/700 Deleting an assignment grade with valid parameters
deletegrade 1 as/Functional Expressionism Deleting an assignment grade with invalid index
deletegrade 0 as/Functional Expressionism Deleting an assignment grade with invalid assignment name
deletegrade 1 as/Finding Boyd Editing an assignment comment with valid parameters
editcomment 1 as/Functional Expressionism c/Good job! Editing an assignment comment with invalid index
editcomment 0 as/Functional Expressionism c/Good job! Editing an assignment comment with invalid assignment name
editcomment 1 as/Finding Boyd c/Good job! Editing an assignment comment with invalid comment
editcomment 1 as/Functional Expressionism c/ Deleting an assignment comment with valid parameters
deletecomment 1 as/Functional Expressionism Deleting an assignment comment with invalid index
deletecomment 0 as/Functional Expressionism Deleting an assignment comment with invalid assignment name
deletecomment 1 as/Finding Boyd Editing the score(s) of a graded test with valid parameters
editgradedtest 1 ra1/90 ra2/85 mt/95 f/80 pe/75 ra1/88 Editing the score(s) of a graded test with an empty list
editgradedtest 1 ra1/90 ra2/85 mt/95 f/80 pe/75 ra1/88 Editing the score(s) of a graded test with an invalid index
editgradedtest 0 ra1/90 ra2/85 mt/95 f/80 pe/75 ra1/88 Editing the score(s) of a graded test with empty parameter(s)
editgradedtest 1 Editing the score(s) of a graded test with invalid parameter(s)
editgradedtest 1 ra3/90 pee/100 Editing the score(s) of a graded test with extra parameter(s)
editgradedtest 1 ra1/90 ra2/85 mt/95 f/80 pe/75 ra1/88 ra2/75 Editing the score(s) of a graded test with fewer parameter(s)
editgradedtest 1 ra1/90 ra2/85 mt/95 Editing the score(s) of a graded test with parameters in different order
editgradedtest 1 ra1/90 pe/75 f/80 ra2/85 mt/95 Editing the score(s) of a graded test with an invalid score
editgradedtest 1 ra1/-100 ra2/85 mt/105 f/80 pe/75 ra1/88 Editing the score(s) of a graded test with multiple invalid scores
editgradedtest 1 ra1/-90 ra2/-85 mt/-100 f/invalid pe/-75 ra1/-88 Creating a consultation with a single student and valid parameters.
createconsult d/10/11/2023 tt/13:00 n/Alex YeohCreating a consultation with multiple students and valid parameters.
createconsult d/10/11/2023 tt/13:00 n/Alex Yeoh n/Bernice YuCreating a consultation with multiple students and invalid parameters.
createconsult d/10/11/2023 tt/13:00 n/Alex Yeoh createconsult d/10/11/2023 tt/13:00 n/Alex Yeohcreateconsult d/60/11/2023 tt/13:00 n/Alex Yeohcreateconsult d/10/11/2023 tt/13:70 n/Alex Yeohcreateconsult d/10/11/2023 tt/13:00 n/fakenamethatdoesnotexistCreating a consultation with mix of valid and invalid students.
createconsult d/10/11/2023 tt/13:00 n/Alex Yeoh n/fakenamethatdoesnotexist.Creating a consultation with missing parameters.
createconsult tt/13:00 n/Alex Yeoh.createconsult d/10/11/2023 n/Alex Yeoh.createconsult d/10/11/2023 tt/13:00.createconsult.Deleting a consultation with valid parameters.
deleteconsult 2Deleting a consultation with invalid parameters.
deleteconsult 2 deleteconsult 2deleteconsult -1 Deleting a consultation with missing parameters.
deleteconsultAdding to a consultation with valid parameters.
addtoconsult 2 n/Alex YeohAdding to a consultation with invalid parameters.
addtoconsult 2 n/Alex Yeoh addtoconsult 2 n/Alex Yeohaddtoconsult 2 n/fakenamethatdoesnotexistaddtoconsult -1 n/Alex Yeohaddtoconsult x n/Alex Yeoh (where x is greater than consultation list size)Adding to a consultation with missing parameters.
addtoconsultRemoving a student with valid parameters.
removefromconsult 2 n/Alex YeohRemoving a student with invalid parameters.
removefromconsult 2 n/Alex Yeoh removefromconsult 2 n/Alex Yeohremovefromconsult 2 n/fakenamethatdoesnotexistremovefromconsult -1 n/Alex Yeohremovefromconsult x n/Alex Yeoh (where x is greater than consultation list size)Removing a student with missing parameters.
removefromconsultCreating a session with a single student with valid parameters
createsession s/2 n/Alex YeohCreating a session with multiple students with valid parameters
createsession s/2 n/Alex Yeoh n/Bernice YuCreating a session with a single student with invalid parameters
createsession s/2 n/Alex Yeoh createsession s/2 n/Alex Yeohcreatesession s/2 n/fakenamethatdoesnotexistCreating a session with mix of valid and invalid students
createsession s/2 n/Alex Yeoh n/fakenamethatdoesnotexistCreating a session with missing parameters
createsession s/2createsession n/Alex YeohUpdating a session remark with valid parameters
updatesessionremark s/2 r/Update the remark to this textUpdating a session remark with missing parameters
updatesessionremark r/Valid remark, but missing session numberupdatesessionremark s/2updatesessionremark
Expected: F.A.K.E.J.A.R.V.I.S. displays an error. No update to any session's remarks. Deleting a session with valid parameters
deletesession s/2Deleting a session with invalid parameters
deletesession s/2 deletesession s/2Deleting sessions with missing parameters
deletesessionTaking attendance of a valid student
takeattendance s/2 n/David Li ap/presentTaking attendance of an invalid student
takeattendance s/2 n/fakenamethatdoesnotexist ap/absentTaking attendance with missing parameters
takeattendance n/David Li ap/presenttakeattendance s/2 n/David Litakeattendance s/2 ap/presenttakeattendanceTaking attendance of multiple valid students
takeattendance s/2 n/Bernice Yu n/David Li ap/absentTaking attendance of mix of valid and invalid students
takeattendance s/2 n/fakenamethatdoesnotexist n/Alex Yeoh ap/presentViewing attendance of a valid student
viewattendance n/Bernice YuViewing attendance of an invalid student
viewattendance n/fakenamethatdoesnotexistViewing attendance of multiple valid students
viewattendance n/Alex Yeoh n/Bernice YuViewing attendance of mix of valid and invalid students
viewattendance n/Alex Yeoh n/fakenamethatdoesnotexistViewing overall attendance across all students
viewattendanceAdding a task with valid parameters
addtask tn/finish up user guide td/please by tonight d/14/11/2023 tp/high Adding a task with invalid name
addtask tn/-- Adding a task with invalid description
addtask tn/do up developer guide td/the quick brown fox jumped over the lazy dog the quick brown fox jumped over the lazy dog the quick brown fox jumped over the lazy dog the quick brown fox jumped over the lazy dog Adding a task with invalid date
addtask tn/test number 4 td/test number 4 please work d/29/02/2023 Adding a task with invalid priority
addtask tn/test number 5 td/test number 5 please work d/27/02/2023 tp/asdasdsa HIGH, MEDIUM, or LOW.Listing all tasks with no filters
AddTask command.viewtasks Listing tasks filtered using date filter
22/10/2023.viewtasks d/22/10/2023 22/10/2023.Listing tasks filtered using name filter
user guide in the Task Name.viewtasks tn/user guide user guide in the Task Name.Listing tasks filtered using description filter
homework in the Task Description.viewtasks td/homework homework in the Task Description.Listing tasks filtered using priority filter
HIGH priority.viewtasks tp/HIGH HIGH priority.Listing tasks filtered using progress filter
PENDING progress.viewtasks tprog/PENDING PENDING progress.Listing all tasks with no tasks in the task list
viewtasks tprog/PENDING Listing all tasks with invalid parameters
viewtasks tprog/asdasdasdNOT_STARTED, PENDING, or DONE. Furthermore, the constraints of the parameters detailed in AddTask also apply here.Updating progress of a task as pending
updateprogress 1 tprog/PENDING PENDING.Updating progress of a task as not_started
updateprogress 1 tprog/NOT_STARTED NOT_STARTED.Updating progress of a task as done
updateprogress 1 tprog/DONE DONE.Updating progress of a task as an invalid parameter
updateprogress 1 tprog/asdasdasdsad NOT_STARTED, PENDING, or DONE.Updating progress of a task with a non-integer index.
updateprogress abcd tprog/DONE Updating progress of a task with a negative index.
updateprogress -1 tprog/DONE Updating progress of a task with an out-of-bounds index.
X number of tasks in the task list.updateprogress [X + 1] tprog/DONE Updating progress of a task without an index.
updateprogress tprog/DONE Deleting the first task currently shown in the task list.
deletetask 1 Deleting the task with a non-integer index.
deletetask wasd Deleting the task with an out-of-bounds index.
X number of tasks in the task list.deletetask [X + 1] Deleting the task with a negative index.
deletetask -1 Deleting the task without an index.
deletetask Dealing with corrupted data files
.json file in data folder, or add some random symbols (e.g @#$%^&*(). Then relaunch F.A.K.E.J.A.R.V.I.S.tasklist.json is corrupted, Task List will be empty).Dealing with missing data files
.json file in data folder. Then relaunch F.A.K.E.J.A.R.V.I.S.Email, Name, TaskName).+ to enable the adding of country codes in the phone number field..csv or .json files..csv or .json format, enabling users to conveniently import/export data..csv formats.downloadCsvDataFile and downloadJsonDataFile method to enable the download of the respectively files.Shaquille O'Neal or Rohan s/o Mohan are considered invalid)' or / to be allowed in the name field.setAlert command for users to set an alarm for their tasks.notification feature to alert users of their upcoming tasks/deadlines.setMaxScore command to specify the maximum score for each component of graded tests, preventing entry of scores that exceed these limits.getMean, getMedian, getMode command to return the Avenger's session's mean, median and mode for the graded tests.If the effort required to create AB3 is 100, the amount of effort our group placed into F.A.K.E.J.A.R.V.I.S. would be a 500.
Our group has put in a significant amount of effort into our tP. AB3 has a total of 8 commands (2 of which are just help and exit commands) and 1 file to store all of the data. F.A.K.E.J.A.R.V.I.S. has a total of 28 commands and 4 different files to store different data. We have also made significant changes to the GUI, enabling users to toggle the information being displayed. As testament to our effort, among all the teams in this module, our team has the second-highest lines of code added. This is inclusive of our 981 automated test cases which covers more than 80% of our code.