Developer Guide
RemindMe Developer Guide
RemindMe is a reminder application that features a combination of a list and a calendar. RemindMe makes use of both Graphical User Interface(GUI) and Command Line Input(CLI).
The target users for RemindMe are National University of Singapore(NUS) School of Computing (SOC) students. SOC students can enjoy the benefits of CLI and GUI, which is not common in reminder applications in the current market. Users can use RemindMe to store their modules, assignments, exams, contacts and general events. RemindMe aims to reorganise students’ hectic lives and solve specific needs of SOC students.
The main audience for the RemindMe’s developer guide are future developers who wanted to further understand RemindMe’s inner workings. The developer guide explains the overall structure of RemindMe and the general workflow of RemindMe. The developer guide also explains how specific implementations work, specifically add, find, delete, edit, and calendar. The developer guide describes the team’s motive for creating RemindMe, and the user stories used when creating RemindMe.
Table of Contents
- 1. Setting up, getting started
- 2. Design
- 3. Implementation
- 4. Documentation, logging, testing and dev-ops
- 5. Effort
- Appendix-requirements
- Appendix-instructions-for-manual-testing
1. Setting up, getting started
Refer to the guide Setting up and getting started.
2. Design
2.1 Architecture

[Architecture Diagram for RemindMe]
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.
Main has two classes called Main
and MainApp. It is responsible for,
- At app launch: Initializes the components in the correct sequence, and connects them up with each other.
- At shut down: Shuts down the components and invokes cleanup methods where necessary.
Commons represents a collection of classes used by multiple other components.
The rest of the App consists of 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.
Each of the four components,
- defines its API in an
interfacewith the same name as the Component. - exposes its functionality using a concrete
{Component Name}Managerclass, which implements the corresponding APIinterfacementioned in the previous point.
For example, the Logic component (see the class diagram given below) defines its API in the Logic.java interface and exposes its functionality using the LogicManager.java class which implements the Logic interface.
[Class diagram of Logic component]
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.
[Sequence diagram of Architecture]
The sections below give more details of each component.
2.2 UI component
[Class Diagram of UI component]
API :
Ui.java
The UI consists of a MainWindow that is made up of parts e.g.CommandBox, ResultDisplay, StatusBarFooter etc. All these, including the MainWindow, inherit from the abstract UiPart class.
The panels and cards packages contain respective list panels and cards for Module, Person and GeneralEvent. While
the calendar package contains CalendarBox, UpcomingSchedules and other relevant UI classes that help build the CalendarWindow.
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
Logiccomponent. - Listens for changes to
Modeldata so that the UI can be updated with the modified data.
2.3 Logic component
[Class diagram of Logic component]
API :
Logic.java
-
Logicuses theRemindMeParserclass to parse the user command. - This results in a
Commandobject which is executed by theLogicManager. - The command execution can affect the
Model(e.g. adding a person). - The result of the command execution is encapsulated as a
CommandResultobject which is passed back to theUi. - In addition, the
CommandResultobject can also instruct theUito 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("clear m/") API call.

[Sample Sequence Diagram for clear command]
2.4 Model component
[Class diagram of Model component]
API : Model.java
The Model,
- stores a
UserPrefobject that represents the user’s preferences. - stores the RemindMe data.
- exposes an unmodifiable
ObservableList<Person>ObservableList<Module>orObservableList<GeneralEvent>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. - does not depend on any of the other three components.
Module, Assignment, Exam, Person and GeneralEvent are omitted for greater readability of the diagram.
2.5 Storage component
[Class diagram of Storage component]
API : Storage.java
The Storage component,
- can save
UserPrefobjects in json format and read it back. - can save the RemindMe data in json format and read it back.
- CalendarStorage is accessed by UI component which is no indicated in the diagram.
2.6 Common classes
Classes used by multiple components are in the seedu.address.commons package.
Back to Table Of Content
——————————————————————————————————————–
3. Implementation
This section describes some noteworthy details on how certain features are implemented.
The features are:
3.1 Add Feature
Implementation
The proposed add implementation is facilitated by ModelManager, which extends Model. ModelManager contains FilteredList of each entity:
- Persons
- Modules
- General Events
The following activity diagram summarises the general workflow for the Add Command:
[Add Feature Activity Diagram for add m/CS2103T]
The following sequence diagram shows how the add operation works:

