Chen YuMing's Project Portfolio Page
Project: NUSave
NUSave is a desktop budgeting application used to manage an individual’s budgets and expenses. NUSave can hold multiple budgets, of which each budget holds multiple expenditures. The user interacts with it using a command line interface (CLI), and it has a GUI created with JavaFX. It is written in Java, and has about 20,000 LoC.
Given below are my contributions to the project:
- Feature : Added ability to create a budget in NUSave. PR #47
- What it does:
create
allows the users to create budget with its name and threshold value into NUSave. - Justification: This feature allows users to create and store budgets in the application, an essential component of NUSave.
- What it does:
- Feature : Added ability to edit budget in NUSave. PR #151
- What it does:
edit
allows the users to edit a budget’s name and threshold value in NUSave. - Justification: This feature allows users to edit a specific budget’s name and threshold value in the application, an essential component of NUSave.
- What it does:
- Feature : Added ability to view help in NUSave. PR #68
- What it does:
help
allows the users to view the help commands in NUSave. - Justification: This feature allows users to view all command help instructions in NUSave.
- Highlight: This feature displays a different set of help instructions depending on which page the user is on. For example, if the user is on the main page, it will display unique command to the main page, such as open a budget and create a budget command.
- What it does:
- Feature : Added ability to sort budgets in NUSave. PR #139
- What it does:
sort
allows the users to be able to sort budgets in NUSave. - Justification: This feature allows users to sort all budgets in NUSave either by their name in alphabetical order, or their created date with the latest on top.
- What it does:
- Feature : Added ability to sort expenditures in NUSave. PR #141
- What it does:
sort
allows the users to be able to sort expenditures in NUSave. - Justification: This feature allows users to sort all expenditures in a budget either by their name in alphabetical order, or their created date with the latest on top.
- Highlight: The implementation can be challenging as I need to implement different Comparator for the sort command while abiding by the OO principle.
- What it does:
- Feature : Added ability dynamically to view the current date and time in NUSave. PR #75
- What it does: Dynamically updating the date and time in the main page view, info box UI component of NUSave.
- Justification: This feature allows users to track the current date and time while managing their budgets.
- Highlight: This enhancement affects the UI component of NUSave by rendering the current date and time. It also generates a unique greeting message depending on the time of the day. The implementation too was challenging as it required the understanding of the Java Thread class.
- Code Contributed: RepoSense Link
- Project Management:
- Created Issues in milestones v1.2, v1.3
- PRs reviewed by me
- Enhancements to Existing Features:
- Added the ability for
edit
expenditure to edit expenditure tags: PR #272- What it does:
edit
expenditure tags allows the users to be able to edit tags on expenditure in NUSave. - Justification: This feature allows users to replace and change tags on specific expenditures in a budget, an essential component of NUSave.
- What it does:
- Added NUSave icon to application UI interface: PR #267
- Added the ability for
- Contributions to Documentation
- User Guide:
- Added documentation for
Symbols
,Syntax format
andCommand summary
section. - Added documentation for the features
help
,create
budget,edit
budget,sort
budget andsort
expenditures. - Did cosmetic tweaks to existing documentation by including emoji for annotation.
- Created and annotated all NUSave screenshots. PR #212
- Added documentation for
- Developer Guide:
- Added documentation for
Setting up
andLogic component
in Design Architecture - Added implementation details for
Create Budget
,Edit Budget
,Sort
andHelp
command with their respective sequence diagram and activity diagram.
- Added documentation for
- User Guide:
- Community:
- Reported bugs and suggestions for another team (T09-2) in the class during PE dry run (examples T09-2 issues 116-141)
- Tools:
- Contributions to Developer Guide (Extracts):
3.2.2. Logic component
Figure 3.2.2.1. Architecture diagram of the Logic
component.
API: Logic.java
Logic
uses the MainPageParser
and BudgetPageParser
classes to parse user commands. This results in a
Command
object which is executed by the LogicManager
. The command execution can affect the Model
(e.g. adding an expenditure). The result of the command execution is encapsulated as a CommandResult
object
which is passed back to the Ui
. In addition, the CommandResult
object can also instruct the Ui
to perform
certain actions, such as displaying help to the user.
4.3.1.1. Create Budget
This section elaborates on the CreateBudgetCommand
.
The command occurs in the Main Page
of NUSave and results in the specified budget being created in
NUSave. This command therefore requires a compulsory name to specify the name of the budget to be created.
The following sequence diagram shows the interaction between the Logic
component and Model
component of NUSave
depicting a scenario when the user wants to create a budget for his Temasek Hall Basketball CCA by entering the command
create n/Temasek Hall Basketball p/100
.
Figure 4.3.1.2: Sequence diagram of the CreateBudgetCommand
.
Lifelines with a destroy marker (X) should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.
- The
LogicManager
uses theMainPageParser
to parse the given user input. - The
MainPageParser
will identify the command given by the user and pass the user input down to theCreateBudgetCommandParser
. - The
CreateBudgetCommandParser
will create aBudget
with the given parameters name and threshold from the user input. - The
CreateBudgetCommandParser
will then create aCreateBudgetCommand
object with the createdBudget
object as the input parameter. - The
CreateBudgetCommandParser
will then return aCreateBudgetCommand
object. LogicManager
will now call theexecute
method in theCreateBudgetCommand
object.- The
CreateBudgetCommand
will now call theaddBudget
method of the existingModel
object and add theBudget
object created into NUSave. - The
CreateBudgetCommand
then returns aCommandResult
indicating the successful addition of theBudget
object.
With the above sequence, a budget will be successfully created by the user in his NUSave application and will be reflected on the user interface.
- Contributions to User Guide (Extracts):
5.2.1. Creating a budget:
create
(Contributed by Yu Ming)
Format: create n/NAME [p/THRESHOLD]
Prefix | Parameters | Requirement | Comments | Constraints |
---|---|---|---|---|
n/ | NAME |
Required | Name of the budget | Limited to a maximum of 50 alphanumeric characters |
p/ | THRESHOLD |
Optional | Target threshold of the budget | Must be a positive value less than $1,000,000 |
You can use this command to create a new budget with the given NAME
and THRESHOLD
.
When you create a new budget, it will be displayed as a budget card in the list view.
📕 You can create a budget with no threshold to simply track your total expenses.
⚠️ You can only create a maximum of 100 budgets.
✏️ Example: create n/Temasek Hall Student Council p/1200
This will create a new budget called “Temasek Hall Student Council” with a threshold value of $1200 as seen in Figure 5.2.1.1 below:
Figure 5.2.1.1. Example of using the create budget command.