Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 14 additions & 10 deletions account/bank_account.py
Original file line number Diff line number Diff line change
@@ -1,28 +1,32 @@
from account.transaction import Transaction
from account.user import User
import logging

class BankAccount:
def __init__(self,name= "John" ,email= "john@gmail.com", initial_balance=0):
if not isinstance(initial_balance , (int, float)) or initial_balance<0:
print("Invalid initial balance!")
def __init__(self, name="John", email="john@gmail.com", initial_balance=0):
if not isinstance(initial_balance, (int, float)) or initial_balance < 0:
raise ValueError("Invalid initial balance!")
if not name or not email:
print("A valid user must be provided to create an account! Redirecting to the main interface...")
# Redirect to main interface logic (placeholder)
return
self.balance = initial_balance
self.transactions_history = []
self.account_type = "Generic"
self.user = User(name, email)

def deposit(self, amount):
if not isinstance(amount , (int, float)) and amount <= 0:
print("Deposit amount is invalid!")
if not isinstance(amount, (int, float)) or amount <= 0:
raise ValueError("Deposit amount is invalid!")
self.balance += amount
self.transactions_history.append(Transaction(amount, "deposit"))

def withdraw(self, amount):
if not isinstance(amount ,(int, float)) and amount <= 0:
print("Withdrawal amount is invalid!")
if self.balance < amount-100:
print("Insufficient Balance!")
self.balance += amount
if self.balance - amount < 0:
raise ValueError("Insufficient Balance!")
self.balance -= amount
self.transactions_history.append(Transaction(amount, "withdraw"))
logging.info(f"Withdrawal of {amount} successful. Remaining balance: {self.balance}")

def get_balance(self):
return self.balance
Expand Down
14 changes: 8 additions & 6 deletions account/user.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import re

class User:
def __init__(self, name, email):
self.name = name
Expand All @@ -8,18 +10,18 @@ def add_account(self, account):
self.accounts.append(account)

def get_total_balance(self):
return 0
return sum(account.get_balance() for account in self.accounts)

def get_account_count(self):
account_count = len(self.accounts) +1
return account_count

return len(self.accounts)

def remove_account(self, account):
return "Account"

def is_valid_email(self,email):
return None
def is_valid_email(self, email):
# Validate email using regex
email_regex = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
return re.match(email_regex, email) is not None


def __str__(self):
Expand Down
73 changes: 45 additions & 28 deletions bank_operator/bank_operator.py
Original file line number Diff line number Diff line change
@@ -1,50 +1,67 @@
import logging
from account.user import User
from account.bank_account import BankAccount, SavingsAccount, CurrentAccount, StudentAccount

# Configure logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

users = []

def create_user():
name = input("Enter name: ")
email = input("Enter email: ")
user = User(name, email)
if not user.is_valid_email(email):
print("Email is invalid!")
logging.error("Invalid email address!")
return
users.append(user)
print(f"User {name} created.\n")
logging.info(f"User {name} created.\n")

def list_users():
if not users:
logging.info("No users available.\n")
return False
for i, user in enumerate(users):
print(f"{i+1}. {user}")
logging.info(f"{i+1}. {user}")
return True

def create_account():
list_users()
idx = int(input("Select user number: ")) - 1
print("Account Type:")
print("1. Savings Account")
print("2. Students Account")
print("3. Current Account")
account_choice = int(input("Enter your choice (1, 2, 3): "))
amount = float(input("Enter initial deposit: "))
if not users: # Check if the users list is empty
logging.info("No users available. Please create a user first.\n")
return
try:
idx = int(input("Select user number: ")) - 1
if idx < 0 or idx >= len(users):
logging.error("Invalid user selection.\n") # Updated error message
return
logging.info("Account Type:")
logging.info("1. Savings Account")
logging.info("2. Students Account")
logging.info("3. Current Account")
account_choice = int(input("Enter your choice (1, 2, 3): "))
amount = float(input("Enter initial deposit: "))

if account_choice == 1:
account = SavingsAccount(amount)
elif account_choice == 2:
account = StudentAccount(amount)
elif account_choice == 3:
account = CurrentAccount(amount)
else:
print("Invalid choice!")
account = BankAccount(amount)
if account_choice == 1:
account = SavingsAccount(amount)
elif account_choice == 2:
account = StudentAccount(amount)
elif account_choice == 3:
account = CurrentAccount(amount)
else:
logging.error("Invalid choice!")
return

users[idx].add_account(account)
print(f"{account.get_account_type()} added!\n")
users[idx].add_account(account)
logging.info(f"{account.get_account_type()} added!\n")
except ValueError:
logging.error("Invalid input! Please enter a valid number.\n")

def deposit_money():
list_users()
idx = int(input("Select user: ")) - 1
user = users[idx]
for i, acc in enumerate(user.accounts):
print(f"{i+1}. Balance: Rs. {acc.get_balance()}")
logging.info(f"{i+1}. Balance: Rs. {acc.get_balance()}")
acc_idx = int(input("Select account: ")) - 1
amount = float(input("Enter amount to deposit: ")) # Fixed bug
user.accounts[acc_idx].deposit(amount)
Expand All @@ -54,21 +71,21 @@ def withdraw_money():
idx = int(input("Select user: ")) - 1
user = users[idx]
for i, acc in enumerate(user.accounts):
print(f"{i+1}. Balance: Rs. {acc.get_balance()}")
logging.info(f"{i+1}. Balance: Rs. {acc.get_balance()}")
acc_idx = int(input("Select account: ")) - 1
amount = float(input("Enter amount to withdraw: "))
try:
user.accounts[acc_idx].withdraw(amount)
print("Withdrawal successful.\n")
logging.info("Withdrawal successful.\n")
except ValueError as e:
print(f"Error: {e}\n")
logging.error(f"Error: {e}\n")

def view_transactions():
list_users()
idx = int(input("Select user: ")) - 1
user = users[idx]
for i, acc in enumerate(user.accounts):
print(f"\n{acc.get_account_type()} {i+1} - Balance: Rs. {acc.get_balance()}")
logging.info(f"\n{acc.get_account_type()} {i+1} - Balance: Rs. {acc.get_balance()}")
for tx in acc.get_transaction_history():
print(tx)
logging.info(tx)

Loading