Skip to content

Commit a9ea44f

Browse files
authored
Merge pull request #95 from muhahahmad68/master
Added a Simple Banking App
2 parents a89124f + 8606b35 commit a9ea44f

File tree

2 files changed

+190
-0
lines changed

2 files changed

+190
-0
lines changed

Banking App/Readme.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
## A Banking App
2+
3+
4+
A simple python program that uses luhn algorithm to verify card number, enables transfer and withdrawal of money It makes use of sqlite3 for database storage and therefore permits manipulation of our details and keeps them safe.

Banking App/banking.py

Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
2+
import random
3+
import sys
4+
import sqlite3
5+
random.seed()
6+
7+
8+
conn = sqlite3.connect('card.s3db')
9+
cur = conn.cursor()
10+
# cur.execute("DROP TABLE card")
11+
cur.execute("CREATE TABLE IF NOT EXISTS card(id INTEGER PRIMARY KEY,number TEXT,pin TEXT,balance INTEGER DEFAULT 0);")
12+
conn.commit()
13+
14+
15+
class Card:
16+
17+
def __init__(self):
18+
self.card = ''
19+
self.pin = ''
20+
self.login_card = ''
21+
self.login_pin = ''
22+
self.row = []
23+
self.balance = 0
24+
self.receiver_balance = 0
25+
26+
def create_account(self):
27+
print("Your card has been created")
28+
print("Your card number:")
29+
self.card = '400000' + str(random.randint(100000000, 999999999))
30+
print(self.luhn())
31+
print("Your card PIN:")
32+
self.pin = str(random.randint(1000, 9999))
33+
print(self.pin)
34+
cur.execute(f"""INSERT INTO card (number, pin) VALUES ({self.card}, {self.pin});""")
35+
conn.commit()
36+
37+
def log_in(self):
38+
39+
self.login_card = input("Enter your card number:\n")
40+
self.login_pin = input("Enter your PIN:\n")
41+
42+
cur.execute(f"""SELECT
43+
id,
44+
number,
45+
pin,
46+
balance
47+
FROM
48+
card
49+
WHERE
50+
number = {self.login_card}
51+
AND pin = {self.login_pin}
52+
;""")
53+
54+
self.row = cur.fetchone()
55+
if self.row:
56+
self.balance = self.row[3]
57+
print('\nYou have successfully logged in')
58+
self.success()
59+
60+
else:
61+
print("wrong card number or pin")
62+
63+
'''elif not self.luhn_2(self.login_card):
64+
print('Probably you made a mistake in the card number. Please try again!')'''
65+
66+
def success(self):
67+
while True:
68+
print("""\n1. Balance
69+
2. Add income
70+
3. Do transfer
71+
4. Close account
72+
5. Log out
73+
0. Exit""")
74+
i = int(input())
75+
if i == 1:
76+
print('\nBalance: ', self.balance)
77+
print()
78+
elif i == 2:
79+
print('\nEnter income:')
80+
amount = int(input())
81+
self.balance += amount
82+
cur.execute(f'UPDATE card SET balance = {self.balance} WHERE number = {self.login_card};')
83+
conn.commit()
84+
print('Income was added!')
85+
elif i == 3:
86+
print('\nTransfer\nEnter card number:')
87+
receiver_card = input()
88+
cur.execute(f'SELECT id, number,pin,balance FROM card WHERE number = {receiver_card};')
89+
90+
if not self.luhn_2(receiver_card):
91+
print('Probably you made a mistake in the card number. Please try again!')
92+
elif not cur.fetchone():
93+
print('Such a card does not exist.')
94+
else:
95+
transfer = int(input("Enter how much money you want to transfer:\n"))
96+
if transfer > self.balance:
97+
print("Not enough money!")
98+
else:
99+
self.balance -= transfer
100+
cur.execute(f'UPDATE card SET balance = {self.balance} WHERE number = {self.login_card};')
101+
self.receiver_balance += transfer
102+
cur.execute(f'UPDATE card SET balance = {self.receiver_balance} WHERE number = {receiver_card};')
103+
cur.execute(f'SELECT * FROM card WHERE number = {self.login_card}')
104+
print(cur.fetchone())
105+
print("Success!")
106+
conn.commit()
107+
108+
elif i == 4:
109+
cur.execute(f"DELETE FROM card WHERE number = {self.login_card}")
110+
conn.commit()
111+
print('\nThe account has been closed!')
112+
break
113+
elif i == 5:
114+
print("\nYou have successfully log out!")
115+
break
116+
elif i == 0:
117+
print("\nBye!")
118+
conn.close()
119+
sys.exit()
120+
121+
def luhn_2(self, num):
122+
num2 = num[:]
123+
num2 = num2[::-1]
124+
lst = [int(x) for x in num2]
125+
s1 = sum(lst[::2])
126+
for i in range(len(lst)):
127+
if i % 2 != 0:
128+
lst[i] = lst[i] * 2
129+
for i in range(len(lst)):
130+
if lst[i] > 9:
131+
lst[i] -= 9
132+
s2 = sum(lst[1:len(lst):2])
133+
134+
if (s1 + s2) % 10 == 0:
135+
return True
136+
return False
137+
138+
# Defining my luhn algorithm for creating a new card number
139+
def luhn(self):
140+
141+
lst2 = [int(x) for x in self.card]
142+
lst3 = lst2[:]
143+
144+
for i in range(len(lst3)):
145+
if i % 2 == 0:
146+
lst3[i] = lst3[i] * 2
147+
else:
148+
lst3[i] = lst3[i]
149+
150+
for i in range(len(lst3)):
151+
if lst3[i] > 9:
152+
lst3[i] -= 9
153+
154+
tot = sum(lst3)
155+
count_sum = 0
156+
while True:
157+
if (tot + count_sum) % 10 == 0:
158+
break
159+
else:
160+
count_sum += 1
161+
162+
lst2.append(count_sum)
163+
self.card = (''.join(map(str, lst2)))
164+
165+
return self.card
166+
167+
def menu(self):
168+
while True:
169+
print("""\n1. Create an account
170+
2. Log into account
171+
0. Exit""")
172+
i = int(input())
173+
if i == 1:
174+
self.create_account()
175+
elif i == 2:
176+
self.log_in()
177+
elif i == 0:
178+
conn.close()
179+
print("\nBye!")
180+
break
181+
else:
182+
print("Invalid input")
183+
184+
185+
card = Card()
186+
card.menu()

0 commit comments

Comments
 (0)