PROJECT: NUSProductivity


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:

      • Gave feedbacks and reviewed on code pull requests #45, #185

    • 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.

ProfileMainScreen
Figure 1. Main Screen for profile tab

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.
  • You can only add in modules which are valid modules that can be taken in NUS.

  • All other module codes inputted will be considered as invalid and the program will not allow you to add in.

  • This requirement is not case sensitive, which means for example, both "CS2103" and "cs2103" are considered valid module code.

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

AddModule
Figure 2. Adding a module

Deleting a module : moduleDel

  • Deletes a module you have added to the program before from the profile tab.

  • Format: moduleDel MODULE_CODE

  • Deletes the module specified from the module book (profile)

  • You can only delete the module which you have added into the program before.

  • Module code inputted is not case sensitive ('moduleDel cs2103' is the same as 'moduleDel CS2103')

  • Example:

    • moduleDel CS2103
      Delete CS2103 from module book if you have added it before.

DeleteModule
Figure 3. Deleting a module

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

  • Updates the grade of the specified module as the grade you provided now.

  • You can only update the grade of module which you have added into the program before.

  • Grade inputted should be a valid grade in NUS’s grading system.

  • Both module code and grade inputted is not case sensitive.

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

Grade
Figure 4. Updating the grade of a module

View current CAP : cap

  • Shows your current cap based on the grades of modules you have stated.

  • Format: cap

  • Calculates your current CAP.

  • CAP = Sum (module grade point x modular credits for the module) / Sum (modular credits)

  • The calculation strictly follow the grading system of NUS.

  • Shows current CAP in in result display panel, CAP on UI will only get updated after you restart.

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.
Cap
Figure 5. View current CAP

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

  • Lists all module tasks related to that module in in result display panel.

  • Module code inputted must be valid module code you have added in before.

  • Example:

    • listModuleTasks CS2103
      Lists all module tasks of CS2103.

ListModuleTask
Figure 6. Showing all module tasks related to specified module

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.
  • Deletes the module task at the specified INDEX.

  • The index refers to the index number shown in result display panel (you can get that by entering 'listModuleTasks MODULE_CODE')

  • The index must be a positive integer 1, 2, 3, …

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 performing findTask m/cs2103)

TaskDeleteWirhModuleCode
Figure 7. Deleting a module task

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.
  • Deletes the module task at the specified INDEX.

  • The index refers to the index number shown in the in result display panel (you can get that by entering 'listModuleTasks MODULE_CODE')

  • The index must be a positive integer 1, 2, 3, …

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.

DoneWithModuleCode
Figure 8. Marking a module task 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 26
taskDelete 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

TaskBreakDown
Figure 9. Show task breakdown

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.

    1. Adds in or deletes modules and display the list of modules in profile tab.

    2. Updates user’s grades for each module and get CAP calculated immediately.

    3. Manage the tasks related to each module (module tasks) through CLI.

    4. Any modification to module tasks will be updated in the Calendar tab and also show messages on the result display panel.

NusModuleClassDiagram
Figure 10. Class diagram of structure and relations of NusModule, ModuleBook and relevant classes.
  • As shown in the class diagram above, modules are created by a class called NusModule. Every instance of NusModule contains a ModuleCode object, a Grade object (optional) and a list of ModuleTask objects.

  • Grade and Priority are enumerations. Grade contains all possible grades student can get in NUS. Every ModuleTask instance has a Priority 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 as addModule, getModule.

  • The program will automatically save any modification to module book after each command is executed by calling the saveModuleBook method in Storage.

  • 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 method addModule in ModuleBook 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.

ModuleAddSequenceDiagram
Figure 11. Sequence diagram when moduleAdd command is executed
PartOfModelClassDiagramForProfile
Figure 12. Relation between ModuleBook and Task
  • The program will synchronize the modification to module tasks in ModuleBook with that shown in Calendar tab through ModelManager as shown above. i.e. Any modification in module tasks will be updated in Task 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:

  1. The user execute listModuleTasks command.

  2. The program check whether the module code provided has been recorded or not.

  3. Display the list of tasks.

Below is an activity diagram describing the events that will happen:

ListModuleTasksActivityDiagram
Figure 13. Activity diagram for list module tasks command

Example 2:

  1. The user execute done command.

  2. The program check whether the input is valid or not.

  3. The task specified will be deleted accordingly.

  4. Synchronize between module book and calendar.

Below is an activity diagram describing the events that will happen:

DoneCommandActivityDiagram
Figure 14. Activity diagram for done command

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)