PROJECT: $AVE IT


Overview

$AVE IT is a desktop budget management application. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.

Summary of contributions

  • Major enhancement: added autocomplete feature

    • What it does: The Autocomplete feature allows you to complete the commands of the application when you type.

    • Justification: As most of the functionality is command based, autocompletion makes it more efficient for when using our application. Also, users do not have to recall the variety of commands the application has from memory.

    • Highlights:

      • As there are many ways to implement autocompletion, quite some research is done to determine the best way to implement and design it, with multiple data structures and algorithms to choose from.

      • The implementation was challenging as it requires digging into JavaFx listeners.

    • Credits: Caleb Brinkman

  • Major enhancement: added budget feature

    • What it does: The budget feature allows the user to set monthly budgets and show how much money they can spend given their expenditures.

    • Justification: Setting a budget is crucial, as one only has a limited amount of money to spend. So having a budget can help user stay on tack to save more.

    • Highlights:

      • The implementation of the budget is stored monthly, which differs from the main part of the application that are stored daily. This makes the logic and storage different from the base components.

      • Calculation of spendings are done using expenditures and repeats which functions differently, hence requiring a bit more work too.

  • Code contributed: [RepoSense]

  • Other contributions:

    • Project management:

      • Managed releases v1.1 - v1.4 (3 releases) on GitHub

      • Setting up and maintaining GitHub, Travis, AppVeyor and Coveralls

    • Enhancements to existing features:

      • Updated GUI look and feel (Pull requests #152, #158)

      • Wrote additional tests for existing features to increase coverage from 45% to 48% (Pull requests #117)

    • Documentation:

      • Updated the user guide with new commands: #209

      • Updated outdated puml and description in developer guide: #55

      • Add budget and autocomplete features in user guide

      • Add budget and autocomplete implementations in developer guide

    • Community:

      • PRs reviewed (with non-trivial review comments): #18, #55, #82, #86 etc

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

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.

Budget (Lim Feng Yue)

The Budget feature allows you to set your budget monthly, and give you a better sense of whether you are on track to your financial goals. You can see your budget at the right panel of the application.

Initially, you will see this:

no budget
Figure 1. No budget set

It means that there is not budget set for the month.

In order to know which month this month in the above image refers to, you can look at the date in the middle panel.

no budget 2020 04
Figure 2. No budget set for April 2020

Setting a budget

To set a budget you can use the setbudget Command. Shown below is an example:

setting a budget
Figure 3. Setting this month’s budget to $100

After setting a budget, you will see that the information on the right panel has changed:

budget is set
Figure 4. After setting a budget for April 2020

If your budget has been met, you will see the piggy bank from above. If your budget is not met, you will see something like this:

budget not met
Figure 5. Budget not met
To meet your budget, your balance have to be positive.

Viewing budget from another month

To view budget from another month, you can use the go command, or the Calendar feature to view any date of the month.

view may2020 budget
Figure 6. View May 2020 budget

For example, going to 8 May 2020 allows you to view the budget set for May 2020.

Autocomplete (Lim Feng Yue)

The Autocomplete feature allows you to complete the basic commands of the application. It matches what you type into the command box and tries to complete the command.

autocomplete ex
Figure 7. Autocomplete feature
If no dropdown appear, it means that either: the text does not match any commands, or the dropdown is hidden after clicking away.

You can use the Up or Down arrow keys to navigate the dropdown, then press Enter to select the command you want to complete.

The existence of the dropdown menu may require you to press Enter 2 times before the command is executed, due to how the autocompletion works.
When pressing Down arrow key does not allow you to select the commands, it means that the text box is not focused. Clear all texts and try again.

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.

Budget (Lim Feng Yue)

Budget feature allows user to input their budget for any month, and calculates the balance from the total spending. Depending on the amount of balance and whether the budget is set, different piggy bank images will be shown.

Rationale

As the application is about budget management and expenditure tracking. Budgeting is an essential feature to allow user to keep track on how they are spending their money.

Implementation

The budget feature consists of using a command, and a part of the UI display.

The following activity diagram shows what happens to the BudgetView which displays the budget details when a command is entered.

BudgetActivityDiagram
Figure 8. Activity Diagram of Budget View

The implementation of setting the budget of the month is through the command format of setbudget -a AMOUNT -ym YEAR_MONTH. The process of how the command is parsed is shown below using an example, setbudget -a 123 -ym 2020-04.

BudgetSequenceDiagram
Figure 9. Set Budget Sequence Diagram (UI and Logic)

The above sequence diagram shows the interaction of the user and the UI. After entering the command, the BudgetView will be updated using the result returned by the LogicManager.

The information displayed are:

  1. The budget amount, e.g. $123.00

  2. The total spending in 2020-04 (month)

  3. The balance, which is the difference between the budget amount and the total spending

  4. An image as visual feedback

The sequence diagram below shows a more detailed view of what happens inside the LogicManager.

SetBudgetSequenceDiagram
Figure 10. Set Budget Sequence Diagram (Logic and Model)

Design Consideration

Aspect: Calculation of Budget
Alternatives Pros Cons

[current choice] Budgets are set monthly only.

- Most common budget setting type.
- Easy to implement.

- It is not useful for users who prefer other kinds of calculation of budget.

Variability in how budget is calculated, e.g. weekly, monthly, yearly.

- Gives users more choice on how they want to budget.

- Way more difficult to implement.

Aspect: Visual Display of Budget
Alternatives Pros Cons

[current choice] Display 3 states of budget balance in image.

- Easier to see if the budget is being met.

- Requires a bit more code, and finding images.

No visual display, just text display.

- Very easy to implement.

- The UI may look a bit plain.

Better UI display, showing different variations of whether budget is met e.g. a chart.

- Gives users better insight on how they are handling their budget.

- More work is required.

Autocomplete feature (Lim Feng Yue)

Completes the command that the user is typing in the command box.

Rationale

The autocomplete feature makes it easier for user to know what commands there are in the application. As the application is also catered for users who prefer typing, this feature can be of great assistance and helps in efficiency.

Implementation

The autocomplete feature is facilitated by AutoCompleteTextField. It extends the TextField component of JavaFx and provides a dropdown of possible commands using ContextMenu.

Given below is an example usage scenario of the autocompletion.

AutocompleteSequenceDiagram
Figure 11. Autocomplete Sequence Diagram
  1. Type into the command box. The function searches and filters potential commands that the user might use.

  2. The commands will then be displayed in a dropdown format which the user can refer to when keying commands.

During the start up of the application, a list of commands are added to the AutoCompleteTextField. These commands will then be sorted lexicographically in the java implementation of TreeSet.

A ChangeListener is added the text field to 'listen' for changes in the input. TreeSet#subSet() is used to obtain all the commands between the previous text and the current text. For example, the textbox shows ex and a p is added, so the current text is exp. TreeSet#subSet() will obtain the commands that are lexicographically between ex and exp. These commands will then be shown in the autocomplete dropdown.

AutocompleteActivityDiagram
Figure 12. Autocomplete Activity Diagram

Design Consideration

Aspect: Usage of autocompletion
Alternatives Pros Cons

[current choice] Using up and down arrow keys to select autocompletion.

- Easy to implement.

- Requires the text field to be in focus.

Use of tab to simulate autocompletion like a terminal.

- Intuitive for people used to using a terminal.

- Will have to direct the tab keystroke to be used for autocompletion.

Aspect: Data structure
Alternatives Pros Cons

[current choice] Sorting lexicographically using TreeSet.

- Easy to implement.

- Can be slow if sorting through a huge number of strings.

Using a prefix trie.

- Extremely fast.

- Takes up a lot of space.

The current choice is chosen as the number of commands is not a lot, so high performance is not required.