A comprehensive Automated Teller Machine (ATM) Management System implemented in Java. This console-based application simulates real-world ATM operations with secure banking functionalities including account management, transactions, and balance inquiries.
- Overview
- Features
- System Architecture
- Technologies Used
- Project Structure
- Getting Started
- Usage Guide
- Core Functionalities
- Security Features
- Database Design
- Testing
- Future Enhancements
- Contributing
- License
- Contact
The ATM Management System is a Java-based application that replicates the functionality of a real Automated Teller Machine. It provides a secure, user-friendly interface for performing various banking operations without the need for physical bank visits.
- โ Secure Authentication - PIN-based account access
- โ Account Management - Create, update, and manage accounts
- โ Transaction Processing - Withdrawals, deposits, and transfers
- โ Balance Inquiry - Real-time account balance checking
- โ Transaction History - Detailed record of all operations
- โ Multi-Account Support - Handle multiple user accounts
- โ Data Persistence - File-based or database storage
- Secure PIN-based login system
- Account number validation
- Session management
- Multiple failed login attempt handling
- PIN change functionality
- Cash Withdrawal - Withdraw money with balance validation
- Cash Deposit - Deposit funds into account
- Fund Transfer - Transfer money between accounts
- Balance Inquiry - Check current account balance
- Mini Statement - View recent transaction history
- Create new account
- View account details
- Update personal information
- Change PIN/Password
- Close account
- View all accounts
- Generate reports
- Monitor transactions
- Account activation/deactivation
- System logs and audit trails
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ User Interface โ
โ (Console/Terminal I/O) โ
โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Authentication Layer โ
โ (Login & Security Management) โ
โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Business Logic Layer โ
โ (Transaction Processing & Rules) โ
โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Data Access Layer โ
โ (File I/O / Database Operations) โ
โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Data Storage โ
โ (Files / Database) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- Programming Language: Java (JDK 8 or higher)
- Design Pattern: Object-Oriented Programming (OOP)
- Data Storage: File System / MySQL Database
- Development Approach: Console-based Application
- Build Tool: Maven (optional) or direct compilation
- Classes and Objects
- Inheritance and Polymorphism
- Encapsulation and Abstraction
- Exception Handling
- File I/O Operations
- Collections Framework
- Date and Time API
ATM-Management-System/
โโโ ATM-Management/
โ โโโ src/
โ โ โโโ main/
โ โ โ โโโ ATMSystem.java # Main application entry point
โ โ โ โโโ Account.java # Account entity class
โ โ โ โโโ User.java # User entity class
โ โ โ โโโ Transaction.java # Transaction class
โ โ โ โโโ Authentication.java # Login/security handler
โ โ โ โโโ AccountManager.java # Account operations
โ โ โ โโโ TransactionManager.java # Transaction processing
โ โ โ โโโ DatabaseHandler.java # Data persistence
โ โ โ โโโ Utilities.java # Helper methods
โ โ โโโ test/
โ โ โโโ ATMSystemTest.java # Unit tests
โ โโโ data/
โ โ โโโ accounts.dat # Account data file
โ โ โโโ transactions.dat # Transaction records
โ โ โโโ users.dat # User information
โ โโโ docs/
โ โ โโโ design-document.md
โ โ โโโ user-manual.md
โ โโโ lib/ # External libraries (if any)
โโโ .gitignore
โโโ README.md
โโโ LICENSE
Ensure you have the following installed on your system:
- Java Development Kit (JDK) 8 or higher
- IDE (Optional but recommended)
- IntelliJ IDEA
- Eclipse
- NetBeans
- VS Code with Java extension
- Git for version control
- Clone the Repository
git clone https://github.com/mohamedshiras/ATM-Management-System.git
cd ATM-Management-System- Navigate to Source Directory
cd ATM-Management/src- Compile the Java Files
javac *.javaOr if using package structure:
javac -d ../bin main/*.javaMethod 1: Direct Execution
java ATMSystemMethod 2: Using IDE
- Open the project in your preferred IDE
- Locate the
ATMSystem.javafile (main class) - Right-click and select "Run"
Method 3: Using JAR (if packaged)
java -jar ATM-Management-System.jar-
Launch the Application
Welcome to ATM Management System ================================ -
Create New Account
- Select "Create New Account" from main menu
- Enter required details:
- Full Name
- Date of Birth
- Address
- Phone Number
- Initial Deposit
- Set PIN (4-6 digits)
- Account number will be auto-generated
-
Login to Your Account
- Enter Account Number
- Enter PIN
- Access granted upon successful authentication
1. Select "Withdraw" from menu
2. Enter amount to withdraw
3. Confirm transaction
4. Collect virtual cash
5. Receipt displayed
1. Select "Deposit" from menu
2. Enter amount to deposit
3. Confirm transaction
4. Balance updated
5. Receipt displayed
1. Select "Transfer" from menu
2. Enter beneficiary account number
3. Enter transfer amount
4. Confirm transaction
5. Both accounts updated
6. Receipt displayed
1. Select "Balance Inquiry"
2. Current balance displayed
3. Option to print mini statement
Account newAccount = new Account(
accountNumber,
customerName,
pin,
initialBalance,
dateOfBirth,
address,
phoneNumber
);Features:
- Auto-generated unique account number
- Minimum balance validation
- Age verification (18+ years)
- Input sanitization
boolean authenticate(String accountNumber, String pin) {
// Verify account exists
// Validate PIN
// Check account status (active/frozen)
// Log login attempt
return isAuthenticated;
}Security Measures:
- Encrypted PIN storage
- Maximum 3 login attempts
- Account lockout after failed attempts
- Session timeout
Transaction processWithdrawal(double amount) {
// Check sufficient balance
// Validate withdrawal limits
// Update account balance
// Create transaction record
// Return transaction details
}Validations:
- Balance sufficiency check
- Daily withdrawal limit
- Minimum balance maintenance
- Transaction limits
File-Based Storage:
// Save account to file
void saveAccount(Account account) {
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream("accounts.dat", true)
);
out.writeObject(account);
out.close();
}Database Storage (if implemented):
CREATE TABLE accounts (
account_number VARCHAR(20) PRIMARY KEY,
customer_name VARCHAR(100),
pin_hash VARCHAR(64),
balance DECIMAL(15,2),
created_date TIMESTAMP,
status VARCHAR(20)
);- Encryption: PINs stored using hash algorithms (SHA-256)
- Validation: 4-6 digit numeric PIN requirement
- Change PIN: Secure PIN update functionality
- Verification: PIN re-entry for confirmation
- Authentication: Required for all operations
- Authorization: Account ownership verification
- Audit Trail: All transactions logged
- Limits: Daily transaction limits enforced
- Auto-logout: Inactive session timeout (5 minutes)
- Single Session: One active session per account
- Secure Exit: Proper logout procedure
- Sanitization: Prevention of SQL injection
- Type Checking: Numeric/String validation
- Range Validation: Amount limits
- Format Verification: Account number format
ACCOUNT
โโโ account_number (PK)
โโโ customer_name
โโโ pin_hash
โโโ balance
โโโ account_type
โโโ created_date
โโโ last_modified
โโโ status
USER
โโโ user_id (PK)
โโโ account_number (FK)
โโโ name
โโโ dob
โโโ address
โโโ phone
โโโ email
โโโ id_proof
TRANSACTION
โโโ transaction_id (PK)
โโโ account_number (FK)
โโโ transaction_type
โโโ amount
โโโ balance_after
โโโ timestamp
โโโ description
- Account creation with valid data
- Account creation with invalid data
- Login with correct credentials
- Login with incorrect credentials (3 attempts)
- Withdrawal with sufficient balance
- Withdrawal exceeding balance
- Deposit with valid amount
- Fund transfer between accounts
- Balance inquiry
- Transaction history display
- PIN change functionality
- Session timeout
If using JUnit:
javac -cp .:junit-4.13.2.jar ATMSystemTest.java
java -cp .:junit-4.13.2.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore ATMSystemTest- GUI Interface - JavaFX or Swing-based graphical interface
- Mobile App Integration - Android/iOS companion app
- Biometric Authentication - Fingerprint/face recognition
- Multi-Currency Support - Handle different currencies
- Card Management - Virtual card generation
- Bill Payment - Utility bill payment integration
- Loan Services - Apply for loans
- Investment Options - Fixed deposits, mutual funds
- Notifications - Email/SMS alerts for transactions
- Analytics Dashboard - Spending analysis and reports
- Multi-Language Support - Internationalization
- QR Code Transactions - Scan and pay functionality
- ATM Locator - Find nearest ATM
- Migrate to Spring Boot for better architecture
- Implement RESTful API
- Add database migration tools (Flyway/Liquibase)
- Implement caching (Redis)
- Add comprehensive logging (Log4j)
- Containerization with Docker
- CI/CD pipeline setup
- Performance optimization
- Load testing and stress testing
Contributions are welcome and appreciated! Here's how you can contribute:
-
Fork the Repository
Click the 'Fork' button at the top right of the page -
Clone Your Fork
git clone https://github.com/YOUR-USERNAME/ATM-Management-System.git cd ATM-Management-System -
Create a Feature Branch
git checkout -b feature/AmazingFeature
-
Make Your Changes
- Write clean, well-documented code
- Follow Java naming conventions
- Add comments where necessary
- Update README if needed
-
Commit Your Changes
git add . git commit -m "Add some AmazingFeature"
-
Push to Your Fork
git push origin feature/AmazingFeature
-
Open a Pull Request
- Go to the original repository
- Click "New Pull Request"
- Select your feature branch
- Describe your changes
- Submit the PR
- Follow existing code style and conventions
- Write meaningful commit messages
- Add unit tests for new features
- Update documentation as needed
- Ensure all tests pass before submitting PR
- Be respectful and constructive in discussions
This project is licensed under the MIT License - see the LICENSE file for details.
MIT License
Copyright (c) 2026 Mohamed Shiras
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
- Mohamed Shiras - Initial Development - @mohamedshiras
- Contributors who have helped improve this project
- The Java community for excellent documentation
- All users providing valuable feedback
Mohamed Shiras
- GitHub: @mohamedshiras
- Project Link: https://github.com/mohamedshiras/ATM-Management-System
- Inspired by real-world ATM systems
- Built as a learning project to understand Java OOP concepts
- Thanks to the open-source community for guidance and support
- Java documentation and tutorials
- Online Banking System
- Point of Sale (POS) System
- Credit Card Management System
- Digital Wallet Application
โญ If you find this project helpful, please consider giving it a star! โญ
Made with โ and โค๏ธ by Mohamed Shiras