Design an ATM System
MediumFinancial SystemsStateSingletonChain of Responsibility
Problem Statement
Design an ATM (Automated Teller Machine) system that supports:
- Card insertion and PIN verification
- Balance inquiry
- Cash withdrawal with denomination management
- Deposit
- Transaction history
Design Requirements
Key Entities:
ATM— Main controller (Singleton)Card— Bank card with card numberAccount— Bank account with balanceCashDispenser— Manages cash denominations (Chain of Responsibility)ATMState— Idle, CardInserted, Authenticated, TransactionInProgress
Key Behaviors:
insertCard(card)→ validates cardenterPin(pin)→ authenticates (3 attempts before lockout)withdraw(amount)→ dispenses cash if sufficient balance and denominations availabledeposit(amount)→ adds to balancecheckBalance()→ returns current balance
!Constraints
- PIN has exactly 4 digits; 3 failed attempts locks the card
- ATM holds denominations: $100, $50, $20, $10, $5, $1
- Minimum withdrawal: $20, maximum: $1000 per transaction
- Must use minimum number of bills
- Transaction timeout: 30 seconds of inactivity
Output
Run your code to see output here.