Overview
NUSProductivity is a desktop application for NUS students. The user interacts with it using a CLI, and it has a GUI creasted with JavaFX. The application is intended to help NUS students solve their productivity issues and ease student’s daily task in NUS.
Summary of contributions
-
Major enhancement 1: Module Book feature
-
What it does: Allows users to be able to manage the modules they have taken or are taking in NUS. (contain functionality to add module, delete module, update grades and calculate CAP based on NUS grading system)
-
Justification: This feature improves the product significantly because a user can track what modules they have taken and what grades they have gotten. Moreover, it allows users to get their CAP immediately and can change grade to see how the CAP will change accordingly to see room for improvements.
-
Highlights: This enhancement makes it very convenient for users to store their modules and getting the cap. It required an in-depth analysis of design alternatives. The implementation too was challenging as some of the functionality relies on other feature of this product (module search feature) so I need to be familiar with that feature’s implementation first.
-
-
Major enhancement 2: Add in functionality to manage module tasks
-
What it does: This feature allow users to create, delete, mark as done and list all tasks related to any module users have added using the previous feature.
-
Justification: This feature improves the product significantly because a user will be able to manage their tasks for each module separately and it basically avoid users be overwhelmed with lots of tasks from different modules.
-
Highlights: This enhancement requires a comprehensive understanding to the original product because it needs to add in codes for logic, model and storage part of the program.
-
-
Major enhancement 3: Add in storage for modules and their tasks and synchronize the module tasks updated to the calendar feature.
-
What it does: This feature allow users to store modules and module tasks they added in before and the module tasks created will be allow updated in the whole task list in Calendar feature.
-
Justification: This feature improves the product significantly because users do not need to input everything every time they relaunch and makes the module task feature and calendar feature live together.
-
Highlights: The implementation was very challenging because it depends on other feature which I need to get familiar with and need to change original code to fit to calendar feature after discussing with teammates which actually differs with my original idea.
-
-
Minor enhancement 1: Add some commands and its parsers to Calendar feature
-
What it does: Adds in command skeletons such as sorting and finding tasks commands and their parsers, which let the user be able to sort and find tasks in Calendar.
-
-
Code contributed: tp dashboard
-
Other contributions:
-
Project management:
-
Setting up team organization and team repository
-
Enable Travis CI for the team repo.
-
Set up auto-publishing of docs for the team repo.
-
Open up issues for user stories and manage milestones.
-
-
Documentation:
-
Reviewing/mentoring contribution:
-
Community:
-
Reported bugs and suggestions for other teams in the class (examples: #30)
-
-
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. |
Profile / Module Book (Part 1: Manage your modules)
-
This feature allows individuals to see their own profile, their current cap and the all modules that the individual have taken and all the grades gotten.
Adding a module : moduleAdd
-
Adds a module you have taken before or is taking now and store your grade for each module if you want.
-
Format:
moduleAdd m/MODULE_CODE [g/GRADE]
The grade field is optional. You can state your grade when you add in modules and also can update or add in your grade later. |
The program checks whether a module code provided is valid or not by using the search function in module planning feature, which fetch information about modules online. If the search function fails to fetch any information, the module code will be treated as invalid. |
-
Example:
-
moduleAdd m/CS2103
-
moduleAdd m/cs1101s g/A
-
Deleting a module : moduleDel
-
Deletes a module you have added to the program before from the profile tab.
-
Format:
moduleDel MODULE_CODE
-
Example:
-
moduleDel CS2103
Delete CS2103 from module book if you have added it before.
-
Editing the grade of a module : grade
-
Updates or adds the grade of certain modules you have added to the program.
-
Format:
grade m/MODULE_CODE g/GRADE
List of all valid grade: A+, A, A-, B+, B, B-, C+, C, D+, D, F, S and U. |
-
Example:
-
grade m/CS1101S g/S
-
grade m/CS2103 g/A
-
View current CAP : cap
-
Shows your current cap based on the grades of modules you have stated.
-
Format:
cap
You don’t need to indicate the modular credits for each module when you add it in because the program will fetch that infomation online. |
Profile / Module Book (Part 2: Manage your tasks separately for each module)
Most of the functionality here has been integrate into the Calendar feature but these commands left here still can be used. You can give it a try if you want.
These tasks related to certain module are called 'module task' from now on. |
All commands that make changes to the module tasks will be synchronous for both module book and the task list in calendar feature. |
For this part, the UI hasn’t been implemented yet but you are able to see the updated list of module tasks in command line. |
Most functionality covered in this part can also be achieved by some commands in Calendar feature above. Just provides users with an alternative way. (The orders of tasks shown are different. Thus, the index inputted may be different to achieve the same modification.) |
Listing all module tasks of certain module
You can also view module tasks in calendar using findModule m/MODULE_CODE
|
-
Lists all module tasks related to the specific module.
-
Format:
listModuleTasks MODULE_CODE
-
Example:
-
listModuleTasks CS2103
Lists all module tasks of CS2103.
-
Deleting a module task : taskDelete
-
Deletes the specified module tasks for certain module from the module book and calendar.
-
Format:
taskDelete m/MODULE_CODE index/INDEX
This command is similar to the taskDelete command in Calendar feature but you need to specify the module code.
|
Only refer to the index of tasks shown in command line when performing this command. (not the one in calendar) |
-
Example:
-
taskDelete m/CS2103 index/1
Deletes the first module task for CS2103 in module book and Calendar.
(First task in module book and may not be the first in Calendar even after performingfindTask m/cs2103
)
-
Marking a module task as done : done
-
Marks the specified module tasks for certain module as done in the module book and calendar.
-
Format:
done m/MODULE_CODE index/Index
This command is similar to the done command in Calendar feature but you need to specify the module code.
|
Only refer to the index of tasks shown in result display panel when performing this command. (not the one in calendar) |
-
Example:
-
done m/cs2103 index/1
Marks the first module task for module cs2103 as done.
-
Clarification for taskDelete and done commands.If you did not provide specific module code in the command, the index required refers to the index of list of tasks shown in calendar tab. Otherwise, it refers to the index of list of module tasks shown in the result display panel. For example: taskDelete m/cs2103 index/1 will delete the first task as shown in Figure 26taskDelete index/1 will delete the first task shown in the task list in calendar tab.
|
View task breakdown per module : taskBreakdown
-
Shows the how many tasks are there in total and how many tasks haven’t been completed yet for each module.
-
Format:
taskBreakdown
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. |
Profile (Module Book) feature (Wangkai)
This profile feature allows users to manage the modules they have taken before or is taking now in NUS. In details, users are able to store their module taken into the program with the grades for each module stated if applicable and can also store tasks which are related to each module.
Implementation
-
This feature is implemented using a panel on the main screen of profile tab with a list of modules that is updated with every command that may affect module list (such as add, delete or grade).
-
The module book (profile) currently supports following features.
-
Adds in or deletes modules and display the list of modules in profile tab.
-
Updates user’s grades for each module and get CAP calculated immediately.
-
Manage the tasks related to each module (module tasks) through CLI.
-
Any modification to module tasks will be updated in the Calendar tab and also show messages on the result display panel.
-
-
As shown in the class diagram above, modules are created by a class called
NusModule
. Every instance ofNusModule
contains aModuleCode
object, aGrade
object (optional) and a list ofModuleTask
objects. -
Grade
andPriority
are enumerations.Grade
contains all possible grades student can get in NUS. EveryModuleTask
instance has aPriority
attribute which indicates how important it is.
The module book only accept modules that are provided in NUS and will check the module code the user want to add is valid or not by using the search feature mentioned above. |
-
All possible actions mentioned above such as creating modules, deleting modules and adding tasks to modules are implemented through the
ModuleBook
class by calling corresponding methods of it such asaddModule
,getModule
. -
The program will automatically save any modification to module book after each command is executed by calling the
saveModuleBook
method inStorage
. -
For example, modules are created with
moduleAdd
command, followed by the module code and grade. (if applicable)
Our program will check if the module code is valid by using the search feature above and whether the module has already been added in our module book. And then call methodaddModule
inModuleBook
to create the module as required. Finally, it will automatically save the module added just now. -
The Sequence Diagram below shows how the components interact with each other for the scenario where the user want to add a module in our program.
-
The program will synchronize the modification to module tasks in
ModuleBook
with that shown in Calendar tab throughModelManager
as shown above. i.e. Any modification in module tasks will be updated inTask
which is the main class Calendar feature depends on. (see more details in Calendar feature)
Example Use Scenario
Given below are example usages scenario and how the Module Book feature behaves at each step.
User can manage their tasks in different ways. |
Example 1:
-
The user execute
listModuleTasks
command. -
The program check whether the module code provided has been recorded or not.
-
Display the list of tasks.
Below is an activity diagram describing the events that will happen:
Example 2:
-
The user execute
done
command. -
The program check whether the input is valid or not.
-
The task specified will be deleted accordingly.
-
Synchronize between module book and calendar.
Below is an activity diagram describing the events that will happen:
Design Considerations
Aspect 1: How the user add in a module into module book for future management ?
-
Current solution: Only need to provide the module code to add module and it will fetch the information about the module using Module Search feature automatically.
-
Pros: Users don’t need to provide any other information (such as modular credit of the module) for other functionality such as calculating the CAP.
-
Pros: The module information will be cached locally after you add the module once and this can used for future development.
-
Cons: Need Internet connection when you add in certain module for the first time.
-
Cons: Highly depends on the Module Search feature.
-
-
Alternative Solution: Let the user enter all information required for each module when they add it in. (such as modular credit)
-
Pros: More flexible, not depends on other features.
-
Cons: Very tedious for users to add in lots of modules.
-
Cons: Need to ask user to provide new information when more new functionality is added in the future.
-
Reason for chosen implementation:
The current implementation is much more user friendly and have more potential for future development. The implement can become
very ideal if the Module Search feature works properly.
Aspect 2: How the user manage their tasks for each module?
-
Current solution: For each module added, it contains a list of
ModuleTask
. Also update the calendar when add task in.-
Pros: Users can either view their tasks for each module separately or view all the tasks shown in Calendar tab.
-
Pros: More nice-looking that the user can view all the deadlines on calendar.
-
Cons: Prone to bugs during the synchronization of module book and calendar.
-
-
Alternative solution: Only store the list of
ModuleTask
in module book and do not update in Calendar tab.-
Pros: Easier to implement and can avoid some synchronization bugs.
-
Cons: Users can not gain a view of the whole pictures with all tasks shown on calendar.
-
Reason for chosen implementation:
The current implementation updates the module tasks added in onto the calender and provides the users different ways
to manage their tasks. (as a whole or separately for each module)