Import Sqlite3
Import Sqlite3
import tkinter as tk
from tkinter import messagebox, ttk
# Database Connection
def connect_db():
conn = sqlite3.connect("bank.db")
cursor = conn.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, username TEXT,
password TEXT)''')
cursor.execute('''CREATE TABLE IF NOT EXISTS accounts (
acc_no INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
phone TEXT,
acc_type TEXT,
email TEXT,
balance REAL)''')
# Register Function
def register():
def submit():
username = entry_user.get()
password = entry_pass.get()
if username and password:
conn = sqlite3.connect("bank.db")
cursor = conn.cursor()
cursor.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username,
password))
conn.commit()
conn.close()
messagebox.showinfo("Success", "Registration Successful!")
reg_window.destroy()
else:
messagebox.showerror("Error", "All fields are required!")
reg_window = tk.Toplevel()
reg_window.title("Register")
reg_window.geometry("400x300")
reg_window.configure(bg="lightblue")
tk.Label(reg_window, text="Username", bg="lightblue").pack()
entry_user = tk.Entry(reg_window)
entry_user.pack()
tk.Label(reg_window, text="Password", bg="lightblue").pack()
entry_pass = tk.Entry(reg_window, show="*")
entry_pass.pack()
tk.Button(reg_window, text="Submit", command=submit, bg="green", fg="white").pack()
# Login Function
def login():
def verify():
username = entry_user.get()
password = entry_pass.get()
conn = sqlite3.connect("bank.db")
cursor = conn.cursor()
cursor.execute("SELECT * FROM users WHERE username=? AND password=?", (username,
password))
user = cursor.fetchone()
conn.close()
if user:
messagebox.showinfo("Success", "Login Successful!")
login_window.destroy()
main_menu()
else:
messagebox.showerror("Error", "Invalid Credentials!")
login_window = tk.Tk()
login_window.title("Login")
login_window.geometry("400x300")
login_window.configure(bg="lightgreen")
tk.Label(login_window, text="Username", bg="lightgreen").pack()
entry_user = tk.Entry(login_window)
entry_user.pack()
tk.Label(login_window, text="Password", bg="lightgreen").pack()
entry_pass = tk.Entry(login_window, show="*")
entry_pass.pack()
tk.Button(login_window, text="Login", command=verify, bg="blue", fg="white").pack()
tk.Button(login_window, text="Register", command=register, bg="orange", fg="white").pack()
login_window.mainloop()
# Main Menu
def main_menu():
menu = tk.Tk()
menu.title("Bank Management System")
menu.geometry("800x600")
menu.configure(bg="lightyellow")
menu.mainloop()
account_window = tk.Toplevel()
account_window.title("Create Bank Account")
account_window.geometry("400x400")
account_window.configure(bg="lightblue")
account_window.mainloop()
def view_balance():
def check_balance():
acc_no = acc_entry.get()
if acc_no:
conn = sqlite3.connect("bank.db")
cursor = conn.cursor()
cursor.execute("SELECT balance FROM accounts WHERE acc_no = ?", (acc_no,))
result = cursor.fetchone()
conn.close()
if result:
messagebox.showinfo("Balance", f"Your account balance is: {result[0]}")
else:
messagebox.showerror("Error", "Account not found!")
else:
messagebox.showwarning("Input Error", "Please enter an account number!")
balance_window = tk.Toplevel()
balance_window.title("View Balance")
balance_window.geometry("300x200")
balance_window.configure(bg="lightgray")
balance_window.mainloop()
def deposit():
def submit_deposit():
acc_no = acc_entry.get()
amount = amount_entry.get()
if acc_no and amount:
try:
amount = float(amount)
conn = sqlite3.connect("bank.db")
cursor = conn.cursor()
cursor.execute("SELECT balance FROM accounts WHERE acc_no = ?", (acc_no,))
result = cursor.fetchone()
if result:
new_balance = result[0] + amount
cursor.execute("UPDATE accounts SET balance = ? WHERE acc_no = ?", (new_balance,
acc_no))
conn.commit()
conn.close()
messagebox.showinfo("Success", f"Amount {amount} deposited successfully! New
Balance: {new_balance}")
deposit_window.destroy()
else:
messagebox.showerror("Error", "Account not found!")
except ValueError:
messagebox.showerror("Error", "Please enter a valid amount!")
else:
messagebox.showwarning("Input Error", "Please enter all details!")
deposit_window = tk.Toplevel()
deposit_window.title("Deposit Money")
deposit_window.geometry("300x200")
deposit_window.configure(bg="lightgreen")
deposit_window.mainloop()
def withdraw():
def submit_withdraw():
acc_no = acc_entry.get()
amount = amount_entry.get()
if acc_no and amount:
try:
amount = float(amount)
conn = sqlite3.connect("bank.db")
cursor = conn.cursor()
cursor.execute("SELECT balance FROM accounts WHERE acc_no = ?", (acc_no,))
result = cursor.fetchone()
if result:
if result[0] >= amount:
new_balance = result[0] - amount
cursor.execute("UPDATE accounts SET balance = ? WHERE acc_no = ?", (new_balance,
acc_no))
conn.commit()
conn.close()
messagebox.showinfo("Success", f"Amount {amount} withdrawn successfully! New
Balance: {new_balance}")
withdraw_window.destroy()
else:
messagebox.showerror("Error", "Insufficient Balance!")
else:
messagebox.showerror("Error", "Account not found!")
except ValueError:
messagebox.showerror("Error", "Please enter a valid amount!")
else:
messagebox.showwarning("Input Error", "Please enter all details!")
withdraw_window = tk.Toplevel()
withdraw_window.title("Withdraw Money")
withdraw_window.geometry("300x200")
withdraw_window.configure(bg="lightcoral")
tk.Label(withdraw_window, text="Enter Account Number:", font=("Arial", 12),
bg="lightcoral").pack(pady=5)
acc_entry = tk.Entry(withdraw_window, font=("Arial", 12))
acc_entry.pack(pady=5)
withdraw_window.mainloop()
if not transactions:
messagebox.showinfo("No Transactions", "No transactions found for this account.")
return
trans_window = tk.Toplevel()
trans_window.title("Transaction History")
trans_window.geometry("600x400")
trans_window = tk.Toplevel()
trans_window.title("View Transactions")
trans_window.geometry("300x200")
trans_window.mainloop()
if acc_no:
conn = sqlite3.connect("bank.db")
cursor = conn.cursor()
cursor.execute("UPDATE accounts SET name = ?, phone = ?, email = ? WHERE acc_no = ?",
(new_name, new_phone, new_email, acc_no))
conn.commit()
conn.close()
messagebox.showinfo("Success", "Customer details updated successfully!")
update_window.destroy()
else:
messagebox.showwarning("Input Error", "Please enter a valid account number!")
update_window = tk.Toplevel()
update_window.title("Update Customer Details")
update_window.geometry("400x300")
update_window.mainloop()
def view_accounts():
def staff_login():
username = user_entry.get()
password = pass_entry.get()
conn = sqlite3.connect("bank.db")
cursor = conn.cursor()
cursor.execute("SELECT * FROM staff WHERE username = ? AND password = ?", (username,
password))
staff = cursor.fetchone()
conn.close()
if staff:
staff_login_window.destroy()
show_accounts()
else:
messagebox.showerror("Login Failed", "Invalid Credentials")
def show_accounts():
conn = sqlite3.connect("bank.db")
cursor = conn.cursor()
cursor.execute("SELECT * FROM accounts")
accounts = cursor.fetchall()
conn.close()
accounts_window = tk.Toplevel()
accounts_window.title("All Customer Accounts")
accounts_window.geometry("600x400")
tk.Label(staff_login_window, text="Username:").pack(pady=5)
user_entry = tk.Entry(staff_login_window)
user_entry.pack(pady=5)
tk.Label(staff_login_window, text="Password:").pack(pady=5)
pass_entry = tk.Entry(staff_login_window, show="*")
pass_entry.pack(pady=5)
staff_login_window.mainloop()
def close_account():
def delete():
acc_no = acc_entry.get()
if acc_no:
confirm = messagebox.askyesno("Confirm", "Are you sure you want to delete this account?")
if confirm:
conn = sqlite3.connect("bank.db")
cursor = conn.cursor()
cursor.execute("DELETE FROM accounts WHERE acc_no = ?", (acc_no,))
conn.commit()
conn.close()
messagebox.showinfo("Success", "Account deleted successfully!")
close_window.destroy()
else:
messagebox.showwarning("Input Error", "Please enter a valid account number!")
close_window = tk.Toplevel()
close_window.title("Close Account")
close_window.geometry("300x200")
close_window.mainloop()
def exit_application():
confirm = messagebox.askyesno("Exit", "Are you sure you want to exit?")
if confirm:
root.destroy()
# Function to exit application
def exit_application():
confirm = messagebox.askyesno("Exit", "Are you sure you want to exit?")
if confirm:
root.quit()
# Initialize Database
connect_db()
# Start Login
login()