You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

223 lines
6.5 KiB

#!/usr/bin/env python3
import sqlite3
import os
clear = lambda: os.system('clear')
def deposit(a):
clear()
print('Deposit: ')
connDb = sqlite3.connect(a)
cur = connDb.cursor()
withUser = input("User?: ")
userIn = int(input(f'{withUser}: Amount to deposit: '))
cur.execute("SELECT id FROM account where username=?", (withUser, ))
userId = cur.fetchone()[0]
cur.execute("SELECT balance from balance where id=?", (userId, ))
prevAmt = cur.fetchone()[0]
cur.execute("UPDATE balance SET balance=(?+?) WHERE id=?", (prevAmt, userIn, userId, ))
connDb.commit()
connDb.close()
def withdraw(a):
clear()
print('Withdraw: ')
connDb = sqlite3.connect(a)
cur = connDb.cursor()
withUser = input("User?: ")
userIn = int(input(f'{withUser}: Amount to withdraw: '))
cur.execute("SELECT id FROM account where username=?", (withUser, ))
userId = cur.fetchone()[0]
cur.execute("SELECT balance from balance where id=?", (userId, ))
prevAmt = cur.fetchone()[0]
if (prevAmt - userIn) < 0:
print("*** User cannot have a negative balance. ")
withdraw(a)
else:
cur.execute("UPDATE balance SET balance=(?-?) WHERE id=?", (prevAmt, userIn, userId, ))
connDb.commit()
connDb.close()
def manBankin(a):
clear()
bankNam = a.split(".")[0]
print(f'Transactional menu for the {bankNam} bank. ')
while True:
print("""
1. Withdraw
2. Deposit
3. Transfer
4. User Balance check
9. Go Back
""")
userIn = input(f"Bank/{bankNam}: ")
if userIn == "1":
withdraw(a)
elif userIn == "2":
deposit(a)
elif userIn == "3":
print("Transfer")
elif userIn == "4":
print("User balance")
elif userIn == "9":
manageBankmenu(a)
elif userIn == "8":
mainFunc()
else:
print('*** Option not understood. Please try again.')
def deluser(a):
clear()
bankNam = a.split(".")[0]
print(f'Delete a user from bank {bankNam}. ')
print()
userIn = input("Which user would you like to delete? ")
connDb = sqlite3.connect(a)
cur = connDb.cursor()
cur.execute("""UPDATE account SET active = 0 where username = ?""", (userIn,))
connDb.commit()
connDb.close()
print()
print(f'*** Deleted user {userIn} from bank {bankNam}. ')
print()
print(f'You are managing the {bankNam} bank. ')
print()
def listuser(a):
connDb = sqlite3.connect(a)
cur = connDb.cursor()
userQuery = cur.execute("SELECT username FROM account;")
userQuery = cur.fetchone()
connDb.close()
matchs = userQuery
print()
print("User list: ")
print("__________________________")
for i in matchs:
print(i.split(".")[0])
print("__________________________")
def addUser(a):
clear()
bankNam = a.split(".")[0]
print(f'Add a user to bank {bankNam}. ')
print()
connDb = sqlite3.connect(a)
cur = connDb.cursor()
userIn = input('What user would you like to add? ')
cur.execute("INSERT INTO account (username,active) VALUES(?,1)", (userIn,))
cur.execute("INSERT INTO balance (balance) VALUES(0.00)")
cur.execute("INSERT INTO banktrans (username,amount) VALUES(?,0.00)", (userIn,))
connDb.commit()
connDb.close()
clear()
print(f'*** Added user {userIn} to bank {bankNam}. ')
print()
print(f"You are managing the {bankNam} bank. ")
print()
def manageBankmenu(a):
clear()
bankNam = a.split(".")[0]
print(f'You are managing the {bankNam} bank. ')
print()
while True:
print("""
1. Add a user.
2. Delete a user.
3. List users.
4. Banking Menu.
9. Go Back.
""")
menuOption = input("Bank: Choose from the menu: ")
if menuOption == '1':
addUser(a)
elif menuOption == '2':
deluser(a)
elif menuOption == '3':
listuser(a)
elif menuOption == '4':
manBankin(a)
elif menuOption == '9':
mainFunc()
else:
print('*** Option not understood. Please try again.')
def selectBank():
clear()
print('Select a bank: ')
print()
dirOutput = os.listdir()
matchs = [match for match in dirOutput if 'db.sqlite' in match]
#banks = dict(zip(matchs, range(len(matchs))))
for i in matchs:
print(i.split(".")[0])
print()
manBank = input('Choose which bank you would like to manage: ')
manBank = manBank+".db.sqlite"
manageBankmenu(manBank)
def addBank():
clear()
print('Add a bank: ')
print()
bankName = input("What would you like to call this bank? ")
bankName = bankName+".db.sqlite"
connDb = sqlite3.connect(bankName)
connDb.execute('''CREATE TABLE account
(ID INTEGER PRIMARY KEY AUTOINCREMENT,
USERNAME TEXT NOT NULL,
TIMESTAMP DATETIME DEFAULT CURRENT_TIMESTAMP, ACTIVE BOOLEAN NOT NULL);''')
connDb.execute('''CREATE TABLE balance
(ID INTEGER PRIMARY KEY AUTOINCREMENT,
BALANCE INTEGER CHECK(BALANCE >= 0),
TIMESTAMP DATETIME DEFAULT CURRENT_TIMESTAMP);''')
connDb.execute('''CREATE TABLE banktrans
(ID INTEGER PRIMARY KEY,
USERNAME TEXT NOT NULL,
AMOUNT INTEGER NOT NULL,
TIMESTAMP DATETIME DEFAULT CURRENT_TIMESTAMP);''')
connDb.close()
clear()
print()
print(f'*** Added bank {bankName}')
print()
def listBank():
clear()
print()
dirOutput = os.listdir()
matchs = [match for match in dirOutput if 'db.sqlite' in match]
print()
print('Banks found: ')
print("__________________________")
for i in matchs:
print(i.split(".")[0])
print("__________________________")
def mainFunc():
clear()
print('Welcome to the Kniod D&D Banking Software! ')
while True:
print("""
1. Select a Bank.
2. Add new bank.
3. List banks.
4. Delete a bank.
Q to quit.
""")
mainOption = input("Choose an option: ")
if mainOption == '1':
selectBank()
elif mainOption == '2':
addBank()
elif mainOption == '3':
listBank()
elif mainOption == '4':
print('Place function here.')
elif mainOption == 'Q' or mainOption == 'q':
break
else:
print()
print('*** Option not understood. Please try again.')
mainFunc()