b1abed863bf15806077ccc3006736ee9.ppt
- Количество слайдов: 22
Automated Teller Machine - (ATM ) Lars Schelde Jens S. Olsen
Agenda o o o Funktioner Krav Klassediagram Implementering Test
Funktioner o o o o Konto administration Indsæt penge Hæve penge Kontrol af korrekt opgørelse I relation til seddel nomination. Saldo kontrol Registrering af bevægelser Overflytte penge til en anden konto
Kravene til programmet (1): o o R 1: En konto består af et navn, et konto nr. , en saldo, et overtræks-beløb, en PIN-kode, antal forsøg siden sidste rigtige PIN-kode og om kontoen er spærret. R 2: En konto bliver spærret efter 3 på hinanden følgende fejlindtastninger af PIN-koden. R 3: Administratoren (bankrådgiveren) kan oprette en konto, bevilge et overtræk, ændre størrelsen af et overtræk og ophæve bevillingen af et overtræk. Endvidere kan administratoren spærre og genåbne en konto. R 4: Der kan indsættes penge på en konto, beløb svarende til en sum af de danske pengesedler. n o Hvis ikke beløbet svarer til en sum af de danske pengesedler, er der kommet falske penge i automaten, og kontoen spærres. R 5: Der kan udbetales et beløb i sedler fra en konto, såfremt der er kontoens saldo + evt. bevilget overtræk er større end det beløb der ønskes hævet og kontoens saldo vil blive nedskrevet med det udbetalte beløb. n n Hvis det ønskede beløb ikke kan udbetales, grundet beløbet ikke er delelig med de danske pengesedler, afrundes der nedad til nærmeste mulige beløb der kan udbetales med de danske pengesedler. Hvis der ikke kan udbetales penge grundet manglende, udskrives der en besked til brugeren om at kontakte bankrådgiveren med henblik på at få ændret eller oprettet muligheden for overtræk.
Kravene til programmet (2): o R 6: Der kan overføres et beløb fra en konto til en anden, såfremt kontoens saldo + evt. bevilget overtræk er større end det beløb der ønskes overflyttet og kontoens saldo vil herefter blive nedskrevet med det udbetalte beløb. o R 7: For hver transaktion der laves, registreres datoen, typen af transaktionen n o Ved udbetaling registreres endvidere beløbet samt saldoen Ved kontooverførsel registreres endvidere beløbet samt saldoen Ved oprettelse/ændring/ophævelse af overtræksbevillingen endvidere størrelsen på den nye overtræksbevilling R 8: Der kan laves et kontoudtog, hvor alle transaktionerne vises.
2 1 3
Date Transaction Cash Account. DB Environment ATM System World Bank Account
Implementering (1) o R 1: (konto-data) implementeres i klasserne: o Bank. Account n name : Bank. Account. Name. Type number : Bank. Account. Type isopen : bool Cash. Account o n n balance: Bank. Account`Bank. Account. Money. Type creditlimit: Bank. Account`Bank. Account. Money. Type pincode: Bank. Account`Bank. Account. Pincode. Type pincodeerrorcount: nat
Implementering (2) o R 2: (Spærring af konto, 3 pinkode fejl)implementeres i klassen: o Account. DB n n public Request. Check. Pin : Bank. Account`Bank. Account. Type * Bank. Account`Bank. Account. Pincode. Type ==> bool. Request. Check. Pin(accnum, pincode) == ( o if accounts(accnum). Is. Pin(pincode) then ( transactioncode : =
Implementering (3) o R 3: (Administrator rettigheder)implementeres i klasserne: o ATM o instance variables isadministrator: bool pre isadministrator = true o o Metoder: Admin. Create. Account, Admin. Set. Limit, Admin. Open. Account, Admin. Close. Account o Account. DB o public Create. Account: Bank. Account`Bank. Account. Name. Type * Bank. Account`Bank. Account. Pincode. Type ==> () Create. Account(name, pin) == ( transactioncode : =
Implementering (4) o R 4: (Indsæt penge) implementeres i klassen: o Account. DB o instance variables bills: seq of Bank. Account`Bank. Account. Money. Type : = [1000, 500, 200, 100, 50]; o Amount. Legal: Bank. Account`Bank. Account. Money. Type ==> Bank. Account`Bank. Account. Money. Type Amount. Legal(amt) == return amt - amt mod bills(len bills) pre amt >= 0; o Amount. Is. Legal. Check: Bank. Account`Bank. Account. Money. Type ==> bool Amount. Is. Legal. Check(amt) == return (amt = amt - amt mod bills(len bills)) pre amt >= 0;
Implementering (5) o R 5: (Hæve/Sætte ind) + R 6: (Flytte til konto)implementeres i klasserne: o Account. DB o public Request. Transfer. Accounts : Bank. Account`Bank. Account. Type * Bank. Account`Bank. Account. Money. Type ==> bool Request. Transfer. Accounts (sourceaccnum, targetaccnum, amt) ==( if(not accounts(sourceaccnum). get. Is. Open()) then ( transactioncode : =
Implementering (6) o R 5: (Hæve/Sætte ind) + R 6: (Flytte til konto)implementeres i klasserne: o Account. DB o Withdraw(sourceaccnum, amt); transactioncode : =
Implementering (7) o R 5: (Hæve/Sætte ind) + R 6: (Flytte til konto)implementeres i klasserne: o Cash. Account o public Request. Withdrawal : Bank. Account`Bank. Account. Money. Type ==> bool Request. Withdrawal (amt) == return (balance + creditlimit > amt) pre get. Is. Open();
Implementering (8) o R 7: (transaktionslog) implementeres i klasserne: o Transaction o types public Code =
Test o Vi har endnu ikke fået VDM++ testene til at køre automatisk, men i ”Intepreteren” o Initializing specification. . . done >> create t: = new Test 1() >> print t. Run() 0 >> print t. atm. database o o o
Test 1 o o o o o class Test 1 instance variables public atm: ATM : = new ATM(); i: nat 1 : = 1; operations public Run: () ==> nat Run() == ( -- 1 administrator login if not atm. Login(1, 0) then return i; o i : = 2; -- 2 adduser Lars, pincode 1234 then return i; if not atm. Admin. Create. Account("Lars", 1234) then return i; o o . . . i : = 23; --23 logout if not atm. Logout() then return i; o o return 0
Test 2, Print af transaktioner o o o o Initializing specification. . . done >> create t: = new Test 1() >> print t. Run() 0 Construct is fully evaluated >> print t. atm. database objref 24(Account. DB): < Account. DB`accounts = { 1 |-> objref 25(Cash. Account): < Bank. Account`isopen = true, Bank. Account`name = "Administrator", Bank. Account`number = 1, Cash. Account`balance = 0, … 2 |-> objref 58(Transaction): < Transaction`accnumber = <
Test 3, Print af transaktioner o 4 |-> o objref 74(Transaction): < Transaction`accnumber = 3, Transaction`accnumother = 2, Transaction`amount = 33, Transaction`balance = 467, Transaction`creditlimit = 0, Transaction`isopen = true, Transaction`name = "Jens", Transaction`now = objref 75, Transaction`transactiontype =
Test 4, Print af transaktioner o o o 6 |-> objref 92(Transaction): < Transaction`accnumber = 3, Transaction`accnumother = <
Test 5, Print af transaktioner 10 |-> o objref 122(Transaction): < Transaction`accnumber = 3, Transaction`accnumother = <