Developer Guide
- Setting up, getting started
- Introduction
- Design
- Implementation
- Documentation, logging, testing, configuration, dev-ops
- Appendix: Requirements
-
Appendix: Instructions for manual testing
- Launch and shutdown
- Adding a Tutor
- Deleting a tutor
- Viewing a tutor
- Listing all tutors
- Adding a Note
- Editing a Note
- Listing All Tutor(s) with Note
- Deleting a Note
- Export Tutor Details
- Favourite Tutor
- Unfavourite Tutor
- Listing All Favourite Tutor(s)
- Viewing Appointments
- Listing All Appointments
- Adding a Schedule
- Editing a Schedule
- Viewing Schedules
- Listing All Schedules
- Deleting a Schedule
- Adding a Reminder
- Editing a Reminder
- Listing All Reminders
- Deleting a Reminder
- Adding a Grade
- Deleting a Grade
- Editing a Grade
- Listing All Grades
- Adding a Tutor Filter
- Deleting a Tutor Filter
- Adding an Appointment Filter
- Deleting an Appointment Filter
Setting up, getting started
Refer to the guide Setting up and getting started.
Introduction
Tutor Tracker is a desktop tuition management application meant for secondary students to track their tuition information, such as upcoming tuition appointments and tutor’s contact information. It focuses on the Command Line Interface (CLI) while providing users with a simple and clean Graphical User Interface (GUI). Thus, the main interaction with Tutor Tracker will be done through commands.
Tutor Tracker is an all-in-one tuition management solution for tech-savvy secondary school students. The features of Tutor Tracker includes:
- Adding, editing, deleting and viewing of tutors’ profile
- Filtering tutors by personal preference (i.e. availability, experiences, name, location, price, etc.)
- Adding, editing, deleting note of tutors
- Exporting tutor’s details, subject list and notes
- Adding, removing and listing favourite tutors
- Adding, editing, deleting and viewing of all tuition appointments
- Adding, editing, deleting and viewing of all tuition-related schedules
- Adding, editing, deleting and listing grade records
- Adding, editing, deleting and viewing of reminders
- Adding, editing, deleting and viewing of budget
The purpose of this Developer Guide is to help you understand the design and implementation of Tutor Tracker to get started on your contributions to Tutor Tracker.
Design
This section will help you learn more about the design and structure of Tutor Tracker. Each section will describe and explains how each component of the application works. It’s noteworthy to mention that the Tutor Tracker follows an Object-Oriented Programming paradigm.
Architecture
Figure 1. Architecture Diagram of Tutor Tracker
The Architecture Diagram given above explains the high-level design of the App. Given below is a quick overview of each component.
.puml
files used to create diagrams in this document can be found in the diagrams folder. Refer to the PlantUML Tutorial at se-edu/guides to learn how to create and edit diagrams.
The application consists of 6 main components:
Component | Description |
---|---|
Main |
Main has two classes called Main and MainApp . It is responsible for: (1) At app launch: Initializes the components in the correct sequence, and connects them up with each other. (2) At shut down: Shuts down the components and invokes cleanup methods where necessary. |
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. |
For each of UI
, Logic
, Model
and Storage
component, it
- defines its API in an
interface
with the same name as the Component. - exposes its functionality using a concrete
{Component Name}Manager
class (which implements the corresponding APIinterface
mentioned in the previous point.
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_appointment 1
.
The sections below give more details of each component.
UI component
API :
Ui.java
The UI consists of a MainWindow
that is made up of parts e.g.CommandBox
, ResultBarFooter
, FilterPanel
, TutorListPanel
etc.
All these, including the MainWindow
, inherit from the abstract UiPart
class.
The UI
component uses 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,
- Executes user commands using the
Logic
component. - Listens for changes to
Model
data so that the UI can be updated with the modified data.
Logic component
API :
Logic.java
-
Logic
uses theTutorTrackerParser
class to parse the user command. - This results in a
Command
object which is executed by theLogicManager
. - The command execution can affect the
Model
(e.g. adding an appointment). - The result of the command execution is encapsulated as a
CommandResult
object which is passed back to theUi
. - In addition, the
CommandResult
object can also instruct theUi
to perform certain actions, such as displaying help to the user.
Given below is the Sequence Diagram for interactions within the Logic
component for the execute("delete_appointment 1")
API call.
DeleteCommandParser
should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.
Model component
API : Model.java
The Model
,
- stores a
UserPref
object that represents the user’s preferences. - stores the Tutor Tracker data.
- exposes an 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. - In-depth details of each
XYZ
model are shown in each Implementation section.
Storage component
API : Storage.java
The Storage
component,
- can save
UserPref
objects in json format and read it back. - can save the Tutor Tracker details in json format and read it back.
Common classes
Classes used by multiple components are in the seedu.address.commons
package.
Implementation
Tutor Book
Tutor Tracker’s Tutor Book allows users to store a list of tuition tutors.
Rationale
As Tutor Tracker is an application to aid users in viewing a tutor’s profile, having a list of tuition tutors is core of Tutor Tracker.
The proposed tutor features is to facilitate the user to keep track of his/her list of tutors. It implements the following operations:
-
Add tutor
- Adds a tutor to the list of tutors. -
Edit tutor
- Edit an existing tutor from the list of tutors. -
Delete tutor
- Delete a tutor from the list of tutors. -
Find tutor
- Find a tutor from the list of tutors by name. -
View tutor
- View a tutor by index from the list of tutors. -
List all tutors
- Show an unfiltered list of the tutors.
These operations are exposed in the Logic
interface by parsing respective AddCommand
EditCommand
, DeleteCommand
, FindCommand
,
ViewCommand
and ListCommand
.
Implementation
The class and commands are re-used from the AddressBook Level-3
’s Person
class.
Rationale
As Tutor Tracker is an application to aid users to track their upcoming tuition appointments, allowing user to store a list of his/her tuition appointment is core of Tutor Tracker.
The proposed appointment feature is to facilitate the user to keep track of his/her tuition appointments. It implements the following operations:
-
Add appointment
- Adds an appointment to the list of appointments. -
Edit appointment
- Edit an existing appointment from the list of appointments. -
Delete appointment
- Delete an appointment from the list of appointments. -
Find appointment
- Find a tutor from the list of appointments by tutor’s name. -
View schedules
- View the list of appointments that is happening on the queried date. -
List all appointments
- Show an unfiltered list of the appointments.
These operations are exposed in the Logic
interface by parsing respective AddAppointmentCommand
EditAppointmentCommand
, DeleteAppointmentCommand
, FindAppointmentCommand
,
ViewAppointmentCommand
and ListAppointmentCommand
.
Favourite Feature
Tutor Tracker’s Favourite feature allows users to create a list of favourites tutors from the entire list of tutors.
Rationale
As Tutor Tracker is an application to aid users in viewing a tutor’s personal profile, we have also considered that users may also wish to keep a favourite tutor list for easier personal reference instead of performing a search or filtering every time.
Implementation
The favourite feature is to facilitate the user to keep track of his/her favourites out of the entire list of tutors. It implements the following operations:
-
Favourite tutor
- Add a tutor to the list of favourite tutors. -
Unfavourite tutor
- Delete the tutor from the list of favourite. -
List favourites
- Show the list of the favourite tutor.
These operations are exposed in the Logic
interface by parsing respective FavouriteCommand
,
UnfavouriteCommand
and ListFavouriteCommand
.
When the user enters any of the aforementioned commands, the user input command undergoes the same command parsing as described in the Logic component.
To add the favourite
attribute to a Tutor, we can simply create an EditTutorDescriptor
which is a Favourite
descriptor, and edit the corresponding Tutor
with this descriptor.
The following shows an example of how an FavouriteCommand
is executed.
Steps for the execution of the FavouriteCommand
(assuming that no errors are encountered during parsing of inputs):
- When the
execute()
method of theFavouriteCommand
is called, theModel
’sgetFilteredTutorList()
method is called. - The
get()
method of theObservableList
is called returning the tutor at the index specified by the user. - The
isFavourite()
method of theTutor
, which was retrieved from the previous step, is called to check if the tutor specified by index is already a favourite. - Assuming that the above validation passes, the
FavouriteCommand
’screateEditedTutor()
method is called to create aTutor
object with afavourite
attribute while retaining existing information from the tutor specified by index. - The
Model
’ssetTutor()
method is called, which will then call theTutorBook
’ssetTutor()
method. - The
Ui
component will detect this change and update the GUI with thefavourite
indicator (a star) beside the tutor’s name. - Assuming that the above steps are all successful, the
FavouriteCommand
will then create aCommandResult
object and return the result.
The following Sequence Diagram summarises the aforementioned steps.
Design Consideration
Displaying Favourite Tutors in the GUI
Pros | Cons | |
---|---|---|
Option 1 (current choice) Display tutors with a graphical indicator beside tutor’s name. |
Allows users to view everything in a single panel. | May be difficult to differentiate non-favourite and favourite tutor. |
Option 2 Separate non-favourite and favourite tutors into different tabs. |
Clear segregation between non-favourite and favourite tutors. | May impose inconvenience as users have to switch tabs between non-favourite and favourite tutor depending on their needs. |
Reason for choosing option 1:
- We have researched the existing website and applications and concluded that option 1 is the most commonly adopted method.
- There is also the
list_favourites
command in case users may want to only display favourite tutors.
The following activity diagram summarizes what happens when the favourite
command is executed.
Note Feature
Tutor Tracker’s Notes feature allows users to create notes that are tagged to specific tutors and export them into a text file.
Rationale
As Tutor Tracker is an application to aid users to track their upcoming tuition appointments, we have also considered that users may also wish to add notes to specific tutors to keep track of miscellaneous information that the user might have. We also considered that the user might want to export details and notes of a tutor into a text file for ease of reference and sharing.
Implementation
The proposed note feature is to facilitate the user to keep track of his/her own note of different tutors and export them. The notes feature consists of the following operations that can be performed on tutors:
-
Add note
- Adds a note to a tutor -
Delete note
- Deletes the note of a tutor -
Edit note
- Edits an existing note of a tutor -
List note
- List tutor(s) that has a note -
Export tutor
- Exports the tutor’s details, subject list and attached notes into a text file
These operations are exposed in the Logic
interface by parsing respective AddNoteCommand
,
DeleteNoteCommand
, EditNoteCommand
, ListNoteCommand
and ExportCommand
.
When the user enters any of the aforementioned commands, the user input command undergoes the same command parsing as described in the Logic component.
To add the note
attribute to a Tutor, we can simply create an EditTutorDescriptor
which is a Note
descriptor, and edit the corresponding Tutor
with this descriptor.
The following shows an example of how an AddNoteCommand
is executed.
Steps for the execution of the AddNoteCommand
(assuming that no errors are encountered during parsing of inputs):
- When the
execute()
method of theAddNoteCommand
is called, theModel
’sgetFilteredTutorList()
method is called. - The
get()
method of theObservableList
is called returning the tutor at the index specified by the user. - The
hasNotes()
method of theTutor
, which was retrieved from the previous step, is called to check if the tutor specified by index have an existing note. - Assuming that the above validation passes, the
AddNoteCommand
’screateEditedTutor()
method is called to create aTutor
object with anote
attribute while retaining existing information from the tutor specified by index. - The
Model
’ssetTutor()
method is called, which will then call theTutorBook
’ssetTutor()
method. - The
Ui
component will detect this change and update the GUI with thenotes
panel attached beside the tutor’s profile. - Assuming that the above steps are all successful, the
AddNoteCommand
will then create aCommandResult
object and return the result.
The following Sequence Diagram summarises the aforementioned steps.
Design Consideration
Displaying Notes in the GUI
Pros | Cons | |
---|---|---|
Option 1 (current choice) Display tutors with attached notes in the same list view. |
Allows users to view everything in a single panel. | The tutor panel might look cluttered when the notes are long. |
Option 2 Display notes with a pop up when a tutor is selected. |
Prevents the GUI from being too cluttered with information. | May impose inconvenience as users would have to select a tutor in order to view their notes |
Reason for choosing option 1:
- We want the user to be able to see their notes easily and having to type in another command to select and show the notes in a separate pop up poses too much of an inconvenience.
- The window to display the notes has been made static, and a scrollbar is added when the notes are too long to fit into the static window. This can help make the GUI look less cluttered.
The following activity diagram summarizes what happens when the add_note
command is executed.
To export the details and notes of a Tutor
into a text file, we use the export
command. The export
command would
create a new folder /export
in the root directory. Details and notes of a Tutor
would be converted into human-readable
text form and exported into the /export
folder.
Grade Book
Tutor tracker’s Grade Book is to allow users to keep track their grade records for self reference and future study planning.
Rationale
As Tutor Tracker is an application to aid users to manage the tutor and tuition information, we have also considered that users may wish to keep track and manager their academic records for self reference and future study planning. Examples are keeping track their grades of different tests and different subjects. With Grade Book, users can now store and manage all tuition-related and academic related information on the same application instead of using multiple applications.
Implementation
A grade is composed of a subject
, graded item
and grade letter
, out of which subject
and graded item
are used to identify a grade object uniquely.
All the user’s grades are stored internally in the GradeList
. Grade Book consist of the following operations
that can be performed on the grade:
-
Add a grade
- Add a grade record to user’sGradeBook
. -
Delete a grade
- Delete an existing grade record at specified index of theGradeBook
. -
Edit a grade
- Edit an existing grade record (changing its attributes’ value) at specified index displayed in theGradeBook
. -
List all grades
- Display a list of all existing grade records in theGradeBook
These operations are exposed in the Logic
interface by parsing respective AddGradeCommand
,
DeleteGradeCommand
, EditGradeCommand
and ListGradeCommand
.
When the user enters the add_grade
command to add a new command, the user input command undergoes
the same command parsing as described in Logic component.
Steps for the execution of the AddGradeCommand
(assuming that no errors are encountered):
- When the
execute()
method of theLogicManager
is called, theTutorTracker
’sparseCommand()
method is called. - The
TutorTrackerParser
will then create aAddGradeCommandParser
. - The
AddGradeCommandParser
will then parse the inputs, and creates aAddGradeCommand
. - The
AddGradeCommand
will then validate the parameters and creates aGrade
object. - Assuming that the above steps are all successful, the
LogicManager
will call theModelManager
’saddGrade()
, then create aCommandResult
object and return the result. - The
Ui
component will detect this change and update the GUI.
Design Consideration
Displaying Grades in the GUI
Pros | Cons | |
---|---|---|
Option 1 Display grades with budget and reminder in the same list view. |
Allows users to view everything in a single panel. | Users may have difficulty to differentiate grades, budget and reminders if a considerable number of them are listed all together. |
Option 2 (current choice) Display grades in a separate tab from budget and reminder in a Your Information panel. |
Clear segregation between grades, budget and reminder. | May impose inconvenience as users have to switch tabs between grades, budget and reminder depending on their needs |
Reason for choosing option 2:
- As we do not wish to overwhelm the user with too much information to provide a better user experience, we decided that option 2 may be a better option.
The following activity diagram summarizes what happens when the add_grade
command is executed.
Filter Feature
The Filter feature allows users to manage filters and apply them to the list of tutors and appointments. This allows filtering of tutors by attributes such as personal information as well as the subjects they teach, as well as filter appointments by appointment attributes.
Rationale
In order to facilitate efficient management of tutors and appointments, there needs to be a way to search through the lists quickly and easiler. While a search function is possible, filtering is a better option as it allows users to add and remove different filters according to their needs.
Implementation
The Filter Feature comprises of 4 commands:
- Add a Tutor Filter
- Delete a Tutor Filter
- Add an Appointment Filter
- Delete an Appointment Filter
The activity diagram for the Add Tutor Filter command is shown:
The activity flow for the Add Appointment Filter command is similar. For the Delete commands, the activity flow also follow a similar format, except that instead of checking for duplicate filters, they instead check if the filters input exist in the system.
The Tutor Filters and Appointment Filters are represented by the TutorFilter
and AppointmentFilter
classes respectively. Both contain multiple FilterSet
each of which is a set of filters for each attribute in Tutor
and Appointment
, labeled as XYZFilter
for convenience, where XYZ
is a placeholder for the attribute name. (eg. a TutorFilter
would contain a FilterSet
of NameFilter
). The class diagram is as shown:
Each XYZFilter
tests the respective attribute in Tutor or Appointment according to rules specified in the user guide. The filters are combined together in each FilterSet
, determined by whether it is a InclusiveFilterSet
or ExclusiveFilterSet
, with the combined filter returning a boolean value when testing attributes. TutorFilter
and AppointmentFilter
use each respective FilterSet
on all attributes when testing a Tutor
or Appointment
, returning a boolean value.
Testing thus follows the following steps:
-
Tutor
is passed toTutorFilter
to test - Each attribute in
Tutor
is passed to the respectiveFilterSet
to test - Each
FilterSet
returns true or false according to its combined filters -
TutorFilter
combines the results from allFilterSet
s according to the rules specified in the user guide and returns true or false
Steps are similar for AppointmentFilter
.
When adding or deleting from each FilterSet
, the combined filter must be recreated. This process is shown in the following sequence diagram:
The difference for exclusive filters is that an and
is used instead of or
to compose the filters. The sequence for deletion is similar, except that filters are removed from the set before composing the filters.
Design Consideration
Filtering or Searching
Pros | Cons | |
---|---|---|
Option 1 (current choice) Filtering |
Users can add and remove multiple filters in order to refine their display of tutors and appointments. | User may have to type multiple commands. |
Option 2 Searching. |
User can search for tutor or appointment using only one command. | User may have to type long command, and must retype it for every change. |
Option 1 was chosen as it does not require retyping a long command in the event that the user wants to refine their search.
Appointment Book
Tutor Tracker’s Appointment Book allows users to manage and keep track his/her tuition appointments.
The proposed appointment feature is to facilitate the user to keep track of his/her tuition appointments. It implements the following operations:
-
Add appointment
- Adds an appointment to the list of appointments. -
Edit appointment
- Edit an appointment from the list of appointments. -
Delete appointment
- Delete an appointment from the list of appointments. -
Find appointment
- Find a tutor from the list of appointments by tutor’s name. -
View appointments
- View the list of appointments that is happening on the queried date. -
List all appointments
- Show an unfiltered list of the appointments.
Diagram below shows the activity diagram of the add_appointment
command.
Steps for the execution of the AddAppointmentCommand
(assuming that no errors are
encountered):
- When the
execute()
method of theLogicManager
is called, theTutorTrackerParser
’sparseCommand()
method is called. - The
TutorTrackerParser
will then create aAddAppointmentCommandParser
. - The
AddApppointmentCommandParser
will then parse the inputs, and then validate the parameters and create anAppointment
object. - The
AddAppointmentCommandParser
will then create andAddAppointmentCommand
with the createdAppointment
object. - Assuming that the above steps are all successful, the
LogicManager
will call theModelManager
’saddAppointment()
, then create aCommandResult
object and return the result.
These operations are exposed in the Logic
interface by parsing respective AddAppointmentCommand
EditAppointmentCommand
, DeleteAppointmentCommand
, FindAppointmentCommand
,
ViewAppointmentCommand
and ListAppointmentCommand
.
Event Class
Rationale
As Tutor Tracker is an application to aid users to track their upcoming tuition appointments, schedules are naturally created, and the event class helps determine the hierarchy of schedule.
Implementation
The class and commands are re-used from the AddressBook Level-3
’s Person
class.
The following UML Class Diagram depicts the hirerachy of Event
, Appointment
and Schedule
.
Schedule Tracker
Tutor Tracker’s Schedule Tracker allows users to create schedules to track their ongoing or upcoming timed-sensitive tasks.
Rationale
As Tutor Tracker is an application to aid users to track their upcoming tuition appointments, we have also considered that users may also wish to keep track and manage other time-sensitive tuition-related tasks. Examples are allocating time to finish their tuition homework or any other tuition-related tasks. With Schedule Tracker feature, users can now keep track and manage all tuition-related information on the same application instead of using multiple applications.
Implementation
A schedule is composed of a title
, description
, time_from
and time_to
, which are used to identify a schedule uniquely.
All the user’s schedules are stored internally in the scheduleList
.
Schedule Tracker consist of the following operations that can be performed on schedule:
-
Add a schedule
- Add a new schedule and store it in the user’sscheduleList
. -
Delete a schedule
- Delete a schedule by the index displayed in thescheduleList
. -
Edit a schedule
- Edit a schedule (changing its attributes’ value) by the index displayed in thescheduleList
. -
View schedules
- View the list of schedules that is happening on the queried date. -
List all schedules
- View all the schedules stored in thescheduleList
.
These operations are exposed in the Logic
interface by parsing respective AddScheduleCommand
,
DeleteScheduleCommand
, EditScheduleCommand
and ViewScheduleCommand
.
When the user enters any of the aforementioned commands, the user input command undergoes the same command parsing as described in the Logic component.
Steps for the execution of the AddScheduleCommand
(assuming that no errors are encountered during parsing of inputs):
- When the
execute()
method of theAddScheduleCommand
is called, it will perform two-steps of validation.- The first validation method called is the
Model
’shasSchedule()
. - Assuming the previous step’s validation is successful, it will then call
DateTimeValidationUtil
’svalidateDateTime()
method.
- The first validation method called is the
- Assuming that the above validations passes, the
Model
’saddSchedule()
method is called, which will then call theTutorTracker
’saddSchedule()
method. - The
Ui
component will detect this change and update the GUI. - Assuming that the above steps are all successful, the
AddScheduleCommand
will then create a CommandResult object and return the result.
The following Sequence Diagram summarises the aforementioned steps.
Design Consideration
Determine the hierarchy of schedule
Pros | Cons | |
---|---|---|
Option 1 Schedule to be a subclass of Appointment. |
More ideal in terms of naming convention. | It may cause huge code changes and refactor required due to the Appointment class have already completed. |
Option 2 (current choice) Create an additional parent class to be inherited by Appointment and Schedule. |
Less change in codes as the Appointment class was completed (v1.2) before this idea extension proposed in v1.3. | May confuse users with the naming convention if the definitions and examples are not clearly stated. |
Reason for choosing option 2:
- We estimated the number of code changes required, and we deem it to be quite substantial. Hence, we have decided to go for option 2, by creating an abstract parent class called
Event
.
Naming of the datetime attribute
After choosing option 2 from the previous consideration, another issue arose due to the separation of classes.
Pros | Cons | |
---|---|---|
Option 1 Rename AppointmentDateTime to EventDateTime . |
More ideal in terms of naming convention. | It may cause huge code changes and refactor required due to the Appointment class have already completed. At the same time, we have other features such as the Appointment Filter, which is heavily build using the AppointmentDateTime variable. |
Option 2 (current choice) Retain the AppointmentDateTime attribute. |
Less change in codes as the Appointment class was completed (v1.2) before this idea extension proposed in v1.3. | May confuse developers with the naming convention if the definitions and examples are not clearly stated. |
Reason for choosing option 2:
- We estimated the number of code changes required, and we deem it to be quite substantial. Hence, we have decided to go for option 2 by retaining the name
AppointmentDateTime
under theEvent
class. We have put comments in the class to explain the rationale behind it.
Displaying Schedule in the GUI
Pros | Cons | |
---|---|---|
Option 1 Display schedules with appointments in the same list view. |
Allows users to view everything in a single panel. | Users may have difficulty to differentiate appointments and schedule if not looked properly. |
Option 2 (current choice) Display schedules in a separate tab from appointment. |
Clear segregation between appointments and schedules. | May impose inconvenience as users have to switch tabs between appointments and schedules depending on their needs. |
Reason for choosing option 2:
- As we do not wish to overwhelm the user with too much information to provide a better user experience, we decided that option 2 may be a better option.
- Viewing appointments and schedules in the same panel is later proposed as a different solution in the Timeable Feature.
The following activity diagram summarizes what happens when the add_schedule
command is executed.
Reminder Tracker
Tutor Tracker’s Reminder Tracker allows users to create reminders to help them track their ongoing or upcoming todos or non-time constraint tasks.
Rationale
As Tutor Tracker is an application to aid users to track their upcoming tuition appointments, we have also considered that users may also wish to keep track and manage tuition-related reminders. Reminders are date but not time-sensitive, users can add as many reminders as they wish on a certain day.
Implementation
A reminder is composed of description
and date
, which are used to identify a reminder uniquely.
All the user’s reminders are stored internally in the reminderList
.
Reminder Tracker consist of the following operations that can be performed on reminders:
-
Add a reminder
- Add a new reminder and store it in the user’sreminderList
. -
Delete a reminder
- Delete a reminder by the index displayed in thereminderList
. -
Edit a reminder
- Edit a reminder (changing its attributes’ value) by the index displayed in thereminderList
. -
List all reminders
- View all the reminders stored in thereminderList
.
These operations are exposed in the Logic
interface by parsing respective AddReminderCommand
,
DeleteReminderCommand
and EditReminderCommand
.
When the user enters any of the aforementioned commands, the user input command undergoes the same command parsing as described in the Logic component.
Steps for the execution of the AddReminderCommand
(assuming that no errors are encountered during parsing of inputs):
- When the
execute()
method of theAddReminderCommand
is called, it will perform two-steps of validation.- The first validation method called is the
AddReminderCommand
’sReminder
’s objectisBeforeToday()
. - Assuming the previous step’s validation is successful, it will then call
Model
’shasReminder()
method.
- The first validation method called is the
- Assuming that the above validations passes, the
Model
’saddReminder()
method is called, which will then call theReminderTracker
’saddReminder()
method. - The
Ui
component will detect this change and update the GUI. - Assuming that the above steps are all successful, the
AddReminderCommand
will then create aCommandResult
object and return the result.
The following Sequence Diagram summarises the aforementioned steps.
Displaying Reminders in the GUI
Pros | Cons | |
---|---|---|
Option 1 A pop-up notification for reminder of the day. |
User are notified of reminders without having specifically request for it. | Multiple pop-up notifications from the reminders could cause annoyance for the user. |
Option 2 (current choice) Display reminders at the side of the main window. |
User could see clearly the duration left for each task at a glance. | Reminders can be missed out if users are not aware of it. |
Reason for choosing option 2:
- Pop-up notifications can be intrusive and may cause latency when using the application.
The following activity diagram summarizes what happens when the add_reminder
command is executed.
Timetable Window
Tutor Tracker’s Timetable GUI allows users to view their appointments and schedules of a particular week in a graphical representation.
Rationale
As Tutor Tracker is an application to aid users in tracking their upcoming tuition appointments and schedules, our target users are secondary students. Similar to their school’s timetable, we wish to present their personal tuition appointments and schedules as a timetable.
Implementation
The current implementation of the timetable view retrieve the list of appointments and schedules from the ModelManager
.
The timetable view will display appointments and schedules timeslots from Monday to Sunday using JavaFx’s GridPane.
Each row would consist of all appointments & schedules of a specific day.
The duration of an appointment or schedule would correspond to the number of columns.
The date of an appointment will be indicated using the first column of the grid.
When the user enters the timetable
command to open the timetable window, the user input command undergoes the same command parsing as described in
Logic component.
Displaying TimeTable in the GUI
Pros | Cons | |
---|---|---|
Option 1 A embedded timetable at the side of main window. |
Users can view their timetable without having specifically request for it. | UI may be too cluttered due to amount of information on screen. |
Option 2 (current choice) Displaying timetable as a separate window. |
Visually cleaner and clearer as it is isolated from the other Tutor Tracker’s Main Window. | Lower user experience as commands are required to open the timetable window. |
Reason for choosing option 2:
- To avoid overwhelming users with a huge amount of information, we strongly believe that opening a separate window is ideal.
The following activity diagram summarizes what happens when the timetable
command is executed.
Budget Feature
Implementation
The proposed budget feature is to facilitate the user to keep track of the total cost of all of his own appointments and whether it is within the budget he has set for himself. The budget is an optional feature, and can easily be added through CLI. It supports the following operations:
command
- example usage
-
add_budget budget_size
- add_budget b/500 -
edit_budget budget_size
- edit_budget b/600 -
delete_budget
- delete_budget -
view_budget
- view_budget
The following activity diagram summarizes what happens when the add_budget
command is
executed.
Steps for the execution of the AddBudgetCommand
(assuming that no errors are
encountered):
- When the
execute()
method of theLogicManager
is called, theTutorTrackerParser
’sparseCommand()
method is called. - The
TutorTrackerParser
will then create aAddBudgetCommandParser
. - The
AddBudgetCommandParser
will then parse the inputs, validate the parameter, and create a newBudget
object with the given budget value. - The
AddBudgetCommandParser
will then create a newAddBudgetCommand
with theBudget
object created. - Assuming that the above steps are all successful, the
LogicManager
will call theModelManager
’saddBudget()
, then create aCommandResult
object and return the result.
Given below is example usage scenarios and how the reminder features behave.
{More to be added}
Documentation, logging, testing, configuration, dev-ops
Appendix: Requirements
Product scope
Target user profile:
Tech-savvy secondary school students in Singapore who to need to search for tutors, manage their tuition appointments and academic records, and prefer CLI over GUI.
Value proposition:
The demand for tuition in Singapore is escalating, especially among secondary school students. A large amount of time and money has been invested in finding tutors and managing ever growing lists of tuition appointments. Currently, there are limited number of apps and websites that cater to this need, particularly in a streamlined typing oriented CLI. Therefore, this app aims to assist secondary school students in streamlining the process of searching for tutors and managing their tuition appointments. These students can search for an ideal tutor based on their personal preferences (such as subjects, expertise, years of experience, cost, availability etc.), and cut down on the time taken tracking their favoured tutors and tuition appointments.
User stories
Priorities: High (must have) - * * *
, Medium (nice to have) - * *
, Low (unlikely to have) - *
Priority | As a … | I want to … | So that I can… |
---|---|---|---|
* * * |
User | Add new tutor details | Keep track of a new tutor that I have heard about |
* * * |
User | Delete tutor details | Remove tutor that I no longer need the details of |
* * * |
User | List all tutor(s) | See all known tutor(s) |
* * * |
User | View details of a tutor (subject, background, age) | Determine whether I should choose this tutor |
* * * |
User | Add tuition appointment | Keep track of appointments I have made |
* * * |
User | View my tuition appointment(s) | Keep track of appointment(s) |
* * * |
User | Delete a tuition appointment | Remove canceled appointment |
* * * |
User | Check my own tuition appointments list | Know the timing of ALL my appointments in order |
* * |
User | Filter tutors by their name | Find a tutor by name |
* * |
User | Filter tutors by their gender | Find a tutor of my preferred gender |
* * |
User | Filter tutors by their contact details | Find a tutor by known contact details |
* * |
User | Filter tutors by their location | Find tutors nearby |
* * |
User | Filter tutors by the subjects they teach | Find a tutor that caters to my academic needs |
* * |
User | Filter tutor by cost | Find a tutor that fits my budget |
* * |
User | Filter tutors by their years of experience | Find a tutor with experience within the range of my expectation |
* * |
User | Filter tutors by their qualifications | Find a tutor with qualifications within the range of my expectation |
* * |
User | Filter my tuition appointments by tutor’s name | Keep track of all the tuition appointments under a particular tutor |
* * |
User | Filter my tuition appointments by subjects | Keep track of all the tuition appointments of a particular subject |
* * |
User | Filter my tuition appointments by date and time | Keep track of all the tuition appointments in a time period |
* * |
User | Filter my tuition appointments by location | Keep track of all the tuition appointments in a given location |
* * |
Careless user | Edit tutor details | Fix typos or add in details that I forgot to enter of the tutor |
* * |
Tech-savvy user | Export tutor’s details into a text file | Share the tutor’s details with others |
* * |
User | Keep track of the details of my favourite tutors | Contact them and set up an appointment with them |
* * |
User | Unfavourite a tutor | Remove the tutor from my list of favourites |
* * |
User | List all the tutor(s) that were added to favourites | Access the details of the favourite tutor(s) fast |
* * |
Meticulous user | Add note to tutor | Remind myself of some additional details of the tutor |
* * |
User | Delete note from tutor | Remove note from tutor that are no longer relevant |
* * |
User | List tutors with note | Keep track which tutor has note added |
* * |
Tech-savvy User | Add grade records to a digital GradeBook | Keep track of grades I obtained for reference and future study plan |
* * |
Careless user | Edit grade record details | Correct typos or update the details of my academic records |
* * |
User | Delete outdated grade records | Remove past grades if they are no longer needed |
* * |
User | List all grades | See all existing academic records in my GradeBook |
* * |
User | Add a budget | Add a personal budget to keep track of |
* |
User | Delete a budget | Delete an existing budget that I have and no longer need |
* * |
User | Edit a budget | Change an existing budget that I have |
* * |
User | View a budget | View an existing budget and cost of total appointments of user |
* * |
User | Add a schedule | Keep track of tuition-related schedules |
* * |
User | View my schedule(s) on a particular date | Know what schedule(s) do I have on a particular day |
* * |
User | Delete a schedule | Remove canceled schedules |
* * |
User | Check my own schedule list | Know the timing of all my schedule(s) in order |
* * |
Careless user | Edit schedule details | Fix typos or add in details that I forgot to enter of the schedule |
* * |
Meticulous user | View my timetable that consist of both appointment(s) and schedule(s) | Keep track of appointment(s) and schedule(s) happening on a particular week |
* * |
User | Add a reminder | Keep track and manage personal reminder(s) |
* * |
User | Delete a reminder | Remove unnecessary reminder |
* * |
User | Check my own reminder list | Know the dates of all my reminders in order |
* * |
Careless user | Edit reminder details | Fix typos or add in details that I forgot to enter of the reminder |
Use cases
For all use cases below, the System is the TutorTracker
and the Actor is the user
, unless specified otherwise.
Use Case UC0001: Add new tutor details
MSS
- User inputs tutor details.
-
TutorTracker confirms that tutor details have been added to list.
Use case ends.
Extensions
- 1a. Details are not keyed in the correct format as specified in user guide.
-
1a1. TutorTracker shows an error message
Use case resumes at step 1.
-
- 2a. Tutor details already exists in list.
-
2a1. TutorTracker shows an error message
Use case ends.
-
Use Case UC0002: List tutor(s)
MSS
- User requests to list tutor(s).
-
TutorTracker shows a list of tutor(s).
Use case ends.
Extension
-
1a. The list is empty.
Use case ends.
Use Case UC0003: Edit tutor
MSS
- User requests to list tutors (UC0002).
- User inputs new tutor details of specific tutor they want to edit.
-
TutorTracker confirms that tutor details have been edited.
Use case ends.
Extensions
- 2a. Details are not keyed in the correct format as specified in user guide.
-
2a1. TutorTracker shows an error message
Use case resumes at step 2.
-
- 2b. The tutor specified is invalid.
-
2b1. TutorTracker shows an error message.
Use case resumes at step 2.
-
Use Case UC0004: Delete a tutor
MSS
- User requests to list tutors (UC0002).
- TutorTracker shows a list of tutors.
- User requests to delete a tutor in the list by index.
-
TutorTracker deletes the tutor.
Use case ends.
Extensions
-
1a. The list is empty.
Use case ends. -
3a. The index is invalid.
-
3a1. TutorTracker shows an error message.
Use case resumes at step 2.
-
Use Case UC0005: Favourite a tutor
MSS
- User requests to list tutors (UC0002).
- TutorTracker shows a list of tutors.
- User requests to favourite a tutor in the list by index.
-
Tutor added as favourite.
Use case ends.
Extensions
-
1a. The list is empty.
Use case ends.
- 3a. The index is invalid.
-
3a1. TutorTracker shows an error message.
Use case resumes at step 2.
-
- 3b. The tutor is already a favourite.
-
3b1. TutorTracker shows an error message.
Use case ends.
-
Use Case UC0006: List favourite(s)
MSS
- User requests to list tutor(s) who were added as favourite.
-
TutorTracker shows a list of favourite tutor(s).
Use case ends.
Extension
-
1a. The list is empty.
Use case ends.
Use Case UC0007: Unfavourite a tutor
MSS
- User requests to list tutors (UC0002).
- TutorTracker shows a list of tutors.
- User requests to unfavourite a tutor in the list by index.
-
Tutor removed from favourite.
Use case ends.
Extensions
-
1a. The list is empty.
Use case ends. - 3a. The index is invalid.
-
3a1. TutorTracker shows an error message.
Use case resumes at step 2.
-
- 3b. The tutor is not a favourite so cannot be unfavourited.
-
3b1. TutorTracker shows an error message.
Use case ends.
-
Use Case UC0008: Export tutor’s details
MSS
- User requests to list tutors (UC0002).
- TutorTracker shows a list of tutors.
- User requests to export a tutor’s details,subject list and notes in the list, by index of that tutor.
-
Text file containing tutor’s details,subject list and notes created.
Use case ends.
Extensions
-
1a. The list is empty.
Use case ends. -
3a. The index is invalid.
- 3a1. TutorTracker shows an error message.
Use case resumes at step 2.
- 3a1. TutorTracker shows an error message.
Use Case UC0009: Add new tuition appointment
MSS
- User requests to add an appointment.
-
TutorTracker adds the appointment and displays the new appointment.
Use case ends.
Extensions
- 1a. The tutor name, date of appointment or start and end time is empty.
-
1a1. TutorTracker shows an error message.
Use case ends.
-
- 1b. The given date or start and end time is invalid.
-
1b1. TutorTracker shows an error message.
Use case ends.
-
Use Case UC0010: List all tuition appointments
MSS
- User requests to view the list of tuition appointments.
-
TutorTracker displays the list of tuition appointments to the user.
Use case ends.
Extension
- 1a. The list is empty.
Use case ends.
Use Case UC0011: View tuition appointments
MSS
- User requests to view the list of tuition appointments.
- TutorTracker displays the list of tuition appointments to the user.
- User requests to view an appointment by date.
-
TutorTracker displays the appointment.
Use case ends.
Extensions
- 1a. The list is empty.
- 1a1. TutorTracker shows a message that there are no appointments.
Use case ends.
- 3a. The date is invalid.
- 3a1. TutorTracker shows an error message.
Use case resumes at step 2.
Use Case UC0012: Find tuition appointment
MSS
- User requests to view the list of tuition appointments.
- TutorTracker displays the list of tuition appointments to the user.
- User requests to find appointments by tutor’s name.
-
TutorTracker displays the appointment that match the search value.
Use case ends.
Extensions
- 1a. The list is empty.
- 1a1. TutorTracker shows a message that there are no appointments.
Use case ends.
- 3a. No appointment matches the search value.
- 3a1. TutorTracker displays an empty list.
Use case ends.
Use Case UC0013: Delete a tuition appointment
MSS
- User requests to list appointments.
- TutorTracker shows a list of appointments.
- User requests to delete a specific appointment in the list.
- TutorTracker deletes that specific appointment.
Use case ends.
Use Case UC0014: Add a new grade
MSS
- User inputs grade details.
- TutorTracker adds the grade and displays the new grade.
Use case ends.
Extensions
- 1a. Grade details are invalid or empty.
- 1a1. TutorTracker shows an error message.
Use case ends.
- 2a. Grade details already exist in list.
- 2a1. TutorTracker shows an error message.
Use case ends.
Use Case UC0015: List grade(s)
MSS
- User requests to list grade(s).
- TutorTracker shows a list of grade(s).
Use case ends.
Use Case UC0016: Delete a grade
MSS
- User requests to list grades.
- TutorTracker shows a list of grades.
- User requests to delete a grade at specified index.
- TutorTracker deletes that specific grade.
Use case ends.
Extension
- 3a. Index is invalid.
- 3a1. TutorTracker shows an error message.
Use case ends.
Use Case UC0017: Edit a grade
MSS
- User requests to list grades.
- TutorTracker shows a list of grades.
- User requests to edit a grade at specified index.
- TutorTracker edits that specific grade.
Use case ends.
Extensions
- 3a. Index is invalid.
- 3a1. TutorTracker shows an error message.
Use case ends.
- 3b. Grade details are invalid or empty.
- 3b1. TutorTracker shows an error message.
Use case ends.
- 3c. Grade details already exist in list.
- 3c1. TutorTracker shows an error message
Use case ends.
Use Case UC0018: Add a budget
MSS
- User wants to add a personal budget to keep track of.
- User keys in command to add budget of an amount he wants.
Use case ends.
Extensions
- 2a. A budget is already present.
-
2a1. TutorTracker flags out an error.
Use case ends.
-
- 2b. Invalid budget amount is added, for example a negative amount.
-
2b1. TutorTracker flags out the error.
Use case ends.
-
Use Case UC0019: Edit a budget
MSS
- User wants to change the existing budget.
-
User requests to change the budget to an amount he wants.
Use case ends.
Extensions
- 2a. A budget is already present.
-
2a1. TutorTracker flags out an error.
Use case ends.
-
Use Case UC0020: Delete a budget
MSS
- User does not want to do with a budget.
-
User requests to delete budget.
Use case ends.
Extensions
- 2a. There is no existing budget.
-
2a1. TutorTracker flags out an error.
Use case ends.
-
Use Case UC0021: View a budget
MSS
- User does not want view an existing budget.
-
User requests to view budget.
Use case ends.
Extension
- 2a. There is no existing budget.
-
2a1. TutorTracker flags out an error.
Use case ends.
-
Use Case UC0022: Add new schedule
MSS
- User requests to add a schedule.
-
TutorTracker adds the schedule and displays the new schedule.
Use case ends.
Extensions
- 1a. The title, description, date of schedule or start and end time is empty.
-
1a1. TutorTracker shows an error message.
Use case ends.
-
- 1b. The given date or start and end time is invalid.
-
1b1. TutorTracker shows an error message.
Use case ends.
-
Use Case UC0023: List all schedules
MSS
- User requests to view the list of schedules.
-
TutorTracker displays the list of schedules to the user.
Use case ends.
Use Case UC0024: View schedule
MSS
- User requests to view the list of schedules.
- TutorTracker displays the list of schedules to the user.
- User requests to view schedules on a particular date.
-
TutorTracker displays the schedules happening on a particular date the user have requested for.
Use case ends.
Extensions
- 1a. The list is empty.
- 1a1. TutorTracker shows a message that there are no schedules.
Use case ends.
- 3a. The date is invalid.
- 3a1. TutorTracker shows an error message.
Use case resumes at step 2.
Use Case UC0025: Delete a schedule
MSS
- User requests to view the list of schedules.
- TutorTracker displays the list of schedules to the user.
- User requests to delete a specific schedule in the list by indicating the index shown.
- TutorTracker deletes that specific schedule.
Extensions
- 3a. The index is invalid.
- 3a1. TutorTracker shows an error message. Use case resumes at step 2.
Use Case UC0026: Add a new reminder
MSS
- User requests to add a reminder.
-
TutorTracker adds the reminder and displays the new reminder.
Use case ends.
Extensions
- 1a. The description or date of reminder is empty.
-
1a1. TutorTracker shows an error message.
Use case ends.
-
- 1b. The given date is invalid.
-
1b1. TutorTracker shows an error message.
Use case ends.
-
Use Case UC0027: List all reminders
MSS
- User requests to view the list of reminders.
-
TutorTracker displays the list of reminders to the user.
Use case ends.
Use Case UC0028: Delete a reminder
MSS
- User requests to view the list of reminders.
- TutorTracker displays the list of reminders to the user.
- User requests to delete a specific reminder in the list by indicating the index shown.
- TutorTracker deletes that specific reminder.
Extensions
- 3a. The index is invalid.
- 3a1. TutorTracker shows an error message. Use case resumes at step 2.
Use Case UC0029: Open timetable window
MSS
- User requests to view timetable of a particular week by entering a date.
- TutorTracker open and displays the timetable window to user.
Extensions
- 1a. The date is empty.
- 1a1. TutorTracker set the default date is today.
Use case resumes at step 2.
- 1b. The given date is invalid.
- 1b1. TutorTracker shows an error message.
Use case ends.
Use Case UC0030: Add Tutor Filter
MSS
- User inputs details of new tutor filter(s).
- TutorTracker confirms that tutor filters have been added to list of tutor filters.
-
TutorTracker displays tutors according to the updated list of tutor filters.
Use case ends.
Extensions
- 1a. Details are not keyed in the correct format as specified in user guide.
-
1a1. TutorTracker shows an error message
Use case resumes at step 1.
-
- 1b. Duplicate tutor filter exists in TutorTracker.
-
1b1. TutorTracker shows an error message.
Use case resumes at step 1.
-
Use Case UC0031: Delete Tutor Filter
MSS
- User inputs details of tutor filter(s) to delete.
- TutorTracker confirms that tutor filters have been deleted from list of tutor filters.
-
TutorTracker displays tutors according to the updated list of tutor filters.
Use case ends.
Extensions
- 1a. Details are not keyed in the correct format as specified in user guide.
-
1a1. TutorTracker shows an error message
Use case resumes at step 1.
-
- 1b. Tutor filter(s) do not exist in TutorTracker.
-
1b1. TutorTracker shows an error message.
Use case resumes at step 1.
-
Use Case UC0032: Add Appointment Filter
MSS
- User inputs details of new appointment filter(s).
- TutorTracker confirms that appointment filters have been added to list of appointment filters.
-
TutorTracker displays appointments according to the updated list of appointment filters.
Use case ends.
Extensions
- 1a. Details are not keyed in the correct format as specified in user guide.
-
1a1. TutorTracker shows an error message
Use case resumes at step 1.
-
- 1b. Duplicate appointment filter exists in TutorTracker.
-
1b1. TutorTracker shows an error message.
Use case resumes at step 1.
-
Use Case UC0033: Delete Appointment Filter
MSS
- User inputs details of appointment filter(s) to delete.
- TutorTracker confirms that appointment filters have been deleted from list of appointment filters.
-
TutorTracker displays appointments according to the updated list of appointment filters.
Use case ends.
Extensions
- 1a. Details are not keyed in the correct format as specified in user guide.
-
1a1. TutorTracker shows an error message
Use case resumes at step 1.
-
- 1b. Appointment filter(s) do not exist in TutorTracker.
-
1b1. TutorTracker shows an error message.
Use case resumes at step 1.
-
Non-Functional Requirements
Technical Requirements:
- Application should be able to launch in any operating systems (Linux, Max, Windows) with JDK 11 installed on computer.
- Should be able to run on both 32-bit and 64-bit systems.
Performance Requirements
- Response to user command (add, delete, update, retrieve) should be visible within 2 seconds.
- Should be able to hold at least 10000 persons and appointments without any noticeable decrease in loading time.
Quality Requirements
- Interface can be used by a user with no programming experience, i.e., user should not be expected to key in complicated commands or logical statements to get a desired output.
Process Requirements
- Project to be updated with one new feature/improvement from each member each week.
- Updates will be pushed to each teammates’ individual branches, where PRS are made to the master branch.
Glossary
- Mainstream OS: Windows, Linux, Unix, OS-X
- Event: Tuition-related event that is happening on a particular day that has a start time and end time.
- Appointment: An event that refers to a tuition session with a particular tutor. Information stored including, the tutor’s name, date of appointment, start and end time and location.
- Schedule: An event that is closely related to tuition, such as allocating time to do tuition homework or assessments.
- Education Level: The level of education offered by a tutor for a specific subject, e.g, “O level”.
- Years of Experience: Years of experience of tutoring a specific subject.
- Qualifications: Official certificates of successful completion of an education programme, e.g, Bachelor of Science.
- Index: Index number shown in the displayed list. The index must be a positive integer 1, 2, 3, …
- Unfavourite: Reverse the action of adding as a favourite
- Singapore-GCE O’Level grading system: The alphanumeric grade A (1,2), B (3,4), C (5,6), D7, E8, and F9. (Reference: Singapore-GCE O’Level grading system.)
Appendix: Instructions for manual testing
Given below are instructions to test the app manually.
Launch and shutdown
-
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 tutors. The window size may not be optimum.
-
-
Saving window preferences
-
Resize the window to an optimum size. Move the window to a different location. Close the window.
-
Re-launch the app by double-clicking the jar file.
Expected: The most recent window size and location is retained.
-
Adding a Tutor
- Adding a tutor
- Prerequisites: Arguments are valid and compulsory parameters are provided.
- Test Case:
add_tutor n/John Doe g/Male p/98765432 e/johnd@example.com a/John street, block 123, #01-01 s/English r/50 l/Secondary 3 y/5 q/A-Level s/Mathematics r/60 l/Secondary 4 y/6 q/A-Level
Expected: Adds a tutor by the nameJohn Doe
, who can teachEnglish
atSecondary 3
level.
- Test Case:
add_tutor n/John Doe g/Male p/98765432 e/johnd@example.com a/John street, block 123, #01-01 s/English r/50 l/Secondary 3 y/5 q/A-Level s/Mathematics r/60 l/Secondary 4 y/6 q/A-Level notes/Patient
Expected: Adds a tutor by the nameJohn Doe
, who can teachEnglish
atSecondary 3
level. A note:Patient
is attached to the tutor as well.
- Test Case:
add_tutor n/John Doe g/Male p/98765432 e/johnd@example.com a/John street, block 123, #01-01 s/English r/50 l/Secondary 3 y/5 q/A-Level s/Mathematics r/60 l/Secondary 4 y/6 q/A-Level notes/Patient
Expected: The tutor is not added. An error message saying that the tutor already exists (assuming you did the first test case) is shown
- Test Case:
add_tutor n/John!!!!! g/Male p/98765432 e/johnd@example.com a/John street, block 123, #01-01 s/English r/50 l/Secondary 3 y/5 q/A-Level s/Mathematics r/60 l/Secondary 4 y/6 q/A-Level
Expected: The tutor is not added. An error message saying that the name should be in alphanumeric is shown
- Test Case:
add_tutor n/John Doe g/Dinosaur p/98765432 e/johnd@example.com a/John street, block 123, #01-01 s/English r/50 l/Secondary 3 y/5 q/A-Level s/Mathematics r/60 l/Secondary 4 y/6 q/A-Level
Expected: The tutor is not added. An error message saying that the gender is invalid is shown
- Test Case:
add_tutor n/John Doe g/Male p/995 e/johnd@example.com a/John street, block 123, #01-01 s/English r/50 l/Secondary 3 y/5 q/A-Level s/Mathematics r/60 l/Secondary 4 y/6 q/A-Level
Expected: The tutor is not added. An error message saying that the phone number length is invalid is shown
- Test Case:
add_tutor n/John Doe g/Male p/98765432 e/johexample.com a/John street, block 123, #01-01 s/English r/50 l/Secondary 3 y/5 q/A-Level s/Mathematics r/60 l/Secondary 4 y/6 q/A-Level
Expected: The tutor is not added. An error message saying that the email format is invalid is shown
1 . Test Case:add_tutor n/John Doe g/Male p/98765432 e/johnd@example.com a/ s/English r/50 l/Secondary 3 y/5 q/A-Level s/Mathematics r/60 l/Secondary 4 y/6 q/A-Level
Expected: The tutor is not added. An error message saying that the address should not be blank is shown
Deleting a tutor
-
Deleting a tutor while all tutor(s) are being shown
- Prerequisites:
- List all tutor(s) using the
list_tutors
command. Multiple tutors in the list. - The tutor to be deleted must exist.
- Index must be a positive integer.
- List all tutor(s) using the
-
Test case:
delete_tutor 1
Expected: First tutor is deleted from the list. Details of the deleted tutor shown in the status message. -
Test case:
delete_tutor 0
Expected: No tutor is deleted. Error details shown in the status message. Status bar remains the same. - Other incorrect delete commands to try:
delete_tutor
,delete_tutor x
,...
(where x is larger than the list size)
Expected: Similar to previous.
- Prerequisites:
Viewing a tutor
-
Viewing a tutor
- Prerequisites:
- List all tutor(s) using the
list_tutors
command. Multiple tutors in the list. - Arguments are valid and compulsory parameters are provided.
- The index provided must be a positive integer must be smaller or equal to the largest index seen on the current window.
- List all tutor(s) using the
-
Test Case:
view_tutor 1
Expected: The Tutor List Panel updates and displays the tutor at index 1. - Test Case:
view_tutor -1
Expected: The Tutor List Panel does not update. An error message of invalid command format is shown.
- Prerequisites:
Listing all tutors
- List all tutors
- Test Case:
list_tutors
Expected: The Tutor List Panel displays the all the existing tutors.
- Test Case:
list_tutors abcdefg
Expected: The Tutor List Panel displays the all the existing tutors.
- Test Case:
Adding a Note
- Adding a Note
- Prerequisites:
- List all tutor(s) using the
list
command. Multiple tutors in the list - Arguments are valid and compulsory parameters are provided.
- List all tutor(s) using the
- Test Case:
add_note 1 patient tutor
Expected: Adds a notepatient tutor
to the first tutor from the list.
- Test Case:
add_note 0 patient tutor
Expected: No note is added. Error details shown in the status message.
- Test Case:
add_note 1 patient tutor
Expected: No note is added. An error message saying that the tutor already has a note (assuming you did the first test case) is shown
- Prerequisites:
Editing a Note
- Editing a Note
- Prerequisites: Arguments are valid and compulsory parameters are provided.
- Test Case:
edit_note 1 good tutor
Expected: The note of the first tutor from the list changed togood tutor
.
- Test Case:
edit_note 0 patient tutor
Expected: No note is updated. Error details shown in the status message.
Listing All Tutor(s) with Note
- List all tutor(s) with note
- Test Case:
list_note
Expected: The Tutor List Panel displays the all the tutor with notes.
- Test Case:
list_note abcdefg
Expected: The Tutor List Panel displays the all the tutor with notes.
- Test Case:
Deleting a Note
-
Deleting a note while all note(s) are being shown
- Prerequisites:
- List all tutor(s) using the
list_tutors
command. Multiple tutors in the list. - The note to be deleted must exist.
- Index must be a positive integer.
- List all tutor(s) using the
-
Test case:
delete_note 1
Expected: Note of the first tutor is deleted. Details of the deleted note shown in the status message. -
Test case:
delete_note 0
Expected: No note is deleted. Error details shown in the status message. - Other incorrect delete commands to try:
delete
,delete x
,...
(where x is larger than the list size)
Expected: Similar to previous.
- Prerequisites:
Export Tutor Details
- Export Tutor Details
- Prerequisites:
- List all tutor(s) using the
list_tutors
command. Multiple tutors in the list. - The tutor to be exported must exist.
- Index must be a positive integer.
- List all tutor(s) using the
- Test Case:
export 1
Expected: The details of the first tutor is exported. Atxt
file named after the tutor is saved at theexport
folder of thejar
file location.
- Test Case:
export 0
Expected: No details is exported. Error details shown in the status message.
- Prerequisites:
Favourite Tutor
- Favourite Tutor
- Prerequisites:
- List all tutor(s) using the
list_tutors
command. Multiple tutors in the list. - The tutor to be favourite must exist.
- Index must be a positive integer.
- List all tutor(s) using the
- Test Case:
favourite 1
Expected: The first tutor from the list is favourite. A favourite indicator (star) shown beside the tutor’s name.
- Test Case:
export 0
Expected: No tutor is favourite. Error details shown in the status message.
- Prerequisites:
Unfavourite Tutor
- Unfavourite Tutor
- Prerequisites:
- List all tutor(s) using the
list_tutors
command. Multiple tutors in the list. - The tutor to be unfavourite must exist.
- Index must be a positive integer.
- List all tutor(s) using the
- Test Case:
favourite 1
Expected: The first tutor from the list is unfavourite. A favourite indicator (star) is removed from beside the tutor’s name.
- Test Case:
export 0
Expected: No tutor is unfavourite. Error details shown in the status message.
- Prerequisites:
Listing All Favourite Tutor(s)
- List all favourite tutor(s)
- Test Case:
list_favourites
Expected: The Tutor List Panel displays the all the favourite tutors.
- Test Case:
list_favourites abcdefg
Expected: The Tutor List Panel displays the all the favourite tutors.
- Test Case:
Viewing Appointments
- Viewing appointments
- Prerequisites:
- Arguments are valid and compulsory parameters are provided.
- The date must be in the form
yyyy-mm-dd
.
- Test Case:
view_appointment 2021-4-20
Expected: The Appointment List Panel displays the appointments happening on Apr 20 2021.
- Test Case:
view_appointment 20/4/2021
Expected: The Appointment List Panel not updated. An error message saying that the date is in the wrong format is shown.
- Prerequisites:
Listing All Appointments
- List all appointments
- Test Case:
list_appointments
Expected: The Appointment List Panel displays the all the appointments in ascending (the earliest appointment date to the latest appointment date) order.
- Test Case:
list_appointments abcdefg
Expected: The Appointment List Panel displays the all the appointments in ascending (the earliest appointment date to the latest appointment date) order.
- Test Case:
Adding a Schedule
- Adding a schedule
- Prerequisites:
- Arguments are valid and compulsory parameters are provided.
- The date must be in the form
yyyy-mm-dd
. - The time must be in the form ` hh:mm a`.
- The new schedule date and time must be a future datetime.
-
TIME_FROM
andTIME_TO
must be a valid time range (TIME_FROM
must be beforeTIME_TO
). - The earliest possible
TIME_FROM
is 06:00 AM and latest possibleTIME_TO
is 11:00 PM. - The shortest possible schedule is 1 hour, and the longest possible schedule is 8 hours
- The schedule’s timeslot must be in blocks of 30 minutes or 1 hour.
- The schedule’s timeslot must not clash with existing appointments & schedules.
- Test Case:
add_schedule t/Maths Tuition Homework d/2021-6-2 fr/5:00pm to/7:00pm ds/Calculus Topic
Expected: Adds a schedule by the titleMaths Tuition Homework
, happening fromJun 02 2021 05:00 PM to Jun 02 2021 07:00 PM
- Test Case:
add_schedule t/Science Tuition Homework d/2021-6-31 fr/6:00pm to/7:00pm ds/Chapter 5 to 6
Expected: Adds a schedule by the titleScience Tuition Homework
, happening fromJun 30 2021 06:00 PM to Jun 30 2021 07:00 PM
- Test Case:
add_schedule t/Maths Tuition Homework d/2021-6-2 fr/5:00pm to/7:00pm ds/Calculus Topic
Expected: The schedule is not added. An error message saying that the schedule already exists (assuming you did the first test case) is shown
- Test Case:
add_schedule t/Maths Tuition Homework d/2/5/2021 fr/5:00pm to/7:00pm ds/Calculus Topic
Expected: The schedule is not added. An error message saying that the date is in the wrong format is shown
- Test Case:
add_schedule t/Maths Tuition Homework d/2021-6-10 fr/15:00pm to/7:00pm ds/Calculus Topic
Expected: The schedule is not added. An error message saying that the time is in the wrong format is shown
- Test Case:
add_schedule t/Maths Tuition Homework d/2021-6-10 fr/7:00pm to/5:00pm ds/Calculus Topic
Expected: The schedule is not added. An error message saying that the time range is invalid is shown
- Test Case:
add_schedule t/Maths Tuition Homework d/2021-6-10 fr/5:00am to/10:00am ds/Calculus Topic
Expected: The schedule is not added. An error message saying that the start time is invalid is shown
- Test Case:
add_schedule t/Maths Tuition Homework d/2021-6-10 fr/10:00pm to/1:00am ds/Calculus Topic
Expected: The schedule is not added. An error message saying that the end time is invalid is shown
- Test Case:
add_schedule t/Maths Tuition Homework d/2021-6-10 fr/5:31pm to/8:46pm ds/Calculus Topic
Expected: The schedule is not added. An error message saying that the time minutes are not in blocks of 30 or 60 minutes is shown
- Test Case:
add_schedule t/English Tuition Homework d/2021-6-2 fr/4:00pm to/8:00pm ds/Calculus Topic
Expected: The schedule is not added. An error message saying that the schedule clashes with another appointment or schedule (assuming you did the first test case) is shown
- Prerequisites:
Editing a Schedule
- Editing a schedule
- Prerequisites:
- Arguments are valid and compulsory parameters are provided.
- The schedule to be edited must not be in the past.
- The date must be in the form
yyyy-mm-dd
. - The time must be in the form ` hh:mm a`.
- The edited schedule date and time must be a future datetime.
- If any of the following parameter:
DATE
,TIME_FROM
orTIME_TO
are edited, all three parameters must be provided. - TIME_FROM
and
TIME_TOmust be a valid time range (
TIME_FROMmust be before
TIME_TO`). - The earliest possible
TIME_FROM
is 06:00 AM and latest possibleTIME_TO
is 11:00 PM. - The shortest possible schedule is 1 hour, and the longest possible schedule is 8 hours
- The schedule’s timeslot must be in blocks of 30 minutes or 1 hour.
- The schedule’s timeslot must not clash with existing appointments & schedules.
- The index provided must be a task index seen on the current window.
- Test Case:
edit_schedule 1 t/New Schedule Name
Expected: The schedule’s title changes toNew Schedule Name
- Test Case:
edit_schedule 1 ds/New Schedule Description
Expected: The schedule’s description changes toNew Schedule Description
- Test Case:
edit_schedule 1 d/2021-6-2 fr/5:00pm to/7:00pm
Expected: The schedule’s time_from changes toJun 02 2021 05:00 PM
and time_to changes toJun 02 2021 07:00 PM
.
- Test Case:
edit_schedule 1 fr/5:00pm to/7:00pm
Assuming the schedule to be edited is in the past,
Expected: The schedule is not updated. An error message saying that past schedules cannot be edited.
- Test Case:
edit_schedule 1 fr/5:00pm to/7:00pm
Expected: The schedule is not updated. An error message saying that all three date and time parameters must be present.
- Test Case:
edit_schedule 1 to/7:00pm
Expected: The schedule is not updated. An error message saying that all three date and time parameters must be present.
- Test Case:
edit_schedule 1 d/2021-6-2
Expected: The schedule is not updated. An error message saying that all three date and time parameters must be present.
- Test Case:
edit_schedule 1 d/2/5/2021 fr/5:00pm to/7:00pm
Expected: The schedule is not updated. An error message saying that the date is in the wrong format is shown
- Test Case:
edit_schedule 1 d/2021-6-10 fr/15:00pm to/7:00pm
Expected: The schedule is not updated. An error message saying that the time is in the wrong format is shown
- Test Case:
edit_schedule 1 d/2021-6-10 fr/7:00pm to/5:00pm
Expected: The schedule is not updated. An error message saying that the time range is invalid is shown
- Test Case:
edit_schedule 1 d/2021-6-10 fr/5:00am to/10:00am
Expected: The schedule is not updated. An error message saying that the start time is invalid is shown
- Test Case:
edit_schedule 1 d/2021-6-10 fr/10:00pm to/1:00am
Expected: The schedule is not updated. An error message saying that the end time is invalid is shown
- Test Case:
edit_schedule 1 d/2021-6-10 fr/5:31pm to/8:46pm
Expected: The schedule is not updated. An error message saying that the time minutes are not in blocks of 30 or 60 minutes is shown
- Test Case:
edit_schedule 1 d/2021-6-2 fr/4:00pm to/8:00pm
Expected: The schedule is not updated. An error message saying that the schedule clashes with another appointment or schedule (assuming you did the first test case) is shown
- Test Case:
edit_schedule -1 t/New Schedule Name
Expected: The schedule is not updated. An error message about the invalid index is shown.
- Prerequisites:
Viewing Schedules
- Viewing schedules
- Prerequisites:
- Arguments are valid and compulsory parameters are provided.
- The date must be in the form
yyyy-mm-dd
.
- Test Case:
view_schedule 2021-4-20
Expected: The Schedule List Panel displays the schedules happening on Apr 20 2021.
- Test Case:
view_schedule 20/4/2021
Expected: The Schedule List Panel not updated. An error message saying that the date is in the wrong format is shown.
- Prerequisites:
Listing All Schedules
- List all schedules
- Test Case:
list_schedules
Expected: The Schedule List Panel displays the all the schedules in ascending (the earliest appointment date to the latest appointment date) order.
- Test Case:
list_schedules abcdefg
Expected: The Schedule List Panel displays the all the schedules in ascending (the earliest appointment date to the latest appointment date) order.
- Test Case:
Deleting a Schedule
- Deleting a Schedule
- Prerequisites:
- List all schedule(s) using the
list_schedules
command. Multiple schedules in the list. - The schedule to be deleted must exist.
- Index must be a positive integer.
- List all schedule(s) using the
- Test Case:
delete_schedule 1
Expected: The first schedule displayed in the list is deleted.
- Test Case:
delete_schedule
Expected: An error message about the invalid command format is shown
- Test Case:
delete_schedule -1
Expected: An error message about the invalid command format is shown
- Prerequisites:
Adding a Reminder
- Adding a reminder
- Prerequisites:
- Arguments are valid and compulsory parameters are provided
- The date must be in the form
yyyy-mm-dd
. - The new reminder date must be a future date.
- Test Case:
add_reminder ds/Science Tuition Payment Due d/2021-6-2
Expected: Adds a reminder by the nameScience Tuition Payment Due
, to be reminded onJun 02 2021
- Test Case:
add_reminder ds/Maths Tuition Payment Due d/2021-6-21
Expected: Adds a schedule by the nameMaths Tuition Payment Due
, to be reminded onJun 21 2021
- Test Case:
add_reminder ds/Science Tuition Payment Due d/2021-6-2
Expected: The reminder is not added. An error message saying that the schedule already exists (assuming you did the first test case) is shown
- Test Case:
add_reminder ds/Science Tuition Payment Due d/2/6/2021
Expected: The reminder is not added. An error message saying that the date is in the wrong format is shown
- Prerequisites:
Editing a Reminder
- Editing a reminder
- Prerequisites:
- Arguments are valid and compulsory parameters are provided.
- The reminder to be edited must not be in the past.
- The date must be in the form
yyyy-mm-dd
. - The edited reminder date must be a future date.
- The index provided must be a positive integer index seen on the current window.
- Test Case:
edit_reminder 1 ds/New Reminder Description
Expected: The reminder’s description changes toNew Reminder Description
- Test Case:
edit_reminder 1 d/2021-6-5
Expected: The schedule’s date changes toJun 05 2021
- Test Case:
edit_schedule 1 d/2021-1-5
Assuming the reminder to be edited is in the past,
Expected: The reminder is not updated. An error message saying that past reminders cannot be edited.
- Test Case:
edit_reminder -1 ds/New Reminder Description
Expected: The reminder is not updated. An error message about the invalid index is shown.
- Prerequisites:
Listing All Reminders
- List all schedules
- Test Case:
list_reminders
Expected: The Reminder List Panel displays the all the reminders in ascending (the earliest appointment date to the latest appointment date) order.
- Test Case:
list_reminders abcdefg
Expected: The Reminder List Panel displays the all the reminders in ascending (the earliest appointment date to the latest appointment date) order.
- Test Case:
Deleting a Reminder
- Deleting a Reminder
- Prerequisites:
- List all reminder(s) using the
list_reminders
command. Multiple reminders in the list. - The reminder to be deleted must exist.
- The index provided must be a positive integer index seen on the current window.
- List all reminder(s) using the
- Test Case:
delete_reminder 1
Expected: The first reminder displayed in the list is deleted.
- Test Case:
delete_reminder
Expected: An error message about the invalid command format is shown.
- Test Case:
delete_reminder -1
Expected: An error message about the invalid command format is shown.
- Prerequisites:
Adding a Grade
- Adding a grade
- Prerequisites:
- Arguments are valid and compulsory parameters are provided.
- There should not be any duplicate grade (same
subject
and samegraded item
) existing in the list. -
grade letter
must follow the Singapore-GCE O’Level grading system.
- Test Case:
add_grade s/Geography gi/CA1 gr/A1
Expected: Adds a grade with subjectGeography
, graded itemCA1
and a gradeA1
- Test Case:
add_grade s/Geography gi/CA1 gr/A1
Expected: The grade is not added. An error message saying that the grade already exists (assuming you did the previous test case) is shown
- Test Case:
add_grade s/Geography gi/CA1 gr/A2
Expected: The grade is not added. An error message saying that the grade already exists (assuming you did the first test case) is shown
- Test Case:
add_grade s/Geography gi/Final Exam gr/A3
Expected: The grade is not added. An error message saying that the grade letter is in the wrong format is shown
- Test Case:
add_grade s/Secondary 4 Geography gi/Final Exam gr/B3
Expected: The grade is not added. An error message saying that the graded item is in the wrong format is shown
- Prerequisites:
Deleting a Grade
- Deleting a grade
- Prerequisites:
- List all grade(s) using the
list_grades
command. Multiple grades in the list. - The grade to be deleted must exist.
- Index must be a positive integer and must be smaller or equal to the largest index seen on the current window.
- List all grade(s) using the
- Test Case:
delete_grade 1
Expected: The first grade displayed in the list is deleted.
- Test Case:
delete_grade
Expected: An error message about the invalid command format is shown.
- Test Case:
delete_grade -1
Expected: An error message about the invalid command format is shown.
- Prerequisites:
Editing a Grade
- Editing a grade
- Prerequisites:
- Arguments are valid and compulsory parameters are provided.
- The grade to be edited must not be in the past.
- The index provided must be a positive integer must be smaller or equal to the largest index seen on the current window.
- There should not be any duplicate grade (same
subject
and samegraded item
) existing in the list. -
grade letter
must follow the Singapore-GCE O’Level grading system.
- Test Case:
edit_grade 1 s/New Subject
Expected: The grade’s subject changes toNew Subject
- Test Case:
edit_grade 1 gi/New Graded Item
Expected: The grade’s graded item changes toNew Graded Item
- Test Case:
edit_grade 1 gr/C5
Expected: The grade’s grade letter changes toC5
- Test Case:
edit_grade 2 s/New Subject gi/New Graded Item
Assuming there are at least 2 grades in the list and you did the previous two test cases. Expected: The grade is not updated. An error message saying that duplicate grade exists in the list.
- Test case:
edit_grade -1 s/New Subject
Expected: The grade is not updated. An error message of invalid command format is shown.
- Prerequisites:
Listing All Grades
- List all grades
- Test Case:
list_grades
Expected: The Grade List Panel displays the all the existing grades.
- Test Case:
list_grades abcdefg
Expected: The Grade List Panel displays the all the existing grades.
- Test Case:
Adding a Tutor Filter
- Adding a Tutor Filter
- Prerequisites for each test case:
- List of Tutor Filters must be empty
- There must be at least 2 Tutors in the tutor list.
- The first tutor must have the name Alex Yeoh and have at least 1 subject with experience of 5 years
- The second tutor must have the name Bernice Yu and have at least 1 subject with experience of 4 years
- Test Case:
add_tutor_filter n/Alex
Expected: A Tutor FilterName: alex
is added and the tutor Bernice Yu is no longer displayed.
- Test Case:
add_tutor_filter y/<5
Expected: A Tutor FilterSubject Experience: < 5
is added and the Alex Yeoh is no longer displayed.
- Test Case:
add_tutor_filter
Expected: An error message is shown saying at least 1 filter must be provided.
- Prerequisites for each test case:
Deleting a Tutor Filter
- Adding a Tutor Filter
- Prerequisites for each test case:
- Test case is run directly after the previous test case specified
- Test Case (Follows
Adding a Tutor Filter
test case 1.2):delete_tutor_filter n/Alex
Expected: Tutor FilterName: alex
is deleted and both Alex Yeoh and Bernice Yu are shown.
- Test Case (Follows
Adding a Tutor Filter
test case 1.3):delete_tutor_filter y/<5
Expected: Tutor FilterSubject Experience: < 5
is deleted and both Alex Yeoh and Bernice Yu are shown.
- Test Case:
delete_tutor_filter
Expected: An error message is shown saying at least 1 filter must be provided.
- Prerequisites for each test case:
Adding an Appointment Filter
- Adding an Appointment Filter
- Prerequisites for each test case:
- List of Appointment Filters must be empty
- There must be at least 2 Appointment in the appointment list.
- The first appointment must have the tutor name Alex Yeoh and subject name Mathematics
- The second appointment must have the tutor name Bernice Yu and subject name English
- Test Case:
add_appointment_filter n/Alex
Expected: An Appointment FilterName: alex
is added and the appointment with Bernice Yu is no longer displayed.
- Test Case:
add_appointment_filter s/English
Expected: An Appointment FilterSubject Name: English
is added and the appointment with Alex Yeoh is no longer displayed.
- Test Case:
add_appointment_filter
Expected: An error message is shown saying at least 1 filter must be provided.
- Prerequisites for each test case:
Deleting an Appointment Filter
- Deleting an Appointment Filter
- Prerequisites for each test case:
- Test case is run directly after the previous test case specified
- Test Case (Follows
Adding an Appointment Filter
test case 1.2):delete_appointment_filter n/Alex
Expected: Appointment FilterName: alex
is deleted and both appointments with Alex Yeoh and Bernice Yu are displayed.
- Test Case (Follows
Adding an Appointment Filter
test case 1.3):delete_appointment_filter s/English
Expected: Appointment FilterSubject Name: English
is deleted and both appointments with Alex Yeoh and Bernice Yu are displayed.
- Test Case:
delete_appointment_filter
Expected: An error message is shown saying at least 1 filter must be provided.
- Prerequisites for each test case: