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 ('\n You 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 ("""\n 1. 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 ('\n Balance: ' , self .balance )
77
+ print ()
78
+ elif i == 2 :
79
+ print ('\n Enter 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 ('\n Transfer\n Enter 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 ('\n The account has been closed!' )
112
+ break
113
+ elif i == 5 :
114
+ print ("\n You have successfully log out!" )
115
+ break
116
+ elif i == 0 :
117
+ print ("\n Bye!" )
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 ("""\n 1. 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 ("\n Bye!" )
180
+ break
181
+ else :
182
+ print ("Invalid input" )
183
+
184
+
185
+ card = Card ()
186
+ card .menu ()
0 commit comments