CODE:
from datetime import datetime
import random
class ATM:
def __init__(self, initial_balance):
self.account_number = "ACC" + str(random.randint(1000000000, 9999999999)) # Generate 11-digit account number
self.balance = initial_balance
self.transaction_history = []
def display_menu(self):
print("\nWelcome to the ATM")
print("1. Check Balance")
print("2. Withdraw")
print("3. Mini Statement")
print("4. Exit")
def check_balance(self):
print(f"Your current balance is: {self.balance:.2f}")
def withdraw(self, amount):
if amount > 0 and amount <= self.balance:
old_balance = self.balance
self.balance -= amount
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
self.transaction_history.append(f"[{current_time}] Withdrawal: -{amount:.2f} | Old Balance: {old_balance:.2f} | New Balance: {self.balance:.2f}")
return True # Indicate successful withdrawal
else:
print("Insufficient funds.")
return False
def mini_statement(self):
print("\n=== Mini Statement ===")
print(f"Account Number: {self.account_number}")
if not self.transaction_history:
print("No recent transactions.")
else:
for transaction in self.transaction_history[-5:]:
print(transaction)
print("======================")
def generate_withdrawal_receipt(amount, old_balance):
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print("\n--- Withdrawal Receipt ---")
print(f"Date/Time: {current_time}")
print(f"Withdrawal Amount: {amount:.2f}")
print(f"Old Balance: {old_balance:.2f}")
print(f"Current Balance: {old_balance - amount:.2f}") # Calculate and display current balance
print("-------------------------")
def validate_pin():
"""Validates the ATM PIN."""
correct_pin = 3215 # Replace with your desired PIN
attempts = 3
while attempts > 0:
entered_pin = int(input("Enter your ATM PIN: "))
if entered_pin == correct_pin:
print("PIN verified successfully.")
return True
else:
attempts -= 1
print(f"Incorrect PIN. {attempts} attempts remaining.")
print("PIN verification failed. Exiting.")
return False
if __name__ == "__main__":
initial_balance = 50000 # Initial balance
if validate_pin():
atm = ATM(initial_balance)
while True:
atm.display_menu()
choice = int(input("Enter your choice: "))
if choice == 1:
atm.check_balance()
elif choice == 2:
withdrawal_amount = int(input("Enter the amount to withdraw: "))
if atm.withdraw(withdrawal_amount):
generate_withdrawal_receipt(withdrawal_amount, atm.balance + withdrawal_amount)
elif choice == 3:
atm.mini_statement()
elif choice == 4:
print("Thank you for using the ATM.")
break
else:
print("Invalid choice. Please try again.")
OUTPUT: