· 5 years ago · Jul 24, 2020, 01:06 PM
1import math
2import sqlite3
3import sys
4import random
5
6
7class credit_card():
8 def __init__(self):
9 self.current_login_status = False
10 self.current_login_status = False
11 self.credit_card_number = ""
12 self.credit_card_pin = ""
13 self.balance = 0
14 self.conn = sqlite3.connect('card.s3db')
15 self.cur = self.conn.cursor()
16 self.cur.execute('''CREATE TABLE IF NOT EXISTS card (id INTEGER PRIMARY KEY, number TEXT, pin TEXT, balance INTEGER DEFAULT 0)''')
17 self.conn.commit()
18
19 def generate_cc(self):
20 self.credit_card_number = int("400000" + str(random.randrange(100000000, 999999999, 1)))
21 self.credit_card_pin = str(random.randrange(1000, 9999, 1))
22 #Luhn
23 cc_gen = [int(x) for x in str(self.credit_card_number)]
24 cc_gen = [cc_gen[i] * 2 if i % 2 == 0 else cc_gen[i] for i in range(len(cc_gen))]
25 cc_gen = [x - 9 if x > 9 else x for x in cc_gen]
26
27 self.credit_card_number = int(str(self.credit_card_number) + str((math.ceil(sum(cc_gen) / 10) * 10) - sum(cc_gen)))
28
29 self.cur.execute("INSERT INTO card(number, pin, balance) VALUES (?, ?, ?)", (self.credit_card_number, self.credit_card_pin, self.balance))
30 self.conn.commit()
31
32 print("Your card has been created\n{}\nYour card PIN:\n{}".format(self.credit_card_number, self.credit_card_pin))
33
34 def login(self):
35 input_cc_number = int(input("Enter your card number:"))
36 input_cc_pin = int(input("Your card PIN:"))
37
38 self.cur.execute('SELECT number FROM card WHERE number = ?', [input_cc_number])
39 returned_number = str(self.cur.fetchall()).strip("',)][('")
40
41 self.cur.execute('SELECT id FROM card WHERE number = ?', [input_cc_number])
42 returned_id = str(self.cur.fetchall()).strip("',)][('")
43
44 self.cur.execute('SELECT pin FROM card WHERE id = ?', [returned_id])
45 returned_pin = str(self.cur.fetchall()).strip("',)][('")
46
47 self.cur.execute('SELECT balance FROM card WHERE number = ?', [input_cc_number])
48 self.balance = str(self.cur.fetchall()).strip("',)][('")
49
50
51 if str(input_cc_number).strip() == returned_number:
52 if str(input_cc_pin) == str(returned_pin):
53 self.current_login_status = True
54 self.credit_card_number = input_cc_number
55 self.credit_card_pin = input_cc_pin
56 print("You have successfully logged in!")
57
58 self.current_login_status = True
59 else:
60 print("Wrong card number or PIN!")
61 else:
62 print("Wrong card number or PIN!")
63
64 def get_balance(self):
65 self.cur.execute('SELECT balance FROM card WHERE number = ?', [self.credit_card_number])
66 self.balance = str(self.cur.fetchall()).strip("',)][('")
67 print("Balance: " + str(self.balance))
68
69 def add_income(self):
70 income_to_add = input("Enter income:\n")
71 self.balance = int(self.balance) + int(income_to_add)
72 self.cur.execute('UPDATE card SET balance = balance + ? WHERE number=?', (income_to_add, self.credit_card_number))
73 self.conn.commit()
74
75 def check_luhn(self, number):
76 number_ol = str(number)[:-1]
77
78 cc_gen = [int(x) for x in str(number_ol)]
79 cc_gen = [cc_gen[i] * 2 if i % 2 == 0 else cc_gen[i] for i in range(len(cc_gen))]
80 cc_gen = [x - 9 if x > 9 else x for x in cc_gen]
81
82 new_number = int(str(number_ol) + str((math.ceil(sum(cc_gen) / 10) * 10) - sum(cc_gen)))
83
84 if new_number == int(number):
85 return True
86 else:
87 return False
88
89 def do_transfer(self):
90 transfer_to = input("Transfer\nEnter card number:\n")
91
92 if self.check_luhn(transfer_to):
93 self.cur.execute('SELECT balance FROM card WHERE number = ?', [transfer_to])
94 returned_balance = str(self.cur.fetchall()).strip("',)][('")
95 if returned_balance != "":
96 money_to_transfer = input("Enter how much money you want to transfer:")
97 if int(money_to_transfer) <= int(self.balance):
98 new_balance_to = int(returned_balance) + int(money_to_transfer)
99 new_balance_from = int(self.balance) - int(money_to_transfer)
100
101 self.cur.execute('UPDATE card SET balance = ? WHERE number = ?',(new_balance_to, transfer_to))
102 self.cur.execute('UPDATE card SET balance = ? WHERE number = ?',(new_balance_from, self.credit_card_number))
103 self.conn.commit()
104 print("Success!")
105 else:
106 print("Not enough money!")
107 else:
108 print("Such a card does not exist.")
109 else:
110 print("Probably you made mistake in the card number. Please try again!")
111
112 def log_out(self):
113 self.credit_card_number = ""
114 self.credit_card_pin = ""
115 self.balance = ""
116 self.current_login_status = False
117 self.main()
118
119 def close_account(self):
120 self.cur.execute('DELETE FROM card WHERE number = ?', [self.credit_card_number])
121 self.conn.commit()
122 print("The account has been closed!")
123 self.log_out()
124
125 def main(self):
126 while self.current_login_status == False:
127 user_action = int(input("1. Create an account\n2. Log into account\n0. Exit\n"))
128 if user_action == 1:
129 self.generate_cc()
130 elif user_action == 2:
131 self.login()
132 elif user_action == 0:
133 sys.exit()
134 else:
135 while self.current_login_status == True:
136
137 logged_in_user_action = int(input("1. Balance\n2. Add income\n3. Do transfer\n4. Close account\n5. Log out\n0. Exit\n"))
138
139 if logged_in_user_action == 1:
140 self.get_balance()
141
142 elif logged_in_user_action == 2:
143 self.add_income()
144
145 elif logged_in_user_action == 3:
146 self.do_transfer()
147
148 elif logged_in_user_action == 4:
149 self.close_account()
150
151 elif logged_in_user_action == 5:
152 self.log_out()
153
154 elif logged_in_user_action == 0:
155 sys.exit()
156
157steffan = credit_card()
158steffan.main()
159