?
Schreibe gerade ein Programm zur Bücherverwaltung. Habe alles soweit fertig(klappt auch bis auf`s BuecherLaden), nur mit der Ausgabe(BuecherLaden) meiner zuvor gespeicherten Datei klappt es nicht so richtig. Ich möchte die Datei mit gesamten Inhalt ausgeben, zB:
Buch Nr. 1
Titel: blabla
Autor: ebenso
ISBN-Nr: 123
Preis:12.3
Irgendwo steckt in meinem Programm der Fehler, kann mir da einer von Euch helfen?
schon mal Danke an Euch alle
// Implementierungsdatei des Moduls 'textfiles.h'
// textfiles.cpp
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;
#include "textfiles.h"
int eingabe_m;
string eingabe, ausgabe;
//Variablen für die Datei einlesen
ifstream strom; //strom zum Lesen des Dateistroms
ofstream schreiben;
string dateiname;
//Variablen für die Anzahl der Bücher im Schrank
unsigned anzahl_buecher; //anzahl_buecher Anzahl der Buecher im Schrank
unsigned aktuelle_buecher; //aktuelle_buecher Zählvariable für Schleifen
const int max_buecher=200; //maximale Anzahl der Buecher im Buecherschrank
//Variablen für die Titel Suche
string autor, verlag, titel;
string nummer;
string isbn;
string E_jahr;
string preis;
//Suche nach dem Buchautor
string Such_Autor; //Variable zum Suchen des Autornamens
//-----------------------------------------------------------------------------
//Anlegen einer Struktur zum Speichern für ein Buch
struct buecher
{
string titel; //Variable für den Titel
string autor; //Variable für den Autor
string E_jahr; //Variable für den Erscheinungsjahr
string verlag; //Variable für den Verlag
string preis; //Variable für den Preis
string isbn; //Variable für den ISBN-Nummer
};
//-----------------------------------------------------------------------------
//buecherschrank aufstellen
buecher buecherschrank[max_buecher];
//-----------------------------------------------------------------------------
//buecher aus Datei einlesen
void BuecherAnlegen(void)
{
//Schleifenzähler für die Anzahl der zu speichernden Bücher.
cout << "Wieviele Buecher moechten Sie anlegen? ";
cin >> anzahl_buecher;
cout << endl;
//Schleife zum manuellen Einlesen der Daten
for (aktuelle_buecher=0; aktuelle_buecher < anzahl_buecher; ++aktuelle_buecher)
{
cout << "Buch " << aktuelle_buecher + 1 << endl;
cout << "--------------------------------------" <<endl;
cout << "ISBN-Nummer:.......";
cin >> buecherschrank[aktuelle_buecher].isbn;
cout << "Buchtitel..........";
cin >> buecherschrank[aktuelle_buecher].titel;
cout << "Autor..............";
cin >> buecherschrank[aktuelle_buecher].autor;
cout << "Erscheinungsjahr...";
cin >> buecherschrank[aktuelle_buecher].E_jahr;
cout << "Preis..............";
cin >> buecherschrank[aktuelle_buecher].preis;
cout << "Verlag.............";
cin >> buecherschrank[aktuelle_buecher].verlag;
}
cout << endl << endl << endl;
TitelSortieren();
menueAufruf();
}
//-----------------------------------------------------------------------------
void BuecherAusgeben(void)
{
for (aktuelle_buecher=0; aktuelle_buecher < anzahl_buecher; ++aktuelle_buecher)
{
cout << "Buch " << aktuelle_buecher + 1 << endl;
cout << "ISBN-Nummer:......." << buecherschrank[aktuelle_buecher].isbn << endl;
cout << "Buchtitel.........." << buecherschrank[aktuelle_buecher].titel << endl;
cout << "Autor.............." << buecherschrank[aktuelle_buecher].autor << endl;
cout << "Erscheinungsjahr..." << buecherschrank[aktuelle_buecher].E_jahr << endl;
cout << "Preis.............." << buecherschrank[aktuelle_buecher].preis << endl;
cout << "Verlag............." << buecherschrank[aktuelle_buecher].verlag << endl;
cout << "--------------------------------------" << endl << endl;
}
}
//-----------------------------------------------------------------------------
//buecher im Schrank sortieren
void TitelSortieren(void)
{
bool tausch ;
do
{
tausch = false;
for (aktuelle_buecher = 0; aktuelle_buecher < anzahl_buecher-1; ++aktuelle_buecher)
{
if (buecherschrank[aktuelle_buecher].titel > buecherschrank[aktuelle_buecher+1].titel)
{
// Variable nur für schleife
//Speichern der Werte in einer Hilfsvariable (Dreieckstausch)
titel = buecherschrank[aktuelle_buecher].titel;
autor = buecherschrank[aktuelle_buecher].autor;
E_jahr = buecherschrank[aktuelle_buecher].E_jahr;
verlag = buecherschrank[aktuelle_buecher].verlag;
preis = buecherschrank[aktuelle_buecher].preis;
nummer = buecherschrank[aktuelle_buecher].isbn;
//Vertauschen der Strukturfelder
buecherschrank[aktuelle_buecher].titel = buecherschrank[aktuelle_buecher+1].titel;
buecherschrank[aktuelle_buecher].autor = buecherschrank[aktuelle_buecher+1].autor;
buecherschrank[aktuelle_buecher].E_jahr = buecherschrank[aktuelle_buecher+1].E_jahr;
buecherschrank[aktuelle_buecher].verlag = buecherschrank[aktuelle_buecher+1].verlag;
buecherschrank[aktuelle_buecher].preis = buecherschrank[aktuelle_buecher+1].preis;
buecherschrank[aktuelle_buecher].isbn = buecherschrank[aktuelle_buecher+1].isbn;
//Zürückschreiben der alten Werte aus den Hilfsvariablen in den Bücherschrank
buecherschrank[aktuelle_buecher+1].titel = titel;
buecherschrank[aktuelle_buecher+1].autor = autor;
buecherschrank[aktuelle_buecher+1].E_jahr = E_jahr;
buecherschrank[aktuelle_buecher+1].verlag = verlag;
buecherschrank[aktuelle_buecher+1].preis = preis;
buecherschrank[aktuelle_buecher+1].isbn = nummer;
tausch = true;
}
}
}
while (tausch);
}
//-----------------------------------------------------------------------------
void AutorSuchen(void)
{
cout << "Bitte geben Sie den Nachnamen des Autors ein, den Sie suchen : ";
cin >> Such_Autor;
bool such = false;
for (aktuelle_buecher=0; aktuelle_buecher <= anzahl_buecher;)
{
if(buecherschrank[aktuelle_buecher].autor == Such_Autor)
{
such = true;
break;
}
else
aktuelle_buecher++;
}
if (such == false)
{
cout << "Der Autor "<< Such_Autor << " wurde gefunden"<<endl;
cout<<endl;
}
else
cout << "Der Autor " << autor <<" wurde nicht gefunden !";
menueAufruf();
}
//-----------------------------------------------------------------------------
//Menue Aufruf
void menueAufruf(void)
{
cout << " *****************************************************************" << endl;
cout << " * *" << endl;
cout << " * *" << endl;
cout << " * *" << endl;
cout << " * *" << endl;
cout << " * Herzlich Willkommen *" << endl;
cout << " * *" << endl;
cout << " * *" << endl;
cout << " * *" << endl;
cout << " * Ihre Auswahlmoeglichkeiten: *" << endl;
cout << " * *" << endl;
cout << " * 1.Buecher <Anlegen> *" << endl;
cout << " * 2.Buecher <Speichern> *" << endl;
cout << " * 3.Buecher <Laden> *" << endl;
cout << " * 4.Autor <Suchen> *" << endl;
cout << " * 5.Programm <Ende> *" << endl;
cout << " * *" << endl;
cout << " * *" << endl;
cout << " *****************************************************************" << endl;
cout<<endl<<endl;
cout << " Ihre Auswahl: ";
cin >> eingabe_m;
switch(eingabe_m)
{
case 1 : BuecherAnlegen(); break;
case 2 : BuecherSpeichern();break;
case 3 : BuecherLaden(); break;
case 4 : AutorSuchen(); break;
case 5 : cout << "Das Programm wird beendet!";
cout <<endl<<endl;
}
}
//-----------------------------------------------------------------------------
bool openForReading(ifstream & s, string filename)
{
s.clear();
s.open(filename.c_str());
return s;
}
//-----------------------------------------------------------------------------
void noMoreReading(ifstream & s)
{
s.close();
}
//-----------------------------------------------------------------------------
bool openForWriting(ofstream & s, string filename)
{
s.clear();
s.open(filename.c_str());
return s;
}
//-----------------------------------------------------------------------------
void noMoreWriting(ofstream & s)
{
s.close();
}
//-----------------------------------------------------------------------------
void ProgrammeEnde(void)
{
cout << "Programm Ende";
}
//-----------------------------------------------------------------------------
void BuecherLaden(void)
{
// Dateinamen lesen und Datei öffnen
while(cout << endl << "Dateiname: ", cin >> dateiname, !openForReading(strom, dateiname))
{
cout << "Datei " << dateiname << " kann nicht geoeffnet werden." << endl;
};
aktuelle_buecher=0;
while (strom >> nummer)
{
eingabe = "";
ausgabe = "";
while(strom >> eingabe && eingabe != "***")
{
ausgabe += (eingabe += " ") ;
buecherschrank[aktuelle_buecher].titel = ausgabe;break;
while(strom >> eingabe && eingabe != "***")
{
ausgabe += (eingabe += " ") ;
buecherschrank[aktuelle_buecher].autor = ausgabe;break;
while(strom >> eingabe && eingabe != "***")
{
ausgabe += (eingabe += " ") ;
buecherschrank[aktuelle_buecher].E_jahr = ausgabe;break;
while(strom >> eingabe && eingabe != "***")
{
ausgabe += (eingabe += " ") ;
buecherschrank[aktuelle_buecher].verlag = ausgabe;break;
while(strom >> eingabe && eingabe != "***")
{
ausgabe += (eingabe += " ") ;
buecherschrank[aktuelle_buecher].preis = ausgabe;break;
while(strom >> eingabe && eingabe != "***")
{
ausgabe += (eingabe += " ") ;
buecherschrank[aktuelle_buecher].isbn = ausgabe;break;
}
}
}
}
}
}
aktuelle_buecher++;
}
anzahl_buecher = aktuelle_buecher;
cout << "Es wurde(n) " << anzahl_buecher << " Buch(Buecher) eingelesen." << endl << endl;
BuecherAusgeben();
noMoreReading(strom);
menueAufruf();
}
//-----------------------------------------------------------------------------
void BuecherSpeichern(void)
{
//Schleife Bücher zu speichern.
cout << endl;
cout << "Dateiname angeben: " ;
cin >> dateiname;
openForWriting(schreiben, dateiname);
for(aktuelle_buecher = 0; aktuelle_buecher < anzahl_buecher; aktuelle_buecher++ )
{
schreiben
<< "Buch Nr." << aktuelle_buecher + 1 << endl
<< "----------------------------------------------" << endl
<< "Titel: " << buecherschrank[aktuelle_buecher].titel << "***" << endl
<< "Autor: " <<buecherschrank[aktuelle_buecher].autor << "***" << endl
<< "Erscheinungsjahr: " << buecherschrank[aktuelle_buecher].E_jahr << "***" << endl
<< "Verlag: " << buecherschrank[aktuelle_buecher].verlag << "***" << endl
<< "Preis: " << buecherschrank[aktuelle_buecher].preis << "***" << endl
<< "ISBN-Nummer: " << buecherschrank[aktuelle_buecher].isbn << endl << endl;
//schreiben bewirkt hier genau das gleiche wie ein cout.
//Allerdings wird die Ausgabe in die Datei umgeleitet.
}
noMoreWriting(schreiben);
cout<<"fertig"<<endl<<endl;
}
//------------------------------------------------------------------
//------------------------------------------------------------------
// menue.cpp (Main)
#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
using namespace std;
#include "textfiles.h"
int main()
{
cout << " *****************************************************************" << endl;
cout << " * *" << endl;
cout << " * *" << endl;
cout << " * *" << endl;
cout << " * *" << endl;
cout << " * Herzlich Willkommen *" << endl;
cout << " * *" << endl;
cout << " * *" << endl;
cout << " * *" << endl;
cout << " * Ihre Auswahlmoeglichkeiten: *" << endl;
cout << " * *" << endl;
cout << " * 1.Buecher <Anlegen> *" << endl;
cout << " * 2.Buecher <Speichern> *" << endl;
cout << " * 3.Buecher <Laden> *" << endl;
cout << " * 4.Autor <Suchen> *" << endl;
cout << " * 5.Programm <Ende> *" << endl;
cout << " * *" << endl;
cout << " * *" << endl;
cout << " *****************************************************************" << endl;
cout <<endl<<endl;
int eingabe_m;
cout << "Eingabe: ";
cin >> eingabe_m;
switch(eingabe_m)
{
case 1 : BuecherAnlegen(); break;
case 2 : BuecherSpeichern();break;
case 3 : BuecherLaden(); break;
case 4 : AutorSuchen(); break;
case 5 : cout << "Das Programm wird beendet!";
cout <<endl<<endl;
}
return 0;
}
//---------------------------------------------------------------------
//---------------------------------------------------------------------
// Schnittstellendatei des Moduls 'textfiles.h'
// textfiles.h
// Öffnen eines Eingabestroms aus einer Textdatei
// Parameter: s - Eingabestrom
// filename - Name der Textdatei
// Rückgabe: 'true' bei erfolgreichem Öffnen, 'false' sonst
bool openForReading(ifstream & s, string filename);
//----------------------------------------------------------------------------------------------
// Schließen des Eingabestroms
// Parameter: s - Eingabestrom
// Rückgabe: ---
void noMoreReading(ifstream & s);
//----------------------------------------------------------------------------------------------
// Öffnen eines Ausgabestroms in eine Textdatei
// (existierende Textdatei wird zerstört)
// Parameter: s - Eingabestrom
// filename - Name der Textdatei
// Rückgabe: 'true' bei erfolgreichem Öffnen, 'false' sonst
bool openForWriting(ofstream & s, string filename);
//----------------------------------------------------------------------------------------------
// Schließen des Eingabestroms
// Parameter: s - Eingabestrom
// Rückgabe: ---
void noMoreWriting(ofstream & s);
//----------------------------------------------------------------------------------------------
//Akten aus Datei einlesen
//Parameter: Dateiname
//Rückgabe: Anzahl Akten
void BuecherAnlegen(void);
//----------------------------------------------------------------------------------------------
//Bücher im Schrank nach Titel sortieren
// Parameter: ---
// Rückgabe: ---
void TitelSortieren(void);
//----------------------------------------------------------------------------------------------
//Bücher im Schrank nach Autor suchen
void AutorSuchen(void);
//----------------------------------------------------------------------------------------------
//Menü aufrufen
void menueAufruf(void);
//----------------------------------------------------------------------------------------------
void BuecherSpeichern(void);
void BuecherLaden(void);
void ProgrammeEnde(void);
void BuecherAusgeben(void);