A Java-based console application that simulates a UPI Wallet System using clean OOPS principles, layered architecture, and service-based design.
This project demonstrates how real-world digital wallet systems work internally, including user management, wallet balance handling, secure PIN-based transactions, and transaction history tracking.
- 👤 Create User Account
- 💰 Add Money to Wallet
- 🔎 View Wallet Balance
- 🔐 Send Money with PIN Verification
- 🔁 Transfer Money Between Users
- 📜 View Transaction History
- 🧱 Clean Layered Architecture (Model, Service, Util, Main)
- 🛡️ Basic Security using PIN Authentication
- Java
- OOPS (Encapsulation, Abstraction, Composition)
- Collections Framework (HashMap, ArrayList)
- Service Layer Architecture
- In-Memory Data Storage
- Package-based Project Structure
- Git & GitHub
UPI-Wallet-Engine-Java/
├── Main.java
├── Model/
│ ├── User.java
│ ├── Wallet.java
│ └── transaction.java
├── service/
│ ├── UserService.java
│ └── WalletService.java
├── util/
│ └── DataStore.java
├── .gitignore
└── Readme.md
1️⃣ Clone the repository:
git clone https://github.com/pranav440/UPI-Wallet-Engine-Java.git2️⃣ Open in VS Code / IntelliJ / Eclipse
3️⃣ Run:
Main.java
-
Create users using name, mobile number, and PIN
-
Add money to wallet
-
Send money to another user (PIN required)
-
System checks:
- Sender exists
- Receiver exists
- PIN is correct
- Balance is sufficient
-
Transaction is recorded in history
-
You can view all transactions anytime
- Encapsulation (User controls PIN verification)
- Separation of Concerns (Main, Service, Model, Util)
- In-memory Database using HashMap
- Business Logic Layer
- Transaction Logging System
- 💾 File-based data persistence
- 🔒 Account lock after 3 wrong PIN attempts
- 📊 Stream API based transaction reports
- 🧾 Transaction filtering (date-wise, user-wise)
- 🌐 Web version using Spring Boot
- 🗄️ Database integration (MySQL)
Pranav Ganorkar Java Developer | Backend Enthusiast 🚀
Give it a ⭐ on GitHub and feel free to fork and improve it!