This document is a portfolio of the ichifund software engineering project I have been a part of and it is a means of highlighting my contributions to this project, and to my potential as a software engineer.
Overview
For our software engineering project, my team of five software engineering students, including myself, were tasked with either improving on or modifying the existing addressbook project into a new application. We decided to opt for the latter of the two options and morph the addressbook codebase into a command-line based finance management tool which we named "Ichifund"
. Ichifund is a desktop application targeted towards students who need to manage their finances over a desktop application and intends to aid them with several money accounting needs, such as tracking budgets, loans, keeping track of transactions over time, and generating data and analysis on all of these factors. All of this intends to package the various complex tools required to manege personal finances into a single application.
Summary of contributions
-
Major enhancement: added Application support for the Loans feature
-
What it does: allows the user to add Loans, remove Loans and edit them on the fly.
-
Justification: This feature improves the product significantly because a user can can keep track of Credit and Debit, contrary to just active transactions. Static budgets and transactions don’t keep track of money that is owed to a different party.
-
Highlights: This enhancement affects the use case of the Application and adds to the value the user can potentially receive from the product.
-
Credits: {mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}
-
-
Code contributed: [Functional code] [Test code] {give links to collated code files}
-
Other contributions:
-
Project management: *
-
Documentation:
-
Did cosmetic tweaks to existing contents of the User Guide: #14
-
-
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. |
Marking Loan Paid: paid
Mark loan as paid and remove it from the list.
Take any loan, with an outstanding loan amount, and when it is paid off, it can referenced by it’s index to be removed.
Format: pay i/INDEX
Analytics
Have you ever wondered where all your money is going? Our analytics feature provides deeper insights into your incomes and expenditures, so that you can take control of your personal finances.
On startup, the analytics tab is empty.
With each analytics command entered, the analytics tab is updated with the list of command results. The image below gives an overview of the GUI of the feature:
The list of command results comprises several result cells. We give a further breakdown of the information each cell displays in the following image:
For all commands in the analytics feature, if the optional arguments m/MONTH and/or y/YEAR are not provided,
results for the current month and/or year in the system time will be displayed.
|
Viewing expenditure trend: expenditure
Format: expenditure [y/YEAR]
You may have committed to reducing your expenditure, but you are unsure if you are on the right track.
With the expenditure
command, you can take a quick look at your monthly expenditure trends to measure your success in
cutting your expenditure.
Suppose you made a New Year’s resolution to track your personal finances using IchiFund, and you have been diligently
adding transactions since the start of 2019. After entering the expenditure
command, the GUI of IchiFund may look like this:
Examples:
-
expenditure
Displays monthly expenditure trend for current year. -
expenditure y/2019
Displays monthly expenditure trend for 2019.
Viewing income trend: income
Format: income [y/YEAR]
Perhaps you are contemplating asking for a promotion at your part-time job or seeking a better-paying place of employment.
The income
command gives you a clear overview of your monthly income trends, allowing you to make more informed decisions
regarding your source of income (or the lack thereof).
Suppose you work part-time at a restaurant, but business has been slow for the past few months, and your boss decides to
give you a pay cut. After entering the income
command, the GUI of IchiFund may look like this:
Examples:
-
income
Displays monthly income trend for current year. -
income y/2019
Displays monthly income trend for 2019.
Viewing balance trend: balance
Format: balance [y/YEAR]
Maybe you have set a target for yourself to accumulate a certain amount of money in your savings account by the end of the year.
With the balance
command, you will be able to take a look at your monthly balance (income - expenditure) trends,
and determine if more needs to be done to hit your target.
Let’s say you have been saving up for a new laptop as your old one is due for a repair. With the recent pay cut, you are
unsure if you will be able to save up enough money to purchase the laptop in time for the start of the next school semester.
After entering the balance
command, the GUI of IchiFund may look like this:
You now know that you are on track to getting your laptop in spite of the pay cut.
Examples:
-
balance
Displays monthly balance trend for current year. -
balance y/2019
Displays monthly balance trend for 2019.
Viewing expenditure breakdown by category: breakdown
Format: breakdown [m/MONTH] [y/YEAR]
Perhaps you have entered the expenditure
command, and you are now aware that you are spending more than you would like to, but you are still
unsure what is it exactly that you are spending the bulk of your money on.
With the breakdown
command, you will be given a clear breakdown of your expenditure by category, and hence
be able to pinpoint the categories that have larger contributions to your expenditure.
It is now mid-November, and your expenditure has exceeded half of your monthly budget. Clueless as to what you could have spent on,
you enter the breakdown
command, and the GUI of IchiFund may look like this:
Examples:
-
breakdown
Displays expenditure breakdown by category for current month. -
breakdown m/7 y/2019
Displays expenditure breakdown by category for July 2019.
Viewing expenditure category ranking chart: catrank
Format: catrank [m/MONTH] [y/YEAR]
What if, instead of the breakdown of your expenditure by category, i.e., breakdown
, you wanted to zoom in on the top 2
largest contributing categories to your expenditure so as to cut down on your expenditure more effectively?
With the catrank
command, you can take a look at your expenditure category ranking chart, and hence
be able to zoom in on and cut down on expenditure for categories that have the largest contributions to your expenditure.
The expenditure category ranking chart is in decreasing order, i.e., the categories with higher expenditure will be at the top of the list, and the categories with lower expenditure will be at the bottom of the list. |
As the month comes to a close, you realise that you have transactions from many categories, and running the breakdown
command
returns you a view that is too cluttered for your liking.
After you enter the catrank
command, and the GUI of IchiFund may look like this:
With the catrank
command, you are now able to identify that it must have been the trips to the beauty salon
and the Grab rides you take on a daily basis that have contributed to your overspending, and that perhaps you should
consider painting your own nails and taking public transport to school instead.
Examples:
-
catrank
Displays expenditure category ranking chart for current month. -
catrank m/7 y/2019
Displays expenditure category ranking chart for July 2019.
Viewing expenditure ranking chart by month: mthrank
Format: mthrank [y/YEAR]
If you have a tendency to overspend in certain seasons or on certain occasions, with the mthrank
command, you can look
at your expenditure ranking chart by month, swiftly identify the months that you spend most in and take steps
to reduce your expenditure in the same few months in the years to come.
The expenditure ranking chart by month is in decreasing order, i.e., the months with higher expenditure will be at the top of the list, and the months with lower expenditure will be at the bottom of the list. |
Let’s say you have always planned overseas trips over the summer break. After entering the mthrank
command,
the GUI of IchiFund may look like this:
You are now aware that the expenditure on and during these overseas trips are burning a hole in your pocket, and can take measures to set a budget before going on these trips or reduce the frequency of such trips.
Examples:
-
mthrank
Displays expenditure ranking chart by month for current year. -
mthrank y/2019
Displays expenditure ranking chart by month for 2019.
Viewing expenditure ranking chart: exprank
Format: exprank [m/MONTH] [y/YEAR]
If you are keen to identify the biggest purchases you make so that you can cut your expenditure swiftly,
the command exprank
is what you are looking for. exprank
allows you to look at your expenditure ranking chart.
The expenditure ranking chart is in decreasing order, i.e., the bigger purchases will be at the top of the list, and the smaller purchases will be at the bottom of the list. |
Let’s say you have made a couple of big purchases over the course of the year. After entering the exprank
command,
the GUI of IchiFund may look like this:
You are now aware that cutting expenditure on luxury items and gadgets would probably do wonders for the health of your wallet.
Examples:
-
exprank
Displays expenditure ranking chart for current year. -
exprank y/2019
Displays expenditure ranking chart for 2019. -
exprank m/7 y/2019
Displays expenditure ranking chart for July 2019.
FAQ
Q: How do I transfer my data to another Computer?
A: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous IchiFund folder.
Command Summary (v1.4)
-
Help :
help
-
Exit :
exit
-
Transaction Add :
add de/DESCRIPTION a/AMOUNT [c/CATEGORY] [d/DAY] [m/MONTH] [y/YEAR] [ty/TRANSACTION_TYPE]
-
Transaction Edit :
edit INDEX [de/DESCRIPTION] [a/AMOUNT] [c/CATEGORY] [d/DAY] [m/MONTH] [y/YEAR] [ty/TRANSACTION_TYPE]
-
Transaction Delete :
delete INDEX
-
Transaction Filter :
filter [m/MONTH] [y/YEAR] [c/CATEGORY] [ty/TRANSACTION_TYPE]
-
Repeater Add :
add de/DESCRIPTION a/AMOUNT [c/CATEGORY] [ty/TRANSACTION_TYPE] [so/MONTH_START_OFFSET] [eo/MONTH_END_OFFSET] sm/START_MONTH sy/START_YEAR em/END_MONTH ey/END_YEAR
-
Repeater Edit :
edit INDEX [de/DESCRIPTION] [a/AMOUNT] [c/CATEGORY] [ty/TRANSACTION_TYPE] [so/MONTH_START_OFFSET] [eo/MONTH_END_OFFSET] [sm/START_MONTH] [sy/START_YEAR] [em/END_MONTH] [ey/END_YEAR]
-
Repeater Delete :
delete INDEX
-
Repeater Filter :
find KEYWORD [MORE_KEYWORDS]
-
Loan Add new :
add a/Amount [d/DATE] [n/NAME] [d/DESCRIPTION] [sd/DAY] [sm/MONTH] [sy/YEAR] [ed/DAY] [em/MONTH] [ey/YEAR]
-
Loan Edit :
add i/Index a/Amount [d/DATE] [n/NAME] [d/DESCRIPTION] [sd/DAY] [sm/MONTH] [sy/YEAR] [ed/DAY] [em/MONTH] [ey/YEAR]
-
Loan Pay :
pay i/Index
-
Budget Add :
add de/DESCRIPTION a/AMOUNT [c/CATEGORY] [d/day m/MONTH y/YEAR]
-
Budget Delete :
delete i/INDEX a/Amount [n/Name]
-
Budget Find :
find [KEYWORDS]…
-
Expenditure Trend :
expenditure [y/YEAR]
-
Income Trend :
income [y/YEAR]
-
Balance Trend :
balance [y/YEAR]
-
Categorical Breakdown :
breakdown [m/MONTH] [y/YEAR]
-
Categorical Ranking Chart :
catrank [m/MONTH] [y/YEAR]
-
Month-Based Ranking Chart :
mthrank [y/YEAR]
-
Ranking Chart :
exprank [m/MONTH] [y/YEAR]
Adding loan: add
Format: add a/AMOUNT [c/NAME] [sm/START_MONTH] [sy/START_YEAR] [em/END_MONTH] [ey/END_YEAR] [de/DESCRIPTION]
You can use the add
command to create a loan. This also creates the other objects associated with the created repeater.
The optional arguments take the following default values if left unspecified:
Argument | Default values |
---|---|
Description |
"No Description" |
Name |
"No Name" |
Start Day |
"12" |
Start Month |
"12" |
Start Year |
"2019" |
End Day |
"1" |
End Month |
"2" |
End Year |
"2020" |
Constraints:
-
Loan end must not occur before it’s start.
-
Description, Name and Dates are Alphanumeric.
Example:
-
`add a/420.42 n/Felix Kjellberg sd/12 sm/12 sy/2019 ed/23 em/2 ey/2020 de/Borrowed for apple earpods `
This creates a loan of 420.42 for "Buying airpods" taken on 12 December 2019 to 02 February 2020.
Editing new loan: edit
Format: edit INDEX [a/AMOUNT] [de/DESCRIPTION] [n/NAME] [sm/START_MONTH] [sy/START_YEAR] [em/END_MONTH] [ey/END_YEAR]
You can use the edit command to edit a loan. This can change any attribute(s) of the loan.
The loan fields will only be updated where the arguments are specified. |
Constraints:
-
Loan end date must not occur before loan start date.
-
Index must be specified, no change occurs otherwise.
Example:
-
edit 1 de/Current Student Loan a/99999.99 n/DBS SG Bank sd/1 sm/1 sy/2020 ed/30 em/12 ey/2021
This edits the first loanr in the current list to - $99999.99 loan taken on 1st January 2020 and to be paid back by 30th December 2021.
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. |
Loans
Adding Loan : add
Overview
This feature allows the user to add a loan in IchiFund. Adding a loan also creates the default values associated with the added loan.
Implementation
The add
command is facilitated by the Logic and Model components of the application. Given below is an example usage scenario of how add
behaves at each step.
Step 1: The user executes add a/42.15 d/Utilities sd/1 sm/1 sy/2019 ed/31 em/12 ey/2019
to add a loan for utilities with an amount of $42.15 taken on 1st January 2019 and to be returned on 31st December 2019.
Step 2: LogicManager
uses IchiFundParser#parserCommand()
to parse the input from the user.
Step 3: IchiFundParser
determines which command is being used and creates the respective AddLoanCommandParser
parser with the user’s input as an argument.
Step 4: AddLoanCommandParser
does a validation check on the user’s input before creating and returning an AddLoanCommand
with desired Loan
as an argument.
Step 5: LogicManager
uses AddLoanCommand#execute()
to add the Loan
and the associated Loan
s into the Model
which is handled by ModelManager
. In doing so, it also fetches the LoanId
counter tracked by the Model
, sets it as the created Repeater
's unique id, and increments the counter in the Model
by 1.
Step 6: AddRepeaterCommand
returns a CommandResult
to the LogicManager
which is returned back to the user.
Paying Loan : pay
Overview
This feature allows the user to pay off a marked loan in IchiFund by index.
Implementation
The pay
command is facilitated by the Logic and Model components of the application. Given below is an example usage scenario of how pay
behaves at each step.
Step 1: The user executes pay 2
to pay off the loan in the 2nd index.
Step 2: LogicManager
uses IchiFundParser#parserCommand()
to parse the input from the user.
Step 3: IchiFundParser
determines which command is being used and creates the respective PayLoanCommandParser
parser with the user’s input as an argument.
Step 4: PayLoanCommandParser
does a validation check on the user’s input before creating and returning an PayLoanCommand
with desired Index
as an argument.
Step 5: LogicManager
uses PayLoanCommand#execute()
to delete the Loan
from the Model
which is handled by ModelManager
.
Step 6: PayLoanCommand
returns a CommandResult
to the LogicManager
which is returned back to the user.
Adding and modifying a Loan
-
Adding a Loan while other loans are present
-
Prerequisites: List all loans. Multiple loans in the list.
-
Enter `add a/420.42 n/Felix Kjellberg sd/12 sm/12 sy/2019 ed/23 em/2 ey/2020 de/Borrowed for apple earpods `
Expected: Loan is added to the list. Details of the added loan shown in the status message. -
Enter
add a/220
Expected: Loan is added with default values. Loan Details shown in the status message. Status bar remains the same. -
Enter
add n/Felix
Expected: No amount given error is shown. No Loan is added to the list. The status shows correct format to enter. -
Other incorrect delete commands to try:
add
,add a/24 n/123
Expected: Similar to previous.
-
-
Editing Existing loans
-
Prerequisites: List all loans. Multiple loans in the list.
-
Enter 'edit 2 a/220 n/NewName sd/12 ey/2012'
Expected: First loan on the list is changed to new assigned values. No other loans or entries are changed. -
Enter 'edit 1 n/NewName sd/12 ey/2012 d/New Description for the Loan'
Expected: First loan on the list is changed to new assigned values including description. No other loans or entries are changed. Other values are derived from existing entry. -
Enter 'edit a/220 n/NewName sd/12 ey/2012'
Expected: Wrong format for edit command is shown in status. No Loan is edited. -
Other incorrect delete commands to try:
edit
,edit 5
Expected: Similar to previous.
-
-
Paying off Existing loans
-
Prerequisites: List all loans. Multiple loans in the list.
-
Enter 'pay 1'
Expected: First loan on the list is removed from list. No other loans or entries are changed. Status bar indicates deletion. -
Enter 'pay a/220'
Expected: Wrong format for pay command is shown in status. No Loan is removed. Status shows correct format of command. -
Other incorrect delete commands to try:
pay
,pay a
Expected: Similar to previous.
-