Overview
This portfolio documents my contributions towards the project, IchiFund, which is part of a software engineering module, CS2103T. My team decided to morph an existing address book software into a desktop finance management application for university students who prefer using a command-line interface. We call this application IchiFund.
My role was to develop the Budgets component and design the user interface for the application.
Summary of contributions
-
Major enhancement: Developed the
Model,Logic,Storage, andUiinfrastructure for budgeting features.-
Functionality: Provides the foundation on which features related to budget, such as
add,delete, andfind, are built upon. -
Justification: The ability to read, create, delete, and find budgets on the application depends on the budget infrastructure. With this infrastructure in place, it is easy to implement and extend the budgeting features within IchiFund.
-
Highlights: This enhancement is part of the core features in IchiFund. The ability to implement this enhancement demonstrates a deep understanding of the underlying MVC design pattern of the original addressbook3 codebase. This is clearly highlighted when I introduced a
Taskabstraction to update all budgets upon an update of any transaction.
-
-
Minor enhancement:
-
Code contributed: Click here to view the code that I have contributed.
-
Other contributions:
-
Project management:
-
Managed pull requests (PRs) and issue tracker.
-
Refactored existing code of Address Book 3 to IchiFund (PR #83).
-
Protected the master branch.
-
-
Enhancements to existing features:
-
Documentation:
-
Community:
-
Tools:
-
Integrated Travis to the team repository.
-
Integrated a new Github plugin (SlackBot) to the team repository.
-
-
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. |
Creating monthly budget: add
Format: add de/DESCRIPTION a/AMOUNT [c/CATEGORY] [m/MONTH y/YEAR]
You can use the add command to create a budget.
Let us first walk through the process of creating a budget for tracking your spending on food.
-
Check to make sure you are in the budgets tab. If not, switch to it.
-
Type
add de/Saving my tummy a/82.69 c/foodinto the command bar. This will create an $82.69 budget named Saving my tummy that tracks this month’s expenditures tagged with the food category.
If the optional arguments m/MONTH and y/YEAR are not provided, the budget will track all transactions.
|
-
Press enter to run the command. You should see the newly created budget on the budget list.
If you want to track all monthly expenditures, simply leave out the c/CATEGORY argument.
For instance, the following command creates a $500.00 budget that applies to all expenditures:
add de/General budgeting a/500.
Deleting monthly budget: delete
Format: delete INDEX
You can use delete to delete a budget with a given index.
Let us walk through the process of deleting the Saving my tummy budget we created previously.
-
Identify the index of the budget you are deleting. Here, the index is 2.
-
Type
delete 2into the command bar and press enter. You should see the Saving my tummy budget disappear from the list.
Finding monthly budget by keywords: find
Format: find [KEYWORDS]…
You can use find to find budgets with description that matches all the given keywords.
To illustrate this, let us suppose you want to find all budgets with saving in its description.
To do so, type find saving into the command bar and press enter.
You should see the search result on the budget list.
| If you are unsure about which keywords the budget you are looking for contains, you can enter multiple keywords separated by space. IchiFund will return to you all results that match with at least one keyword. |
You can also revert the budget list to show all budgets by executing find without any argument.
To revert the budget list so that all budgets are listed, simply execute find without any argument.
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. |
Logic Component
API :
Logic.java
-
Logicuses theIchiFundParserclass to parse the user command. -
This results in a
Commandobject which is executed by theLogicManager. -
The command execution can affect the
Model(e.g. adding a person). -
The result of the command execution is encapsulated as a
CommandResultobject which is passed back to theUi. -
In addition, the
CommandResultobject can also instruct theUito perform certain actions, such as displaying help to the user.
Given below is the Sequence Diagram for interactions within the Logic component for the execute("delete 1") API call.
delete 1 CommandTasks
Some models in IchiFund must be refreshed after a command is executed.
For instance, when a new Transaction is added, all Budget must be recomputed.
Task can be used to facilitate such updates.
Implementation
This feature is managed by TaskManager.
The role of TaskManager is to maintain a list of all active Task.
The LogicManager holds an instance of the TaskManager.
When the LogicManager#execute() is called, the following chain of operations occurs:
-
After
Command#execute()is completed,TaskManager#executeAll()is called.
-
TaskManager#executeAll()will iterate through all activeTaskand call the respectiveTask#execute()method.
Adding Budget
The add budget feature allows the user to add a budget into IchiFund.
This feature is facilitated by BudgetFeatureParser, AddBudgetCommandParser, and AddBudgetCommand.
The arguments supported by this feature includes:
-
Description -
Amount -
Category(optional) -
Month(optional) -
Year(optional)
Implementation
When the user input the add command in the Budget tab, the following chain of operations occurs:
-
The
IchiFundParserwill delegate the parsing of the command toBudgetFeatureParserif the current active tab is Budget. -
The
BudgetFeatureParserwill delegate the parsing of the arguments toAddBudgetCommandParser. -
AddBudgetCommandParser#parse()will take in aStringinput consisting of the arguments. -
This arguments will be tokenized and the respective models for each argument are created.
-
If the parsing of all arguments are successful, a new
Budgetobject is created using the arguments, and a newAddBudgetCommandis returned back toLogicManager. -
The
LogicManagerexecutesAddBudgetCommand#execute(). -
The newly created
Budgetis added to the model.
This process is further illustrated in the following sequence diagram:
add Command under Budget Tab