git.fiddlerwoaroof.com
account.e
dd94a37d
 note
 	description: "This is the {ACCOUNT}."
 	author: "Edward Langley"
 	date: "$Date$"
 	revision: "$Revision$"
 
 class
 	ACCOUNT
 
 create
 	open,
 	make
 
 feature
 	balance: INTEGER
 	owner: PERSON
 	minimum_balance: INTEGER = 1000
 	transactions: LINKED_LIST [TRANSACTION]
 
 	open (who: STRING initial: INTEGER)
 		local
 			person: PERSON
 		do
 			create person.make (who)
 			make(person, initial)
 		end
 
 	print_transactions
 		do
 			from
 				transactions.start
 			until
 				transactions.off
 			loop
 				transactions.item.show
 				print ("%N")
 				transactions.forth
 			end
 		end
 
 	deposit (sum: INTEGER)
 		require
 			sum > 0
 		do
 			add (sum)
 			add_transaction ("deposit", sum)
 		ensure
 			balance = old balance + sum
 		end
 
 	withdraw (sum: INTEGER)
 		require
 			sum > 0
 			sum <= balance - minimum_balance
 		do
 			add (-sum)
 			add_transaction ("withdrawal", -sum)
 		ensure
 			balance = old balance - sum
 		end
 
 	may_withdraw (sum: INTEGER): BOOLEAN
 		do
 			Result := (balance >= sum + minimum_balance)
 		end
 
 feature {NONE}
 
 	add_transaction (type: STRING amount: INTEGER)
 		local
 			transaction: TRANSACTION
 		do
 			create transaction.make (type, amount)
 			transactions.put_front (transaction)
 		end
 
 	add (sum: INTEGER)
 		do
 			balance := balance + sum
 		end
 
 	make (person: PERSON initial: INTEGER)
 		require
 			initial >= minimum_balance
 		do
 			create transactions.make
 			balance := initial
 			owner := person
 		end
 
 invariant
 	balance >= minimum_balance
 
 end