· 5 years ago · Sep 04, 2020, 10:14 AM
1# Write your code here
2from random import randint
3from math import ceil
4import sqlite3
5
6# Connect to database
7conn = sqlite3.connect('card.s3db')
8
9# Create a cursor
10cur = conn.cursor()
11
12# Drop the table, had to do it as I was getting an error when creating it
13cur.execute("DROP TABLE card")
14conn.commit()
15
16# Create a table
17cur.execute("""CREATE TABLE IF NOT EXISTS card(
18 id INTEGER PRIMARY KEY,
19 number TEXT,
20 pin TEXT,
21 balance INTEGER DEFAULT 0
22);""")
23
24# Commit our command
25conn.commit()
26
27current_account = None
28
29while True:
30 if current_account is None:
31 print("1. Create an account\n2. Log into account\n0. Exit")
32 action = int(input())
33 if action == 1:
34 new_acc_no = randint(400000000000000, 400000999999999)
35 check_account = list(str(new_acc_no))
36 total = 0
37 total_up = 0
38 for i in range(len(check_account)):
39 if i % 2 == 0:
40 x = int(check_account[i]) * 2
41 check_account[i] = str(x)
42
43 for i in range(len(check_account)):
44 if int(check_account[i]) > 9:
45 x = int(check_account[i]) - 9
46 check_account[i] = str(x)
47
48 for i in range(len(check_account)):
49 total += int(check_account[i])
50 total_up = int(ceil(total / 10)) * 10
51
52 check_sum = total_up - total
53 new_account = str(new_acc_no) + str(check_sum)
54
55 new_pin = str(randint(1000, 9999))
56
57 cur.execute(f"INSERT INTO card (number, pin) VALUES ({new_account}, {new_pin})")
58 conn.commit()
59 print()
60 print(f"Your card has been created\nYour card number:\n{new_account}\nYour card PIN:\n{new_pin}")
61 elif action == 2:
62 print("Enter your card number:")
63 temp_account = input()
64 cur.execute("SELECT number FROM card WHERE number = ?", (temp_account,))
65 check_account = cur.fetchone()[0]
66 print("Enter your PIN:")
67 temp_pin = input()
68 cur.execute("SELECT pin FROM card WHERE number = ?", (temp_account,))
69 check_pin = cur.fetchone()[0]
70 conn.commit()
71 if check_account == temp_account and check_pin == temp_pin:
72 current_account = check_account
73 print("You have successfully logged in!")
74 break
75 else:
76 print("Wrong card number or PIN!")
77 continue
78 elif action == 0:
79 print("Bye!")
80 exit()
81 else: # User is signed in
82 print("1. Balance\n2. Add income\n3. Do transfer\n4. Close account\n5. Log out\n0. Exit")
83 choice = int(input())
84 print()
85 if choice == 1:
86 cur.execute("SELECT balance FROM card WHERE number = ?", (current_account,))
87 actual_balance = str(cur.fetchone()[0])
88 conn.commit()
89 print(f"Balance: {actual_balance}")
90 continue
91 elif choice == 2:
92 print("Enter income:")
93 income = int(input())
94 cur.execute("SELECT balance FROM card WHERE number = ?", (current_account,))
95 actual_balance = cur.fetchone()[0]
96 conn.commit()
97 new_balance = actual_balance + income
98 cur.execute("UPDATE card SET balance = ? WHERE number = ?", (new_balance, current_account))
99 conn.commit()
100 print("Income was added!")
101 continue
102 elif choice == 3:
103 print("Enter card number")
104 transfer_account = input()
105 transfer_account2 = list(transfer_account[:-2])
106 check_total = 0
107 for i in range(len(transfer_account2)):
108 if i % 2 == 0:
109 x = int(transfer_account2[i]) * 2
110 transfer_account2[i] = str(x)
111
112 for i in range(len(transfer_account2)):
113 if int(transfer_account2[i]) > 9:
114 x = int(transfer_account2[i]) - 9
115 transfer_account2[i] = str(x)
116
117 for i in range(len(transfer_account2)):
118 check_total += int(transfer_account2[i])
119 total_up = int(ceil(check_total / 10)) * 10
120
121 check_sum = total_up - check_total
122
123 if int(transfer_account[-1]) != check_sum:
124 print("Probably you made a mistake in the card number. Please try again!")
125 else:
126 cur.execute("SELECT number FROM card")
127 all_accounts = cur.fetchall()
128 conn.commit()
129 if transfer_account not in all_accounts:
130 print("Such a card does not exist.")
131 else:
132 print("Enter how much money you want to transfer:")
133 transfer_amount = int(input())
134 cur.execute("SELECT balance FROM card WHERE number = ?", (current_account,))
135 actual_balance = cur.fetchone()[0]
136 cur.execute("SELECT balance FROM card WHERE number = ?", (current_account,))
137 destination_balance = cur.fetchone()[0]
138 conn.commit()
139 if actual_balance < transfer_amount:
140 print("Not enough money!")
141 else:
142 cur.execute("UPDATE card SET balance = ? - ? WHERE number = ?", actual_balance, transfer_amount, current_account)
143 cur.execute("UPDATE card SET balance = ? + ? WHERE number = ?", actual_balance, transfer_amount, transfer_account)
144 conn.commit()
145 print("Success!")
146 continue
147 elif choice == 4:
148 cur.execute(f"DELETE FROM card WHERE number = {current_account}")
149 conn.commit()
150 print("The account has been closed!")
151 current_account = None
152 continue
153 elif choice == 5:
154 current_account = None
155 print("You have successfully logged out!")
156 continue
157 elif choice == 0:
158 current_account = None
159 print("Bye!")
160 exit()