Programozás II. ATM példa Dr. Iványi Péter



Hasonló dokumentumok
OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

117. AA Megoldó Alfréd AA 117.

A lista eleme. mutató rész. adat rész. Listaelem létrehozása. Node Deklarálás. Létrehozás. Az elemet nekünk kell bef zni a listába

A feladat lényege egy felhasználói típusnak a zsák típusnak a megvalósítása.

Programozás II gyakorlat. 6. Polimorfizmus

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése

A C# programozási nyelv alapjai

Objektumorientált programozás C# nyelven III.

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Programozás II. 4. Dr. Iványi Péter

Elemi Alkalmazások Fejlesztése II.

Informatika terméktervezőknek

#include <iostream> using namespace std; // struct macska is lehetne class macska { public: int kor; int suly; }; void main() { macska cirmi;

500. CC Megoldó Alfréd CC 500.

4. Öröklődés. Programozás II

INFORMATIKAI ALAPISMERETEK

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Algoritmusok és adatszerkezetek II.

Java Programozás 1. Gy: Java alapok. Ismétlés ++

osztályok kapcsolata Származtatatás C++ Izsó Tamás március 19. Izsó Tamás Származtatatás/ 1

Objektumorientált programozás C# nyelven

3. Osztályok II. Programozás II

infix kifejezés a+b ab+ +ab postfix kifejezés prefix kifejezés a+b ab+ +ab a+b ab+ +ab Készítette: Szabóné Nacsa Rozália

1. Alapok. Programozás II

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

Szövegek C++ -ban, a string osztály

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

Pénzügyi algoritmusok

Java Programozás 11. Ea: MVC modell

Kalapácsvetés 2016 szöveges

ISA szimulátor objektum-orientált modell (C++)

Felhasználó által definiált adattípus

Bevezetés a Programozásba II 8. előadás. Polimorfizmus Giachetta Roberto

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Programozás BMEKOKAA146. Dr. Bécsi Tamás 3. előadás

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

Tervminták a valósidejű gyakorlatban

Programozás(A szakirány) II. beadandó feladat Farkas András HP6S15 1. csoport Veszprémi Anna / Hudoba Péter

Bevezetés a programozásba 2

Maximum kiválasztás tömbben

Programozás C++ -ban

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

C# osztályok. Krizsán Zoltán

JAVA PROGRAMOZÁS 3.ELŐADÁS

500. AA Megoldó Alfréd AA 500.

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

C#, OOP. Osztályok tervezése C#-ban

Programozás C++ -ban 2007/4

C++ programozási nyelv Konstruktorok-destruktorok

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

BME MOGI Gépészeti informatika 8.

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Programozás II gyakorlat. 4. Öröklődés

Az új be- és kimenet könyvtár

Programozás II gyakorlat. 8. Operátor túlterhelés

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

Programozás C++ -ban

Programozás II. 2. Dr. Iványi Péter

Szoftvertechnológia alapjai Java előadások

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

Bánsághi Anna

OOP: Java 8.Gy: Abstract osztályok, interfészek

Objektum elvű alkalmazások fejlesztése. Verem típus osztály-sablonja

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Programozás Minta programterv a 1. házi feladathoz 1.

Java és web programozás

Programozás I. Szöveges fájlok kezelése Felsorolástípus Objektumtömb Gyakorló feladatok

Események C#-ban Krizsán Zoltán iit

Osztályok. 4. gyakorlat

.AA Megoldó Alfréd AA.

Magas szintű programozási nyelvek 2 Előadás jegyzet

128. AA Megoldó Alfréd AA 128.

INFORMATIKAI ALAPISMERETEK

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Osztály és objektum fogalma

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

2. Rekurzió. = 2P2(n,n) 2 < 2P2(n,n) 1

Bevezetés a C++ programozási nyelvbe

Konkurens TCP Szerver

Programozás II gyakorlat. 7. Példák a polimorfizmus alkalmazásaira

Objektumorientált programozás C# nyelven III.

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Programozási nyelvek II.: JAVA

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

Concurrency in Swing

I. 288.: Utcai WiFi térkép

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

Algoritmusok és adatszerkezetek II.

STL. Algoritmus. Iterátor. Tároló. Elsődleges komponensek: Tárolók Algoritmusok Bejárók

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Származtatási mechanizmus a C++ nyelvben

Szoftvertechnológia gyakorlat (OE-NIK) Előkészítés. A csapat: Alma Aliz PROJEKTVEZETŐ. Barack Béla ADMINISZTRÁTOR. Citrom Cecília DEMONSTRÁTOR

