Skip to content

Commit 1d0eece

Browse files
Merge pull request #2884 from ProblemShooter/optimize-db
Refactor: optimize database handling with DatabaseManager class
2 parents a3f158a + 85a082d commit 1d0eece

File tree

450 files changed

+138353
-211
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

450 files changed

+138353
-211
lines changed

bank_managment_system/backend.py

Lines changed: 130 additions & 211 deletions
Original file line numberDiff line numberDiff line change
@@ -2,215 +2,134 @@
22
import os
33

44

5-
# Making connection with database
6-
def connect_database():
7-
global conn
8-
global cur
9-
conn = sqlite3.connect(os.path.join(os.path.dirname(__file__), "bankmanaging.db"))
10-
cur = conn.cursor()
11-
cur.execute(
12-
"""
13-
CREATE TABLE IF NOT EXISTS bank (
14-
acc_no INTEGER PRIMARY KEY,
15-
name TEXT,
16-
age INTEGER,
17-
address TEXT,
18-
balance INTEGER,
19-
account_type TEXT,
20-
mobile_number TEXT
5+
class DatabaseManager:
6+
def __init__(self, db_name="bankmanaging.db"):
7+
self.db_path = os.path.join(os.path.dirname(__file__), db_name)
8+
self.conn = sqlite3.connect(self.db_path, check_same_thread=False)
9+
self.cur = self.conn.cursor()
10+
self._setup_tables()
11+
self.acc_no = self._get_last_acc_no() + 1
12+
13+
def _setup_tables(self):
14+
self.cur.execute("""
15+
CREATE TABLE IF NOT EXISTS bank (
16+
acc_no INTEGER PRIMARY KEY,
17+
name TEXT,
18+
age INTEGER,
19+
address TEXT,
20+
balance INTEGER,
21+
account_type TEXT,
22+
mobile_number TEXT
23+
)
24+
""")
25+
self.cur.execute("""
26+
CREATE TABLE IF NOT EXISTS staff (
27+
name TEXT,
28+
pass TEXT,
29+
salary INTEGER,
30+
position TEXT
31+
)
32+
""")
33+
self.cur.execute("CREATE TABLE IF NOT EXISTS admin (name TEXT, pass TEXT)")
34+
self.cur.execute("SELECT COUNT(*) FROM admin")
35+
if self.cur.fetchone()[0] == 0:
36+
self.cur.execute("INSERT INTO admin VALUES (?, ?)", ("admin", "admin123"))
37+
self.conn.commit()
38+
39+
def _get_last_acc_no(self):
40+
self.cur.execute("SELECT MAX(acc_no) FROM bank")
41+
last = self.cur.fetchone()[0]
42+
return last if last else 0
43+
44+
# ----------------- Admin -----------------
45+
def check_admin(self, name, password):
46+
self.cur.execute("SELECT 1 FROM admin WHERE name=? AND pass=?", (name, password))
47+
return self.cur.fetchone() is not None
48+
49+
# ----------------- Staff -----------------
50+
def create_employee(self, name, password, salary, position):
51+
self.cur.execute("INSERT INTO staff VALUES (?, ?, ?, ?)", (name, password, salary, position))
52+
self.conn.commit()
53+
54+
def check_employee(self, name, password):
55+
self.cur.execute("SELECT 1 FROM staff WHERE name=? AND pass=?", (name, password))
56+
return self.cur.fetchone() is not None
57+
58+
def show_employees(self):
59+
self.cur.execute("SELECT name, salary, position FROM staff")
60+
return self.cur.fetchall()
61+
62+
def update_employee(self, field, new_value, name):
63+
if field not in {"name", "pass", "salary", "position"}:
64+
raise ValueError("Invalid employee field")
65+
self.cur.execute(f"UPDATE staff SET {field}=? WHERE name=?", (new_value, name))
66+
self.conn.commit()
67+
68+
def check_name_in_staff(self, name):
69+
self.cur.execute("SELECT 1 FROM staff WHERE name=?", (name,))
70+
return self.cur.fetchone() is not None
71+
72+
# ----------------- Customer -----------------
73+
def create_customer(self, name, age, address, balance, acc_type, mobile_number):
74+
acc_no = self.acc_no
75+
self.cur.execute(
76+
"INSERT INTO bank VALUES (?, ?, ?, ?, ?, ?, ?)",
77+
(acc_no, name, age, address, balance, acc_type, mobile_number)
2178
)
22-
"""
23-
)
24-
cur.execute(
25-
"""
26-
CREATE TABLE IF NOT EXISTS staff (
27-
name TEXT,
28-
pass TEXT,
29-
salary INTEGER,
30-
position TEXT
31-
)
32-
"""
33-
)
34-
cur.execute("CREATE TABLE IF NOT EXISTS admin (name TEXT, pass TEXT)")
35-
36-
# Only insert admin if not exists
37-
cur.execute("SELECT COUNT(*) FROM admin")
38-
if cur.fetchone()[0] == 0:
39-
cur.execute("INSERT INTO admin VALUES (?, ?)", ("admin", "admin123"))
40-
41-
conn.commit()
42-
43-
# Fetch last account number to avoid duplicate or incorrect numbering
44-
cur.execute("SELECT acc_no FROM bank ORDER BY acc_no DESC LIMIT 1")
45-
acc = cur.fetchone()
46-
global acc_no
47-
acc_no = 1 if acc is None else acc[0] + 1
48-
49-
50-
# Check admin details in database
51-
def check_admin(name, password):
52-
cur.execute("SELECT * FROM admin WHERE name = ? AND pass = ?", (name, password))
53-
return cur.fetchone() is not None
54-
55-
56-
# Create employee in database
57-
def create_employee(name, password, salary, position):
58-
cur.execute(
59-
"INSERT INTO staff VALUES (?, ?, ?, ?)", (name, password, salary, position)
60-
)
61-
conn.commit()
62-
63-
64-
# Check employee login details
65-
def check_employee(name, password):
66-
cur.execute("SELECT 1 FROM staff WHERE name = ? AND pass = ?", (name, password))
67-
return cur.fetchone() is not None
68-
69-
70-
# Create customer in database
71-
def create_customer(name, age, address, balance, acc_type, mobile_number):
72-
global acc_no
73-
cur.execute(
74-
"INSERT INTO bank VALUES (?, ?, ?, ?, ?, ?, ?)",
75-
(acc_no, name, age, address, balance, acc_type, mobile_number),
76-
)
77-
conn.commit()
78-
acc_no += 1
79-
return acc_no - 1
80-
81-
82-
# Check if account number exists
83-
def check_acc_no(acc_no):
84-
cur.execute("SELECT 1 FROM bank WHERE acc_no = ?", (acc_no,))
85-
return cur.fetchone() is not None
86-
87-
88-
# Get customer details
89-
def get_details(acc_no):
90-
cur.execute("SELECT * FROM bank WHERE acc_no = ?", (acc_no,))
91-
detail = cur.fetchone()
92-
return detail if detail else False
93-
94-
95-
# Update customer balance
96-
def update_balance(new_money, acc_no):
97-
cur.execute(
98-
"UPDATE bank SET balance = balance + ? WHERE acc_no = ?", (new_money, acc_no)
99-
)
100-
conn.commit()
101-
102-
103-
# Deduct balance
104-
def deduct_balance(new_money, acc_no):
105-
cur.execute("SELECT balance FROM bank WHERE acc_no = ?", (acc_no,))
106-
bal = cur.fetchone()
107-
if bal and bal[0] >= new_money:
108-
cur.execute(
109-
"UPDATE bank SET balance = balance - ? WHERE acc_no = ?",
110-
(new_money, acc_no),
111-
)
112-
conn.commit()
113-
return True
114-
return False
115-
116-
117-
# Get account balance
118-
def check_balance(acc_no):
119-
cur.execute("SELECT balance FROM bank WHERE acc_no = ?", (acc_no,))
120-
bal = cur.fetchone()
121-
return bal[0] if bal else 0
122-
123-
124-
# Update customer details
125-
def update_name_in_bank_table(new_name, acc_no):
126-
cur.execute("UPDATE bank SET name = ? WHERE acc_no = ?", (new_name, acc_no))
127-
conn.commit()
128-
129-
130-
def update_age_in_bank_table(new_age, acc_no):
131-
cur.execute("UPDATE bank SET age = ? WHERE acc_no = ?", (new_age, acc_no))
132-
conn.commit()
133-
134-
135-
def update_address_in_bank_table(new_address, acc_no):
136-
cur.execute("UPDATE bank SET address = ? WHERE acc_no = ?", (new_address, acc_no))
137-
conn.commit()
138-
139-
140-
def update_mobile_number_in_bank_table(new_mobile_number, acc_no):
141-
cur.execute(
142-
"UPDATE bank SET mobile_number = ? WHERE acc_no = ?",
143-
(new_mobile_number, acc_no),
144-
)
145-
conn.commit()
146-
147-
148-
def update_acc_type_in_bank_table(new_acc_type, acc_no):
149-
cur.execute(
150-
"UPDATE bank SET account_type = ? WHERE acc_no = ?", (new_acc_type, acc_no)
151-
)
152-
conn.commit()
153-
154-
155-
# List all customers
156-
def list_all_customers():
157-
cur.execute("SELECT * FROM bank")
158-
return cur.fetchall()
159-
160-
161-
# Delete account
162-
def delete_acc(acc_no):
163-
cur.execute("DELETE FROM bank WHERE acc_no = ?", (acc_no,))
164-
conn.commit()
165-
166-
167-
# Show employees
168-
def show_employees():
169-
cur.execute("SELECT name, salary, position FROM staff")
170-
return cur.fetchall()
171-
172-
173-
# Get total money in bank
174-
def all_money():
175-
cur.execute("SELECT SUM(balance) FROM bank")
176-
total = cur.fetchone()[0]
177-
return total if total else 0
178-
179-
180-
# Get employee details
181-
def show_employees_for_update():
182-
cur.execute("SELECT * FROM staff")
183-
return cur.fetchall()
184-
185-
186-
# Update employee details
187-
def update_employee_name(new_name, old_name):
188-
cur.execute("UPDATE staff SET name = ? WHERE name = ?", (new_name, old_name))
189-
conn.commit()
190-
191-
192-
def update_employee_password(new_pass, old_name):
193-
cur.execute("UPDATE staff SET pass = ? WHERE name = ?", (new_pass, old_name))
194-
conn.commit()
195-
196-
197-
def update_employee_salary(new_salary, old_name):
198-
cur.execute("UPDATE staff SET salary = ? WHERE name = ?", (new_salary, old_name))
199-
conn.commit()
200-
201-
202-
def update_employee_position(new_pos, old_name):
203-
cur.execute("UPDATE staff SET position = ? WHERE name = ?", (new_pos, old_name))
204-
conn.commit()
205-
206-
207-
# Get customer name and balance
208-
def get_detail(acc_no):
209-
cur.execute("SELECT name, balance FROM bank WHERE acc_no = ?", (acc_no,))
210-
return cur.fetchone()
211-
212-
213-
# Check if employee exists
214-
def check_name_in_staff(name):
215-
cur.execute("SELECT 1 FROM staff WHERE name = ?", (name,))
216-
return cur.fetchone() is not None
79+
self.conn.commit()
80+
self.acc_no += 1
81+
return acc_no
82+
83+
def check_acc_no(self, acc_no):
84+
self.cur.execute("SELECT 1 FROM bank WHERE acc_no=?", (acc_no,))
85+
return self.cur.fetchone() is not None
86+
87+
def get_details(self, acc_no):
88+
self.cur.execute("SELECT * FROM bank WHERE acc_no=?", (acc_no,))
89+
return self.cur.fetchone()
90+
91+
def get_detail(self, acc_no):
92+
self.cur.execute("SELECT name, balance FROM bank WHERE acc_no=?", (acc_no,))
93+
return self.cur.fetchone()
94+
95+
def update_customer(self, field, new_value, acc_no):
96+
if field not in {"name", "age", "address", "mobile_number", "account_type"}:
97+
raise ValueError("Invalid customer field")
98+
self.cur.execute(f"UPDATE bank SET {field}=? WHERE acc_no=?", (new_value, acc_no))
99+
self.conn.commit()
100+
101+
def update_balance(self, amount, acc_no):
102+
self.cur.execute("UPDATE bank SET balance = balance + ? WHERE acc_no=?", (amount, acc_no))
103+
self.conn.commit()
104+
105+
def deduct_balance(self, amount, acc_no):
106+
self.cur.execute("SELECT balance FROM bank WHERE acc_no=?", (acc_no,))
107+
bal = self.cur.fetchone()
108+
if bal and bal[0] >= amount:
109+
self.cur.execute("UPDATE bank SET balance=balance-? WHERE acc_no=?", (amount, acc_no))
110+
self.conn.commit()
111+
return True
112+
return False
113+
114+
def check_balance(self, acc_no):
115+
self.cur.execute("SELECT balance FROM bank WHERE acc_no=?", (acc_no,))
116+
bal = self.cur.fetchone()
117+
return bal[0] if bal else 0
118+
119+
def list_all_customers(self):
120+
self.cur.execute("SELECT * FROM bank")
121+
return self.cur.fetchall()
122+
123+
def delete_acc(self, acc_no):
124+
self.cur.execute("DELETE FROM bank WHERE acc_no=?", (acc_no,))
125+
self.conn.commit()
126+
127+
# ----------------- Stats -----------------
128+
def all_money(self):
129+
self.cur.execute("SELECT SUM(balance) FROM bank")
130+
total = self.cur.fetchone()[0]
131+
return total if total else 0
132+
133+
# ----------------- Cleanup -----------------
134+
def close(self):
135+
self.conn.close()

0 commit comments

Comments
 (0)