· 5 years ago · Jul 26, 2020, 04:18 PM
1Code:
2# Write your code here
3import random
4import luhn
5import sqlite3
6
7random.seed(0)
8
9class Bank:
10
11 def run_query(self, query, msg = ""):
12 connection = sqlite3.connect('card.s3db')
13 cursor = connection.cursor()
14 cursor.execute(query)
15 if msg == "":
16 data = cursor.fetchone()
17 connection.commit()
18 connection.close()
19 if msg == "":
20 return data
21
22 def __init__(self):
23 query = """CREATE TABLE IF NOT EXISTS card(
24 id INTEGER PRIMARY KEY AUTOINCREMENT,
25 number TEXT,
26 pin TEXT,
27 balance INTEGER DEFAULT 0
28 );
29 """
30 self.run_query(query, 'NO RETURN')
31
32 '''self.connection = sqlite3.connect('card.s3db')
33 self.cursor = self.connection.cursor()
34
35 self.cursor.execute("""CREATE TABLE IF NOT EXISTS card(
36 id INTEGER,
37 number TEXT,
38 pin TEXT,
39 balance INTEGER DEFAULT 0
40 );
41 """)
42
43 self.connection.commit()'''
44
45
46 def menu(self):
47 print('\n1. Create an account\n2. Log into account\n0. Exit')
48 choice = input()
49 if choice == '1':
50 self.create()
51 elif choice == '2':
52 self.login()
53 elif choice == '0':
54 print('\nBye!')
55 # self.connection.close()
56 quit()
57
58 def account_menu(self, account):
59 print('1. Balance\n2. Add income \n3. Do transfer\n4. Close account\n5. Log out\n0. Exit')
60 choice = input()
61 if choice == '1':
62 print(f'Balance = {account[2]}')
63 elif choice == '2':
64 self.add_income(account)
65 elif choice == '3':
66 self.money_transfer(account)
67 elif choice == '4':
68 self.delete_account(account[0])
69 elif choice == '5':
70 print('\nYou have successfully logged out!\n')
71 return self.menu()
72 elif choice == '0':
73 print('\nBye!')
74 # self.connection.close()
75 quit()
76
77 @property
78 def create(self):
79 print()
80 card_temp = '400000' + str.zfill(str(random.randint(000000000, 999999999)), 9)
81 card_number = luhn.append(card_temp)
82 pin = str.zfill(str(random.randint(0000, 9999)), 4)
83 print(f'Your card has been created\nYour card number:\n{card_number}\nYour card PIN:\n{pin}\n')
84 query = f'INSERT INTO card (number, pin) VALUES ({card_number},{pin})'
85 self.run_query(query, 'NO RETURN')
86 # account = (card_number, pin)
87 # self.cursor.execute('INSERT INTO card (number, pin) VALUES (?,?)', account)
88 # self.connection.commit()
89 return self.menu()
90
91 def return_account(self,card_number, input_pin):
92 query = f'SELECT number, pin, balance FROM card WHERE number ={card_number} and pin ={input_pin}'
93 return self.run_query(query)
94
95 def login(self):
96 print('\nEnter your card number:')
97 card_number = input()
98 print('Enter your PIN:')
99 input_pin = input()
100 # self.cursor.execute('SELECT number, pin, balance FROM card WHERE number =:number and pin =:pin', {'number': card_number, 'pin': input_pin})
101 output_account = self.return_account(card_number, input_pin)
102 if output_account != None:
103 print('\nYou have successfully logged in!\n')
104 return self.account_menu(output_account)
105 else:
106 print('Wrong card number or Pin!')
107 return self.menu()
108
109 def add_income(self, account):
110 print('\nEnter your card number:')
111 income = int(input())
112 balance = account[2] + income
113 print(balance)
114 query = f'UPDATE card SET balance = {balance} where number = {account[0]}'
115 self.run_query(query, 'NO RETURN')
116 output_account = self.return_account(account[0], account[1])
117 print('Income was added!\n')
118 return self.account_menu(output_account)
119
120 def money_transfer(self, account):
121 print('''Transfer
122 \nEnter card number:''')
123 transfer_card = input()
124
125 if len(transfer_card) != 16:
126 print('Such a card does not exist.\n')
127 return self.account_menu(account)
128 elif transfer_card == account[0]:
129 print("You can't transfer money to the same account!\n")
130 return self.account_menu(account)
131 elif luhn.verify(transfer_card) == False:
132 print('Probably you made mistake in the card number. Please try again!\n')
133 return self.account_menu(account)
134 else:
135 query = f'SELECT number, balance FROM card WHERE number = {transfer_card}'
136 sender_account = self.run_query(query)
137 if sender_account == None:
138 print('Such a card does not exist.\n')
139 return self.account_menu(account)
140 else:
141 print('Enter how much money you want to transfer:')
142 transfer_money = int(input())
143 print(f'\nBalance = {account[2]}\n')
144 if transfer_money <= int(account[2]):
145 balance = sender_account[1] + transfer_money
146 own_balance = account[2] - transfer_money
147 sender_account_update_query = f'UPDATE card SET balance = {own_balance} WHERE number = {account[0]}'
148 self.run_query(sender_account_update_query, 'NO RETURN')
149 reciever_account_update_query = f'UPDATE card SET balance = {balance} WHERE number = {transfer_card}'
150 self.run_query(reciever_account_update_query, 'NO RETURN')
151 output_account = self.return_account(account[0], account[1])
152 print('Success!\n')
153 return self.account_menu(output_account)
154 else:
155 print('Not enough money!\n')
156 return self.account_menu(account)
157
158 def delete_account(self, account_number):
159 query = f'DELETE FROM card WHERE number = {account_number}'
160 self.run_query(query, 'NO RETURN')
161 print('\nThe account has been closed!\n')
162 return self.menu()
163
164
165if __name__ == '__main__':
166 stage_1 = Bank()
167 while True:
168 stage_1.menu()
169
170Error Message:
171Wrong answer in test #9
172
173You should not allow a transfer if there is not enough money in the account to complete it.
174
175Please find below the output of your program during this failed test.
176Note that the '>' character indicates the beginning of the input line.
177
178---
179
180
1811. Create an account
1822. Log into account
1830. Exit
184> 1
185
186Your card has been created
187Your card number:
1884000009066910590
189Your card PIN:
1906311
191
192
1931. Create an account
1942. Log into account
1950. Exit
196> 1
197
198Your card has been created
199Your card number:
2004000008138473397
201Your card PIN:
2026890
203
204
2051. Create an account
2062. Log into account
2070. Exit
208> 2
209
210Enter your card number:
211> 4000009066910590
212Enter your PIN:
213> 6311
214
215You have successfully logged in!
216
2171. Balance
2182. Add income
2193. Do transfer
2204. Close account
2215. Log out
2220. Exit
223> 3
224Transfer
225
226Enter card number:
227> 4000003972196502
228Probably you made mistake in the card number. Please try again!
229
2301. Balance
2312. Add income
2323. Do transfer
2334. Close account
2345. Log out
2350. Exit
236> 3
237Transfer
238
239Enter card number:
240> 3000003972196503
241Such a card does not exist.
242
2431. Balance
2442. Add income
2453. Do transfer
2464. Close account
2475. Log out
2480. Exit
249> 3
250Transfer
251
252Enter card number:
253> 4000008138473397
254Enter how much money you want to transfer:
255> 10000
256
257Balance = 25000
258
259Success!
260
2611. Balance
2622. Add income
2633. Do transfer
2644. Close account
2655. Log out
2660. Exit