Átírás:

Programozás II. ATM példa Dr. Iványi Péter 1

ATM gép ATM=Automated Teller Machine Pénzkiadó automata Kezelő szoftvert szeretnénk írni Objektum-orientált módon 2

Követelmények Egyszerre csak egy embert szolgál ki Be kell tenni egy kártyát és be kell írni a PIN kódot Ezeket majd a bank ellenőrzi Ezután több tranzakciót lehet végrehajtani A kártyár csak akkor adjuk vissza ha befejezte a műveleteket 3

Tranzakciók Követelmények Lehessen kivenni pénzt az automatából Lehessen lekérni a számlán levő összeget A bankban mindig ellenőrizni kell hogy a tranzakció érvényes-e Ha rossz PIN kódot gépeltünk be, három lehetőségünk van, ha harmadikra sem sikerült a gép megtartja a kártyát Ha valamiért rossz a tranzakció a gép kijelzi 4

Követelmények Egy operátor kikapcsolhatja és bekapcsolhatja a gépet Kellene egy log (rögzítő) mechanizmus, ami mindent műveletet tárol Számlát ad a műveletek után 5

ATM rendszer ATM 6

Indítás Események A rendszert be kapcsolja az operátor és feltölti pénzzel Leállítás Ha nem használja senki a gépet ki lehet kapcsolni a gépet Megszakad a kapcsolat a bankkal 7

8

9

Session Események Beraknak egy kártyát a gépbe A gép behuzza és megpróbálja olvasni Ha hiba van visszaadja Be kell gépelni a PIN kódot Menüből választva megadhatunk egy tranzakciót Minden tranzakció után megkérdezzük folytassuk-e Ha nem, ki kell adni a kártyát 10

11

Tranzakció Események Absztrakt osztály, mindegyik tranzakció egy kicsit más Akkor használjuk amikor a menüből választottunk egy műveletet A tranzakció adatait egy üzenetben küldjük el a banknak Ha a bank jóvá hagyja, akkor végrehajtja az ATM Ha a bank szerint rossz a PIN, újra be lehet írni, max háromszor 12

13

Pénz kivétel Események Bekérjük hogy mennyi pénzt akar kivenni Ellenőrizzük, hogy van-e elég pénz a számlánkon Ha igen Ellenőrizzük, hogy van-e elég pénz az automatában Ha minden rendben kiadjuk a pénzt 14

Lekérdezés Események A műveletet elküldjük a banknak, és ha minden rendben a bank visszaküldi az információt 15

16

void main()... InetAddr inet(136, 155, 18, 20); // hozzuk letre a gepet ATM gep(42, "Rokus utca", "OTP", inet); while(true) gep.run(); ATM gépen futó program 17

class ATM int id; string place; string bankname; InetAddr bankaddress; // a gep komponensei CardReader *reader; PenzKiado *penzkiado; Nyomtato *nyomtato; // allapot informacio, milyen allapotban van a gep ATM_STATE allapot; bool on; Session *aktualis;... 18

ATM id place bankname bankaddress reader penzkiado nyomtato allapot on aktualis +ATM +getreader +getnyomtato +getpenzkiado +bekapcsol +kikapcsol +run UML osztálydiagram 19

UML diagramok 20

penzkiado ATM reader nyomtato 21

Állapot diagram KIKAPCSOLVA kikapcsol bekapcsolás KISZOLGÁLÁS kártya be / session létrehozás kártya ki / session vége VÁRAKOZÁS 22

void run() switch(allapot) case KIKAPCSOLVA:... break; case VARAKOZAS:... break; case KISZOLGALAS:... break; 23

case KIKAPCSOLVA: cout << "OPERATOR: ATM nem elerheto!" << endl; cout << "OPERATOR: Bekapcsoljuk? [i/n]" << endl; cin >> be; if(be == 'i') int pp; bekapcsol(); // toltsuk fel a gepet penzzel cout << "OPERATOR: Mennyi penzt tegyunk bele? " << endl; cin >> pp; getpenzkiado()->feltolt(pp); allapot = VARAKOZAS; break; 24

case VARAKOZAS: if(this->getreader()->kartya_olvas() == NULL)... // Tegye be a kartyat! cin >> be; if(be == 'i') cin >> pin; Kartya *k = new Kartya(pin); this->getreader()->kartya_betesz(k); if(this->getreader()->kartya_olvas()) aktualis = new Session(this); allapot = KISZOLGALAS; break; 25

