· 5 years ago · Aug 17, 2020, 04:26 PM
1import random
2import sys
3import sqlite3
4import re
5
6
7class Database:
8 def __init__(self):
9 self.conn = None
10 self.cursor = None
11 self.unique = None
12
13 def open(self):
14 try:
15 self.conn = sqlite3.connect('card.s3db')
16 self.cursor = self.conn.cursor()
17
18 except sqlite3.Error:
19 print("Error connecting to database!")
20
21 def create_table(self):
22 self.cursor.execute('''CREATE TABLE IF NOT EXISTS card
23 (id integer primary key autoincrement, number text, pin text, balance integer default 0)''')
24 self.conn.commit()
25
26 def table_is_empty(self):
27 query = "SELECT * FROM card;"
28 self.cursor.execute(query)
29 result = self.cursor.fetchall()
30 if result is not None:
31 return result
32 else:
33 return ''
34
35 def number_is_unique(self, number):
36 query = "SELECT {0} FROM {1} WHERE number = {2};".format('number', 'card', number)
37 self.cursor.execute(query)
38 result = self.cursor.fetchone()
39 if result is not None:
40 return result
41 else:
42 return ''
43
44 def add(self, number, pin):
45 if self.unique is None:
46 query = "INSERT INTO {0} ({1}, {2}) VALUES ({3}, {4});".format('card', 'number', 'pin', number, pin)
47 self.cursor.execute(query)
48
49 else:
50 return "The card with this number is already in our database."
51
52 def validation(self, number, pin):
53 query = "SELECT {0}, {1} FROM {2} WHERE number = {3} AND pin = {4};".format('number', 'pin', 'card', number,
54 pin)
55 self.cursor.execute(query)
56 result = self.cursor.fetchone()
57 if result is not None:
58 return result
59 else:
60 return None
61
62 def close(self):
63 if self.conn:
64 self.conn.commit()
65 self.cursor.close()
66 self.conn.close()
67
68
69new = Database()
70new.open()
71new.create_table()
72new.close()
73
74
75class CreditCard:
76
77 def __init__(self):
78 self.card_number = None
79 self.card_pin = None
80
81 def luhn_validation(self):
82 result = False
83
84 while not result:
85 card_number = int('400000' + ''.join([str(random.randint(0, 9)) for a in range(0, 10)]))
86 result = [int(str(card_number)[a]) * 2 for a in range(len(str(card_number))) if a % 2 == 0]
87 result = sum([sum([int(a) for a in str(result[a])]) for a in range(len(result))])
88 result_even = sum([int(str(card_number)[a]) * 1 for a in range(len(str(card_number))) if a % 2 != 0])
89
90 result = (result_even + result) % 10 == 0
91 if result is True:
92 self.card_number = card_number
93
94 def create_an_account(self):
95 card_number = self.card_number
96 card_pin = str(''.join([str(random.randint(0, 9)) for a in range(0, 4)]))
97 self.card_pin = card_pin
98
99 self.card_pin = ''.join([str(a) for a in (re.findall(r'\d', self.card_pin))])
100 # print(self.card_number, self.card_pin)
101
102 new_connection = Database()
103 new_connection.open()
104 new_connection.create_table()
105 new_connection.number_is_unique(self.card_number)
106 new_connection.add(self.card_number, self.card_pin)
107 new_connection.close()
108
109 print('')
110 print('Your card has been created\n' + 'Your card number:')
111 print(int(self.card_number))
112 print('Your card PIN:')
113 print(int(self.card_pin))
114 print('')
115
116 def log_into_account(self):
117 self.card_number = input('\nEnter your card number:\n')
118 self.card_pin = input('Enter your card number:\n')
119
120 self.card_number = ''.join([str(a) for a in (re.findall(r'\d', self.card_number))])
121 self.card_pin = ''.join([str(a) for a in (re.findall(r'\d', self.card_pin))])
122
123 if len(self.card_number) != 0 and len(self.card_pin) != 0:
124
125 new_connection = Database()
126 new_connection.open()
127 result = new_connection.validation(int(self.card_number), int(self.card_pin))
128 if result is not None:
129 if result[0] == self.card_number and result[1] == self.card_pin:
130 # if card_number == CreditCard.account[0] and card_pin == CreditCard.account[1]:
131 print('\nYou have successfully logged in!\n')
132
133 step = ''
134 while step != '0':
135 print(
136 '1. Balance' +
137 '\n2. Log out' +
138 '\n0. Exit'
139 )
140
141 step = input()
142
143 if step == '1':
144 print('Balance: 0\n')
145 elif step == '2':
146 print('You have successfully logged out!\n')
147 break
148 elif step == '0':
149 print('Bye! \n')
150 sys.exit()
151
152
153 else:
154 print('\nWrong card number or PIN!\n')
155 else:
156 print('\nWrong card number or PIN!\n')
157 else:
158 print('\nWrong card number or PIN!\n')
159
160 @staticmethod
161 def control_flow():
162 step = ''
163 while step != '0':
164 print(
165 '1. Create an account' +
166 '\n2. Log into account' +
167 '\n0. Exit'
168 )
169
170 step = input()
171
172 if step == '1':
173 new_credit_card = CreditCard()
174 new_credit_card.luhn_validation()
175 new_credit_card.create_an_account()
176 elif step == '2':
177 new_credit_card = CreditCard()
178 new_credit_card.log_into_account()
179
180 elif step == '0':
181 print('Bye!')
182 break
183
184
185card = CreditCard()
186card.control_flow()