Automated Teller Machine - (ATM ) Lars Schelde Jens S. Olsen.

Slides:



Advertisements
Lignende præsentationer
SPBG.  Test driven development  Unit test frameworks  MOSS TDD  Mocking  Design patterns.
Advertisements

Throw a die Read the current value of index Add 1 Return the new value to index IndexIndex Create an empty array to count the number of dice throws Initialize.
Gør kasserens arbejde lettere
Velkommen til Softwarekonstruktion
Drupal[.org] Open Source CMS 6/
Cash dispenser VDM++ modellering Test af udvidet cash dispenser Peter Clausen Raghid Kawash Brian Gram Møller.
Introduktion til sikkerhed i.NET Mark S. Rasmussen iPaper ApS Part 2.
Når en applikation går i fejl… … er det interessant, at vide noget om: Hvornår gik applikationen i fejl Hvilken applikation gik i fejl Hvad er fejlen.
Februar 2005Sprog-nyheder i C# og VB1 Captator Tlf: Henrik Lykke Nielsen Softwarearkitekt, Microsoft Regional Director for Denmark.
C#: Data Typer. Indhold: “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different languages, to.
07 – Kort om OO Introduktion.
Select one of the 3 title pages and delete the others. Please do not create new title pages by using the layouts Title 1 – 3 as these layouts do not contain.
RT Speciale Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende ”Java Optimized Processor” (JOP) Speciale – efterår.
B.V. Electronic Østerbro Skive GuideOnLine.
1 JavaServer Faces Copyright © Lund & Bendsen Dynamikken i JSF.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
C#: Udtryk og metoder. Indhold “With regards to programming statements and methods, C# offers what you would come to expect from a modern OOPL…” Udtryk.
Datastrukturer og Collections Oversigt og forskel imellem Jave og.net Collections library Collection interfaces ArrayList IList interface Hashtable Hashtable.
Modul 1 (B) Rød løber Tid: 30 minutter. Spilleregler for dagen.
06 – Java Packages Packages og ClassPath. 2 NOEA2009Java-kursus – Packages og class path Hvad er Packages? En package er en gruppering af relaterede typer.
Item gennemgang  Item: 01 – Static factory methods  Item: 09 – Override hashCode  Item: 17 – Design & document inheritence  Item: 25 – Lists over arrays.
Collectionklasser Klassifikation og anvendelse. Collections Motivation –hvorfor bruge collections? Realisering af en-til-mange relationer –Importer, erklær,
View Procedures Trigger og Function Jesper Tørresø DAB1 E07 1. november 2007.
Objekter og klasser Applikationsdesign Code Namespace Value og reference typer Reference type Rasmus D. Lehrmann1.
FEN Databaser/DBAdgang21 DB-adgang - Connectionless Connectionless DataAdapter DataSet.
12 – GUI med Swing. 2 NOEA2009Java-kursus – GUI med Swing Designer view Komponenter Frame Properties Inspector.
Datastruktur & Algoritmik1 Sidste gang For j:=2 to len(A) do key:=A[j] (* indsæt key *) i:=j-1 while i>0 and A[i]>key do A[i+1]:=A[i] i-- A[i+1]:=key For.
Automated Teller Machine - (ATM ). Funktioner  Konto administration  Indsæt penge  Hæve penge  Kontrol af korrekt opgørelse I relation til seddel.
Distribution af funktionalitet Webservice med WCF x.
ASP.NET Custom Web Controls Deployment. Agenda – ASP.NET Web User Controls Composite Control Rendered Custom Control Deploy en Web Applikation.
1 SH Holtec Beverage Service A/S December 2007 Tæller for 6 uafhængige Øl-linier For-programmeret for Liter & Deciliter tælling Brug af alle typer 12V.
Abstrakte klasser og interfaces i Java
6.1 Likvide midler: Kasse 3.Vil du springe til et bestemt afsnit eller dias? Klik på menuerne Outlines eller Thumbnails. 2.Klik med musen i dit eget tempo.
Hex Oplæg til eksamen 28/ Dagsorden Introduktion Præsentation af spillet Vores graf MinimaxDFS/BFS Disjoint sets.
Overskrift 40/42 pkt, Maks 2 linjer Underoverskrift, 14/16 pkt For at vise hjælpelinjer: 1.Højreklik på slidet og vælg “Gitter og hjælpelinjer” 2.Kryds.
Programering af mobile enheder Windows Phone Storage.
Begreber og Redskaber 9. Plan for idag I dag: Datastrukturer Tabeller Lister, mængder, maps, grafer Hægtede lister.
Session Når man hoster en WCF Service på ASP.NET website, kan man bruge ASP.NET’s Session.
Gruppe sort Morten, Peter, Jesper, Spencer & Støving.
Begreber og Redskaber 5. Collections i Java 1.2 Framework: samling af datastrukturer og algoritmer som generelt værktøj. En ramme til at arbejde med søgning.
VITAL SIGNS ALARM SYSTEM AfSøren Gørtz Olesen Jonas Hove Jakobsen.
4.4 Bogføringsregler Klik nederst til højre på ikonet for visning i ”Fuld skærm”. Klik med musen i dit eget tempo for at se præsentationen. Vil du springe.
Begreber og Redskaber 5. Plan for idag Overblik over klasser,objekter,nedarvning –Repetition fra Dat A/Indledende programmering –Centrale begreber om.
Egenkapital og privatforbrug
1 Tråde 2 Plan Trådbegrebet Synkronisering Koordinering Eksempel: et flertrådet spil.
Delphi og C++ Builder C++ Builder. C++ Historie Sproget blev designet for AT&T af danskeren Bjarne Stoustrup En objektorienteret videreudvikling.
Lektion 7 Læsestof: Kopier fra Caranno
Fundamentale datastrukturer
Eksempel på realisering af domænemodel
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
Ingeniørhøjskolen i Århus Slide 1 Newton approximation ”Oversæt” til algoritme - Step 5: Skriv kode - Step 4: Skriv pseudokode - Step 3: Specificér pre-
DATATYPER. For at tilpasse hvert felt i databasen til dets formål og dermed øge funktionalitet 1 bit er tilstrækkelig til at angive køn (0/1) men for.
10. Datastrukturer. 2 Nordjyllands Erhvervakademi Collections library Datastrukturer i.NET kaldes normalt Collections Findes i namespace System.Collections.
8.6 Transaktioner1 Transaktioner 8.6 Transactions in SQL.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Repetition: Introduktion til OOP med C# og .NET
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
C#: Udtryk og metoder Kilde: Joe Hummel. 2 Nordjyllands Erhvervakademi – 2008 Indhold “With regards to programming statements and methods, C# offers what.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Identitet vs lighed. Spørgsmål Hvad udskriver run metoden? 1.”Ens!” 2.”Forskellige!” 3.Ved ikke public class Driver{ public static void run(){ String.
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
I o p o DAIMI, AU, Marts 1999Introducerende objektorienteret programmering5B.1 Et lille banksystem Modellering ved hjælp af UML.
 Jens Bennedsen 2001Multimedie programmering13.1 Lingo Objectorienteret Lingo.
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation.
Klassevariable- og metoder Funktionalitet på klasseniveau.
DAIMIIntroducerende objektorienteret programmering1 Et lille banksystem Modellering beskrevet ved et UML klassediagram.
Kapitel 30 Debitor-, kreditor- og lagermodul. Kap. 30: Debitor-, kreditor- og lagermodul Økonomistyringssystemer FordeleUlemper Indtastning af bilag er.
Kapitel 30 Debitor-, kreditor- og lagermodul.
Quiz – Uge 3 – torsdag – første time
Quiz – Uge 3 – torsdag – første time
Præsentationens transcript:

