Kayden - Project Portfolio

This portfolio serves to document my contributions in a team-based software engineering project CS2113T. My team comprises of 4 members and we were tasked to morph a basic command line interface address book within 8 weeks. After some discussion, we decided that we will work towards a Task Manager named Student Buddy.

Note the following symbols and formatting used in the project portfolio:

  • command: A grey highlight (called a mark-up) indicates that this is a command that can be inputted into the command line and executed by the application.

  • important: Bold mark-ups emphasize that this is a important word or phrase.

  • method: Italics mark-ups signify that this is a class or method name and one should take extra note as it will be useful in understanding the concepts or diagrams discussed.

Overview

Our project’s ultimate aim is to help students organise their tasks and notes more efficiently and effectively. This is done through the following features. Student Buddy allows users to add and delete their tasks and miscellaneous notes; view tasks added easily via a calendar panel display; as well as incorporate a signup and login feature to strengthen the security of this application.

My role was to design and implement the notes feature which allows user to add and delete miscellaneous notes as well as display them in a clear and concise manner. The following sections will highlight my enhancements in more detail, as well as illustrating the relevant sections that I have contributed to the user and developer guide.

Summary of contributions

This section showcases the different aspects in which I have contributed to the project. These aspects include coding and the updating of user and developer guide.

  • Major enhancement: added the ability to add notes and delete notes.

    • What it does: allows the user to add in new notes to help keep track and manage notes. Unwanted notes or notes that are already completed can be removed by deleting the note.

    • Justification: This feature improves the product significantly because a user can now manage their miscellaneous activities other than school-related tasks which greatly enhances the usablility of Task Manager.

    • Highlights: This enhancement required an in-depth analysis and understanding of the design of Task Manager to know what are its restrictions and how it can be improved.

    • Credits: All the team members.

  • Minor enhancement: Added colour codes to depict the importance of a note according to priority levels 1 to 3. The highest priority 1 being red-orange followed by yellow for 2 and white for 3.

  • Code contributed: [Reposense]

  • Other contributions:

    • Enhancements to existing features:

      • Updated the GUI of the application by adding a panel to display notes: #56

    • Documentation:

      • Did cosmetic tweaks to existing contents of the User Guide: #31, #3

      • Added notes section into user and developer guides which comprises of add notes and delete notes feature: #56, #110, #123, #125

    • Community:

      • PRs reviewed: #36, #39, #122

      • Reported bugs and suggestions for other teams in the class (examples: 1, 2, 3)

    • Project Management

      • Created new branch v1.4

      • Spearheaded the discussion of user stories under projects tab in Github: User_Stories

Contributions to the User Guide

We had to morph the original user guide for address book to adapt to Student Buddy. This includes all the morphed features as well as the additional features that we had implemented. The following is an extract from our Student Buddy User Guide, showing the instructions that I have added for the notes feature.

{Start of extract}

Adding miscellaneous notes : note

Adds a note to Student Buddy. Format: note h/HEADING c/CONTENT p/PRIORITY

  • Adds the note with the given parameters.

  • Priority can only take numbers from 1 to 3 with 1 being the most urgent.

  • Notes with Priority 1 will be displayed in red colour followed by 2 in yellow and 3 in white.

Example:

  • note h/Popular c/buy blue pens p/2
    Add a note with heading Popular, content buy blue pens and priority 2.

The following are 2 diagrams that demostrate the example shown above. One of the diagram shows the state before the command is executed and the other shows the state after command is executed.

Before:

AddNotesBefore

After:

AddNotesAfter

Deleting miscellaneous notes : deletenote

Deletes the specified note from Student Buddy.
Format: deletenote INDEX

  • Deletes the note at the specified INDEX.

  • The index refers to the index number shown in the displayed notes list.

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

Examples:

  • deletenote 2
    Deletes the 2nd note from the displayed notes list in Student Buddy.

The following are 2 diagrams that demostrate the example shown above. One of the diagram shows the state before the command is executed and the other shows the state after command is executed.

Before:

DeleteNoteBefore

After:

DeleteNoteAfter

{End of extract}

Contributions to the Developer Guide

