Problem mit C++ in verbindung mit ADT`s



  • kann es sein das ich in diesem forum falsch bin?
    ich muss nochmal betohnen das ich absoluter anfänger bin und mir jetzt auf eigenem wege das bei grbracht habe...
    ich weiß zwar nciht ob das gut ist aber ich könnte in c++ einen taschenrechner schreiben, das mit jeglichen schleifen hab ich verstanden, mit funktionen und der variabeln übergaben .. call by valiu und call by raference.. etc. etc.
    nur jetzt bekomme ich ne aufgabe gestellt, wo ich eine datenbank einsetzen soll und damit quasi ein adressbuch schreiben soll... und ich versteh nur noch bahnhof!
    ich versteh noch nicht mal warum ich ne datenbank brauche... ich hab so zusagen 3 bücher meiner wahl unter anderem das c++ buch in wikibooks und ich finde da nichts was mir in meinem fall helfen könnte! jetzt hat mir ein kollege gesagt versuch es doch mit mysql, dass ist leichter... und jetzt bin ich glaube ich fast an dem punkt wo ich zu meinem prof gehe und das fach schiebe oder abwähle... ich versteh die aufgabe nicht und finde NIX darüber...



  • okay ein letzter versuch, dann hör ich auf hier im Forum zu nerven!
    Das ist meine Aufgabe. Unter Umständen habe ich sie ja falsch verstanden!

    Die Aufgabe ist, eine Studierendenverwaltung zu implementieren. Als
    Entwicklungsumgebung soll Microsoft Visual Studio 2010 Express (für C++ )
    verwendet werden. Wir gehen von einer maximalen Anzahl von 2000 Studierenden
    aus. Für jeden Studierenden sollen die folgenden Daten soweit es geht erfasst
    werden.

    Matrikelnummer
    Name
    Vorname
    Adresse mit
    o Straße
    o Hausnummer
    o Postleitzahl und
    o Ort/Stadt
    Telefon mit
    o Mobilnummer
    o Festnetznummer
    E-Mail
    Studiengang (mit Start des Studiums),
    Praxispartner
    o Firma mit Adresse
    Straße
    Hausnummer
    Postleitzahl und
    Ort/Stadt
    o Ansprechpartner beim Praxispartner
    Mobilnummer
    Festnetznummer
    E-Mail

    Die erhobenen Daten sollen auf Festplatte gespeichert werden. Bei einem Neustart
    des Programms sollen die gespeicherten Daten von der Festplatte zunächst geladen
    werden, so dass ein zusätzlicher Eintrag anschließend eingegeben werden kann.
    Die Ausgabe eines Datensatzes (alle Angaben eines Studierenden) soll auf einer
    Bildschirmseite dargestellt werden.

    Es soll ebenfalls möglich sein, einen Datensatz zu suchen respektive zu finden
    und zwar entweder über a) die Matrikelnummer, b) den Namen c) den Vornamen
    oder d) Praxispartner. Gibt es mehrere Suchresultate (Treffer), sollen diese immer
    vollständig und dann nacheinander ausgegeben werden. Des Weiteren soll es
    möglich sein, einen Datensatz zu ändern und auch zu löschen.

    Das ganze Programm soll über eine Menüsteuerung zu bedienen
    sein. Es müssen also folgende Menüpunkte realisiert werden:

    Daten eingeben
    Daten auf Bildschirm ausgeben
    Daten von HD lesen
    Datensatz suchen
    Daten auf HD speichern
    Datensatz löschen
    Datensatz ändern

    Hinweise

    Die Daten sollten in einem Abstrakten Datentyp (ADT) erfasst werden. Einen oder
    auch mehrere struct wäre hier hilfreich.

    Die Studierenden sollten ein einem Feld (Array) vom Typ struct verwalten werden.

    Die Funktionen fscanf und fprintf reichen evtl. nicht aus, um die Daten von
    der HD zu lesen bzw. auf die HD zu schreiben.



  • ich nochmal.. in der funtion zum einlesen

    case '2':
                {
                    Adresse a;
                    cin >> a;
                    datenbank.push_back(a);
                    break;
                }
    

    wo wird da das a deklariert? wenn das der ganze code ist?

    #include <iostream>
    #include <algorithm>
    #include <string>
    #include <fstream>
    #include <vector>
    using namespace std;
    
    struct Adresse
    {
        string strasse;
        string hausnummer;
        string postleitzahl;
        string wohnort;
    };
    
    ostream& operator<<(ostream& out, Adresse a)
    {
        out << a.strasse      << ' ';
        out << a.hausnummer   << ' ';
        out << a.postleitzahl << ' ';
        out << a.wohnort      << ' ';
        return out;
    }
    
    istream& operator>>(istream& in, Adresse& a)
    {
        in >> a.strasse;
        in >> a.hausnummer;
        in >> a.postleitzahl;
        in >> a.wohnort;
        return in;
    }
    
    void ausgabe_tabelle(ostream& out, const vector<Adresse>& datenbank)
    {
        for(vector<Adresse>::const_iterator it=datenbank.begin(); it!=datenbank.end(); ++it)
            out << *it << endl;
    }
    
    void lade_datenbank(vector<Adresse>& datenbank)
    {
        ifstream file("db.txt");
        if( file.is_open() )
        {
            for(Adresse a; file>>a; datenbank.push_back(a));
        }
    }
    
    void speichere_datenbank(const vector<Adresse>& datenbank)
    {
        ofstream file("db.txt");
        if( file.is_open() )
        {
            ausgabe_tabelle(file, datenbank);
        }
    }
    
    struct suche_datensatz_praedikat
    {
        string suche;
        suche_datensatz_praedikat(const string& suche) : suche(suche) {}
        bool operator()(const Adresse& a) const
        {
            if( a.hausnummer==suche || a.postleitzahl==suche || a.strasse==suche || a.wohnort==suche )
                return true;
            return false;
        }
    };
    vector<Adresse>::const_iterator suche_datensatz(const vector<Adresse>& datenbank)
    {
        cout << endl << "Suchwort: ";
        string suchwort;
        cin >> suchwort;
        return find_if( datenbank.begin(), datenbank.end(), suche_datensatz_praedikat(suchwort) );
    }
    
    int main()
    {
        vector<Adresse> datenbank;
        lade_datenbank(datenbank);
    
        char eingabe;
        do
        {
            cout << "Daten auf Bildschirm ausgeben (1)" << '\n';
            cout << "Datensatz eingeben            (2)" << '\n';
            cout << "Datensatz suchen              (4)" << '\n';
            cout << "Datensatz löschen             (6)" << '\n';
            cout << "Programm beenden              (0)" << '\n';
            cout << "Ihre Eingabe: ";
            cin >> eingabe;
    
            switch( eingabe )
            {
                case '1':
                {
                    ausgabe_tabelle(cout,datenbank);
                    break;
                }
                case '2':
                {
                    Adresse a;
                    cin >> a;
                    datenbank.push_back(a);
                    break;
                }
                case '4':
                {
                    vector<Adresse>::const_iterator it = suche_datensatz(datenbank);
                    if( it!=datenbank.end() )
                    {
                        cout << endl << *it;
                    }
                    else
                    {
                        cout << "Kein Treffer!";
                    }
                    break;
                }
                case '6':
                {
                    vector<Adresse>::const_iterator it = suche_datensatz(datenbank);
                    datenbank.erase(it);
                    break;
                }
                case '0':
                {
                    speichere_datenbank(datenbank);
                    break;
                }
            }
        }while( eingabe!='0' );
    }
    


  • würde das dann so richtig sein?

    struct Adresse
    {
        string strasse;
        string hausnummer;
        string postleitzahl;
        string wohnort;
    };
    
    ostream& operator<<(ostream& out, Adresse a,b,c,d)
    {
        out << a.strasse      << ' ';
        out << b.hausnummer   << ' ';
        out << c.postleitzahl << ' ';
        out << d.wohnort      << ' ';
        return out;
    }
    
    istream& operator>>(istream& in, Adresse& a,b,c,d)
    {
        in >> a.strasse;
        in >> b.hausnummer;
        in >> c.postleitzahl;
        in >> d.wohnort;
        return in;
    }
    
    case '2':
                {
                    Adresse a;
    		cout << strasse:;
                    cin >> a;
                    Adresse b;
    		cout << hausnummer:;
                    cin >> b;
                    Adresse c;
    		cout << plz:;
                    cin >> c;
                    Adresse d;
    		cout << wohnort:;
                    cin >> d;
                    datenbank.push_back(a);
                    break;
                }
    


  • Nein.

    tabtaste schrieb:

    wo wird da das a deklariert?

    Adresse a; //<---------Hier wird das a deklariert
                    cin >> a;
                    datenbank.push_back(a);
    

    Das bedeutet jedesmal wenn du

    Adresse irgendwas
    

    schreibst deklarierst du eine Variable vom Typ Adresse.
    Du willst jedoch eine Variable vom Typ Adresse und ihren Elementen(keine Ahnung ob das die richtige Bezeichnung ist) Werte zuweisen.
    Auf Elemente von mit struct oder class erzeugten Datentypen greift man mit dem Punktoperator zu.
    Bsp.

    struct Adresse
    {
        string strasse;
        string hausnummer;
        string postleitzahl;
        string wohnort;
    };
    ...
    Adresse meineErsteAdresse;
    std::cout<<"Bitte geben Sie die Straße ein: ";
    std::cin>>meineErsteAdresse.strasse;
    std::cout<<"\nDie Straße ist "<<meineERsteAdresse.strasse;
    ...
    

    Was out gemacht hat, war die Operatoren << und >> zu überladen um alle Elemente auf einmal zu befüllen(Sicherlich noch aus anderen Gründen aber darauf will/kann ich nicht eingehen).
    Statt

    struct Adresse
    {
        string strasse;
        string hausnummer;
        string postleitzahl;
        string wohnort;
    };
    
    ostream& operator<<(ostream& out, Adresse a)
    {
        out << a.strasse      << ' ';
        out << a.hausnummer   << ' ';
        out << a.postleitzahl << ' ';
        out << a.wohnort      << ' ';
        return out;
    }
    ...
    Adresse daten;
    ...
    std::cout<<daten;
    ...
    

    kann man auch

    struct Adresse
    {
        string strasse;
        string hausnummer;
        string postleitzahl;
        string wohnort;
    };
    ...
    Adresse daten;
    ...
    std::cout<<daten.strasse<<' '<<daten.hausnummer<<' '<<daten.postleitzahl<<' '<<daten.wohnort;
    

    schreiben.
    Ich würde an deiner Stelle beim Einlesen von Benutzereingaben(std::cin in diesem Fall) auf die überladenen Operatoren verzichten. So kannst du auch immer vorher etwas ausgeben.
    Beim Einlesen/Schreiben aus/in der/die Datei würde ich sie auf jeden Fall verwenden.

    So, jetzt werden vermutlich die regs kommen und alles zerreisen was ich grad geschrieben hab 😉



  • danke erstmal

    das heißt auf deutsch ich lass den ostream und den istream weg und mach es statdessen so?

    struct Adresse
    {
        string strasse;
        string hausnummer;
        string postleitzahl;
        string wohnort;
    };
    
    case '2':
                {
                    Adresse a;
    		cout << strasse:;
                    cin >> a.strasse;
                    Adresse b;
    		cout << hausnummer:;
                    cin >> b.hausnummer;
                    Adresse c;
    		cout << postleitzahl:;
                    cin >> c.postleitzahl;
                    Adresse d;
    		cout << wohnort:;
                    cin >> d.wohnort;
                    datenbank.push_back(a);
                    break;
                }
    

    oder fehlt mir das denn das std:: (was bedeutet das denn?)



  • oder so?

    struct Adresse
    {
        string strasse;
    };
    struct Adresse2
    {
        string hausnummer;
    };
    struct Adresse3
    {
        string postleitzahl;
    };
    struct Adresse4
    {
        string wohnort;
    };
    
    ......
                case '2':
                {
                    Adresse a;
    		cout << strasse:;
                    cin >> a.strasse;
                    Adresse2 b;
    		cout << hausnummer:;
                    cin >> b.hausnummer;
                    Adresse3 c[5];
    		cout << postleitzahl:;
                    cin >> c.postleitzahl;
                    Adresse4 d;
    		cout << wohnort:;
                    cin >> d.wohnort;
                    datenbank.push_back(a);
                    break;
                }
    


  • oder so? gott bin ich verwirrt ... 😕 😕 😕

    struct Adresse
    {
        string strasse;
        string hausnummer;
        string postleitzahl;
        string wohnort;
    };
    .............
                case '2':
                {
                    Adresse a;
    		cout << strasse:;
                    cin >> a.strasse;
    		cout << hausnummer:;
                    cin >> a.hausnummer;
    		cout << postleitzahl:;
                    cin >> a.postleitzahl;
    		cout << wohnort:;
                    cin >> a.wohnort;
                    datenbank.push_back(a);
                    break;
                }
    


  • tabtaste schrieb:

    oder so?

    Dein letztes Post ist das richtigste von den dreien... (Die 2 davor bitte UMGEHEND vergessen!).

    Anmerkung: Natürlich solltest du um String beim cout auch das " nicht vergessen...



  • alter ich glaub ich versteh das langsam und das nur wegen euch DANKE!

    jetzt hab ich mir meinen code nochmal genommen und das angepasst
    ich weiß man soll keine ganzen codes posten aber so lang ist er ja nicht...und hab da mal ein ausrufenzeichen dran gemacht wo ich das noch nicht ganz weiß ob es jetzt richtig ist.. wenn jemand zeit und lust hat könnte er ja den code einmal durchegehn und auf richtigkeit prüfen.. ich weiß viel verlangt aber wäre sau nett ....

    #include <iostream>
    #include <algorithm>
    #include <string>
    #include <fstream>
    #include <vector>
    using namespace std;
    
    struct Adresse
    {
        string strasse;
        string hausnummer;
        string postleitzahl;
        string wohnort;
    };
    
    void ausgabe_tabelle(ostream& out, const vector<Adresse>& datenbank)
    {
        for(vector<Adresse>::const_iterator it=datenbank.begin(); it!=datenbank.end(); ++it)
            out << *it << endl;
    }
    
    void lade_datenbank(vector<Adresse>& datenbank)
    {
        ifstream file("db.txt");
        if( file.is_open() )
        {
    !        for(Adresse a; file>>a; datenbank.push_back(a));
        }
    }
    
    void speichere_datenbank(const vector<Adresse>& datenbank)
    {
        ofstream file("db.txt");
        if( file.is_open() )
        {
            ausgabe_tabelle(file, datenbank);
        }
    }
    
    struct suche_datensatz_praedikat
    {
        string suche;
        suche_datensatz_praedikat(const string& suche) : suche(suche) {}
    !    bool operator()(const Adresse& a) const
        {
    !        if( a.hausnummer==suche || b.postleitzahl==suche || a.strasse==suche || a.wohnort==suche )
                return true;
            return false;
        }
    };
    vector<Adresse>::const_iterator suche_datensatz(const vector<Adresse>& datenbank)
    {
        cout << endl << "Suchwort: ";
        string suchwort;
        cin >> suchwort;
        return find_if( datenbank.begin(), datenbank.end(), suche_datensatz_praedikat(suchwort) );
    }
    
    int main()
    {
        vector<Adresse> datenbank;
        lade_datenbank(datenbank);
    
        char eingabe;
        do
        {
            cout << "Daten auf Bildschirm ausgeben (1)" << '\n';
            cout << "Datensatz eingeben            (2)" << '\n';
            cout << "Datensatz suchen              (4)" << '\n';
            cout << "Datensatz löschen             (6)" << '\n';
            cout << "Programm beenden              (0)" << '\n';
            cout << "Ihre Eingabe: ";
            cin >> eingabe;
    
            switch( eingabe )
            {
                case '1':
                {
                    ausgabe_tabelle(cout,datenbank);
                    break;
                }
                case '2':
                {
                    Adresse a;
    		cout << "strasse:";
                    cin >> a.strasse;
                    Adresse a;
    		cout << "hausnummer:";
                    cin >> a.hausnummer;
    !                Adresse b[5];
    		cout << "postleitzahl:";
                    cin >> b.postleitzahl;
                    Adresse a;
    		cout << "wohnort:";
                    cin >> a.wohnort;
                    datenbank.push_back(a,b);
                    break;
                }
                case '4':
                {
                    vector<Adresse>::const_iterator it = suche_datensatz(datenbank);
                    if( it!=datenbank.end() )
                    {
                        cout << endl << *it;
                    }
                    else
                    {
                        cout << "Kein Treffer!";
                    }
                    break;
                }
                case '6':
                {
                    vector<Adresse>::const_iterator it = suche_datensatz(datenbank);
                    datenbank.erase(it);
                    break;
                }
                case '0':
                {
                    speichere_datenbank(datenbank);
                    break;
                }
            }
        }while( eingabe!='0' );
    }
    


  • tabtaste schrieb:

    [cpp case '2':
    {
    Adresse a;
    cout << "strasse:";
    cin >> a.strasse;
    Adresse a;
    cout << "hausnummer:";
    cin >> a.hausnummer;
    ! Adresse b[5];
    cout << "postleitzahl:";
    cin >> b.postleitzahl;
    Adresse a;
    cout << "wohnort:";
    cin >> a.wohnort;
    datenbank.push_back(a,b);
    break;
    }[/cpp]

    Das stimmt so immer noch nicht.
    Nimm mal den ostream von out wieder in deinen Quellcode auf und lass dir nach jedem cin mal a ausgeben, vielleicht hilft dir das.

    Du musst nur einmal a deklarieren in deinem case.

    Stell dir a als Buch vor und alles worauf du mit dem Punktoperator zugreifst als Seite in diesem Buch.
    Jedesmal wenn du a.irgendwas = schreibst beschreibst du die Seite irgendwas in deinem Buch.
    Jedesmal wenn du

    Adresse a
    

    schreibst kaufst du dir ein neues Buch mit dem Titel a. Nicht mit dem selben Inhalt.
    Jetzt stell dir vor das du 10 Bücher mit dem Titel a hast. Wüsstest du noch in welchem was drinnsteht? Vermutlich nicht. Um für Ordnung zu sorgen behältst du nur das jüngste Buch mit dem Titel a und schmeißt die anderen weg.
    Wenn du jetzt überlegst in jedem Buch hast du eine Unterschiedliche Seite beschrieben die du brauchst aber nur das jüngste Buch hast, dann fehlt dir etwas oder?
    Am besten wäre einmal ein Buch zu kaufen mit den Titel a und in diesem alle Seiten zu beschreiben.
    Und danach dann das Buch an jemand anderen zu verschenken (das wäre dann die zeile

    datenbank.push_back(a)// ohne b!
    

    ).

    Du hast bei dir

    using namespace std;
    

    stehen. Deswegen musst du nicht vor jedes cin und cout std:: schreiben.
    Was es mit Namensräumen auf sich hat sollen dir andere erklären die das besser wissen als ich.

    Ich hoffe ich konnte dir das ganze ein wenig verständlicher machen.

    struct suche_datensatz_praedikat
    {
        string suche;
        suche_datensatz_praedikat(const string& suche) : suche(suche) {}
    !    bool operator()(const Adresse& a) const //1.
        {
    !        if( a.hausnummer==suche || b.postleitzahl==suche || a.strasse==suche || a.wohnort==suche ) //2.
                return true;
            return false;
        }
    };
    

    Das ist schon sehr viel weiter als du vermutlich bist in c++.
    1. Hier wird der Operator () überladen.
    2. Hier wird einfach überprüft ob in dem Buch auf einer Seite etwas steht 😉

    Ist alles wieder viel zu ungenau und ich empfehle dir ein Grundlagenbuch zu lesen. Es gibt hier im Forum auch nen Bücherthread.

    Gruß
    Stalker



  • jetzt hab ich es glaub ich

    struct Matrikelnummer        //muss man für einen struct mit nur einem punkt überhaupt einen struct machen?
    {
    	string nummer;
    };
    
    struct Name
    {
    	string Vorname;
    	string Nachname;
    };
    
    struct Adresse
    {
        	string strasse;
       	string hausnummer;
        	string postleitzahl;
        	string wohnort;
    };
    
    struct Telefon
    {
    	string Telefonnummer;
    	string Handynummer;
    };
    
    struct E-Mail
    {
    	string Mail;
    };
    
    struct Studiengang
    {
    	string Fachgebieht;
    	string studienstart;
    };
    
    struct Praxispartner
    {
    	string Firma;
    	string Firmenstraße;
    	string Firmenhausnummer;
    	string Firmenplz;
    	string Firmenort;
    	string Ansprechpartner;
    	string Ansprechpartnernummer;
    	string Ansprechpartnernummer2;
    	string Ansprechpartnere-mail;
    };
    ..........................................
    struct suche_datensatz_praedikat
    {
        string suche;
        suche_datensatz_praedikat(const string& suche) : suche(suche) {}
        bool operator()(const Adresse& a) const
        {
            if( d.Vorname==suche || d.Nachname==suche || h.Firma==suche || c.Martrikelnummer==suche)      //bei der suche nur nach den 4 kriterien gesucht
                return true;
            return false;
        }
    };
    ....................................................
    void einlesen_daten ()              //hoffe die funtion ist richtig
    {
    		cout << "Martrikelnummer:";
                    cin >> c.nummer;
    
    		cout << "Vorname:";
                   	cin >> d.Vorname;
    		cout << "Nachname:";
                    cin >> d.Nachname;
    
    		cout << "strasse:";
                    cin >> a.strasse;
    		cout << "hausnummer:";
                   	cin >> a.hausnummer;
    		cout << "postleitzahl:";
                    cin >> b.postleitzahl;
    		cout << "wohnort:";
                    cin >> a.wohnort;
    
    		cout << "Telefonummer:";
                    cin >> e.telefonummer;
    		cout << "Handynummer:";
    		cin >> e.Handynummer;
    
    		cout << "E-mail:";
                   	cin >> f.mail;
    
    		cout << "Fachgebiet:";
                    cin >> g.Fachgebiet;
    		cout << "Studienstart:";
                    cin >> g.Studienstart;
    
    		cout << "Firma:";
                    cin >> h.Firma;
    		cout << "Firmenstraße:";
                   	cin >> h.Firmenstraße;
    		cout << "Firmenhausnummer:";
                    cin >> h.Firmenhausnummer;
    		cout << "Firmenplz:";
                    cin >> h.Firmenplz;
    		cout << "Firmenort:";
                    cin >> h.Firmenort;
    		cout << "Ansprechpartner:";
                   	cin >> h.Ansprechpartner;
    		cout << "Ansprechpartnernummer:";
                    cin >> h.Ansprechpartnernummer;
    		cout << "Ansprechpartnernummer2:";
                    cin >> h.Ansprechpartnernummer2;
    		cout << "Ansprechpartnere-mail:";
                    cin >> h.Ansprechpartnere-mail;
    }
    ......................................................
                case '2':
                {
    		Martrikelnummer c[5]; //einmal jede struct variable deklriert
    		Name d;
    		Adresse a;
    		Adresse b[5];
    		Telefon e;
    		E-mail f;
    		Studiengang g;
    		Praxispartner h;
    		void einlesen_daten (); //funktion aufrufen
                    datenbank.push_back(a);
                    datenbank.push_back(b);
                    datenbank.push_back(c);
                    datenbank.push_back(d);
                    datenbank.push_back(e);   //macht man das so?
                    datenbank.push_back(f);
                    datenbank.push_back(g);
                    datenbank.push_back(h);
                    break;
                }
    


  • tabtaste schrieb:

    jetzt hab ich es glaub ich

    1. Ist dein Code komplett unleserlich und unsinnig eingerückt.
    2. Habe ich das Gefühl das du dich durch"rätselst" - Dir fehlen die elementarsten Grundlagen, und jedesmal fragt man sich ob du außer schlecht kopieren dich wirklich mit der Materie auseinander setzt.

    Zu deinem neuen Code:
    a) Man legt normalerweise nicht für einen Member ein neues struct an, auch bei 2 Membern finde ich es meist noch Grenzwertig, wenn sie nicht gerade eine wirklich feste Einheit bilden (z.B. "Telefon" würde ich eher nicht, Studiengang aber vielleicht als eigenes struct halten - In deinem Fall würde ich aber fast alle Strukturen zusammenfassen, es sei den du gedenkst sie anderweitig nochmals zu verwenden).
    b) Variablennamen dürfen keine Bindestriche enthalten.
    c) Einige dich mal auf eine Schreibweise, deine Member sind mal klein, mal groß geschrieben.

    tabtaste schrieb:

    hoffe die funtion ist richtig

    Es gibt einen Spruch zum Glauben: Glauben heißt nicht Wissen, aber Hoffen. Programmierung ist aber keine Glaubensfrage. Wenn du auch nur annährend die letzten Posts gelesen hättest, dürftest du hier schon selbst sehen das dies nicht einmal im Ansatz richtig ist.

    Du kannst nicht auf lokale Variablen einer fremden Funktion zugreifen, zudem soll es sich hier sicherlich um einen Datensatz handeln (Ein struct kann aber auch andere structs als Member enthalten).

    Vermutlich ist sowas dein Ziel:

    struct Student
    {
        string Vorname;
        string Nachname;
        Adresse Adresse; // <-- Dein struct "Adresse" als Member.
        //...
    }
    
    // Beispiel:
    int main()
    {
       Student a;
       a.Vorname = "Reiner";
       a.Nachname = "Zufall";
       a.Adresse.strasse = "Adlerstraße";
       a.Adresse.hausnummer = 12;
       //...
    }
    

    tabtaste schrieb:

    void einlesen_daten()

    Du übergibst weder Daten an die Funktion, noch gibst du welche zurück. Parameter und Rückgabewerte solltest du eigentlich schon kennen.

    tabtaste schrieb:

    void einlesen_daten()
    {
        cout << "Martrikelnummer:";
        cin >> c.nummer; // <-- c ist hier unbekannt!
        //...
    }
    

    tabtaste schrieb:

    Martrikelnummer c[5]; //einmal jede struct variable deklriert
    Name d;
    Adresse a;
    Adresse b[5];
    //...
    datenbank.push_back(a);
    datenbank.push_back(b);
    //...
    

    Du bist wohl einer der Zuhause Äpfel, Computer, Elefanten und Müll in Schrankfach für Handtücher stopfen würdest...

    Von was für einen Typ sind die Elemente deines Containers? Mit Sicherheit nicht von zig unterschiedlichen, sondern von EINEM.



  • Das Programm läuft! es gibt zwar noch ein paar feinheiten die gemacht werden müssen aber das Programm an sich läuft endlich, war auch ne schwere geburt mit mir... sry nochmal... jetzt bin ich nur noch am rätzeln wie ich die studentenzahl in der datenbank auf 2000 begrenze und wie ich eine fehlermeldung ausgebe wenn bei der plt mehr oder weniger zahlen als 5 sind... vllt habt ihr da noch einen tipp aber ihr wart echt ne große hilfe und geduldig mit mir, danke!


Anmelden zum Antworten