Given below is an example usage scenario and how the add mechanism behaves at each step. Input: add m/CS2103T
Step 1: Your input is parsed into RemindMeParser using the parseCommand method.
Step 2: Based on the command word of your input (i.e., add), an AddCommandParser will be used.
Step 3: In AddCommandParser#parseCommand, your input will be tokenized using ArgumentTokenizer. ArgumentTokenizer uses your input, then searches for the prefixes and returns the ArgumentMultimap.
Step 4: Using the ArgumentMultimap checks the prefixes in your input and returns the respective AddCommandParser.
Module: `m/`: `AddModuleCommandPaser`
Person: `n/`: `AddPersonCommandParser`
General Event: `g/`: `AddGeneralEventParser`
if it is an unknown prefix, `parseCommand` will throw a ParseException and returns a `AddMessageUsage`. Since the input is `m/`, `AddModuleCommandPaser` will be returned.
Step 5: In AddModuleCommandPaser, AddModuleCommandPaser#parse is called. Again ArgumentMultimap is created using ArgumentTokenizer but only with Module prefix: m/. The class diagram shows the Parser class diagram when passing your input into the appropriate AddModuleCommand.
[Class diagram for add feature]
Step 6: The parse method does a few checks:
- If there isn’t the
PREFIX:m/present, or the preamble of thePREFIXis not empty, or your search input after thePREFIXis whitespaces, thenparsemethod will throwParseExceptionand returns aAddMessageUsageforModule. - Else your inputs is used to create a
titlewhich is then used to create amodule.
Step 7: AddModuleCommand is executed:
- Using the
moduleas an input, theModel#hasModulemethod checks if the givenmoduleis a duplicate or not. If it is, it will throwCommandExceptionand return aMESSAGE_DUPLICATE_MODULE. - Else, using the
moduleas an input, theModel#addModulemethod is called, and adds themoduleto theUniqueModuleListinRemindMe.
Step 8: The CommandResult is logged in the logger and using resultDisplay#setFeedacktoUser, returning resultDisplay. Using resultDisplay#setText shows the CommandResult in the GUI.
The following sequence diagram shows how the find operation works:
[Sequence diagram for add feature]
3.2 Find Feature
This section shows how find feature is implemented in RemindMe. It will describe the logic flow of RemindMe step by step.
Implementation
The proposed find implementation is facilitated by ModelManager, which extends Model. ModelManager contains FilteredList of each entity:
- Persons
- Modules
- General Events
The following activity diagram summarizes what happens when a user executes a find m/CS2101 command:

[Find Activity Diagram for find m/CS2101]
The following sequence diagram shows how the find operation works:

[Find Sequence Diagram for find m/CS2101]
Given below is an example usage scenario and how the find mechanism behaves at each step. Input: find m/CS2101
Step 1: Your input is parsed into RemindMeParser using the parseCommand method.
Step 2: Based on the command word of your input (i.e., find), a FindCommandParser will be used.
Step 3: In FindCommandParser#parseCommand, your input will be tokenized using ArgumentTokenizer.
ArgumentTokenizer uses your input, then searches for the prefixes and returns the ArgumentMultimap.
Step 4: Using the ArgumentMultimap checks the prefixes in your input and returns the respective FindCommandParser.
Module: `m/`: `FindModuleCommandPaser`
Person: `n/`: `FindPersonCommandParser`
General Event: `g/`: `FindGeneralEventParser`
if it is an unknown prefix, `parseCommand` will throw a ParseException and returns a `FindMessageUsage`.
Since the input is `m/`, `FindModuleCommandPaser` will be returned. <br>
Step 5: In FindModuleCommandPaser, FindModuleCommandPaser#parse is called. Again ArgumentMultimap is created
using ArgumentTokenizer but only with Module prefix: m/. The class diagram shows the Parser class diagram when
passing your input into the appropriate FindModuleCommand.
Step 6: The parse method does a few checks:
- If there isn’t the
PREFIX:-
m/present, or - the preamble of the
PREFIXis not empty, or - your search input after the
PREFIXis whitespaces, - then
parsemethod will throwParseExceptionand returns aFindMessageUsageforModule.
-
- Else your inputs is split into individual keywords, and contained as a
List of keywords.
Step 7: The keywords will be stored in TitleContainsKeywordsPredicate as a predicate, then stored in FindModuleCommand.
Step 8: FindModuleCommand is executed:
- Using the
predicate, theModel#updateFilteredModuleListis called withpredicateas input. - Using the
FilteredList<Module>#setPredicatereturns the filtered list of modules with titles matching to any of thekeywordsas aCommandResult.
Step 9: The CommandResult is logged in the logger and using resultDisplay#setFeedacktoUser, returning
resultDisplay. Using resultDisplay#setText shows the CommandResult in the GUI.
3.3 Delete Feature
Implementation
The following activity diagram summarizes what happens when a user executes a delete m/CS2103 a/3 command:
[Delete Activity Diagram for delete m/CS2103 a/3]
The following sequence diagram shows how the delete operation works:

[Delete Sequence Diagram for delete m/CS2103 a/3]
RemindMe is able to delete an existing Assignment in an existing Module
The diagram below shows the relationships between DeleteAssignmentCommand and DeleteAssignmentCommandParser under
the Logic component and the relationship between Module and Assignment under the Model component.
The following example usage scenario describes how the delete mechanism behaves at each step.
Assuming RemindMe has a Module named CS2103. This Module contains a AssignmentList that stores
a list of Assignmnets:
[D] Assigment1 due on 01/01/2021 2359
[X] Assignment2 due on 05/05/2022 2359
[D] Assignment3 due on 25/03/1021 2359
Step 1: The user launches the RemindMe application, LogicManager and RemindMeParser will be initialized.
Step 2: The user executes delete m/CS2103 a/3 to delete the assignment at Index 3 from the AssignmentList of
the Module CS2103. This invokes the method LogicManager#execute(String) which then invokes the
RemindMeParser#parseCommand(String) method.
Step 3: RemindMeParser will parse the command word delete and will create a DeleteCommandParser. The
DeleteCommandParser will tokenize the prefixes and will choose to create a deleteAssignmentCommandParser to parse
the Title CS2103 and Index 3.
Step 4: The DeleteAssignmentCommandParser will create a new DeleteAssignmentCommand with the Title CS203 and
Index 3 and return it back to the LogicManager.
Step 5: The DeleteAssignmentCommand verifies whether the target Module exist in the FilteredModuleList
and whether an assignment exists at Index 3. If either fails, DeleteAssignmentCommand will throw a CommandException.
If not, it will invoke the method Module#deleteAssignment(Index) which removes the assignment at Index 3 from the
AssignmentList
Step 6: A CommandResult will be created with a successful message if the user inputs are valid
and returned to LogicManager.
Step 7: Lastly, LogicManager saves the updated RemindMe.
3.4 Edit Feature
Implementation
RemindMe is capable of editing an existing assignment.
Below is a class diagram to show the relationship between EditAssignmentCommand and EditAssignmentCommandParser under
the Logic component and the relationship between Module and Assignment under the Model component.

