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
|