File: banks.py

package info (click to toggle)
pyro 1%3A3.14-5
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 2,048 kB
  • ctags: 1,988
  • sloc: python: 11,194; xml: 128; sh: 52; makefile: 28
file content (76 lines) | stat: -rw-r--r-- 1,837 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# the bank uses this exception to say there's something wrong:
class BankError(Exception): pass

# Unrestricted account.
class Account(object):
	def __init__(s):
		s._balance=0.0
	def withdraw(s, amount):
		s._balance=s._balance-amount
	def deposit(s,amount):
		s._balance=s._balance+amount
	def balance(s):
		return s._balance

# Restricted withdrawal account.
class RestrictedAccount(Account):
	def withdraw(s, amount):
		if amount<=s._balance:
			s._balance=s._balance-amount
		else:
			raise BankError('insufficent balance')

# Abstract bank.
class Bank(object):
	def __init__(s):
		s.accounts={}
	def name(s):
		pass # must override this!
	def createAccount(s, name):
		pass # must override this!
	def deleteAccount(s, name):
		try:
			del s.accounts[name]
		except KeyError:
			raise BankError('unknown account')
	def deposit(s, name, amount):
		try:
			return s.accounts[name].deposit(amount)
		except KeyError:
			raise BankError('unknown account')
	def withdraw(s, name, amount):
		try:
			return s.accounts[name].withdraw(amount)
		except KeyError:
			raise BankError('unknown account')
	def balance(s, name):
		try:
			return s.accounts[name].balance()
		except KeyError:
			raise BankError('unknown account')
	def allAccounts(s):
		accs = {}
		for name in s.accounts.keys():
			accs[name] = s.accounts[name].balance()
		return accs


# Special bank: Rabobank. It has unrestricted accounts.
class Rabobank(Bank):
	def name(s):
		return 'Rabobank'
	def createAccount(s,name):
		if s.accounts.has_key(name):
			raise BankError('Account already exists')
		s.accounts[name]=Account()


# Special bank: VSB. It has restricted accounts.
class VSB(Bank):
	def name(s):
		return 'VSB bank'
	def createAccount(s,name):
		if s.accounts.has_key(name):
			raise BankError('Account already exists')
		s.accounts[name]=RestrictedAccount()