We were also tasked to morph the original Developer Guide for address book. Inside the developer guide contains all the technical information such as how a feature is implemented, class diagrams as well as sequence diagrams. Given below are sections I contributed to the Developer Guide. They showcase my ability to write technical documentation as well as the depth of my understanding of this project.

{Start of extract}

Add Notes Feature

This feature allow users to add notes regarding miscellaneous matters.

The class diagram below illustrates the Notes class.

ClassDiagramForNotes

Current Implementation

The add notes mechanism is facilitated by AddNotesCommand. A Notes object is instantiated which contains of Heading, Content and Priority.

Given below is an example usage scenario and how the add notes mechanism behaves at each step.

Step 1. The user enters in a note with its associated parameters. e.g note h/popular c/buy pilot G-2 blue pens p/2.

Step 2. The LogicManager calls ParseCommand with that input.

Step 3. The TaskManagerParser is called and returns a AddNotesCommand object to Logic Manager.

Step 4. The LogicManager will call execute method on the AddNotesCommand object.

Step 5. ModelManager is then called and will check if the note already exists.

Step 6. If note already exists, DuplicateNotesException will be thrown. This will return a string message "This note already exists in the task list".

Step 7. Else, addNotes(notes) method is called and note is added.

The sequence diagram below illustrates how the mechanism for adding notes function.

AddNotesSequenceDiagram

Design Considerations

Aspect: Checking for duplicate notes

  • Alternative 1(current choice): Implement a method to check new notes entered. If a new note added is exactly the same as exisitng notes in the Student Buddy, it will be classified as duplicate note and cannot be added.

    • Pros: Easy to implement

    • Cons: May neglect duplicate notes that mean the same because the check is for the exact same heading and content. The following 2 examples shown below will be identified as different notes due to an additional s in example 2

      1. h/popular c/buy ring file

      2. h/popular c/buy ring files

  • Alternative 2: Implement a method to check for similarity of notes. If similarity is more than 90%, note is classified as same note and cannot be added.

    • Pros: Can reduce the amount of duplicate notes that are added.

    • Cons: Difficult to implement and cannot eliminate duplicate notes completely.

Final decision: Alternative 1 was chosen due to the significantly easier implementation.

Delete Notes Feature

This feature allow users to delete notes that are no longer wanted.

Current Implementation

The Notes mechanism is facilitated by DeleteNotesCommand from the Logic component. Upon executing the DeleteNotesCommand, the unwanted note will be removed from the memory of the Student Buddy.

Given below is an example usage scenario and how the deletenote mechanism behaves at each step.

Step 1. The user calls the DeleteNotesCommand with the note’s displayed index. e.g deletenote 1.

Step 2. The LogicManager calls parseCommand with the user input.

Step 3. The TaskManagerParser is called and it returns a DeleteNotesCommand object to the LogicManager.

Step 4. The LogicManager will call execute() on the DeleteNotesCommand object. If no note of the corresponding index is found,

it would return a string of message MESSAGE_INVALID_NOTES_DISPLAYED_INDEX.

Step 5. The Logic component then interacts with the Model component which then calls TaskManager component within it to execute

deleteNotes(target) to remove the note.

Step 6. The command result would then return the message MESSAGE_DELETE_NOTE_SUCCESS in a string.

The following diagram illustrates how the deletenote operation works:

DeleteNotesSequenceDiagram

Design Considerations

Aspect: Weighing user experience to convenience of users

  • Alternative 1: Implement a method to strike off notes that are completed so that users can keep track of what notes they have added in as well as the ones they finished.

    • Pros: Better user experience

    • Cons: May cause incovenience as users have to delete away completed notes every few days so as to allow easier viewing of latest notes.

  • Alternative 2(current choice): Deleting completed notes away.

    • Pros: Easy to implement

    • Pros: Easy for users to manage completed notes.

    • Cons: No sense of achievement as users are unable to view the amount of work completed.

Final decision: Alternative 2 was chosen due to it being more practical and convenient to users.

Retrieving of notes from storage [coming in V2.0]

Current Implementation

  • Notes added are currently being stored in notes.json file.

  • Retrieving from notes.json file is still in progress.