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.menuDisplays 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 INDEXExample 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 savingsEdit 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 expenseEdit 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 savingsReduces 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 expenseDeletes 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 savingsLists 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 expensesLists 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 expensesCheck Split Bills
Format: check split bills
settle billSettle splitted expenses
Format settle bill i/Index
IndexIndex must be a positive integerExample of usage:
settle bill i/2: Delete bill of index 2 listed in splittedexpenses tracker
find expensesFinds 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 newlistAdds 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 viewlistsLists 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 removelistRemoves a recurring bill
Format : rec removelist LISTNUMBER
LISTNUMBER refers to the associated list number of recurring bill when doing a rec viewlistsLISTNUMBER 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 newexpenseAdds 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 viewlistsCATEGORY 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 viewexpensesViews 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 viewlistsLISTNUMBER 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 addrecAdds 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 viewlistsLISTNUMBER 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 insightsExample of usage: get expenses insights
Example of Expected Output:

get savings insightsExample of Usage: get savings insights
Example of Expected Output:

byeThis 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/AMOUNTadd expense c/CATEGORY a/AMOUNT d/DESCRIPTIONa/AMOUNT n/NUMBER_OF_PEOPLE d/DESCRIPTIONedit expense c/CATEGORY i/INDEX a/AMOUNT d/DESCRIPTIONedit savings c/CATEGORY a/AMOUNTreduce savings c/CATEGORY a/AMOUNTdelete expense i/INDEXlist expenses [CATEGORY]list savings [CATEGORY]check split billssettle bill i/Indexfind expenses d/[DESCRIPTION] morethan/[MINAMOUNT] lessthan/[MAXAMOUNT]rec newlist LISTNAMErec viewlistsrec removelist LISTNUMBERrec newexpense to/LISTNUMBER c/CATEGORY a/AMOUNT d/DESCRIPTIONrec viewexpenses LISTNUMBERrec addrec LISTNUMBERchange currency [CURRENCY_CODE]set budget c/CATEGORY b/BUDGETget budget c/CATEGORYprint budgetget expenses insightsget savings insightsbyeBudgetBuddy 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 LISTNUMBERDATE, 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 EntertainmentAMOUNT 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