Switch Anweisung flexibler gestalten
-
tag zusammen.
ich muss für den unterricht folgendes Problem lösen.
Ich habe ein Switch Anweisung in der Methoden zweier Klassen gestartet werden sollen. Die einzelenen Case abschnitte unterscheiden sich nicht viel von einander, nur das bei case 1 karte1 und konto1 bei case 2 karte2 und konto2 usw... benutzt werden. Kann man das nicht flexibler gestalten, da wenn ich 100 Instanzen der Klasse Konto erstelle müsste ich ja dann auch 100 case abschnitte einbinden.switch (auswahl_karte) { case 1: auswahl_pin = karte1.checkpin(); if (auswahl_pin == true) { auswahl_menu = automat1.menu(); switch (auswahl_menu) { case 1: konto1.geldanzeigen(); break; case 2: konto1.geldabbuchen(); break; case 3: break; } } break; case 2: auswahl_pin = karte2.checkpin(); if (auswahl_pin == true) { auswahl_menu = automat1.menu(); switch (auswahl_menu) { case 1: konto2.geldanzeigen(); break; case 2: konto2.geldabbuchen(); break; case 3: break; } } break; case 3: auswahl_pin = karte3.checkpin(); if (auswahl_pin == true) { auswahl_menu = automat1.menu(); switch (auswahl_menu) { case 1: konto3.geldanzeigen(); break; case 2: konto3.geldabbuchen(); break; case 3: break; } } break; }
-
Wie wäre es statt konto1, konto2 usw. mit einem Array oder vector?
-
sry. bin noch relativer noob in c++ / klassen.
Ich kann doch nicht einfach denn namen der Instanz (der zum aufruf der methode benötigt wird) durch ein array ersetzten oder?Wenn es nicht zu große umstände macht, könntest du nicht mal ein code beispiel machen?
-
Hi,
also wenn das für die Schule sein soll, und ihr noch keine STL-Container
behandelt habt, ist es sicher nicht im Sinn eures Lehrer wenn wir dir
zeigen, wie man sa mit einem Vector machen kann.Wo und wie legst du die Karten und Automaten in deinem Programm ab?Ist die Anzahl Karten begrenzt oder soll sie dynamisch sein?
Muss jede Karte einen eigenen Automaten haben? (klingt nicht logisch, oder?)Poste mal die genaue Aufgabenstellung und mehr Code aus Deinem Programm.
Dann sehen wir weiter.
-
die anzahl der karten und konten soll eigentlich dnaymisch sein.
Jedes Konto hat eine Karte, der Automat hat mehrere Konten.#include <iostream> #include "konto.h" #include "karte.h" #include "automat.h" int main(void) { //---------------Deklaration der Konten und den zugehörigen Karten-------------- KONTO konto1; konto1.kontostand = 1000; KARTE karte1; karte1.pin = 1111; KONTO konto2; konto2.kontostand = 2000; KARTE karte2; karte2.pin = 2222; KONTO konto3; konto3.kontostand = 3000; KARTE karte3; karte3.pin = 3333; //------------------------------------------------------------------------------ while (true) { int auswahl_karte = 0; int auswahl_menu = 0; bool auswahl_pin = false; BANKAUTOMAT automat1; auswahl_karte = automat1.start(); switch (auswahl_karte) { case 1: auswahl_pin = karte1.checkpin(); if (auswahl_pin == true) { auswahl_menu = automat1.menu(); switch (auswahl_menu) { case 1: konto1.geldanzeigen(); break; case 2: konto1.geldabbuchen(); break; case 3: break; } } break; case 2: auswahl_pin = karte2.checkpin(); if (auswahl_pin == true) { auswahl_menu = automat1.menu(); switch (auswahl_menu) { case 1: konto2.geldanzeigen(); break; case 2: konto2.geldabbuchen(); break; case 3: break; } } break; case 3: auswahl_pin = karte3.checkpin(); if (auswahl_pin == true) { auswahl_menu = automat1.menu(); switch (auswahl_menu) { case 1: konto3.geldanzeigen(); break; case 2: konto3.geldabbuchen(); break; case 3: break; } } break; } } } class KONTO{ public: int kontostand; void geldabbuchen() { int wert; std::cout << "Welchen Betrag möchten Sie abbuchen? "; std::cin >> wert; kontostand = kontostand - wert; std::cout << "Das Geld wurde abgebucht \n"; }; void geldanzeigen() { std::cout << "Ihr aktueller Kontostand: "<< kontostand <<"\n"; }; }; class BANKAUTOMAT{ public: int start() { int auswahl; std::cout << "Welche Karte soll benuzt werden: "; std::cin >> auswahl; return auswahl; }; int menu() { int auswahl; std::cout << " 1. Kontostand abrufen \n 2. Geld abheben \n 3. Abbruch \n Auswahl: "; std::cin >> auswahl; return auswahl; }; }; class KARTE{ public: int pin; bool checkpin() { int wert; bool check = false; std::cout << "Bitte geben Sie ihren PIN Nummer ein: "; std::cin >> wert; if (wert == pin) check = true; else std::cout << "Falscher PIN"; return check; } };
-
Ich habe bewust keine Container verwendet, damit du siehst wie man dynamisch ein Array erzeugt.
Also, die dynamische Variante:
class Konto { public: Konto(){}; ~Konto() { }; bool CheckPin() const { return true; } }; class BankKonten { public: BankKonten():m_count(0), m_konten(0){}; ~BankKonten(){ LoescheKonten(); }; Konto* NeuesKonto() { Konto** array = new Konto*[m_count+1]; memset(array, 0, sizeof(Konto*) * (m_count+1)); Konto* konto = new Konto; if ( m_konten ) memcpy(array, m_konten, sizeof(Konto*) * m_count); array[m_count] = konto; delete[]m_konten; m_konten = array; m_count++; return konto; } void LoescheKonten() { for ( int i = 0; i < m_count; ++i ) delete m_konten[i]; delete[]m_konten; m_count = 0; } Konto* GibKonto(int KtrNo) { return m_konten[KtrNo - 1]; } private: Konto** m_konten; int m_count; }; int _tmain(int argc, _TCHAR* argv[]) { BankKonten k; Konto* pKonto1 = k.NeuesKonto(); Konto* pKonto2 = k.NeuesKonto(); Konto* pKonto3 = k.NeuesKonto(); Konto* pKonto4 = k.NeuesKonto(); int auswahl = 2; Konto* pKonto = k.GibKonto( auswahl ); if ( pKonto->CheckPin() ) { // mach weiter... } return 0; }
So lassen sich belibieg viele Konten erstellen. Der Algorithmus dazu steckt in
BankKonten::NeuesKonto().Die Karte würde ich zum Member der Klasse Konto machen.
Zum Konto müssen natürlich diverse Memberfunktionen geschrieben werden, aber das
soll nun deine Aufgabe sein.Gruss