case KISZOLGALAS: aktualis->kiszolgal(); allapot = VARAKOZAS; break; 26

pénz penzkiado ATM reader nyomtato kartya session 27

enum SESSION_STATE KARTYAT_OLVAS, PINT_OLVAS, TRANZAKCIO_VALASZTAS, TRANZAKCIO_VEGREHAJTAS, KARTYA_KIDOB, VEGE ; class Session private: SESSION_STATE allapot; ATM *atm; public: Session(ATM *a) : atm(a) allapot = KARTYAT_OLVAS; void kiszolgal(); ; 28

Állapot diagram KÁRTYÁT_OLVAS sikertelen újabb tranzakció sikerült kilépés PINT_OLVAS sikerült TRANZAKCIÓT_VÁLASZT választott vége TRANZAKCIÓT_VÉGREHAJT tranzakció vége KÁRTYÁT_KIDOB VÉGE 29

void kiszolgal() while(allapot!= VEGE) switch(allapot) case KARTYAT_OLVAS:... break; case PINT_OLVAS:... break; case TRANZAKCIO_VALASZTAS:... break; case TRANZAKCIO_VEGREHAJTAS:... break; case KARTYA_KIDOB:... break; 30

case KARTYAT_OLVAS: kartya = atm->getreader()->kartya_olvas(); if(kartya!= NULL) allapot = PINT_OLVAS; else atm->getnyomtato()->nyomtat("kartya nem olvashato"); allapot = KARTYA_KIDOB; break; 31

case PINT_OLVAS: pin=-2; while(pin > 9999 pin < -1) atm->getnyomtato()->nyomtat( Azonosito? (-1 = kilepes):"); cin >> pin; if(pin == -1) allapot = KARTYA_KIDOB; else allapot = TRANZAKCIO_VALASZTAS; break; 32

case TRANZAKCIO_VALASZTAS: int tipus; while(1) atm->getnyomtato()->nyomtat("valasszon muveletet: ");... // menü cin >> tipus; if(tipus < 1 tipus > 3) atm->getnyomtato()->nyomtat("hiba: Ervenytelen muvelet"); else break; 33

switch(tipus) case 1: t = new Tranzakcio_Kivesz(atm, this, kartya, pin); allapot = TRANZAKCIO_VEGREHAJTAS; break; case 2: t = new Tranzakcio_Info(atm, this, kartya, pin); allapot = TRANZAKCIO_VEGREHAJTAS; break; case 3: allapot = KARTYA_KIDOB; break; break; 34

pénz penzkiado ATM reader nyomtato kartya session tranzakcio info kivesz 35

case TRANZAKCIO_VEGREHAJTAS: bool ismet; ismet = t->vegrehajt(); delete t; if(ismet) allapot = TRANZAKCIO_VALASZTAS; else allapot = KARTYA_KIDOB; break; 36

class Tranzakcio protected: ATM *atm; Session *session; Kartya *kartya; int pin; static int ser_num; public: Tranzakcio(ATM *a, Session *s, Kartya *k, int p) : atm(a), session(s), kartya(k), pin(p) ser_num++; virtual bool vegrehajt() = 0; ; int Tranzakcio::ser_num = 0; 37

class Tranzakcio_Info : public Tranzakcio public: Tranzakcio_Info(ATM *a, Session *s, Kartya *k, int p) : Tranzakcio(a, s, k, p) bool vegrehajt() Uzenet *u; u = new Uzenet(LEKERDEZES, kartya, pin, ser_num, -1, -1, Penz(-1)); // Ide jon az a kod, amit uzenetet kuld a // banknak a halozaton keresztul Status *ered; ered = OTP.uzenet_kezeles(*u); if(ered->sikeres() == false) atm->getnyomtato()->nyomtat("hiba: "); atm->getnyomtato()->nyomtat(ered->getuzenet()); delete ered; delete u; char c; atm->getnyomtato()->nyomtat("ismet? [i/n]");... ; 38

class Status bool siker; string uzenet; public: Status(bool s=false, string u="") : siker(s), uzenet(u) bool sikeres() return siker; string getuzenet() return uzenet; ; 39

class Siker : public Status public: Siker(string u="") : Status(true, u) ; class ErvenytelenPIN : public Status public: ErvenytelenPIN() : Status(false, "Ervenytelen PIN") ;... 40

pénz nyomtato penzkiado ATM session reader tranzakcio kartya info kivesz siker hálózat uzenet status ervenytelenpin ervenytelenuzenet szamlak bank 41