Automated Teller Machine - (ATM ) Lars Schelde Jens S. Olsen

Agenda  Funktioner  Krav  Klassediagram  Implementering  Test

Funktioner  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):  R1 : 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.  R2 : En konto bliver spærret efter 3 på hinanden følgende fejlindtastninger af PIN-koden.  R3 : 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.  R4 : Der kan indsættes penge på en konto, beløb svarende til en sum af de danske pengesedler. Hvis ikke beløbet svarer til en sum af de danske pengesedler, er der kommet falske penge i automaten, og kontoen spærres.  R5 : 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. 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):  R6: 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.  R7: For hver transaktion der laves, registreres datoen, typen af transaktionen 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  R8: Der kan laves et kontoudtog, hvor alle transaktionerne vises.

1 2 3

Date Transaction Bank Account Cash Account AccountDB Environment ATM System World

Implementering (1)  R1: (konto-data) implementeres i klasserne:  BankAccount name : BankAccountNameType number : BankAccountType isopen : bool  CashAccount balance: BankAccount`BankAccountMoneyType creditlimit: BankAccount`BankAccountMoneyType pincode: BankAccount`BankAccountPincodeType pincodeerrorcount: nat

Implementering (2)  R2: (Spærring af konto, 3 pinkode fejl)implementeres i klassen:  AccountDB public RequestCheckPin : BankAccount`BankAccountType * BankAccount`BankAccountPincodeType ==> boolRequestCheckPin(accnum, pincode) == (  if accounts(accnum).IsPin(pincode) then ( transactioncode := ; accounts(accnum).AddTransaction(transactioncode); return true;); ) transactioncode := ; accounts(accnum).AddTransaction(transactioncode); if accounts(accnum).getPinErrorCount() = 3 then ( accounts(accnum).setIsOpen(false); transactioncode := ; accounts(accnum).AddTransaction(transactioncode); );return false; ) pre accnum in set dom accounts;

Implementering (3)  R3: (Administrator rettigheder)implementeres i klasserne:  ATM  instance variables isadministrator: bool  pre isadministrator = true  Metoder : AdminCreateAccount, AdminSetLimit, AdminOpenAccount, AdminCloseAccount  AccountDB  public CreateAccount: BankAccount`BankAccountNameType * BankAccount`BankAccountPincodeType ==> () CreateAccount(name, pin) == ( transactioncode := ; accounts := accounts ++ { nextaccountid |-> new CashAccount(name,nextaccountid,pin,transactioncode) }; nextaccountid := nextaccountid + 1; );

Implementering (4)  R4: (Indsæt penge) implementeres i klassen:  AccountDB  instance variables bills: seq of BankAccount`BankAccountMoneyType := [1000,500,200,100,50];  AmountLegal: BankAccount`BankAccountMoneyType ==> BankAccount`BankAccountMoneyTypeAmountLegal(amt) == return amt - amt mod bills(len bills) pre amt >= 0;  AmountIsLegalCheck: BankAccount`BankAccountMoneyType ==> bool AmountIsLegalCheck(amt) == return (amt = amt - amt mod bills(len bills)) pre amt >= 0;

Implementering (5)  R5:(Hæve/Sætte ind) + R6: (Flytte til konto)implementeres i klasserne:  AccountDB  public RequestTransferAccounts : BankAccount`BankAccountType * BankAccount`BankAccountType * BankAccount`BankAccountMoneyType ==> bool RequestTransferAccounts (sourceaccnum, targetaccnum, amt) ==( if(not accounts(sourceaccnum).getIsOpen()) then ( transactioncode := ; accounts(sourceaccnum).AddTransaction(amt, transactioncode); return false ); if(not accounts(sourceaccnum).RequestWithdrawal(amt)) then ( transactioncode := ; accounts(sourceaccnum).AddTransaction(targetaccnum, amt, transactioncode); return false );

Implementering (6)  R5:(Hæve/Sætte ind) + R6: (Flytte til konto)implementeres i klasserne:  AccountDB  Withdraw(sourceaccnum,amt); transactioncode := ; accounts(sourceaccnum).AddTransaction(targetaccnum, amt, transactioncode); Deposit(targetaccnum,amt); transactioncode := ; accounts(targetaccnum).AddTransaction(sourceaccnum, amt, transactioncode); return true ) pre sourceaccnum in set dom accounts and targetaccnum in set dom accounts and amt >= 0;

