A Java-based Personal Finance Manager designed to help users manage their personal finances, track expenses, create budgets, and receive personalized recommendations based on their spending habits and financial goals.
This project applies core Object-Oriented Programming (OOP) principles such as abstraction, inheritance, encapsulation, and polymorphism. It was inspired by modern financial management tools like Mint and Monarch Money.

UML Diagram of the Personal Finance Manager system pictured above
The design centers around the User.java and FinanceManager.java classes.
When running the program through the terminal, the user is prompted to enter information that will be stored in a User object. This data is then passed into the FinanceManager, which acts as a central controller connecting multiple helper classes.
- The program begins execution in
Main.java - The user provides personal information, stored in
User.java - The
FinanceManageracts as the main controller, directing logic to different modules:BankAccountCreditCardLoanTrackerBudgetPlannerReportGeneratorRecommendationEngineDataStorageTransaction
These components interact through composition and aggregation relationships.
For example:
FinanceManageraggregatesUser,BankAccount, andCreditCardTransactionis composed withinBankAccountandCreditCardBudgetPlannerandRecommendationEngineanalyze data and feed results back into theFinanceManager
User.java
Stores user information such as name, age, income, and goals. Handles user creation and data input.
FinanceManager.java
Acts as the central hub connecting all other classes, manages the overall system flow, and displays user summaries.
BankAccount.java
Handles deposits, withdrawals, and tracking of balances for checking/savings accounts.
CreditCard.java
Manages credit card information, billing cycles, and outstanding balances.
LoanTracker.java
Calculates loan payments, interest accumulation, and payoff timelines.
Transaction.java
Represents individual financial transactions (amount, category, date, and type).
BudgetPlanner.java
Analyzes income and expenses, categorizes spending, and creates budget suggestions.
ReportGenerator.java
Generates summaries and detailed reports of user spending and progress over time.
RecommendationEngine.java
Provides financial advice and recommendations based on spending trends, such as reducing high-category spending or optimizing savings.
DataStorage.java
Handles saving and loading user data (e.g., to text or CSV files) for persistence between sessions.
Language: Java 8
Paradigm: Object-Oriented Programming
Design Tool: Draw.io (for UML Diagram)
IDE: Visual Studio Code / IntelliJ IDEA
Version Control: Git & GitHub
-
Java 8 or above
- Download for Windows
- Download for macOS
- Linux users can use their package manager.
-
Git (version 2.12 or above)
- Git Download Page
- (Optional) Set up SSH keys for GitHub: Guide Here
Step 1: Clone repository from https://github.com/heatherngyvn/PersonalFinanceManager-CS151-Fall-2025
Step 2: Change directory into the project directory in terminal/gitbash
Step 3: Run java Main or the Main.java file in the terminal
Step 4: Profit!
Will: I helped develop the system architecture and draft the UML diagram. Worked on FinanceManager, RecommendationEngine, test cases, and weaving the classes together in main.
Heather: Implemented User and CreditCard classes. Helped handle logic in main. Finished the UML diagram.
Kennedy: Wrote a lot of the code. Worked on main, LoanTracker, and debugging
Chyna: Made BankAccount and DataStorage classes