Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Languages / C++

Personal Finance Application

4.38/5 (11 votes)
10 Jan 2007CPOL4 min read 2   7.9K  
Utility to keep track of personal finances

Sample Image - maximum width is 600 pixels

Introduction

Utility to keep track of money, expenses, investment, etc.

Background

Accounts

Money goes from one account to other account. There are 3 types of accounts:

  • Neutral: This type of account is in your system, you own this accounts.

    Samples: Cash, Bank Accounts, Cash in other currency.

  • R+: This type of account puts money into your system. They put the money into neutral accounts.

    Samples: Salary, Interests, Income.

  • R-: This type of account takes money out of your system (and you never see it again).

    Samples: Supermarket, bills, grocery, electronics, gas, bus, furniture...everything you buy.

Transactions
  • R+ to Neutral (you earn money)
  • Neutral to Neutral (you move money)
  • Neutral to R- (you loose money)Transaction Samples
From: Sallary
To: Bank A Account
Amount: 3000
Here you earn money, money goes from R+ to Neutral.
From: Bank A Account
To: Cash
Amount: 3000
Here you move money. You don't loose and you don't earn. This is an ATM extraction. Neutral to Neutral.
From: Cash
To: Electronics (New TV)Amount: 100
Here you loose money. Money goes from Neutral to R-.
Currency Exchange Buy
From: Cash
To: Buy foreign currency
Amount: 1250
Your dollars dissapear. You loose them.
From: Euro Buy
To: Euro Cash Amount: 1000
Euros appear to your Euros Cash. You "earn" them


Currency Exchange Sell

From: Euro Cash
To: Euro Sell
Amount: 1000
Your euros dissapear. You loose them.
From: Sell foreign currency
To: Cash
Amount: 1250
dollars appear to your Cash. You "earn" them


Both operations are done in two steps, because both accounts of transactions should have the same currency. If not, there could be a lot of problems.

Using the utility

The utility comes with a sample database of accounts. Just check if they fit with your needs. Then enter than transactions. The first ones should be from "A - initial" to "A".

In Statistics, if you don't enter the account name, you get the sum of earnings and loss.

Hints

  • With backspace you delete the selected account in the combo. You can select the account with the shortcut
  • You can put this app in the windows startup minimized with the /MIN param. It should go into:
    /HKEY_LOCAL_MACHINE/SOFTWARE/MICROSOFT/WINDOWS/CURRENTVERSION/RUN.

    Create a key with: "{Path}\CashM.exe /MIN"

  • To compile in spanish, replace the .rc file, with the languages/spanish. Delete the .aps file.
  • Security: if you don't want other people see your data, put the db into a zip with a password. Extract it to use it and when done, put it again on the zip. I thought about encrypting the data in the database, but then, I wouldn't be able to use SQL. More problem than solution.
  • You can see and change the database with SQLite Database Browser. You can also perform SQL queries against the database.
  • The same way you buy and sell euros, you can do with stock papers, or even investment. For example, you can define MSFT as a currency, define the 3 accounts as the Euros example in Accounts. (MSFT: MSFT Paper, MSFT Sell, MSFT Buy, MSFT Inicial, all of them of "MSFT" currency). Finally, in Cash, you should define "Buy Stock", "Sell Stock". The "conversion" in currency would be the paper value.
  • Play with the app a while before entering real data, so you get to know it.
  • Do some backup of the db periodically.
  • As the exe has the database engine inside and the MFC is linked, you can run this on any Windows. You can put the exe and the db in a zip, upload it to the web, and access it from every machine with internet connection.
  • The Cash Correct + Account is used if, for example, you find money in your pocket or in the street. The Cash Correct - Account is used when you "loose" cash, for example, burning, loosing coins, etc. I also use these accounts when I check the Cash total (Statistics) and I find numbers don't match (for any reason).

Points of Interest

I used in it A LOT of components from codeproject. Thanks a lot to all the people who wrote them, I wouldn't be able to build this thing without them. I first built a .NET app to keep track of money, but .NET was slow back then (2001) and graphics weren't good. Then I used an SQL Sever database and finally, an excel worksheet. This is an improvement on all of them. I found similar apps like Monex and other but....they don't fit my needs and they get complicated in some operations. I intend to improve this thing, mainly because I use it.

The code got a little "wired" while building the app, in case you decide to change it. I'll probably improve it in the next version. This utility compiles with VC++ 2005 with warnings.

English is not my first language, so please excuse any errors there. This is my first CodeProject article.

ToDo List

  • Printing
  • Code improving
  • Graphics improving
  • Virtual accounts
  • Import-Export
  • Unicode
  • Help

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)