1. Introduction
2. Quick Start
3. Features
3.0 General Information
3.1 Display Commands
3.2 Add Expense
3.3 Add Savings
3.4 Add Split Expenses
3.5 Edit Savings
3.6 Edit Expense
3.7 Reduce Savings
3.8 Delete Expense
3.9 List Savings
3.10 List Expense
3.11 Check Splitted Expenses
3.12 Settle Splitted Expenses
3.13 Find Expense
3.14 Recurring Bill Description
3.15 Add Recurring Bill
3.16 List Recurring Bills
3.17 Remove Recurring Bill
3.18 Add Expense to a Recurring Bill
3.19 View Expenses in a Recurring Bill
3.20 Add Expenses in a Recurring Bill to Overall Expenses
3.21 Change Currency
3.22 Set Budget
3.23 Get Budget
3.24 Print Budget
3.25 Get Graphical Insights for expenses
3.26 Get Graphical Insights for savings
3.27 Exiting the Application
4. FAQ
5. Command Summary
6. For Advanced Users
BudgetBuddy is a product for users who wish to handle and track any current/future expenses on a singular platform. BudgetBuddy provides a faster and more efficient way to track and calculate expenses and provides the ability to deal with finances on a singular platform with ease as long as you can type fast.
BudgetBuddy
from here.cd
into the folder you put your jar file in, and use the java -jar [CS2113-T12-3][BudgetBuddy].jar
command to run the application (Name of JAR File may vary)menu INDEX
, INDEX
refers
to the user input variable. Hence, you may input menu 1
, menu 2
, menu string
, etc. depending on the command constraints.[]
are denoted as optional inputs. Etc, if the format of a command is menu [INDEX]
,
the user may wish to not include anything for the INDEX
and just type menu
.menu
Displays the corresponding features of BudgetBuddy
Format: menu [INDEX]
INDEX
refers to the number associated with each menu option. If INDEX
is not provided OR
is of value 0
, the overall menu list will be displayedINDEX
must be either be empty OR a positive integer and a valid index in the menu listmenu
command is space sensitive. In particular, there should only be one space between menu
and INDEX
for the command to be properly recognized should you wish to view a menu item of a certain INDEX
Example of usage:
menu
: Displays all menu list items
menu 1
: Displays commands related to feature associated to menu list item 1
Records a new expense under a specific category with a detailed description.
Format: add expense c/CATEGORY a/AMOUNT d/DESCRIPTION
AMOUNT
is the amount to add to the expense. It must be a positive number and can include
up to two decimal places.DESCRIPTION
is a brief description of the expense. Accepts any text string.Example of Usage:
add expense c/Entertainment a/167 d/Bruno Mars
Adds a specified amount to the savings under a particular category.
Format: add savings c/CATEGORY a/AMOUNT
AMOUNT
is the amount to add to the savings. It must be a positive number
and can include up to two decimal places.Example of Usage:
add savings c/Salary a/500.50
Add bills that are meant for splitting among friends or colleague
Format: add shared bill a/AMOUNT n/NUMBER_OF_PEOPLE d/DESCRIPTION
AMOUNT
must be a positive numberNUMER_OF_PEOPLE
must be a positive integer.DESCRIPTION
can be any stringExample of usage:
add shared bill a/100 n/10 d/Lunch
edit savings
Edit Savings that have been added previously.
Format: edit savings c/CATEGORY a/AMOUNT
CATEGORY
must be one of the following pre-defined categories: “Salary”,
“Investments”, “Gifts” or “Others”. (Case Sensitive)AMOUNT
must be a positive float.Example of usage:
edit savings c/Salary i/2 a/180 d/Monthly Salary
Expected Output:
Saving edited successfully.
edit expense
Edit expenses that have been added previously.
Format: edit expense c/CATEGORY i/INDEX a/AMOUNT d/DESCRIPTION
CATEGORY
must be one of the following pre-defined categories: “Housing”,
“Groceries”, “Utility”, “Transport”, “Entertainment” or “Others”. (Case Sensitive)INDEX
must be a positive integer and a valid index in the menu list.AMOUNT
must be a positive integer.DESCRIPTION
can be any string.Example of usage:
edit expense c/Entertainment i/3 a/30 d/movie
Expected Output:
Expense edited successfully.
reduce savings
Reduces the amount saved in a particular category
Format: reduce savings c/CATEGORY a/AMOUNT
CATEGORY
must be a string and a valid category in the menu list.AMOUNT
to be reduced must be a positive integerExample of usage:
reduce savings c/Investments a/10
Reduces the savings of category Investments listed in the savings tracker by $10
delete expense
Deletes expenses that have been added wrongly or are no longer relevant.
Format: delete expense i/INDEX
INDEX
must be a positive integer and a valid index in the menu list.Example of usage:
delete expense i/4
Deletes the expense of at index 4 listed in the expenditure tracker.
Note:
list savings
Lists savings
Format: list savings CATEGORY
CATEGORY
is optional and can be left blank.CATEGORY
must be a pre-existing category if inputted.Example Usage:
list savings
list savings Salary
list savings Investment
Expected Output (Empty Saving List) :
Expected Output (Empty Expense List) :
Expected Output (Expense Recorded) :
Expected Output (Filtered Category) :
list expenses
Lists expenses
Format: list expenses CATEGORY
CATEGORY
is optional and can be left blank.CATEGORY
must be a pre-existing category if inputted.Example Usage:
list expenses
list expenses Transport
list expenses Housing
Expected Output (Empty Expense List) :
Expected Output (Expense Recorded):
Expected Output (Filtered Category) :
check splitted expenses
Check Split Bills
Format: check split bills
settle bill
Settle splitted expenses
Format settle bill i/Index
Index
Index
must be a positive integerExample of usage:
settle bill i/2
: Delete bill of index 2 listed in splittedexpenses tracker
find expenses
Finds expenses based on their description or amount
Format : find expenses d/[DESCRIPTION] morethan/[MINAMOUNT] lessthan/[MAXAMOUNT]
d/
, morethan/
and lessthan/
must be presentDESCRIPTION
, MINAMOUNT
, MAXAMOUNT
are optional to use. Leaving them all empty simply obtains the entire expense list.DESCRIPTION
, MINAMOUNT
, MAXAMOUNT
empty assumes that the parameter is not considered when finding expensesDESCRIPTION
is the description associated with the expenses the user wishes to findMINAMOUNT
is the filter for expenses with amounts higher than or equal to the specified valueMAXAMOUNT
is the filter for expenses with amounts lower than or equal to the specified valuefind expenses d/descriptionmorethan/10lessthan/20
, it is strongly recommended to ensure spaces for clarity.find expenses
portion is case sensitive. In particular, there should only be one space between find
and expenses
for the command to be recognized.Examples of usage :
find expenses d/coffee morethan/ lessthan/
: Finds all expenses with the word “coffee” in the description
find expenses d/coffee morethan/200 lessthan/
: Finds all expenses with the word “coffee” and amount higher than equals to $200
find expenses d/coffee morethan/200 lessthan/400
: Finds all expenses with the word “coffee” and amount higher than equals to $200, but lesser than equals to $400
The next few features from 3.15
to 3.20
in the user guide would be related to the Recurring Bill Feature. The commands associated to
this overall feature would start with the rec
command, followed by the relevant commandType
and parameters. This
feature allows the user to create and manage multiple lists of expenses separate from the user’s overall expenses
, which can be added to the users overall expenses.
The term recurring here is to indicate that a user is able to add a set of pre-defined expenses to their overall expenses at any given point in time. Hence, this could range from subscription payments, a future grocery list, etc.
rec newlist
Adds a new recurring Bill.
Format : rec newlist LISTNAME
LISTNAME
refers to the name you wish to associate the recurring Bill withLISTNAME
cannot be empty, and cannot contain a |
or !
rec
, newlist
and LISTNAME
should be exactly one space apart for the command to be recognisedLISTNAME
as lists are differentiated by their list positionExamples of usage :
rec newlist Subscriptions
: Creates a new empty recurring bill named Subscriptions
rec viewlists
Lists all recurring bill names, along with their associated list number
Format : rec viewlists
rec
and viewlists
must be
exactly one space apart for the command to be recognisedrec viewlists
will be ignored.Examples of Output :
When there are already added recurring bills :
When there are no added recurring bills
rec removelist
Removes a recurring bill
Format : rec removelist LISTNUMBER
LISTNUMBER
refers to the associated list number of recurring bill when doing a rec viewlists
LISTNUMBER
must be a valid integer > 0, and should be a valid list numberrec
and removelist
must be
exactly one space apart for the command to be recognisedExamples of usage :
rec removelist 2
: Removes the 2nd recurring bill in the list of recurring bills
rec newexpense
Adds an expense to a specified recurring bill
Format : rec newexpense to/LISTNUMBER c/CATEGORY a/AMOUNT d/DESCRIPTION
LISTNUMBER
refers to the associated list number of the recurring bill when doing a rec viewlists
CATEGORY
refers to the category of the expense you wish to addAMOUNT
refers to the amount value of the expense you wish to addAmount
that is more than 2 d.p.
is automatically rounded to the nearest 2 d.p.
DESCRIPTION
refers to the description of the expense you wish to addLISTNUMBER
must be a valid integer, and should be a valid list numberCATEGORY
, AMOUNT
and DESCRIPTION
follows the same constraints as if you were to add a normal expense.to/, c/, a/, d/
must be placed in the right orderrec newexpense to/1c/Entertainmenta/200d/movies
, it is strongly recommended to ensure spaces for clarity.rec
and newexpense
must be
exactly one space apart for the command to be recognisedExamples of usage :
rec newexpense to/1 c/Entertainment a/200 d/movies
: Adds a new expense to the 1st recurring bill
, with category as Entertainment, amount as 200 and description as Movies
rec viewexpenses
Views all expenses in a specified recurring bill
Format : rec viewexpenses LISTNUMBER
LISTNUMBER
refers to the associated list number of the recurring bill when doing a rec viewlists
LISTNUMBER
must be a valid integer, and should be a valid list numberrec
and viewlists
must be
exactly one space apart for the command to be recognisedDate
refers to the date the expense was added to the Recurring Expense ListExamples of usage :
rec viewexpenses 1
: Prints all expenses in the 1st recurring bill
Here are some expected outputs for different situations :
When the list to view contains expenses :
When the list to view does not contain any expenses :
rec addrec
Adds all expenses in a specified recurring bill to the overall expenses
Format : rec addrec LISTNUMBER
LISTNUMBER
refers to the associated list number of the recurring bill when doing a rec viewlists
LISTNUMBER
must be a valid integer, and should be a valid list numberrec
and addrec
must be
exactly one space apart for the command to be recognisedlist expenses
to view the newly added expenses being added to the
overall list of expensesExamples of usage :
rec addrec 1
: Adds all expenses in the 1st recurring bill into the overall expenses
Here are some expected outputs for different situations :
When the list to add contains 2 expenses :
When the list to add is empty:
change currency [CURRENCY_CODE]
Converts current currency to targeted currency
Format : change currency [CURRENCY_CODE]
CURRENCY_CODE
consists of the following currencies: ‘SGD’, ‘USD’, ‘EUR’, ‘MYR’, ‘JPY’, ‘KRW’, ‘CNY’, ‘HKD’CURRENCY_CODE
cannot be null.CURRENCY_CODE
is not case-sensitive.$
.Examples of usage:
change currency USD
: Converts current currency into USD
Expected Output (SGD -> USD) :
Expected Output (USD -> USD) :
Sets budget for specified category
Format: set budget c/CATEGORY b/BUDGET
CATEGORY
must be a pre-existing categoryBUDGET
must be a positive integerExample of usage:
set budget c/Utility b/100
Expected output (if there is no existing budget):
Expected output (if there is already an existing budget):
Retrieves the budget for the specified category, also lists expenses in descending order, and shows the percentage of budget that each expense takes up.
Format: get budget c/CATEGORY
CATEGORY
must be a pre-existing categoryExample of usage:
get budget c/Transport
: Retrieves the set budget for transport (if any), lists expenses
in transport category in ascending order, and shows % of budget taken up by each of them.
Format: print budget
Example of Expected Output (If there is no existing expenses):
Example of Expected Output (If there are existing expenses):
get expenses insights
Example of usage: get expenses insights
Example of Expected Output:
get savings insights
Example of Usage: get savings insights
Example of Expected Output:
bye
This section answers some frequently asked questions.
In BudgetBuddy, we set a maximum limit on transaction amounts to ensure consistent functionality across different systems. Since variable storage capacities can vary , this limit helps prevent errors and maintain reliable operations. With the richest man in the world having an approximate net worth of 231,000,000,000. We believe that the cap should be sufficient to most users.
Exceeding the maximum limit of 1,000,000,000,000.00 for total expenses can lead to calculation errors and issues in data representation due to the limited range of numbers the application can handle. While we strongly recommend staying within this limit to avoid such problems, most users should find that BudgetBuddy meets their needs without issue.
The save files for BudgetBuddy are stored in [JAR file location]/data/
.
Copy all contents found in the data
folder to the new location.
As of current version (v2.1), the feature to include your own category has not been implemented yet. It may come in a future release.
As of the current version (v2.1), we plan to include more conversion codes in future updates as we expand on the program.
As our program does not require Internet access, the conversion ratios are taken as of the release date for each version of BudgetBuddy.
(i.e. v2.1 released on 15 Apr 2024, so conversion ratios are taken as of that date)
menu [INDEX]
add savings c/CATEGORY a/AMOUNT
add expense c/CATEGORY a/AMOUNT d/DESCRIPTION
a/AMOUNT n/NUMBER_OF_PEOPLE d/DESCRIPTION
edit expense c/CATEGORY i/INDEX a/AMOUNT d/DESCRIPTION
edit savings c/CATEGORY a/AMOUNT
reduce savings c/CATEGORY a/AMOUNT
delete expense i/INDEX
list expenses [CATEGORY]
list savings [CATEGORY]
check split bills
settle bill i/Index
find expenses d/[DESCRIPTION] morethan/[MINAMOUNT] lessthan/[MAXAMOUNT]
rec newlist LISTNAME
rec viewlists
rec removelist LISTNUMBER
rec newexpense to/LISTNUMBER c/CATEGORY a/AMOUNT d/DESCRIPTION
rec viewexpenses LISTNUMBER
rec addrec LISTNUMBER
change currency [CURRENCY_CODE]
set budget c/CATEGORY b/BUDGET
get budget c/CATEGORY
print budget
get expenses insights
get savings insights
bye
BudgetBuddy data is automatically saved to the hard disk after any command. There is no need to save manually.
Note : As the data to be saved depends on the current state of the application, any manual changes made to the files during the run of the application will not be reflected in the application.
BudgetBuddy data is saved automatically as a text file [JAR file location]/data/*.txt
. Where * represents the different names of the files
. Five files should be created upon first startup of BudgetBuddy : SavingsFile.txt
, ExpenseFile.txt
, RecurringExpensesFile.txt
, DefaultCurrency.txt
and SplitExpensesFile.txt
Advanced users are welcome to update the data directly by editing this file. However, caution is advised as certain edits may cause JunBot to behave unexpectedly.
For advanced users who wish to edit the RecurringExpensesFile.txt
, do take note of the following
!!! NAME !!!
will denote the creation of a RecurringExpenseList with the name as the specified NAME
!!! NAME !!!
in RecurringExpensesFile.txt
, where the highest in the file would have its associated list number as 1
.LISTNUMBER | DATE | CATEGORY | AMOUNT | DESCRIPTION
will denote the addition of an expense into the RecurringExpenseList
associated with the provided LISTNUMBER
DATE
, CATEGORY
, AMOUNT
and DESCRIPTION
follow the same restrictions as if a user were to normally add an expense within the application itself.CATEGORY
is case-sensitive here. Hence, entertainment
is considered an invalid category as it should be Entertainment
AMOUNT
that is more than 2 decimal places will be automatically treated as 2 d.p.⚠️ Caution: Certain edits can cause BudgetBuddy to behave in unexpected ways (e.g. if value entered is outside the acceptable range, or the entries are not in the right format). Therefore, edit the data file only if you are confident that you can update it correctly