Implementering (7)  R5:(Hæve/Sætte ind) + R6: (Flytte til konto)implementeres i klasserne:  CashAccount  public RequestWithdrawal : BankAccount`BankAccountMoneyType ==> bool RequestWithdrawal (amt) == return (balance + creditlimit > amt) pre getIsOpen();

Implementering (8)  R7: (transaktionslog) implementeres i klasserne:  Transaction  types public Code = | | | | | | | | | | | | | | | ; public TransactionType = nat; instance variables balance: BankAccount`BankAccountMoneyType := 0; creditlimit: BankAccount`BankAccountMoneyType := 0; amount: BankAccount`BankAccountMoneyType := 0; accnumother : [BankAccount`BankAccountType] ; name : BankAccount`BankAccountNameType; accnumber : BankAccount`BankAccountType; isopen : bool; transactiontype: Code; -- system call to date...?? now: Date := new Date(26,2,2009);

Test  Vi har endnu ikke fået VDM++ testene til at køre automatisk, men i ”Intepreteren”  Initializing specification...  done  >> create t:= new Test1()  >> print t.Run()  0  >> print t.atm.database

Test 1  class Test1  instance variables  public atm: ATM := new ATM();  i: nat1 := 1;  operations  public Run:() ==> nat  Run() == (  -- 1 administrator login  if not atm.Login(1,0) then return i;   i := 2;  -- 2 adduser Lars, pincode 1234 then return i;  if not atm.AdminCreateAccount("Lars",1234) then return i; ...  i := 23;  --23 logout  if not atm.Logout() then return i;  return 0

Test 2, Print af transaktioner  Initializing specification...  done  >> create t:= new Test1()  >> print t.Run()  0  Construct is fully evaluated  >> print t.atm.database  objref24(AccountDB):   objref25(CashAccount):  < BankAccount`isopen = true,  BankAccount`name = "Administrator",  BankAccount`number = 1,  CashAccount`balance = 0,  … 2 |-> objref58(Transaction): >, Transaction`accnumother = 2, Transaction`amount = 550, Transaction`balance = 550, Transaction`creditlimit = 0, Transaction`isopen = true, Transaction`name = "Lars", Transaction`now = objref59, Transaction`transactiontype = >

Test 3, Print af transaktioner  4 |->  objref74(Transaction):  < Transaction`accnumber = 3,  Transaction`accnumother = 2,  Transaction`amount = 33,  Transaction`balance = 467,  Transaction`creditlimit = 0,  Transaction`isopen = true,  Transaction`name = "Jens",  Transaction`now = objref75,  Transaction`transactiontype = > 4 |-> objref80(Transaction): < Transaction`accnumber = 2, Transaction`accnumother = 3, Transaction`amount = 33, Transaction`balance = 583, Transaction`creditlimit = 0, Transaction`isopen = false, Transaction`name = "Lars", Transaction`now = objref81, Transaction`transactiontype = >

Test 4, Print af transaktioner  6 |->  objref92(Transaction):  < Transaction`accnumber = 3,  Transaction`accnumother = >,  Transaction`amount = 0,  Transaction`balance = 467,  Transaction`creditlimit = 0,  Transaction`isopen = true,  Transaction`name = "Jens",  Transaction`now = objref93,  Transaction`transactiontype = > 9 |-> objref110(Transaction): < Transaction`accnumber = 3, Transaction`accnumother = >, Transaction`amount = 0, Transaction`balance = 467, Transaction`creditlimit = 0, Transaction`isopen = false, Transaction`name = "Jens", Transaction`now = objref111, Transaction`transactiontype = >

Test 5, Print af transaktioner  3 |->  objref50(Transaction):  < Transaction`accnumber = 2,  Transaction`accnumother = >,  Transaction`amount = 55,  Transaction`balance = 550,  Transaction`creditlimit = 0,  Transaction`isopen = false,  Transaction`name = "Lars",  Transaction`now = objref51,  Transaction`transactiontype = > 10 |-> objref122(Transaction): < Transaction`accnumber = 3, Transaction`accnumother = >, Transaction`amount = 0, Transaction`balance = 467, Transaction`creditlimit = 0, Transaction`isopen = true, Transaction`name = "Jens", Transaction`now = objref123, Transaction`transactiontype = >,