This project implements an offline, locally-stored, command-line expenditure tracking application for Nkwa Real Estate Ltd, designed for DCIT308 semester project at the University of Ghana.
It uses custom-built data structures only (arrays, sets, maps, stacks, queues, heaps, etc.) and avoids all external libraries and Java Collections for business logic.
- Expenditure Tracking: Record code, amount, date, phase, category, and account used for each expenditure.
- Category Management: Uniqueness enforced via sets. Search, add, edit, delete categories.
- Bank Account Ledger: Store, update accounts; each expenditure draws funds and updates balances.
- Receipt/Invoice Handling: Link receipts to expenditures; use queues/stacks for upload and review.
- Alerts: Min-heap based priority alerts for low balances and overspending.
- Analytics: Monthly burn rate, cost breakdown, simple profitability forecast.
- Search & Sort: Sort by category or date; search by time, category, cost range, or account.
- Persistence: All data stored in plain text files:
accounts.txt,categories.txt,expenditures.txt,receipts.txt. - CLI Menu: Menu-driven workflow for all actions.
SimpleArrayList- dynamic arraysSimpleSet- uniqueness for categoriesSimpleMap- key-value mappings (accounts, expenditures)SimpleQueue- FIFO for receiptsSimpleStack- LIFO for receiptsMinHeap- alert priorities
src/
app/
Main.java
modules/
(All modules, managers, entities)
util/
(Custom data structures)
data/
accounts.txt
categories.txt
expenditures.txt
receipts.txt
ACC001|Main Operations|5000.00
ACC002|Marketing|2500.00
ACC003|Sales|1000.00
Cement|Building material|gray
Printing|Marketing material|blue
TV Adverts|Promotion|red
Format: ID|Description|Amount|DateTime|Category|AccountID|ReceiptPath
EXP001|Cement purchase|1200.00|2025-07-01T09:15:00|Cement|ACC001|receipts/cement_receipt.pdf
EXP002|TV promo spot|500.00|2025-07-02T11:00:00|TV Adverts|ACC002|receipts/tv_invoice.jpg
EXP003|Brochure printing|300.00|2025-07-03T14:30:00|Printing|ACC002|
EXP004|Site sand|700.00|2025-07-05T10:20:00|Cement|ACC001|receipts/sand_receipt.pdf
Note: The 7th field (ReceiptPath) is optional and can be empty for expenditures without linked receipts.
RCT001|EXP001|receipts/cement_july.pdf|2025-07-01T09:30:00
RCT002|EXP002|receipts/tv_spot.jpeg|2025-07-02T11:10:00
RCT003|EXP003|receipts/brochure.pdf|2025-07-03T14:35:00
-
Compile:
javac -d bin src/app/Main.java -
Run:
java -cp bin app.Main
java -jar "APP G68Xpense.jar"
-
Interact: Use the CLI menu to add/view/edit expenditures, manage categories/accounts, view alerts, and analytics.
-
Clean .class files recursively:
find . -type f -name "*.class" -delete
-
ls "c:\blipping grounds\prjs\xpense\G68Xpense.jar"
-
java -jar G68Xpense.jar
| Operation | Data Structure | Complexity |
|---|---|---|
| Add Expenditure | SimpleArrayList/Map | O(1) |
| Search by ID | Map | O(1) |
| Sort by Category/Date | Array | O(n log n) |
| Category Uniqueness | Set | O(n) |
| Receipt Process | Queue/Stack | O(1) |
| Alert Processing | MinHeap | O(log n) |
| Account Lookup/Update | Map | O(1) |
- Expenditure must reference valid bank account and category.
- Adding expenditure always debits account atomically.
- Category names are unique.
- Alerts for low balances and overspending.
- Group 68, University of Ghana
- Educational use only.