Datensatz ausgeben



  • hallo
    Problem 1:
    ich habe eine Datei teilnehmer die wie folgt aussieht

    Hans, Müller, kurs;
    Max, Meier, kurs;
    u.s.w.

    1.Frage:
    Wie kann ich alle Namen und Vornamen anzeigen lassen zum beispiel so:
    Hans |Müller
    Max |Meier
    u.s.w.
    2.Frage:
    Wie kann ich die Namen nach Alphabet ordnen (ich habe das was von vector gehört???)

    Problem 2:
    Wie kann ich zb "Max Meier" aus der Datei löschen??



  • bibstudent258 schrieb:

    hallo
    Problem 1:
    ich habe eine Datei teilnehmer die wie folgt aussieht

    Hans, Müller, kurs;
    Max, Meier, kurs;
    u.s.w.

    1.Frage:
    Wie kann ich alle Namen und Vornamen anzeigen lassen zum beispiel so:
    Hans |Müller
    Max |Meier
    u.s.w.

    Datei zeilenweise einlesen (z.B. mit ifstream) und anhand des Komma zerlegen (std::string bietet da Methoden)

    2.Frage:
    Wie kann ich die Namen nach Alphabet ordnen (ich habe das was von vector gehört???)

    Alle Namen in eine Datenstruktur packen (Array, std::vector etc) und dann per sort() aus der STL sortieren

    Problem 2:
    Wie kann ich zb "Max Meier" aus der Datei löschen??

    z.B. die komplette Datei in einen vector einlesen, den entsprechenden Eintrag löschen und dann die Datei mit dem vector-Inhalt überschreiben.



  • kannst du mir konkrete beispiele zeigen



  • Wenn jemand ne Idee hat wie man das zum laufen bekommt sollte der rest eigentlich funktionieren.

    #include <iostream.h>
    
    // Struktur für teilnehmer
    struct teilnehmer {
            char vorname[30];
            char nachname[30];
            char kurs[30];
            teilnehmer* next;
            teilnehmer* last;
    };
    
    // Zeiger auf den Anfang der liste
    teilnehmer* anfang;
    
    // Zeiger auf ende der Liste
    teilnehmer* ende;
    // hilfszeiger zum wandern
    teilnehmer* hilfszeiger;
    
    //Initialisieren der Liste
    void init(){
            char inivorname[30];
            char ininachname[30];
            char inikurs[30];
            anfang=new(teilnehmer);
            anfang->next = NULL;
            anfang->last = NULL;
            cout << "Bitte geben Sie den Vornamen des ersten Kursteilnehmers an: "<< endl;
            cin >> inivorname;
            strcpy(anfang->vorname,inivorname);
            cout << "Bitte geben Sie jetzt den Nachnamen an: " << endl;
            cin >> ininachname;
            strcpy(anfang->nachname,ininachname);
            cout << "Jetzt bitte noch die Kursbezeichnung: " << endl;
            cin >> inikurs;
            strcpy(anfang->kurs,inikurs);
    }
    
    // Funktion zum einfuegen neuer Teilnehmer
    void einfuegen(){
            char neuvorname[30], neunachname[30], neukurs[30];
            hilfszeiger = anfang;
            while(hilfszeiger->next != NULL) {
                    hilfszeiger = hilfszeiger->next;
            }
            // neuer Teilnehmer
            hilfszeiger->next = new(teilnehmer);
            hilfszeiger->next->last= hilfszeiger;
            // hilfszeiger auf das neue Listenelement
            hilfszeiger = hilfszeiger->next;
            // Daten ins neue Element eintragen
            cout << "Bitte geben Sie den Vornamen des Kursteilnehmers an: "<< endl;
            cin >> neuvorname;
            strcpy(hilfszeiger->vorname,neuvorname);
            cout << "Bitte geben Sie jetzt den Nachnamen an: " << endl;
            cin >> neunachname;
            strcpy(hilfszeiger->nachname,neunachname);
            cout << "Jetzt bitte noch die Kursbezeichnung: " << endl;
            cin >> neukurs;
            strcpy(hilfszeiger->kurs,neukurs);
            hilfszeiger->next = NULL;
            ende=hilfszeiger;
    }
    
    void anzeigen(){
            // hilfszeiger auf ersten Teiilnehmer
            hilfszeiger= anfang;
            cout << hilfszeiger->vorname << " " << hilfszeiger->nachname << " " << hilfszeiger->kurs << endl;
            while (hilfszeiger->next != NULL) {
                    // nächstes Element
                    hilfszeiger= hilfszeiger->next;
                    cout <<hilfszeiger->vorname << " " << hilfszeiger->nachname << " " << hilfszeiger->kurs << endl;
            }
    }
    
    void loeschenalles(){
            while (anfang != NULL){
                    hilfszeiger = anfang;
                    anfang = anfang->next;
                    delete(hilfszeiger);
            }
    }
    
    void loescheneinzeln(){
            hilfszeiger = anfang;
            char loeschennachname[30];
            cout << " Bitte geben Sie den Nachnamen des Teilnehmers ein der geloescht werden soll: " << endl;
            cin >> loeschennachname;
            while (hilfszeiger->nachname != loeschennachname){
                    hilfszeiger= hilfszeiger->next;
            }
            hilfszeiger->next->last = hilfszeiger->last;
            hilfszeiger->last->next = hilfszeiger->next;
            delete(hilfszeiger);
    }
    
    void main(){
            char eingabe;
            init();
            do{
                    cout << "Was moechten Sie als naechstes tun?" <<endl << endl;
                    cout << "Druecken Sie a zum erfassen eines neuen Teilnehmers!" << endl;
                    cout << "Druecken Sie b um sich alle Teilnehmer anzeigen zu lassen!" << endl;
                    cout << "Oder c um einzelne Teilnehmer zu loeschen," << endl;
                    cout << "oder d um alle Teilnehmer zu loeschen! " << endl;
                    cout << "Druecken Sie e um das Programm zu beenden!" << endl << endl;
                    cin >> eingabe;
                    switch(eingabe){
                            case 'a':
                                    void einfuegen();
                                    break;
                            case 'b':
                                    void anzeigen();
                                    break;
                            case 'c':
                                    void loescheneinzeln();
                                    break;
                            case 'd':
                                    void loeschenalles();
                                    break;
                    }
            }while(eingabe != 'e');
            loeschenalles();
            char p[50];
            cin.getline(p,50);
    }
    

    PS: Hatte ein bissl langeweile und wollte ein bissl ueben.



  • Einfach das void vor dem Funktionsaufruf wegnehmen.
    Ich depp.

    Jetzt ,uss ich noch das mit dem einzelnen loeschen und gucken. Da bibts noch nen Fehler und dann eine sortierfunktion versuchen reinzusetzen...beim anzeigen.

    Vielleicht kann ja noch jemand mithelfen oder Tipps geben.



  • Ja warum packst du denn nicht alles in einen Vector?

    // this is untested code
    #include <iostream>
    #include <algorithm>
    #include <string>
    
    using namespace std;
    struct Datensatz {
     string vorname;
     string nachname;
     string kurs;
    
     bool operator <(const Datensatz& rhs) {
       return nachname < rhs.nachname;
       // je nach deinem Sortierungswunsch
     }
    
     // bitte korrigieren!!!
     // den will ich überladen, damit ich nachher alles mit '<<' in einen stream kriege!
     const char* operator <<() {
      string out = vorname + "," + nachname + "," + kurs;
      return out.c_str();
     }
    
     // ist es überhaupt OK, wenn man eine Struktur so vergewaltigt?
     // Ab wann nimmt man denn eine Klasse?
     // "Erst", wenn ich sicherstellen will, dass die Daten nicht einfach
     // manipuliert werden dürfen, sondern nur durch bestimmt Methoden , oder??
    };
    
    typedef vector<Datensatz> box;
    typedef box::iterator boxIter;
    
    int main()
    {
      box Liste;
      ifstream file("Daten.txt", ios::in);
      if(!file.is_open())
       return 0;
    
      // gibt's diese Methode?
      string Zeile = file.read_line();
      Datensatz dummySatz;
      while(!Zeile.empty())
      {
        // std::string bietet bestimmt was Schönes dafür
        dummySatz.vorname = Zeile.XXX;
        dummySatz.nachname = Zeile.XXX;  
        dummySatz.kurs = Zeile.XXX;
    
        Liste.push_back(dummySatz);
        string Zeile = file.read_line();
      }
    
      // so, alles aus der Datei ist im vector drinne.
      file.close();
    
      sort(dummySatz.begin(), dummySatz.end());
    
      ofstream file("Daten.txt", ios::truncate);
      if(file.is_open())
      {
        for(boxIter it = Liste.begin(); it != Liste.end(); ++it)
          file << (*it) << endl;
    
        file.close();
      }
    
      awaiting_critics(); // hehe
      return 0;
    }
    

    Wie schon oben angedeutet: Das ist ungetesteter Code.



  • Dein Code ist ... naja 🙄
    Dein operator<< ist natürlich unbrauchbar. Der muss außerhalb der Klasse definiert werden und nen ostream& zurückgeben.
    Zu dem struct: Ein struct ist exakt das selbe wie eine Klasse, abgesehen von kleinen Details (bei structs ist z.B. der default-Zugriffsschutz public, bei Klassen private und die Default-Ableitungsart ist unterschiedlich).
    Der restliche Code ist schon fast Pseudocode 😉

    PS: Falls du die Datensätze nach verschiedenen Kritieren sortieren willst (mal nach den Namen, mal nach dem Vornamen etc) kannst du dir verschiedene functor schreiben und diese an sort() übergeben.



  • interpreter schrieb:

    Dein Code ist ... naja 🙄

    Was passt denn (sonst) nicht)

    interpreter schrieb:

    Dein operator<< ist natürlich unbrauchbar. Der muss außerhalb der Klasse definiert werden und nen ostream& zurückgeben.
    Zu dem struct: Ein struct ist exakt das selbe wie eine Klasse, abgesehen von kleinen Details (bei structs ist z.B. der default-Zugriffsschutz public, bei Klassen private und die Default-Ableitungsart ist unterschiedlich).

    Könntest du das mal bitte in Code fassen. Ich kann mir den nicht so recht vorstellen.

    interpreter schrieb:

    Der restliche Code ist schon fast Pseudocode 😉

    Findest du? 😕

    interpreter schrieb:

    PS: Falls du die Datensätze nach verschiedenen Kritieren sortieren willst (mal nach den Namen, mal nach dem Vornamen etc) kannst du dir verschiedene functor schreiben und diese an sort() übergeben.

    stimmt!


Anmelden zum Antworten