Project Portfolio for StudyBuddyPro
Done By: Jasmine Yeo Jia Min
This portfolio is meant to be a well-documented data point of my Software Engineering experience on the project. It showcases my contributions to the project and my documentation skills.
Overview
StudyBuddyPro is a desktop Command Line Interface (CLI) application intended for Computing School students of National University of Singapore (NUS). It aims to lessen target users' revision time consumption without compromising the quality of studies with a centralized platform.
StudyBuddyPro provides three main features: Flashcard, Notes and Cheatsheet. These features are used to revise using flashcards, take notes and generate cheatsheets respectively. Additionally, StudyBuddyPro is equipped with a Graphic User Interface (GUI).
The above image shows how StudyBuddyPro looks like with the descriptions of each functional areas and icons.
Syntax
Please do take a look at the syntax notations below as they are used throughout the document.
syntax 1
— For commands or class objects
syntax 2 — For figures, tables, functionality or variables
Callouts Signs
Please do refer to the signs below as they are used throughout the document.
Indicates information that are to be adhere as potential problems may be encountered if you are not careful. |
Indicates information that are crucial to understand so that you will be able to follow the flow of the document. |
Indicates information that are note-worthy. Do read them for more information and better understandings. |
Summary of contributions
The sections below are a summary of my contributions to the project. It highlights my major contributions and states my minor, code and other contributions.
Major Enhancement 1: Automated the Generation of Cheatsheets
This enhancement allows users to automatically generate cheatsheets according to the tags that they specify. From this, it improves the product significantly as users can sift out information to be included in a specific cheatsheet. Thus, it reduces the users' time taken in collating cheatsheets.
This enhancement’s implementation makes use of the other features in the StudyBuddyPro to create the contents in the cheatsheets. As such, users can make full use of this auto-generation enhancement by using tagging functionality in those features.
Major Enhancement 2: Customization of Generated Cheatsheets
This enhancement allows users to remove contents in the generated cheatsheets by specifying its content indexes or tags. From this, it improves the cheatsheets' usability as users can determine which contents to be included or excluded in the cheatsheets.
This enhancement ensures all contents are placed under the tags specified even after users' personalization. Hence, users can be assured that the cheatsheets contain no irrelevant contents.
Minor Enhancement 1: Switching between the Features
This enhancement allows users to toggle amongst the features in the StudyBuddyPro. Also, it allows global commands, like exit
or filterall
to be used in any features.
Minor Enhancement 2: Clearing Specific Features’s Data
This enhancement allows users to clear specific feature’s data in the StudyBuddyPro. As such, users do not need to clear the entire data if desired.
Contributions to the User Guide (UG)
The sections below are my contributions to the UG of StudyBuddyPro. They showcase my ability to write documentation that targets the end-users.
All commands in the sections assume that the user is in the cheatsheet mode. |
To auto-generate a Cheatsheet: add
Adds a cheatsheet from user input title <TITLE> and content <CONTENT>. Voila! To your convenience, flashcards and notes in StudyBuddyPro that have the specified tag upon creation of the cheatsheet will be used as contents.
Format: add t/TITLE [tag/TAG]...
Example usage:
add t/CS2100 Midterm CheatSheet tag/cs2100midterm
Assuming that there is a flashcard object with the tag "cs2100midterm" |
Expected output:
New cheatsheet added:
Title: CS2100 Midterm CheatSheet
Tags: [cs2100midterm]
1 content(s) have been successfully generated from the other modes.
To edit a Cheatsheet: edit
Oh no! It appears that you might have accidentally misspelled something during creating a cheatsheet. Fret not, edit allows you to edit a cheatsheet’s title or remove tag or content by a specified <CHEATSHEET_INDEX>. At least one of the optional fields must be specified to edit.
Format: edit (index) [t/TITLE] [tag/TAG]...
|
Example CheatSheet of index 8:
Title: cs2100 cheatsheet Tags: [cs2100finals][formula] Contents: [ 1. Question: What is 110 Binary in its Decimal Form?; Answer: 6 ] [ 2. 10 + 10 = 20]
Example usage:
edit 8 t/cs2100 final cheatsheet tag/formula
Expected output:
Edited Cheatsheet:
Title: cs2100 final cheatsheet
Tags: [cs2100finals]
The actual implementation does not show the contents in the feedback box. Please do use |
To view Cheatsheets: view
Views a cheatsheet and its contents by the specified index.
Format: view (index)
Example CheatSheet of index 1:
Title: cs2100 cheatsheet Tags: [cs2100finals][important] Contents: [ 1. Question: What is 110 Binary in its Decimal Form?; Answer: 6 ] [ 2. 10 + 10 = 20]
Example usage:
view 1
Expected output:
view 1
expected outputThe above screenshot shows the cheatsheet with index 1 in the GUI of StudyBuddyPro.
To view Cheatsheets of a Specific Tag: show
Views a cheatsheet’s content for a specified tag. User must be in a view
command before using show
command.
Format: show (index)
Assuming user is in the |
Example usage:
show 1
Expected output:
show 1
expected outputThe above screenshot shows the cheatsheet’s content with tag index 1 in the GUI of StudyBuddyPro.
Currently, cheatsheets only allow contents that match all the specified tags. Hence, |
To list all Cheatsheets: list
Lists all cheatsheets found in StudyBuddyPro.
Format: list
Example output: Listing all cheatsheets: 1. Title: CS2100 midterms Tags: [cs2100][midterms] 2. Title: ma1521 finals Tags: [finals][ma1521]
Updating a Cheatsheet: update
(Coming in v2.0)
Ever wanted to re-use your midterm cheatsheet by adding more contents into it and then use it for your final examinations?
Our update
feature updates cheatsheet’s contents by a specified <CHEATSHEET_INDEX>. Tags specified are added into the list of tags for the cheatsheet if it not already exist.
This command may overwrite any customization of contents done prior to it as the cheatsheet’s contents will be regenerated. |
Format: update (index) [tag/TAG]...
Example CheatSheet of index 8:
Title: cs2100 cheatsheet Tags: [cs2100finals] Contents: [ 1. Question: What is 110 Binary in its Decimal Form?; Answer: 6 ]
Example usage 1:
update 8
Expected output:
Updated Cheatsheet:
Title: cs2100 final cheatsheet
Tags: [cs2100finals]
Contents: [ 1. Question: What is 110 Binary in its Decimal Form?; Answer: 6 ]
[ 2. Binary is in bits of 1 and 0.]
The actual implementation does not show the contents in the feedback box. Please do use |
Example usage 2:
update 8 tag/formula
Expected output:
Updated Cheatsheet:
Title: cs2100 final cheatsheet
Tags: [cs2100finals][formula]
Contents: [ 1. Question: What is 110 Binary in its Decimal Form?; Answer: 6 ]
[ 2. 10 + 10 = 20]
The actual implementation does not show the contents in the feedback box. Please do use |
Updated Cheatsheet: Title: cs2100 final cheatsheet Tags: [cs2100finals][formula] Contents: [ 1. Question: What is 110 Binary in its Decimal Form?; Answer: 6 ] [ 2. 10 + 10 = 20]
Contributions to the Developer Guide (DG)
The sections below are my contributions to the DG of StudyBuddyPro. They showcase my ability to write technical documentation. Also, it portrays my technical depth of my contributions to StudyBuddyPro.
Customizable Auto-generated Cheatsheet Feature
All the operations assume the user is in the cheatsheet mode. |
Implementation
This feature has a two-step implementation. The first step is to auto-generate cheatsheet, and the second step is to enable removal of contents in the generated cheatsheet.
Step 1: Auto-generation
The auto-generation mechanism is used in the AddCheatSheetCommand
during creation of the cheatsheet.
After creation, the cheatsheet is then stored in the studyBuddyBook
.
It is involved in the following operations:
-
AddCheatSheetCommand#execute()
— Creates the cheatsheet -
AddCheatSheetCommand#getRelevantContents()
— Gets all the contents from flashcard and notes according to the tags specified
The first operation is exposed in the Model
interface as Model#setCheatSheet()
.
The following figure shows a high-level view of how the auto-generation operation works.
From the sequence diagram above, it portrays the relationships between the components to execute the creation mechanism. The figure below explains the details within the sequence diagram.
The above sequence diagram shows the complete action flow for the execution of methods. Here is a brief summary of the steps taken to create the cheatsheet:
-
A new cheatsheet object is created with the parsed title and tags.
-
Another new cheatsheet object is created with the relevant contents extracted according to the tags specified.
-
The first cheatsheet object is replaced with the second cheatsheet object while retaining its title and tags.
Different cheatsheet objects are created to ensure that the cheatsheet object itself is not modifiable.
Step 2: Customizing contents
The customization is based on the contents that the user wants to remove. The customization feature is used in the EditCheatSheetCommand
during the editing of the cheatsheet. After the customization, the cheatsheet is then stored in the studyBuddyBook
.
It is involved in the following operations:
-
EditCheatSheetCommand#execute()
— Edits the cheatsheet -
EditCheatSheetCommand#updateContents()
— Retrieves the contents to be retained in the cheatsheet
The first operation is exposed in the Model
interface as Model#setCheatSheet()
.
The following figure shows the activity flow how the customization feature works using an example command called edit 1 c/1 c/3 c/7
.
The index provided after |
edit
command for the removal of contentsThe activity diagram above shows the general flow of customization of cheatsheet feature. The changes for contents have to come first before the changes for tags. This is to ensure that the contents are still relevant to the tags specified. An example is provided below.
Tag | Content |
---|---|
tag1 |
content1 |
tag2 |
content2 |
tag2 |
content3 |
According to the above table, the system will be able to remove tag2 first before content2 if the order of removal is not followed. This may result in potential errors in the system as content2 may not be found or the position of it is being replaced with another content.
Design Considerations
Aspect: How auto-generation is implemented
-
Alternative 1 (current choice): Replacing the newly created cheatsheet with another cheatsheet object containing all the relevant contents
-
Pros: Retains the object originality and easier to implement.
-
Cons: Invoking the edit method to create a new cheatsheet object may be complicated and messy.
-
-
Alternative 2: Reformat the way the
add
function works and abstract it such that it will be generalized.-
Pros: Codes may be cleaner and easier to understand.
-
Cons: Harder to implement. More abstraction and modifications have to be done. Might change the format of the system.
-
Aspect: How customization of contents is implemented
-
Alternative 1 (current choice): Places all contents that are not within the indexes specified by users into a new cheatsheet object and the targeted cheatsheet object with the respective changes.
-
Pros: Retains the object originality and easier to implement.
-
Cons: Large amount of contents may result in longer processing time as it loops to find all contents not removed. It is messier to comprehend.
-
-
Alternative 2: Reformat the way the
edit
function works and abstract it such that it will be generalized.-
Pros: Codes may be cleaner and easier to understand.
-
Cons: Harder to implement. More abstraction and modifications have to be done.
-