*Bankkonto*: Verweis auf ein Objekt anderer Klasse richtig übergeben? Keine Ausgabe!



  • Ich bin mittlerweile voran gekommen und fast fertig.
    Allerdings muss ich jetzt die Buchungen, die der Benutzer tätigen kann, zeitlich ordnen.
    Die Zeitangabe, wann die Buchungen statt finden, entscheidet der Benutzer selbst.
    Habt ihr eine Idee wie ich die am besten sortiert bekomme?

    @SeppJ sagte in *Bankkonto*: Verweis auf ein Objekt anderer Klasse richtig übergeben? Keine Ausgabe!:

    @Suprax sagte in *Bankkonto*: Verweis auf ein Objekt anderer Klasse richtig übergeben? Keine Ausgabe!:

    Nein, die menu-Funktion soll in der Klasse drinne sein. Das ist vorgegeben.

    Das ist trotzdem schlechtes Design und es sollte dein Bestreben sein, es korrekt zu machen. Die Klassen sollten der Wirklichkeit folgen, sonst bekommst du später komische Effekte (Oder auch jetzt sofort, denn dein Fragen sind Folgen von mittelmäßigem Design). Echte Banken haben Menüs höchsten in der Kantine. Banken haben auch keine Computerschnittstelle zum Bedienen einer Bankingsimulation. Banken haben keine Personen, sondern ein Personenverzeichnis. Wer aber Personen und Banken und eine Computerschnittstelle zur Bankingsimulation hat, wäre beispielsweise ein Bankingsimulator. Das sollte eine Klasse bei dir sein, in deren Instanzen dann Banken und Personen existieren, deren Zusammenspiel über die Schnittstelle gesteuert wird.

    Das Bank-Objekt lege ich mit Beginn der menu-Funktion an, damit dort im Prozess der Benutzereingabe sämtliche Daten dort gespeichert werden.

    Du hast das Problem gar nicht verstanden. Die menu-Funktion ist bei dir schon Teil einer Bank. Du hast ein Bank in deiner Bank erzeugt.

    @SeppJ Ich kann da leider bzgl. der menu-Funktion nichts machen. Sie muss so implementiert werden, wie es vorgegeben wurde. Ich bin nicht der Prof 😃

    Du hast das Problem gar nicht verstanden. Die menu-Funktion ist bei dir schon Teil einer Bank. Du hast ein Bank in deiner Bank erzeugt.

    Hmm. Indem ich zusätzlich ein Objekt der Klasse Bank in der Klasse Bank erzeugt habe, habe ich eine Bank in meiner Bank erzeugt?


  • Mod

    @Suprax sagte in *Bankkonto*: Verweis auf ein Objekt anderer Klasse richtig übergeben? Keine Ausgabe!:

    Ich bin mittlerweile voran gekommen und fast fertig.
    Allerdings muss ich jetzt die Buchungen, die der Benutzer tätigen kann, zeitlich ordnen.
    Die Zeitangabe, wann die Buchungen statt finden, entscheidet der Benutzer selbst.
    Habt ihr eine Idee wie ich die am besten sortiert bekomme?

    Bitte stell konkrete Fragen! Möchtest du wissen, wie man generell sortiert? Wonach du sortieren sollst? Wie du Zeiten im speziellen sortieren kannst? Möchtest du tatsächlich wissen, ob jemand anderes das weiß? Das sind schon einmal vier unterschiedliche Interpretationen deiner schwammigen Frage und ich und andere haben gewiss keine Lust, alle Möglichkeiten zu beantworten, in der Hoffnung, dass eine der Antworten dir vielleicht helfen könnte. Siehe:
    https://www.c-plusplus.net/forum/topic/200753/du-brauchst-hilfe

    @SeppJ Ich kann da leider bzgl. der menu-Funktion nichts machen. Sie muss so implementiert werden, wie es vorgegeben wurde. Ich bin nicht der Prof 😃

    Du hast das Problem gar nicht verstanden. Die menu-Funktion ist bei dir schon Teil einer Bank. Du hast ein Bank in deiner Bank erzeugt.

    Hmm. Indem ich zusätzlich ein Objekt der Klasse Bank in der Klasse Bank erzeugt habe, habe ich eine Bank in meiner Bank erzeugt?

    Ja! Und kommt dir das nicht komisch falsch vor? Du scheinst nach wie vor nicht so ganz verstanden zu haben, was Objekte, Klassen, etc. überhaupt sind. Lern' mal mehr nach deinem Stroustrup-Buch und weniger nach deinem Prof!

    Ich kann da leider bzgl. der menu-Funktion nichts machen. Sie muss so implementiert werden, wie es vorgegeben wurde. Ich bin nicht der Prof

    Klar! Bloß keine Eigeninitiative zeigen oder Wissen aneignen, das über die Vorlesung hinaus geht. Wo kämen wir denn da hin, wenn Studenten plötzlich anfingen, mehr als nur die Mindestleistung zum Bestehen zu erbringen?



  • @Suprax sagte in [*Bankkonto*: Verweis auf ein Objekt anderer Klasse richtig übergeben? Keine Ausgabe!]

    Personen, Accounts und Bank sind in jeweils getrennten Klassen

    scheinbar nicht, oder was tut der "Person"-Vector in deiner Bankklasse?

    class Bank {
    
    private:
        vector<Person> person;
        vector<Account> account;
    };
    


  • @SeppJ sagte in *Bankkonto*: Verweis auf ein Objekt anderer Klasse richtig übergeben? Keine Ausgabe!:

    @Suprax sagte in *Bankkonto*: Verweis auf ein Objekt anderer Klasse richtig übergeben? Keine Ausgabe!:

    Ich bin mittlerweile voran gekommen und fast fertig.
    Allerdings muss ich jetzt die Buchungen, die der Benutzer tätigen kann, zeitlich ordnen.
    Die Zeitangabe, wann die Buchungen statt finden, entscheidet der Benutzer selbst.
    Habt ihr eine Idee wie ich die am besten sortiert bekomme?

    Bitte stell konkrete Fragen! Möchtest du wissen, wie man generell sortiert? Wonach du sortieren sollst? Wie du Zeiten im speziellen sortieren kannst? Möchtest du tatsächlich wissen, ob jemand anderes das weiß? Das sind schon einmal vier unterschiedliche Interpretationen deiner schwammigen Frage und ich und andere haben gewiss keine Lust, alle Möglichkeiten zu beantworten, in der Hoffnung, dass eine der Antworten dir vielleicht helfen könnte. Siehe:
    https://www.c-plusplus.net/forum/topic/200753/du-brauchst-hilfe

    @SeppJ Ich kann da leider bzgl. der menu-Funktion nichts machen. Sie muss so implementiert werden, wie es vorgegeben wurde. Ich bin nicht der Prof 😃

    Du hast das Problem gar nicht verstanden. Die menu-Funktion ist bei dir schon Teil einer Bank. Du hast ein Bank in deiner Bank erzeugt.

    Hmm. Indem ich zusätzlich ein Objekt der Klasse Bank in der Klasse Bank erzeugt habe, habe ich eine Bank in meiner Bank erzeugt?

    Ja! Und kommt dir das nicht komisch falsch vor? Du scheinst nach wie vor nicht so ganz verstanden zu haben, was Objekte, Klassen, etc. überhaupt sind. Lern' mal mehr nach deinem Stroustrup-Buch und weniger nach deinem Prof!

    Ich kann da leider bzgl. der menu-Funktion nichts machen. Sie muss so implementiert werden, wie es vorgegeben wurde. Ich bin nicht der Prof

    Klar! Bloß keine Eigeninitiative zeigen oder Wissen aneignen, das über die Vorlesung hinaus geht. Wo kämen wir denn da hin, wenn Studenten plötzlich anfingen, mehr als nur die Mindestleistung zum Bestehen zu erbringen?

    1. Ich möchte Buchungen sortieren, die zeitlich vorher festgelegt werden.
      Das Datum initalisiere ich mit den Parametern: int tag, int monat, int jahr.
      Die Buchungen sollen aufsteigend sortiert werden.
      Bubble Sort könnte man hierbei benutzen, wenn ich mich nicht irre.

    2. Danke für die bisherige Hilfe, aber anscheinend hast du nicht verstanden warum ich mich konkret an die Vorgaben des Professor halten will.
      Ich erkläre es nochmal: Es ist pflicht.
      Die Altklausuren geben den Klassenaufbau, Methoden und Implementierung der Methoden vor. Ich kann nicht anfangen eine eigene Klasse für die menu()-Funktion zu implementieren.
      Nicht, weil ich es nicht kann, sondern weil das abweicht von den Vorgaben.
      Selbst wenn ich es so machen würde und das Programm kompiliert fehlerfrei und funktioniert darüber hinaus auch noch würde ich nicht nur ein Teil bis garkeine Punkte für die jeweilige Aufgabe bekommen.

    Ich zeige Eigeninitiative, sonst wäre ich nicht hier und würde um Hilfe bitten. Es liegt nicht daran, dass ich sonst nicht durch die Prüfung komme.
    Ich kann jetzt die Prüfung schreiben, Klassen implementieren, paar Methoden schreiben und komme mit einer guten 3, vielleicht auch 2 durch die Prüfung.
    Aber das ist nicht das was ich möchte.
    Ihr merkt doch selber, dass ich gewisse Dinge nicht verinnerlicht und viele Lücken habe, aber vergiss nicht, dass ich erst angefangen habe und noch auf keinem hohen Niveau bin.
    Ich bin auch kein Einstein und brauche Zeit und eindeutige Erklärungen, aber wenn ich einmal etwas verstanden habe, dann bleibt das auch in meinem Kopf.

    1. Zu der Bank-Objekt-Problematik: Wenn ich kein Objekt in der Klasse erzeuge, wo soll ich dann die dementsprechende Benutzer-Eingaben, die in der Methode menu() statt finden, speichern?

    @It0101 sagte in *Bankkonto*: Verweis auf ein Objekt anderer Klasse richtig übergeben? Keine Ausgabe!:

    @Suprax sagte in [*Bankkonto*: Verweis auf ein Objekt anderer Klasse richtig übergeben? Keine Ausgabe!]

    Personen, Accounts und Bank sind in jeweils getrennten Klassen

    scheinbar nicht, oder was tut der "Person"-Vector in deiner Bankklasse?

    class Bank {
    
    private:
        vector<Person> person;
        vector<Account> account;
    };
    

    Der vector<Person> person dient lediglich als ein Speicherort von Person-Objekten.
    Die Klasse Person ist in seiner eigenen Header definiert und dessen Konstruktor in einer cpp.



  • In den anderen Funktionen der Bank-Klasse erzeugst du doch auch kein neues Bank-Objekt und greifst auf die Member zu (Stichwort: this).



  • @Th69 ja, aber die Funktionen rufe ich in der menu() -Funktion auf und übergebe die Werte dann an das Objekt der Klasse



  • Nur warum machst du das?
    Du rufst doch in der main-Funktion diese Funktion so ähnlich auf:

    Bank bank;
    
    bank.menu();
    

    Und jetzt schreibe darunter mal:

    bank.print_account();
    

    und führe es aus (indem du mal mindestens einen Account anlegst und dann das Menü verlässt).

    Warum also nicht (wie in den anderen Bank-Funktionen auch) einfach

    // in Zeile 38 deines ersten Code-Beitrags
    this->print_person();
    // bzw. kürzer
    print_person();
    

    ?



  • Im Grunde sind der größte Fluch des C++-Forums irgendwie Professoren und Lehrer 😂
    Keiner von denen hat vermutlich jemals ein Software-Projekt durchgezogen...



  • Und verwenden Skripte aus den 90iger Jahren...



  • @It0101 sagte in *Bankkonto*: Verweis auf ein Objekt anderer Klasse richtig übergeben? Keine Ausgabe!:

    Im Grunde sind der größte Fluch des C++-Forums irgendwie Professoren und Lehrer

    Oder die Existenzberechtigung 😉



  • @Th69 sagte in *Bankkonto*: Verweis auf ein Objekt anderer Klasse richtig übergeben? Keine Ausgabe!:

    Nur warum machst du das?
    Du rufst doch in der main-Funktion diese Funktion so ähnlich auf:

    Bank bank;
    
    bank.menu();
    

    Und jetzt schreibe darunter mal:

    bank.print_account();
    

    und führe es aus (indem du mal mindestens einen Account anlegst und dann das Menü verlässt).

    Warum also nicht (wie in den anderen Bank-Funktionen auch) einfach

    // in Zeile 38 deines ersten Code-Beitrags
    this->print_person();
    // bzw. kürzer
    print_person();
    

    ?

    Meine mainsieht folgendermaßen aus:

    int main() {
    
        Bank b1;
        b1.menu();
    
        return 0;
    }
    
    

    Ich kann dir jetzt nicht mehr ganz folgen. Dass ich ein Bank-Objekt in der Klasse Bank erzeuge und es besser geht verstehe ich von der Logik her, aber ich komme nicht ganz mit, wie du das besser umschreiben würdest.
    Von der Logik her dachte ich, dass ich in der Klasse Bank die Methode menu() aufrufe und in dieser Methode ein Objekt der Klasse Bank erzeuge, um sämtliche Eingaben, die der Benutzer macht, im Objekt speichern zu können?

    @It0101 @manni66 Sonderlich gut erklären können die Profs auch nicht wirklich. Und ich bemühe mich das zu lernen



  • Du hast doch schon das Bank-Objekt b1. Für dieses Objekt führst du die menu-Funktion aus und möchtest doch auch sicherlich alle Daten in diesem Objekt speichern und nicht in einem anderen.
    Du gehst doch auch nicht in die Sparkassen-Filiale und möchtest dort ein Konto der Volksbank erzeugen?!

    Also so:

    switch (eingabe) {
    
        case 1: {
            print_person();
            break;
            }
    
        case 2: {
            print_account();
            break;
            }
    
            // ...
    }
    


  • void Bank::menu() {
    
        bool end = false;
        Bank bank1;
    
        do {
            Person *p1;
            int eingabe;
    
            cout << "1. Alle Kundendaten anzeigen" << endl;
            cout << "2. Alle Konten anzeigen" << endl;
            cout << "3. Neuen Kunden anlegen (ohne Konto)" << endl;
            cout << "4. Neues Konto anlegen (Kunde muss existieren)" << endl;
            cout << "5. Neue Buchung" << endl;
            cout << "6. Kontoauszug fuer Konto ziehen" << endl;
            cout << "7. Ein Konto aufloesen" << endl;
            cout << "8. Testdaten einfuegen" << endl;
            cout << "9. Zum beenden q eingeben" << endl;
            cout << endl;
            cin >> eingabe;
    
            switch (eingabe) {
    
                case 1: {
    
                    bank1.print_person();
                    break;
                }
    
                case 2: {
                    bank1.print_account();
                    break;
                }
    
                case 3: {
    
                    string vorname;
                    string nachname;
                    int tag;
                    int monat;
                    int jahr;
    
                    cout << "Vorname: ";
                    cin >> vorname;
                    cout << "\n";
                    cout << "Nachname: ";
                    cin >> nachname;
                    cout << "\n";
                    cout << "Tag: ";
                    cin >> tag;
                    cout << "\n";
                    cout << "Monat: ";
                    cin >> monat;
                    cout << "\n";
                    cout << "Jahr: ";
                    cin >> jahr;
    
                    bank1.createUser(vorname, nachname, tag, monat, jahr);
                    cout << endl;
                    break;
                }
                case 4: {
                    string nachname;
    
                    cout << "Geben Sie einen Nachnamen an: ";
                    cin >> nachname;
                    bank1.createAccount(nachname);
                    break;
                }
    
                case 5: {
    
                    int kontonr;
    
                    cout << "Geben Sie ihre Kontonr. fuer die Buchung an: ";
                    cin >> kontonr;
    
                    bank1.createBuchung(kontonr);
                    break;
                }
    
                case 6: {
    
                    int kontonr;
    
                    cout << "Kontonr.: ";
                    cin >> kontonr;
    
                    bank1.kontoauszug(kontonr);
                }
            }
        } while (!end);
    

    Also könnte ich theoretisch auf mein Bank Objekt bank1 verzichten?



  • Ja, exakt.



  • Ich mach mich mal ran und änder das ab und versuche jetzt weiter voran zu kommen. Danke für die Antworten!


Anmelden zum Antworten