Plain-Text Ledger with Reports and Tests
A command-line personal and household accounting tool that reads transactions from a plain-text file, validates them, and produces monthly, category and budget reports. Small enough for a beginner to finish, and full of the parsing, collections and edge cases that teach real programming.
Beginner
Achievable by one student in a semester with familiar tools.4 to 6 weeks, 1 student
6 to ship
3 optional extrasSuggested stack
What you should ship
- A documented plain-text format for transactions with dates, amounts, accounts and categories
- A parser that reports every invalid line with its line number instead of crashing
- Reports: balance per account, spending per category per month, and budget versus actual
- Amounts stored without floating point errors (integer minor units or a decimal type)
- Unit tests for the parser and every report, written before fixing each bug
- A README with the file format, example commands and a short demo recording
If you have time left
- Import from a bank CSV export with a mapping file
- Recurring transactions such as rent and utility bills
- Split transactions shared between several people, with who owes whom
The problem
Most people track money in a spreadsheet they abandon after two months, or in an app that owns their data. A plain-text ledger keeps the data in a file you control and version with Git, and lets a small program do the arithmetic.
What you build
A command-line tool that reads a text file of transactions, checks it, and prints reports. You design the file format yourself, keep it simple, and document it.
Why it suits a first project
There is no framework to hide behind. You practise reading files, parsing lines, choosing collections (a map from category to totals, a list of transactions sorted by date), handling errors and formatting output, which are the skills every later project needs.
The hard part
Money. Floating point numbers cannot represent most decimal amounts exactly, so store amounts as integers in the smallest unit or use your language's decimal type, and write tests that prove 0.10 + 0.20 comes out as 0.30.
How to judge it
Every invalid line in the sample files is reported with its line number, every report has tests, and the commit history shows the project growing in small, explained steps.
Scope warning
No graphical interface and no database. A clean command-line tool with good tests is the goal.
Ideas and guidance, not finished projects
These are project ideas and scoping guidance, published free for students to use as a starting point. I do not build, write, or sell final-year projects, and I do not complete coursework for anyone. Take an idea, make it yours, and build it.
Not sure this one fits you?
I help students pick an idea that matches their skills and their deadline, then scope it down until it is finishable. Guidance only, never done for you.
Stuck on something specific?
Writing only gets you so far. If you want an answer to your situation rather than the general case, book a session and we will work through it together. Sessions are free for approved Sefism members, and a few slots open each week.
Follow along
New writing, resources and project ideas land here first.