Datei einlesen und abspeichern in Ringelement

Tharmy

Grünschnabel
Hallo,
ich bin neuling für Programmierung. Wir haben eine Aufgabe bekommen, da rätsle ich mich schon sehr lange.

Aufgabe.
In einer Datei ist ein Auszug aus einer Bücherliste bestehend aus n Datensätzen
gespeichert.
Also die habe ich so aufgebaut:
struct Buch
{
char Name[20];
char Buchtitel[30];
char ISBN[13];
float preis;
};

Diese Datei soll datensatzweise einliesen und jeden Datensatz in ein Element eines Ringes
abspeicheren. Als Hinweis die Funktion Read(f, DS)
Ich habe folgende Gedanke gemacht:
1. file.open
2. lese solange EOF
3. Read(f,DS)
4. file.close

Mein Gedanke ist sehr kurz und knapp, die alles im code Datensatz im Ringelement zu speichern. Ich hoffe, dass jemand mir weiterhelfen kann.

Thanks in adavance.
 
Hi,

du müsstest deine Struktur folgendermaßen erweitern :

Code:
struct Buch
{
  char Name[20];
  char Buchtitel[30];
  char ISBN[13];
  float preis;

  Buch *pNext;  // Diese Variable beinhaltet dann einen Zeiger auf das nächste Buch-Objekt
};

Du hälst dir dann nur eine Zeigervariable, welche auf dein erstes Buchelement zeigt.

Code:
  Buch *pFirstBook = NULL;

Dann liesst du dir alle Bücher-Informationen aus deiner Datei aus (Das überspringe ich jetzt mal, du sollst ja auch noch n bisschen Spaß haben ;-)) und erzeugst dir für jedes Buch ein neues Buch-Objekt.

Code:
    Buch *pCurrentBook = NULL;  // Zeiger, um das aktuelle Buch richtig einzuordnen!    

  while(...) {
    // Erzeuge ein neues Buch-Objekt
    Buch *pBook = new Buch();
    // Setze die Werte der neuen Struktur
    strcpy(pBook->Name, bookName);
    .
    .
    .
    // Setze den Zeiger auf das nächste Buch auf NULL! Das neu eingefügte Buch ist ja das letzte in deiner Liste
    pBook->pNext = NULL;

    // Und füge das Objekt in deine Liste ein!
    if( pCurrentBook == NULL ) {
      // Es ist das erste Buch, welches eingefügt wird, also 
      pCurrentBook = pBook;
      pFirstBook = pBook;
    }
    else {
      // Setze den Zeiger des vorigen Buches auf das neu erzeugte Buch-Objekt
      pCurrent->pNext = pBook;
      // Setze das neu eingefügte Buch als aktuelles Buch
      pCurrent = pNext;
    }

Anschließen hast du eine einfach verkettete Liste aller Bücher aus deiner Datei.
Und so kannst du anschließen über deine Buchliste iterieren:

Code:
  Buch *pCurrent = pFirstBook;
  while( pCurrent != NULL ) {
    // Mache irgendwas mit den Buch-Infos... und setze den pCurrent-Zeiger auf das nächste Buch
    pCurrent = pCurrent->pNext;
  }

Denke. das sollte dir helfen..

Schöne Grüße,

Pit
 
ich bezog mich nciht auf dich sondern aufn ihn ;) dann sieht die generelle realisierung unter umständen gaaanz anders aus ;)
 
ich bezog mich nciht auf dich sondern aufn ihn ;) dann sieht die generelle realisierung unter umständen gaaanz anders aus ;)
 
Hi Pit,
vielen Dank
ich habe sogar verstanden, wie man mit Struct und Zeiger arbeiten kann (nicht ganz aber einbisschen schon):-)

Dank dir viel mals
 
Zurück