Bekomme Ausgabe einer gespeicherten Datei nicht hin
-
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.3Irgendwo 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);