git.fiddlerwoaroof.com
Raw Blame History
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