Overview
The purpose of this portfolio is to document my role and contributions to the ModuleBook project.
My team of four software engineering students and I were tasked with enhancing a basic command line interface desktop addressbook application. It is a requirement for CS2103T Software Engineering project taught at National University of Singapore(NUS). We chose to morph it into a module tracking cum management application called ModuleBook.
This application is tailored to meet the needs of NUS students’ module management problems. It helps students to find and track modules, manage module-specific deadlines and other useful information like quick-links. ModuleBook is a desktop application where user interacts with it using CLI, and it has GUI created with JavaFX. It is written in Java.
This is what our project looks like:
My role was to design and write codes for the management of module deadline feature. The following sections illustrate these enhancements in more details, as well as the relevant documentation I have added to the user and developer guides in relation to these enhancements.
Summary of contributions
This section shows a summary of my coding, documentation, and other helpful contributions to the team project.
-
Major Enhancement: Added the deadline management feature.
-
What it does: Allows users to create deadlines by adding description, due date and priority. Deadline tasks are colored to indicate priority and sorted according to priority, date and time. Users can record their progress by marking deadline tasks as done, in progress or undone. They can edit and delete as well.
-
Justification: This benefits students to keep track of the countless deadlines, especially if student is lazy to manually keep track of them. For busy and forgetful students, it helps them to prioritise and organise deadlines for each module. For students who prefer easy navigation and flexibility, deadline feature is customisable as users can easily edit, mark and delete deadlines.
-
Highlights: This enhancement automatically sorts deadlines according to priority, date and time when user adds a deadline task. There is no need for users to sort again after adding deadline tasks.
-
-
Minor Enhancement: refactored part of commands and parsers.
-
Code contributed: Code contributed
-
Other contributions:
-
Project management:
-
Took part in the release of
v1.1
-v1.4
(4 releases) on GitHub
-
-
Enhancements to existing features:
-
Documentation:
-
Updated the contact us page, deadline section of developer guide and user guide.
-
-
Community:
-
PRs reviewed (with non-trivial review comments): (Pull requests #40)
-
Reported bugs and suggestions for other teams: PE Dry Run
-
-
Contributions to the User Guide
Given below are sections I contributed to the User Guide. They showcase my ability to write documentation targeting end-users. |
Manage deadline tasks: deadline
add
Format: deadline MODULE_LIST_NUM a/add d/DESCRIPTION t/TIME p/PRIORITY
Adds deadline task consisting of description, time and priority to the respective module.
Priority inputs are HIGH
, MEDIUM
OR LOW
. Deadline task with HIGH
priority is displayed in red, MEDIUM
in yellow
and LOW
in green. Deadline list is sorted according to priority and deadline date and time.
All parameters are compulsory. Date and Time must be in dd/MM/yyyy HHmm
format.
Example: deadline 1 a/add d/tutorial 1 t/22/10/2019 2359 p/HIGH
Here is result of inputting the above command successfully.
edit
-
Edit Description
Format: deadline MODULE_LIST_NUM a/edit task/TASK_NUMBER_IN_LIST d/NEW_DESCRIPTION
Edits description from the deadline task numbered in deadline list for the respective module.
Example: deadline 2 a/edit task/2 d/finish increments
-
Edit Time
Format: deadline MODULE_LIST_NUM a/edit task/TASK_NUMBER_IN_LIST t/NEW_TIME
Edits time from the deadline task numbered in deadline list for the respective module.
Date and Time must be in dd/MM/yyyy HHmm
format.
Example: deadline 3 a/edit task/2 t/29/10/2018 2359
done
Format: deadline MODULE_LIST_NUM a/done task/TASK_NUMBER_IN_LIST
Marks the deadline task numbered in deadline list as done with a tick.
Example: deadline 1 a/done task/2
Here is result of inputting the above command successfully.
doneAll
Format: deadline MODULE_LIST_NUM a/doneAll
Marks all the deadline tasks in deadline list as done with a tick.
Example: deadline 1 a/doneAll
in Progress
Format: deadline MODULE_LIST_NUM a/inProgress task/TASK_NUMBER_IN_LIST
Marks the deadline task numbered in deadline list as in-progress with a dash.
Example: deadline 1 a/inProgress task/1
undone
Format: deadline MODULE_LIST_NUM a/undone task/TASK_NUMBER_IN_LIST
Marks the deadline task numbered in deadline list as undone with empty space.
Example: deadline 1 a/undone task/1
delete
Format: deadline MODULE_LIST_NUM a/delete task/TASK_NUMBER_IN_LIST
Deletes deadline task numbered in deadline list from the respective module.
Example: deadline 1 a/delete task/2
deleteAll
Format: deadline MODULE_LIST_NUM a/deleteAll
Deletes all the deadline tasks from the respective module.
Example: deadline 1 a/deleteAll
Contributions to the Developer Guide
Given below are sections I contributed to the Developer Guide. They showcase my ability to write technical documentation and the technical depth of my contributions to the project. |
Deadline Management Feature
As a module management system, one of the important features will be the management of deadlines for each modules.
This section will elaborate the current implementation and design considerations of deadline management feature.
Current implementation
The deadline management feature supports the following main operations.
-
add
- adds a new deadline task to the respective module. -
edit
- edits the description or date and time of deadline task. -
done
- marks a deadline task as done. -
doneAll
- marks all the deadline tasks as done. -
inProgress
- marks a deadline task as inProgress. -
undone
- marks a deadline task as undone -
delete
- deletes an existing task from the deadline list. -
deleteAll
- deletes the entire deadline list from a module.
The following activity diagram summarises what happened when a user executes the AddDeadlineCommand:
The format to add deadline command is as follows:
deadline 2 a/add d/description t/dateAndTime p/priority
The add deadline mechanism is facilitated by AddDeadlineCommand
and AddDeadlineCommandParser
.
It takes in the following input from the user: MODULE_LIST_NUMBER
, DESCRIPTION
, DATE_AND_TIME
and
PRIORITY
which will construct a Deadline object to be added to the deadline list.
Given below is an example usage scenario of how add deadline mechanism behaves at each step.
Step 1. The user executes:
deadline 2 a/add d/do homework t/2/12/2019 1645 p/MEDIUM
Step 2. LogicManager
would use ModuleBookParser#parseCommand()
to parse input from the user.
Step 3. ModuleBookParser
would determine which command is being used and creates the respective parser.
In this case, DeadlineCommandParser
is being created from the COMMAND.WORD: deadline
and
the user’s input would be passed in as a parameter.
Step 4. DeadlineCommandParser
would then determine which action is being used and creates the respective parser.
In this case, AddDeadlineCommandParser
is created and user’s input would be parsed.
Step 5. AddDeadlineCommandParser
would do a validation check on the user’s input before creating
and returning a AddDeadlineCommand
with index
and Deadline
as its attributes. index
represents
the TrackedModule
list index (i.e 2) which the Deadline
object will be added to.
Step 6. LogicManager
would execute AddDeadlineCommand#execute()
,
checks whether there is an existing module,
then adds to the TrackedModule
.
Step 7. AddDeadlineCommand
would return a CommandResult
to the LogicManager
.
The following sequence diagram illustrates how the add deadline operation works:
Design Considerations
Aspect: Data Structure used to support add command
-
Alternative 1(Current choice) : Use of
ArrayList
to store deadline tasks in aTrackedModule
.-
Pros: Commands (eg. edit, sort, delete) can be easily supported by a list operations.
-
Pros: Ensures that only one deadline list is maintained for each TrackedModule.
-
Cons: More difficult to maintain over the course of the project. New commands(eg. done, priority) need to edit and maintain the list constantly.
-
Cons: Duplicate deadline tasks harder to identify.
-
-
Alternative 2 : Use a
HashSet
to store deadline tasks in aTrackedModule
.-
Pros: Duplicate deadline tasks can be identified easily.
-
Cons: Not easy to identify tasks using index.
-