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:
-
Documentation:
-
Community:
-
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:
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.
Setting a budget
To set a budget you can use the setbudget
Command. Shown below is an example:
After setting a budget, you will see that the information on the right panel has changed:
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:
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.
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.
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.
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
.
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:
-
The budget amount, e.g.
$123.00
-
The total spending in
2020-04
(month) -
The balance, which is the difference between the budget amount and the total spending
-
An image as visual feedback
The sequence diagram below shows a more detailed view of what happens inside the
LogicManager
.
Design Consideration
Aspect: Calculation of Budget
Alternatives | Pros | Cons |
---|---|---|
[current choice] Budgets are set monthly only. |
- Most common budget setting type. |
- 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.
-
Type into the command box. The function searches and filters potential commands that the user might use.
-
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.
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 |
- 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.