Sei sulla pagina 1di 2

Question 2:

Answer:
types
Card :: card-number : N
code : N
Account :: account-number : N
balance : N
holders : Nset ---set of cards
Message = INSUFFICIENT-BALANCE | NO-MONEY-IN-RESERVE |VALID-CARD |
INVALID-CARD | UPDATED
state ATM of
dbase : Card Account
reserve : N
special-account : Account

--- Account number for employees card.

inv mk-ATM (db,, sa) =


( ac1, ac2 rng db ac1.account-number = ac2.account-number
ac1 = ac2) ( c dom db db(c).holders {} h db(c).holders
ca dom db ca.card-number = h db(ca) = db(c)) ( h sa.holders ca
dom db ca.card-number = h db(ca) = sa) sa.holders {}
init mk-ATM (, re, ) = re > 0
end
operations
withdraw : Card X N X NMessage
withdraw (c, code, amount) =
if dbase(c).balance amount then
if reserve amount then
(dbase(c).balance := dbase(c).balance amount
reserve := reserve amount
return UPDATED)
else return NO-MONEY-IN-RESERVE
else return INSUFFICIENT-BALANCE
pre validate-card (c, code) = VALID-CARD
update-reserve : Card X N X N Message
update-reserve (sc, code, amount) = reserve := reserve + amount
return UPDATED
pre
validate-card (sc, code) = VALID-CARD
dbase(sc) = special-account
deposit : Card X N X N Message
deposit (c, code, amount) =
dbase(c).balance := dbase(c).balance + amount
reserve := reserve + amount
return UPDATED

pre validate-card (c, code) = VALID-CARD

Potrebbero piacerti anche