A console-based banking application developed using Core Java following Layered Architecture principles. The project demonstrates Object-Oriented Programming (OOP), Repository Pattern, Service Layer abstraction, custom exception handling, transaction management, and in-memory data persistence using Java Collections Framework.
The application enables users to manage bank accounts, perform transactions, track account activity, and generate account statements through an interactive Command Line Interface (CLI).
- Open New Bank Account
- Deposit Money
- Withdraw Money
- Transfer Funds Between Accounts
- Generate Account Statements
- Search Accounts By Customer Name
- List All Accounts
- Transaction History Tracking
- Custom Exception Handling
- Layered Architecture Implementation
The application follows a layered architecture to ensure separation of concerns and maintainable code organization.
Presentation Layer (CLI)
│
▼
Service Layer
│
▼
Repository Layer
│
▼
In-Memory Data Storage
(HashMap)
Business entities representing core banking concepts.
- Account
- Customer
- Transaction
- TransactionType
Responsible for data storage and retrieval operations.
- AccountRepo
- CustomerRepo
- TransactionRepo
Contains business rules and transaction processing logic.
- Account Creation
- Deposit
- Withdraw
- Fund Transfer
- Statement Generation
- Customer Search
Handles business-specific validation failures.
- AccountNotFoundException
- InsufficientBalanceException
- SameAccountTransferException
Bank-App
│
├── src
│ ├── app
│ │ └── Main.java
│ │
│ ├── domain
│ │ ├── Account.java
│ │ ├── Customer.java
│ │ ├── Transaction.java
│ │ └── TransactionType.java
│ │
│ ├── exceptions
│ │ ├── AccountNotFoundException.java
│ │ ├── InsufficientBalanceException.java
│ │ └── SameAccountTransferException.java
│ │
│ ├── repository
│ │ ├── AccountRepo.java
│ │ ├── CustomerRepo.java
│ │ └── TransactionRepo.java
│ │
│ └── service
│ ├── BankService.java
│ └── impl
│ └── BankServiceImpl.java
│
├── screenshots
│
└── README.md
- Creates a customer profile
- Generates a unique account number
- Supports Savings and Current accounts
- Allows optional initial deposit
- Validates account existence
- Updates account balance
- Records transaction history
- Validates account existence
- Checks available balance
- Updates account balance
- Records withdrawal transaction
- Prevents self-transfer
- Validates both accounts
- Verifies sufficient balance
- Creates debit and credit transaction records
- Retrieves account transaction history
- Sorts transactions by timestamp
- Displays transaction details in chronological order
- Searches customers using name matching
- Retrieves linked accounts
Encapsulates data access operations and isolates storage logic.
Separates business logic from presentation and storage layers.
Organizes application responsibilities into independent layers.
Uses custom exceptions to handle business rule violations.
- Java
- Object-Oriented Programming (OOP)
- Java Collections Framework
- Exception Handling
- IntelliJ IDEA
- UUID
- Layered Architecture
- Classes and Objects
- Encapsulation
- Abstraction
- Interfaces
- Enums
- Collections Framework
- Exception Handling
- Layered Architecture
- Repository Pattern
- Service Layer Pattern
- Separation of Concerns
- Modular Design
- Account Lifecycle Management
- Transaction Processing
- Fund Transfer Logic
- Statement Generation
- Customer Search
git clone https://github.com/bhushanbhutada03/Bank-App.gitImport the project into IntelliJ IDEA.
Execute:
src/app/Main.java
1. Open Account
2. Deposit
3. Withdraw
4. Transfer
5. Account Statement
6. List Accounts
7. Search Account By Customer Name
0. Exit
- MySQL Integration
- JDBC Implementation
- Spring Boot REST API
- JPA/Hibernate Support
- Authentication & Authorization
- Transaction Persistence
- Unit Testing with JUnit
- Docker Support
- Logging Framework Integration
Bhushan Bhutada
Computer Engineering Student
LinkedIn: https://www.linkedin.com/in/bhushan-bhutada-37b914295






