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 Yeoh
Creating a consultation with multiple students and valid parameters.
createconsult d/10/11/2023 tt/13:00 n/Alex Yeoh n/Bernice Yu
Creating 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 Yeoh
createconsult d/60/11/2023 tt/13:00 n/Alex Yeoh
createconsult d/10/11/2023 tt/13:70 n/Alex Yeoh
createconsult d/10/11/2023 tt/13:00 n/fakenamethatdoesnotexist
Creating 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 2
Deleting a consultation with invalid parameters.
deleteconsult 2
deleteconsult 2
deleteconsult -1
Deleting a consultation with missing parameters.
deleteconsult
Adding to a consultation with valid parameters.
addtoconsult 2 n/Alex Yeoh
Adding to a consultation with invalid parameters.
addtoconsult 2 n/Alex Yeoh
addtoconsult 2 n/Alex Yeoh
addtoconsult 2 n/fakenamethatdoesnotexist
addtoconsult -1 n/Alex Yeoh
addtoconsult x n/Alex Yeoh
(where x is greater than consultation list size)Adding to a consultation with missing parameters.
addtoconsult
Removing a student with valid parameters.
removefromconsult 2 n/Alex Yeoh
Removing a student with invalid parameters.
removefromconsult 2 n/Alex Yeoh
removefromconsult 2 n/Alex Yeoh
removefromconsult 2 n/fakenamethatdoesnotexist
removefromconsult -1 n/Alex Yeoh
removefromconsult x n/Alex Yeoh
(where x is greater than consultation list size)Removing a student with missing parameters.
removefromconsult
Creating a session with a single student with valid parameters
createsession s/2 n/Alex Yeoh
Creating a session with multiple students with valid parameters
createsession s/2 n/Alex Yeoh n/Bernice Yu
Creating a session with a single student with invalid parameters
createsession s/2 n/Alex Yeoh
createsession s/2 n/Alex Yeoh
createsession s/2 n/fakenamethatdoesnotexist
Creating a session with mix of valid and invalid students
createsession s/2 n/Alex Yeoh n/fakenamethatdoesnotexist
Creating a session with missing parameters
createsession s/2
createsession n/Alex Yeoh
Updating a session remark with valid parameters
updatesessionremark s/2 r/Update the remark to this text
Updating a session remark with missing parameters
updatesessionremark r/Valid remark, but missing session number
updatesessionremark s/2
updatesessionremark
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/2
Deleting a session with invalid parameters
deletesession s/2
deletesession s/2
Deleting sessions with missing parameters
deletesession
Taking attendance of a valid student
takeattendance s/2 n/David Li ap/present
Taking attendance of an invalid student
takeattendance s/2 n/fakenamethatdoesnotexist ap/absent
Taking attendance with missing parameters
takeattendance n/David Li ap/present
takeattendance s/2 n/David Li
takeattendance s/2 ap/present
takeattendance
Taking attendance of multiple valid students
takeattendance s/2 n/Bernice Yu n/David Li ap/absent
Taking attendance of mix of valid and invalid students
takeattendance s/2 n/fakenamethatdoesnotexist n/Alex Yeoh ap/present
Viewing attendance of a valid student
viewattendance n/Bernice Yu
Viewing attendance of an invalid student
viewattendance n/fakenamethatdoesnotexist
Viewing attendance of multiple valid students
viewattendance n/Alex Yeoh n/Bernice Yu
Viewing attendance of mix of valid and invalid students
viewattendance n/Alex Yeoh n/fakenamethatdoesnotexist
Viewing overall attendance across all students
viewattendance
Adding 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/asdasdasd
NOT_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.