Presentation is loading. Please wait.

Presentation is loading. Please wait.

Cash dispenser Function body, pre and post conditions Peter, Raghid og Brian.

Similar presentations


Presentation on theme: "Cash dispenser Function body, pre and post conditions Peter, Raghid og Brian."— Presentation transcript:

1 Cash dispenser Function body, pre and post conditions Peter, Raghid og Brian

2 Cash dispenser - Peter, Raghid og Brian2 Agenda Ændringer siden sidst –Money Nye ting –Pre –Post –Functions body

3 Cash dispenser - Peter, Raghid og Brian3 Ændring af Money Klassen er udgået public Money :: valid : bool amount : nat inv mk_Money(v, a) == a in set {50, 100, 200, 500, 1000} and v in set {true, false};

4 Cash dispenser - Peter, Raghid og Brian4 Printer public isOperational : () ==> bool isOperational() == return paperAmount > 0 and inkAmount > maxLinesOnPaper; public print : seq of Account`Transaction ==> bool print (trans) == if isOperational() then ( inkAmount := inkAmount – len trans; paperAmount := paperAmount – 1; return true; ) else return false pre len trans <= maxLinesOnPaper;

5 Cash dispenser - Peter, Raghid og Brian5 Till public makeDeposit : () ==> () makeDeposit() == ( dcl sum : nat := 0; for m in insertedMoney do sum := sum + m.amount; if transferMoneyToAccount(sum, curCard.GetAccountId()) then tillCashAmount := tillCashAmount + sum; insertedMoney := []; ) pre len insertedMoney > 0 and CardValidated();

6 Cash dispenser - Peter, Raghid og Brian6 Till public printLastStatements : () ==> bool printLastStatements () == printer.print( resource.getTransactions( curCard.GetAccountId(), printer.getMaxLinesOnPaper())) pre CardValidated() and printer.isOperational();

7 Cash dispenser - Peter, Raghid og Brian7 CentralResource public getTransactions : Account`AccountId * nat ==> seq of Account`Transaction getTransactions(accId, numbTrans) == accounts(accId).getTransactions(numbTrans) pre accId in set dom accounts;

8 Cash dispenser - Peter, Raghid og Brian8 Account public getTransactions : nat ==> seq of Transaction getTransactions(numOfTransactions) == ( dcl numOfTrans: nat := numOfTransactions, i: nat := 0, tmpTrans: seq of Transaction; if len transactions < numOfTransactions then numOfTrans:= len transactions; i := len transactions – numOfTrans + 1; while i <= numOfTrans do ( tmpTrans := tmpTrans ^ [transactions(i)]; i := i + 1; ); return tmpTrans; )

9 Cash dispenser - Peter, Raghid og Brian9 Account public depositMoney : Card`CardId * nat * Clock`Date ==> () depositMoney(cardId, amount, date) == let transaction = mk_Transaction(date,cardId,amount, ) in( balance := balance + amount; transactions := transactions ^ [transaction];) pre amount > 0 post balance = balance~ + amount;

10 Cash dispenser - Peter, Raghid og Brian10 Afrunding Klasse  Record Type Function body Pre and post conditions


Download ppt "Cash dispenser Function body, pre and post conditions Peter, Raghid og Brian."

Similar presentations


Ads by Google