shit....
This commit is contained in:
parent
47c104afec
commit
9cf0f99109
@ -1,2 +1,97 @@
|
|||||||
import bank_models
|
import bank_models
|
||||||
import bank_views
|
import bank_views
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from datetime import datetime
|
||||||
|
import curses
|
||||||
|
|
||||||
|
class Bank:
|
||||||
|
def __init__ ( self ):
|
||||||
|
|
||||||
|
# initialize the View class
|
||||||
|
self.view = bank_views.View( screen, curses )
|
||||||
|
self.db = bank_models.db()
|
||||||
|
if 'dev' in sys.argv:
|
||||||
|
self.view.showDev = True
|
||||||
|
|
||||||
|
self.view_loader( "welcome" )
|
||||||
|
|
||||||
|
def view_loader( self, view_name, passing=None ):
|
||||||
|
re = getattr( self.view , view_name )( passing )
|
||||||
|
|
||||||
|
if type( re ) == dict:
|
||||||
|
if '_return_to' in re:
|
||||||
|
return getattr( self, re['_return_to'] )( re )
|
||||||
|
|
||||||
|
if '_next' in re:
|
||||||
|
self.view_loader( re['_next'] )
|
||||||
|
return re
|
||||||
|
|
||||||
|
def sign_up( self, obj ):
|
||||||
|
|
||||||
|
check = self.db.create_user( obj['name'], obj['password'], obj['permission'] )
|
||||||
|
|
||||||
|
# if user name is available
|
||||||
|
if check:
|
||||||
|
message = obj['name'] + " please login"
|
||||||
|
self.view_loader( "login", message )
|
||||||
|
else:
|
||||||
|
message = "User name taken"
|
||||||
|
self.view_loader( "sign_up", message )
|
||||||
|
|
||||||
|
def login( self, obj ):
|
||||||
|
|
||||||
|
self.user = bank_models.Users( obj['name'], obj['password'] )
|
||||||
|
|
||||||
|
if self.user.name:
|
||||||
|
self.view.update_user( [ obj['name'] ] )
|
||||||
|
getattr( self, self.permission + '_home' )()
|
||||||
|
else:
|
||||||
|
message = "Invalid login"
|
||||||
|
self.login( self.view.login( message ) )
|
||||||
|
|
||||||
|
def logOut( self, message=False ):
|
||||||
|
self.view.update_user( [ None ] )
|
||||||
|
self.view_loader( "welcome" )
|
||||||
|
|
||||||
|
def client_home( self, start=0 ):
|
||||||
|
self.user.list_accounts( start )
|
||||||
|
self.view_loader( 'client_home', array )
|
||||||
|
|
||||||
|
def view_account( self, number=None, array={} ):
|
||||||
|
self.account = model.Account( number )
|
||||||
|
self.amount.user_id = self.user.id
|
||||||
|
|
||||||
|
if array != {}:
|
||||||
|
array.update( self.account )
|
||||||
|
else:
|
||||||
|
array = self.account
|
||||||
|
|
||||||
|
self.view_loader( 'view_account', array )
|
||||||
|
|
||||||
|
def account_withdraw( self, amount ):
|
||||||
|
check = self.account.withdraw( amount )
|
||||||
|
|
||||||
|
if check:
|
||||||
|
self.view_loader( 'view_account', "Withdraw -" + amount )
|
||||||
|
else:
|
||||||
|
|
||||||
|
self.view_account( None, { 'message': "Insufficient funds."} )
|
||||||
|
|
||||||
|
def account_deposit( self, amount ):
|
||||||
|
self.account.deposit( amount )
|
||||||
|
self.view_loader( 'view_account', "Deposit +" + amount )
|
||||||
|
|
||||||
|
def account_transfer( self, amount, to_number ):
|
||||||
|
check = self.account.transfer( amount, to_number )
|
||||||
|
|
||||||
|
if check:
|
||||||
|
self.view_loader( 'view_account', "Transfered -" + amount + " to " + to_number )
|
||||||
|
else:
|
||||||
|
|
||||||
|
self.view_account( None, { 'message': "Insufficient funds."})
|
||||||
|
try:
|
||||||
|
curses.wrapper( Bank )
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
print( "Got KeyboardInterrupt exception. Exiting..." )
|
||||||
|
exit()
|
||||||
|
@ -1,25 +1,119 @@
|
|||||||
import sqlite3
|
import sqlite3
|
||||||
import hashlib
|
import hashlib
|
||||||
|
|
||||||
class db:
|
class DB:
|
||||||
def __init__():
|
def __init__( self, file= ):
|
||||||
|
self.file = file
|
||||||
|
|
||||||
|
def create_user( self, name, pin, permission ):
|
||||||
|
|
||||||
|
c = self.__connect()
|
||||||
|
|
||||||
|
# check if user name is taken
|
||||||
|
result = self.get_user( name )
|
||||||
|
|
||||||
|
if len(result) == 0:
|
||||||
|
c.execute( "INSERT INTO user ( name, pin, permission ) VALUES ( ?, ?, ? )", ( name, pin, permission ) )
|
||||||
|
self.conn.commit
|
||||||
|
c.close()
|
||||||
|
return True
|
||||||
|
|
||||||
|
else:
|
||||||
|
c.close()
|
||||||
|
return False
|
||||||
|
|
||||||
|
def login_user():
|
||||||
|
c = self.__connect
|
||||||
|
|
||||||
|
c.execute( "SELECT * FROM user WHERE pin=(?) and name=(?)", ( pin ,name ) )
|
||||||
|
result = c.fetchall()
|
||||||
|
c.close()
|
||||||
|
|
||||||
|
if len( result ) == 1
|
||||||
|
return result[0]
|
||||||
|
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def get_user( sefl, name ):
|
||||||
|
c = self.__connect()
|
||||||
|
|
||||||
|
c.execute( "SELECT * FROM user WHERE name LIKE (?)", ( name ) )
|
||||||
|
c.close()
|
||||||
|
|
||||||
|
return c.fetchall()
|
||||||
|
|
||||||
|
def __connect( self ):
|
||||||
|
self.conn = sqlite3.connect( '' )
|
||||||
|
return self.conn.cursor()
|
||||||
|
|
||||||
|
# start the data base
|
||||||
|
|
||||||
|
class Users:
|
||||||
|
def __int__( self, name, pin ):
|
||||||
|
|
||||||
|
def creat( self, name, pin, permission ):
|
||||||
|
pin = hashlib.md5( pin )
|
||||||
|
if db.create_user( name, pin.hexdigest(), permission ):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def login( self, name, pin ):
|
||||||
|
pin = hashlib.md5( pin )
|
||||||
|
get_user = db.login_user( name, pin.hexdigest() )
|
||||||
|
|
||||||
|
if get_user:
|
||||||
|
return __check_type( get_user )
|
||||||
|
return False
|
||||||
|
|
||||||
|
def __check_type( self, user ):
|
||||||
|
|
||||||
|
if user.permission == "client":
|
||||||
|
return Cleint( user )
|
||||||
|
elif user.permission == "banker"
|
||||||
|
return Banker( user )
|
||||||
|
|
||||||
|
def look_up( self, name ):
|
||||||
|
|
||||||
|
return db.get_user( name )
|
||||||
|
|
||||||
|
class account:
|
||||||
|
def __init__( self, account_number ):
|
||||||
|
self.account = db.account( amount )
|
||||||
|
|
||||||
|
def view( self ):
|
||||||
|
return self.account
|
||||||
|
|
||||||
|
def withdraw( self, amount ):
|
||||||
|
if amount < self.amount.balance:
|
||||||
|
db.account_update( self.account.number, amount, withdraw )
|
||||||
|
|
||||||
|
def deposit( self, amount ):
|
||||||
|
db.account_update( self.account.number, amount, deposit )
|
||||||
|
|
||||||
|
|
||||||
|
def transfer( self, amount, to_account_number ):
|
||||||
|
db.account_update( self.account.number, amount, transfer )
|
||||||
|
db.account_update( to_account_number, amount, transfer )
|
||||||
|
|
||||||
|
class client:
|
||||||
|
def __init__( self ):
|
||||||
|
self.accounts = account()
|
||||||
|
|
||||||
|
def view_all_accounts( self ):
|
||||||
|
return self.accounts
|
||||||
|
|
||||||
|
class banker( user ):
|
||||||
|
|
||||||
|
def __init__( self ):
|
||||||
pass
|
pass
|
||||||
def create_user( self, name, pin, permission ):
|
|
||||||
conn = sqlite3.connect(self.db_name)
|
|
||||||
c = conn.cursor()
|
|
||||||
|
|
||||||
c.execute( "SELECT * FROM user WHERE name LIKE (?)", (name) )
|
def view_all_users( self ):
|
||||||
result = c.fetchall()
|
pass
|
||||||
|
|
||||||
if len(result) == 0:
|
def view_user_acconts( self ):
|
||||||
pin = hashlib.md5( pin )
|
pass
|
||||||
c.execute( "INSERT INTO user ( name, pin, permission ) VALUES ( ?, ? )", ( name, pin.hexdigest(), permission ) )
|
|
||||||
|
|
||||||
conn.commit()
|
def current_account( self ):
|
||||||
c.close()
|
pass
|
||||||
return True
|
|
||||||
|
|
||||||
else:
|
|
||||||
conn.commit()
|
|
||||||
c.close()
|
|
||||||
return False
|
|
@ -4,6 +4,7 @@ import random
|
|||||||
class View:
|
class View:
|
||||||
def __init__( self, screen, curses ):
|
def __init__( self, screen, curses ):
|
||||||
|
|
||||||
|
# set instance variable
|
||||||
self.showDev = False
|
self.showDev = False
|
||||||
self.userName = None
|
self.userName = None
|
||||||
|
|
||||||
@ -94,7 +95,6 @@ class View:
|
|||||||
|
|
||||||
if event == ord( "l" ) or event == ord( "L" ):
|
if event == ord( "l" ) or event == ord( "L" ):
|
||||||
return { '_next': 'login' }
|
return { '_next': 'login' }
|
||||||
|
|
||||||
|
|
||||||
# all ways
|
# all ways
|
||||||
if event == ord( "c" ) or event == ord( "C" ):
|
if event == ord( "c" ) or event == ord( "C" ):
|
||||||
@ -128,10 +128,11 @@ class View:
|
|||||||
self.body.refresh()
|
self.body.refresh()
|
||||||
|
|
||||||
# write the body
|
# write the body
|
||||||
self.body.addstr( 1, 3, "c cedits" )
|
self.body.addstr( 1, 3, "bank!" )
|
||||||
self.body.addstr( 3, 3, "l login" )
|
|
||||||
self.body.addstr( 4, 3, "n new user" )
|
# show error message
|
||||||
self.body.addstr( 6, 3, "Q Quit" )
|
if message:
|
||||||
|
self.body.addstr( 34, 2, message )
|
||||||
|
|
||||||
# draw the body
|
# draw the body
|
||||||
self.body.refresh()
|
self.body.refresh()
|
||||||
@ -139,6 +140,26 @@ class View:
|
|||||||
#listen for keyboard input
|
#listen for keyboard input
|
||||||
return self.menu()
|
return self.menu()
|
||||||
|
|
||||||
|
def client_home( self, array=False ):
|
||||||
|
self.body.clear()
|
||||||
|
|
||||||
|
# allow user to see KB input
|
||||||
|
self.curses.echo()
|
||||||
|
|
||||||
|
# remove old content
|
||||||
|
self.side_bar.clear()
|
||||||
|
self.side_bar.refresh()
|
||||||
|
|
||||||
|
# write to body
|
||||||
|
left = 1
|
||||||
|
count = 1
|
||||||
|
for i in array:
|
||||||
|
self.side_bar.addstr( count, left, str(i) )
|
||||||
|
count += 1
|
||||||
|
|
||||||
|
# draw body
|
||||||
|
self.body.refresh()
|
||||||
|
|
||||||
def sign_up( self, message=False ):
|
def sign_up( self, message=False ):
|
||||||
|
|
||||||
# remove old body content
|
# remove old body content
|
||||||
@ -152,24 +173,27 @@ class View:
|
|||||||
self.side_bar.refresh()
|
self.side_bar.refresh()
|
||||||
|
|
||||||
# write to body
|
# write to body
|
||||||
self.body.addstr(2, 2, "Pick a new user name and pin:" )
|
self.body.addstr( 2, 2, "Pick a new user name and pin:" )
|
||||||
# draw body
|
# draw body
|
||||||
self.body.refresh()
|
self.body.refresh()
|
||||||
|
|
||||||
# show error message
|
# show error message
|
||||||
if message:
|
if message:
|
||||||
self.body.addstr( 7, 2, message )
|
self.body.addstr( 8, 2, message )
|
||||||
self.body.refresh()
|
self.body.refresh()
|
||||||
|
|
||||||
# ask for user name
|
# ask for user name
|
||||||
self.body.addstr(3, 2, "user Name:" )
|
self.body.addstr( 3, 2, "user Name:" )
|
||||||
name = self.body.getstr(4, 2, 60)
|
name = self.body.getstr(4, 2, 60)
|
||||||
|
|
||||||
self.body.addstr(5, 2, "Pin:" )
|
self.body.addstr( 5, 2, "permission:[ admin / banker / client ]" )
|
||||||
#self.body.refresh()
|
permission = self.body.getstr(4, 2, 60)
|
||||||
password = self.body.getstr(6, 2, 60)
|
|
||||||
|
|
||||||
return( { 'name':name, 'password':password, '_return_to': 'sign_up' } )
|
self.body.addstr( 7, 2, "Pin:" )
|
||||||
|
#self.body.refresh()
|
||||||
|
password = self.body.getstr( 8, 2, 60 )
|
||||||
|
|
||||||
|
return( { 'name':name, 'password':password, 'permission': permission '_return_to': 'sign_up' } )
|
||||||
|
|
||||||
def login( self, message=False ):
|
def login( self, message=False ):
|
||||||
|
|
||||||
@ -188,14 +212,14 @@ class View:
|
|||||||
self.body.addstr( 7, 2, message )
|
self.body.addstr( 7, 2, message )
|
||||||
self.body.refresh()
|
self.body.refresh()
|
||||||
|
|
||||||
self.body.addstr(2, 2, "Please log in with your user name and pin:" )
|
self.body.addstr( 2, 2, "Please log in with your user name and pin:" )
|
||||||
|
|
||||||
self.body.addstr(3, 2, "user Name:" )
|
self.body.addstr( 3, 2, "user Name:" )
|
||||||
name = self.body.getstr(4, 2, 60)
|
name = self.body.getstr( 4, 2, 60 )
|
||||||
self.body.addstr(5, 2, "Pin:" )
|
self.body.addstr( 5, 2, "Pin:" )
|
||||||
|
|
||||||
self.body.refresh()
|
self.body.refresh()
|
||||||
password = self.body.getstr(6, 2, 60)
|
password = self.body.getstr( 6, 2, 60 )
|
||||||
|
|
||||||
# if error message
|
# if error message
|
||||||
|
|
||||||
@ -243,18 +267,6 @@ class View:
|
|||||||
'name': "William Mantly",
|
'name': "William Mantly",
|
||||||
'email': "wmantly@gmail.com",
|
'email': "wmantly@gmail.com",
|
||||||
'desc': "Designed and implemented the UI."
|
'desc': "Designed and implemented the UI."
|
||||||
},{
|
|
||||||
'name': "Benjamin Himley",
|
|
||||||
'email': "benjaminhimley85@gmail.com",
|
|
||||||
'desc': "wrote rpn generator and controller,",
|
|
||||||
'desc2': "bugfix assit"
|
|
||||||
},{
|
|
||||||
'name': "Adolfo Reyes",
|
|
||||||
'email': "adolfo0620@gmail.com",
|
|
||||||
'desc': "bug hunter"
|
|
||||||
},{
|
|
||||||
'name': "Brendan Gilroy",
|
|
||||||
'email': "BDGilroy@gmail.com"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
22
exercises/2-bank-software/test.txt
Normal file
22
exercises/2-bank-software/test.txt
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
CREATE TABLE users (
|
||||||
|
id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT,
|
||||||
|
name TEXT DEFAULT NULL,
|
||||||
|
created TEXT DEFAULT NULL,
|
||||||
|
permission TEXT DEFAULT NULL
|
||||||
|
);
|
||||||
|
CREATE TABLE accounts (
|
||||||
|
id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT,
|
||||||
|
user_id INTEGER DEFAULT NULL REFERENCES users (id),
|
||||||
|
balance TEXT DEFAULT NULL,
|
||||||
|
name TEXT DEFAULT NULL,
|
||||||
|
opened TEXT DEFAULT NULL
|
||||||
|
);
|
||||||
|
CREATE TABLE transactions (
|
||||||
|
id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT,
|
||||||
|
outgoing_id INTEGER DEFAULT NULL REFERENCES accounts (id),
|
||||||
|
incoming_id INTEGER DEFAULT NULL REFERENCES accounts (id),
|
||||||
|
type TEXT DEFAULT NULL,
|
||||||
|
amount TEXT DEFAULT NULL,
|
||||||
|
date TEXT DEFAULT NULL,
|
||||||
|
new field TEXT DEFAULT NULL
|
||||||
|
);
|
Loading…
x
Reference in New Issue
Block a user