[Edit Feature Class Diagram]
Given below is an example usage scenario and how the edit mechanism behaves at each step.
Assuming RemindMe already has a Module named CS2103 and an Assignment Tut1 with time 01/01/2021 2359 stored.
Step 1: The user launches the RemindMe application, LogicManager and RemindMeParser will be initialized.
Step 2: The user executes edit m/CS2103 a/1 d/Tut2 to edit the description of the first assignment
in the CS2103 module. This invokes the method LogicManager#execute(String) which then invokes the
RemindedParser#parseCommand(String) method.
Step 3: RemindMeParser will then create EditCommandParser (omitted in the sequence diagram)
which detects the edit conditions and calls EditAssignmentCommandParser
to parse inputs according to the format specified.
Step 4: The EditAssignmentCommandParser will create a new EditAssignmentCommand
with the given module CS2103 , the given index 1, the description Tut2 and a null
date and return it back to LogicManager.
Step 5: LogicManager calls the EditAssignmentCommand#execute(Model) method
which then verifies whether the target module and assignment exists and whether
the edited content is valid, e.g. same content.
step 6: The Model calls RemindMe#editAssignment(Module, index, Description) method which retrieves
the module to edit from the UniqueModuleList ,retrieves and update the assignment and place the
module back to the list.
Step 7: A CommandResult will be created with a successful message if the user inputs are valid
and returned to LogicManager.
Step 8: Lastly, LogicManager saves the updated RemindMe.
Note: An EditAssignmentCommand can either change the description or date of an assignment, not both.
The above process is shown in the following sequence diagram:

[Edit Feature Sequence Diagram for edit m/CS2103 a/1 d/Tut2]
Below is the separate sequence diagram for editAssignment(m, 1 , Tut2):

[Edit Feature Sequence Diagram for editAssignment(m, 1, Tut2)]
The following activity diagram summarises the general workflow for the Edit Command:

[Edit Feature Activity Diagram for edit m/CS2103 a/1 d/Tut2]
3.5 Calendar Feature
Implementation
[Calendar Feature Sequence Diagram]
Given below is an example of how the calendar UI is created.
Step1: CalendarWindow will be created at the start of the program.
Step2: CalendarWindow will then call itself CalendarWindow#loadCalendar to load the details into the calendar.
Step3: In the loadCalendar method, to ensure that the details inside calendar are the latest,
the method will then call CalendarStorage#refreshStorage to update the storage for the calendar.
Step4: In the refreshStorage method, calendar storage will be cleared first by calling CalendarStorage#clear
and then the details about events are retrieved from RemindMe model by calling RemindMe#getFilteredPersonList
, RemindMe#getFilteredModuleList and RemindMe#getFilteredEventList.
Step5: With calendar storage updated, the CalendarWindow will then store events to each respective day CalendarWindow#loadCalendar
and then the calendar will be ready to be displayed as a GUI.

[Calendar Command Sequence Diagram]
Given below is an example usage scenario and how the calendar mechanism behaves at each step. Input: calendar.
Step 1. Your input is parsed into RemindMeParser using the parseCommand method.
Step 2: Based on the command word of your input (i.e., calendar), a CalendarCommand will be created.
Step 3: CalendarCommand is executed, and that will set boolean showCalendar to be true, the boolean is then
pushed to MainWindow to call MainWindow#handleCalendar to show the CalendarWindow.
Step 4: CalendarWindow loaded by its fxml file and called CalendarWindow#show to show its shown
as a pop-up window for you.
Back to Table Of Content
4. Documentation, logging, testing, configuration, dev-ops
- Documentation guide
- Testing guide
- Logging guide
- Configuration guide
- DevOps guide
- Back to Table Of Content
5. Effort
RemindMe is an enhancement on Addressbook 3(AB3). While AB3 only stores and mutate persons, RemindMe deals with Modules, Contacts, General Events, Assignments, Birthday and Exams. Assignments and Exams are directly related to Modules, where Modules have Assignments and Exams.
As RemindMe deals with multiple entity types, the parsers for RemindMe needs to parse new and different entries and inputs. RemindMe also needs new ways to store and display the entries, ensuring that RemindMe still maintains a fresh and clear GUI, compared to AB3.
Birthday has a date while Assignment, Exam, and General Event contain a date time. RemindMe makes use of the date time to show a reminder when RemindMe starts up. Therefore, RemindMe has to be able to parse date and time into the respective entities and ensure they are of the right format.
Moreover, RemindMe has a calendar which is able to differentiate all entries in RemindMe based on the dates and time. Assignments in Modules has a checkbox to indicate whether an assignment is done or not. This adds a new logic into RemindMe, compared to AB3, and additional GUI.
Appendix: Requirements
Product scope
Target user profile:
- has a need to manage exams, assignments and events deadlines
- prefer desktop apps over other types
- tend to forget upcoming events/exams
- is reasonably comfortable using CLI and GUI apps
Value proposition: Manage deadlines and events in list and calendar view format to remind forgetful users.
User stories
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 instructions help page | refer to help page when I forget how to use the App |
* * * |
user | exit the App | use other applications on my computer |
* * * |
student taking a module | add module | keep track of the module exams, assignments |
* * * |
student having assignments | add assignments to module | keep track of the assignment deadline |
* * * |
student having exams | add exams to module | keep track of the exam start time |
* * * |
user with friends | add person and their birthday | keep track of birthday and wish them happy birthday promptly |
* * * |
user | add general events | keep track of events happening outside school curriculum |
* * * |
student | edit a module | adjust module name if module name changes |
* * * |
student | edit a assignment | can adjust schedule when there is a change of plan |
* * * |
student | edit a exam | can adjust schedule when there is a change of plan |
* * * |
user | edit a person and birthday | fine tune person name and birthday according |
* * * |
user | edit a general event | adjust schedule when there is a change of plan |
* * * |
student | delete a module | I can remove a module I do not require |
* * * |
student | delete a assignment | I can remove an assignment once it’s done |
* * * |
student | delete a exam | I can remove an exam after I completed it |
* * * |
user | delete a person and birthday | I can remove a person I am no longer close to |
* * * |
user | delete a general event | I can remove an event that is already over |
* * |
student | find a module | quickly locate details for module |
* * |
user | find a person | quickly locate details for person |
* * |
user | find a general event | quickly locate details for event |
* * |
user | see all entries after finding command | I can have a big picture of all my entries |
* * |
student | mark my assignments as done | identify if assignments are done or not |
* * |
user | clear App | quickly delete all details in App |
* * |
student | clear modules | quickly delete all details for modules |
* * |
user | clear contacts | quickly delete all details for person |
* * |
user | clear general events | quickly delete all details for events |
* * |
user | view events in a calendar view | to have a better sense of the upcoming events |
* * |
forgetful student | be reminded about upcoming events | respond to upcoming events accordingly |
{More to be added}
Use cases
(For all use cases below, the System is the RemindMe and the Actor is the user, unless specified otherwise)
Use Cases:
- Use Case 1: View Help
- Use Case 2: Exit
- Use Case 3: Add Module
- Use Case 4: Add Assignment
- Use Case 5: Add Exam
- Use Case 6: Add Person and Birthday
- Use Case 7: Add General Events
- Use Case 8: Edit Module
- Use Case 9: Edit Assignment
- Use Case 10: Edit Exam
- Use Case 11: Edit Person
- Use Case 12: Edit General Event
- Use Case 13: Delete Module
- Use Case 14: Delete Assignment
- Use Case 15: Delete Exam
- Use Case 16: Delete Person
- Use Case 17: Delete General Event
- Use Case 18: Find Module
- Use Case 19: Find Person
- Use Case 20: Find General Event
- Use Case 21: List
- Use Case 22: Mark Assignment as Done
- Use Case 23: Clear App
- Use Case 24: Clear Modules
- Use Case 25: Clear Contacts
- Use Case 26: Clear Events
- Use Case 27: View Calendar
- Use Case 28: Reminder
- Back to Table Of Content
Use Case 1: View Help
MSS:
- User enters the command to view help.
- System shows help and url to copy to user guide webpage for more in depth help.
Use case ends.
Extensions:
- 1a. System detects an error in formatting of command.
- 1a1. System display error message.
Use case ends.
- 1a1. System display error message.
Use Case 2: Exit
MSS:
- User enters the command to exit system.
- System exits by closing all relevant GUI.
Use case ends.
Extensions:
- 1a. System detects an error in formatting of command.
- 1a1. System display error message.
Use case ends.
- 1a1. System display error message.
Use Case 3: Add Module
MSS:
- User enters command to add a module.
- System adds module and displays module info.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
- 1a1. System display formatting error message.
- 1b. System detects that module is present in system.
- 1b1. System display duplicate module error message.
Use case ends.
- 1b1. System display duplicate module error message.
Use Case 4: Add Assignment
MSS:
- User enters command to add an assignment for a module.
- System adds assignment and displays assignments info.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
- 1a1. System display formatting error message.
- 1b. System detects that module for assignment is not present in the system.
- 1b1. System display module missing error message.
Use case ends.
- 1b1. System display module missing error message.
- 1c. System detects that assignment is present in the module.
- 1c1. System display duplicate assignment error message.
Use case ends.
- 1c1. System display duplicate assignment error message.
Use Case 5: Add Exam
MSS:
- User enters command to add an exam for a module.
- System adds exam and displays exam info.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
- 1a1. System display formatting error message.
- 1b. System detects that module for the exam is not present in the system.
- 1b1. System display module missing error message.
Use case ends.
- 1b1. System display module missing error message.
- 1c. System detects that exam is present in the module.
- 1c1. System display duplicate exam error message.
Use case ends.
- 1c1. System display duplicate exam error message.
Use Case 6: Add Person and Birthday
MSS:
- User enters command to add a person and his/her birthday.
- System adds person with his/her birthday and displays person info.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
- 1a1. System display formatting error message.
- 1b. System detects that person is present in system.
- 1b1. System display duplicate person error message.
Use case ends.
- 1b1. System display duplicate person error message.
Use Case 7: Add General Events
MSS:
- User enters command to add a general event.
- System adds the general event and displays general event info.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
- 1a1. System display formatting error message.
- 1b. System detects that general event is present in system.
- 1b1. System display duplicate event error message.
Use case ends.
- 1b1. System display duplicate event error message.
Use Case 8: Edit Module
MSS:
- User enters command to edit a module.
- System edits module and displays edited module info.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
- 1a1. System display formatting error message.
- 1b. System detects index in command to locate the module is invalid.
- 1b1. System display module missing/invalid input error message.
Use case ends.
- 1b1. System display module missing/invalid input error message.
Use Case 9: Edit Assignment
MSS:
- User enters command to edit an assignment for a module.
- System edits assignment and displays edited assignment info.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
- 1a1. System display formatting error message.
- 1b. System detects index in command to locate assignment is invalid.
- 1b1. System display assignment missing/invalid input error message.
Use case ends.
- 1b1. System display assignment missing/invalid input error message.
Use Case 10: Edit Exam
MSS:
- User enters command to edit an exam for a module.
- System edits exam and displays edited exam info.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
- 1a1. System display formatting error message.
- 1b. System detects index in command to locate the exam is invalid.
- 1b1. System display exam missing/invalid input error message.
Use case ends.
- 1b1. System display exam missing/invalid input error message.
Use Case 11: Edit Person
MSS:
- User enters command to edit the person/birthday.
- System edits person and displays edited person info.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
- 1a1. System display formatting error message.
- 1b. System detects index in command to locate the person is invalid.
- 1b1. System display person missing error message.
Use case ends.
- 1b1. System display person missing error message.
Use Case 12: Edit General Event
MSS:
- User enters command to edit a general event.
- System edits the general event and displays edited event info.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
- 1a1. System display formatting error message.
- 1b. System detects index in command to locate the event is invalid.
- 1b1. System display event missing/invalid input error message.
Use case ends.
- 1b1. System display event missing/invalid input error message.
Use Case 13: Delete Module
MSS:
- User enters command to delete a module.
- System deletes module and displays deleted module info.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
- 1a1. System display formatting error message.
Use Case 14: Delete Assignment
MSS:
- User enters command to delete an assignment for a module.
- System deletes assignment and displays deleted assignment info.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
- 1a1. System display formatting error message.
- 1b. System detects index in command to locate assignment is invalid.
- 1b1. System display assignment missing/invalid input error message.
Use case ends.
- 1b1. System display assignment missing/invalid input error message.
Use Case 15: Delete Exam
MSS:
- User enters command to delete an exam for a module.
- System deletes exam and displays deleted exam info.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
- 1a1. System display formatting error message.
- 1b. System detects index in command to locate the exam is invalid.
- 1b1. System display exam missing/invalid input error message.
Use case ends.
- 1b1. System display exam missing/invalid input error message.
Use Case 16: Delete Person
MSS:
- User enters command to delete a person.
- System deletes person and displays deleted person info.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
- 1a1. System display formatting error message.
- 1b. System detects index in command to locate the person is invalid.
- 1b1. System display person missing/invalid input error message.
Use case ends.
- 1b1. System display person missing/invalid input error message.
Use Case 17: Delete General Event
MSS:
- User enters command to delete a general event.
- System deletes the general event and displays deleted event info.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
- 1a1. System display formatting error message.
- 1b. System detects index in command to locate the event is invalid.
- 1b1. System display event missing/invalid input error message.
Use case ends.
- 1b1. System display event missing/invalid input error message.
Use Case 18: Find Module
MSS:
- User enters command to find a module with keyword.
- System display modules found by the keyword.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
- 1a1. System display formatting error message.
Use Case 19: Find Person
MSS:
- User enters command to find a person with keyword.
- System display person found by the keyword.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
Use Case 20: Find General Event
MSS:
- User enters command to find a general event with the user’s keywords.
- System display the general event found by the keyword.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
- 1a1. System display formatting error message.
Use Case 21: List
MSS:
- User enters list command.
- System display full list for modules, persons and events.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
- 1a1. System display formatting error message.
Use Case 22: Mark Assignment as Done
MSS:
- User enters command to mark an existing assignment as done.
- System marks assignment as done and displays assignment info.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
- 1a1. System display formatting error message.
- 1b. System detects index in command to locate assignment is invalid.
- 1b1. System display assignment missing/invalid input error message.
Use case ends.
- 1b1. System display assignment missing/invalid input error message.
Use Case 23: Clear App
MSS:
- User enters command to clear App.
- System clears the App.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
- 1a1. System display formatting error message.
Use Case 24: Clear Modules
MSS:
- User enters command to clear modules.
- System clear modules and displays empty module list.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
- 1a1. System display formatting error message.
Use Case 25: Clear Contacts
MSS:
- User enters command to clear contacts (person).
- System clear contacts and displays empty person list.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
- 1a1. System display formatting error message.
Use Case 26: Clear Events
MSS:
- User enters command to clear general events.
- System clear general events and displays empty event list.
Use case ends.
Extensions:
- 1a. System detects formatting error in command.
- 1a1. System display formatting error message.
Use case ends.
- 1a1. System display formatting error message.
Use Case 27: View Calendar
MSS:
- User enters the command to view calendar.
- System shows calendar.
Use case ends.
Extensions:
- 1a. System detects an error in formatting of command.
- 1a1. System display error message.
Use case ends.
- 1a1. System display error message.
Use Case 28: Reminder
MSS:
- User starts the system.
- System shows upcoming events as a reminder.
Use case ends.
Non Functional Requirements
- Should work on any mainstream OS as long as it has Java
11or above installed. - Should be able to hold up to 1000 persons and tasks without a noticeable sluggishness in performance for typical usage.
- A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse.
- RemindMe should be able to respond within one seconds.
- RemindMe should be usable by novice who has no prior experience with coding.
Glossary
| Term | Meaning |
|---|---|
| Mainstream OS | Windows, Linux, Unix, OS-X. |
| Module | A school module consisting of module name/module id. |
| Examination | Consists of a start time and date which it occurs on under a relevant module. |
| Event | Consists of a start time and date which it occurs on. |
| Assignment | Consists of a deadline under a relevant module. |
| GUI | Graphic User Interface, the visible interface the user sees for the application. |
| CLI | Command Line Input, inputs passed in by user while RemindMe is running. |
| FilteredList | List of entries that can take a predicate and show entries that is tested true by the predicated. |
| Tokenize | Splits the user’s inputs based on the prefixes for RemindMe. |
| Prefix | Prefixes used by RemindMe to parse user’s input. Prefixes used by RemindMe are m/, a/, e/, n/, b/, g/, by/ and on/. |
| Preamble | Text before the first prefix |
Appendix: Instructions for manual testing
Given below are instructions to test the app manually.
Launch
-
Initial launch
-
Download the latest jar file and copy into an empty folder
-
Double-click the jar file Expected: Shows the GUI for RemindMe.
-
Test the following commands according to the flow.
-
Testing commands
Testing Person commands
-
Add a person. Test case:
add n/Benson b/30/09/1997 t/friends. Benson will be added into the contacts list. -
Edit a person. Test case:
edit 1 n/Benson b/30/09/1997. Benson will be updated in the contacts list.
Testing Module commands
-
Add a module. Test case:
add m/CS1101. CS1101 will be added into the module list. -
Edit a module. Test case:
edit 1 m/CS1101S. CS1101 will be renamed to CS1101S in module list. -
One can explore adding assignments/exams by referring to the user guide.
Testing General Event commands
-
Add a general event. Test case:
add g/School contest on/10/10/2021 1200. School contest will be added into the event list. -
Edit a general event. Test case:
edit 1 on/01/04/2021 1200School contest date will be edited in the event list.
Testing finding command
-
Find the person. Test case:
find n/Benson. Benson will be shown in the contact list. -
Find modules. Test case:
find m/CS1101SCS1101S will be shown in the module list. -
Find event. Test case:
find g/School contest. School contest will be shown in the event list.
Testing Calendar
-
Try opening the calendar. Test case:
calendar. A calendar window (GUI) will pop up. -
Try clicking the
<>todaybuttons to see if the calendar moves. -
Click on a date with events to see event for the day on the left panel of the calendar window (GUI).
Test delete commands
-
Delete a person. Test case:
delete 1. Benson will be deleted from the contacts list. -
Delete a module. Test case:
delete m/CS1101S. CS1101S will be deleted from the contacts list. -
Delete an event. Test case:
delete g/1School contest will be deleted from the event list.
Test clear commands
-
Clear all contacts. Test case:
clear n/. All contacts should be removed from RemindMe. The contacts’ section in RemindMe is empty. -
Clears all modules. Test case:
clear m/. All modules should be removed. RemindMe’s module section should be empty. -
Clears all events. Test case:
clear g/. All events should be removed. RemindMe’s event section should be blank. -
Clears RemindMe. Test case:
clear. RemindMe is cleared completely.
(Ensure that RemindMe has some entries in it.)
Saving data
- Dealing with missing data files
Prerequisites:
Remove the remindMe.json file from the folder with name ‘data’ in the same directory as your remindMe.jar file. Ensure that the data folder is empty.
Test case: Launch ClientBook
Expected: ClientBook launches and loads the data of the sample contacts.