stream benutzen
-
"system("PAUSE");" wartet einfach nur auf einen Tastendruck*, "return EXIT_SUCCESS;" beendet die main() - und damit auch das komplette Programm. Wenn du irgendwas mit den eingelesenen Büchern machen willst, muß das vorher geschehen.
(und eventuell solltest du deine komplette Menü+Arbeit Struktur in eine Schleife "do{...}while(eingabe!="ende");" einschließen)* in der Konsolen-FAQ findest du übrigens elegantere Methoden, die Konsole beim Programmende offen zu halten.
-
ich hab zwei klassen, bücher und mitglieder, beide sollen in eine liste gespeichert werden also am besten eine datei damit sie auch gespeichert bleiben.
also in der funktion buch_anlegen()
erschaffe ich dann die datei via
ifstream test("usr.dat",ios::binary);
und wie lege ich jetzt den ersten datensatz an ?
class buecher
{
public:
char verliehen[10];
char datum_verleih[10];
char datum_rueck[10];
char nummer[5];
char titel[20];
char autor[20];
char kategorie[20];
char verlag[20];
char jahrgang[10];
};
-
Indem du einfach alle Elemente des Buches hintereinander per test>>... einliest (dazu mußt du wissen, in welcher Reihenfolge die Daten in der Datei eingetragen sind).
Da in der Datei mehrere Bücher stehen können, benötigst du eine Schleife, die bis zum Dateiende liest (while(!test.eof()) und jeden Datensatz per push_back() in deine Liste packt.btw solltest du statt der char[]-Elemente lieber std::string verwenden.
PS: Und bitte öffne die Datei mit "ios::binary|ios::in"
-
ich muss wissen wie die Daten in der Datei eingetragen sind also muss ich vorher die Datei erschaffen, wie mach ich das?
ok mach ich mit "ios::binary|ios::in" aber warum?
ich dachte mit diesem befehl erschaffe ich die datei
-
hild schrieb:
ich muss wissen wie die Daten in der Datei eingetragen sind also muss ich vorher die Datei erschaffen, wie mach ich das?
Indem du einen ofstream eröffnest und die Daten dort reinschreibst (nachdem du sie von Tastatur abgefragt hast).
(alternativ kannst du auch den Editor nehmen und die Datei direkt anlegen)ok mach ich mit "ios::binary|ios::in" aber warum?
ich dachte mit diesem befehl erschaffe ich die dateiNein, ein ifstream erwartet eine vorhandene Datei und liest die ein - ein ofstream erschafft notfalls eine neue Datei und kann dort etwas reinschreiben.
-
immernoch endet die Konsole ohne das die Funktion sozusagen sichtbar wird.
void buch_anlegen()
{char x;
do{cout<<"Neues Buch anlegen"<<endl;
ifstream test("usrd.dat",ios::in);
if(!test)
cout<<"Keine Datei gefunden\n";cout<<"Soll eine neue Datei erstellt werden?";
cout<<" j oder n";
cin>>x;
if(x == 'j')
ofstream datei("usrd.dat",ios::out);else
{
char y;
cout<<"Zurück zur Auswahl /n j oder n";
cin>>y;
if(y == 'j')
uebersicht();
else return;
}
}while(x != 1);
}
-
hier läuft ja nichts schief denk ich .
switch(zahl){
case 1:{void eingang();break;}
case 2:{void ausgang();break;}
case 3:{void buch_anlegen();break;}
case 4:{void buch_loeschen();break;}
case 5:{void mitglied_anlegen();break;}
case 6:{void mitglied_loeschen();break;}
case 7:{void mitglied_aendern();break;}
case 8:{void buecher_sehen();break;}
case 9:{void mitglieder_sehen();break;}}
-
Doch, da sind die "void"s zu viel - du deklarierst jeweils eine lokale Funktion und verlässt den switch().
(PS: kleiner Tip: mit cpp-Tags sehen deine Code-Beispiele viel schöner aus ;))
-
ok, leider hab ich jetzt ein linkererror
[Linker error] undefined reference to `eingang()'
-
so leider auch nicht.
case '1':eingang();break;
case '2':ausgang();break;
-
Ja, irgendwo brauchst du diese Funktionen ja auch, wenn du sie verwenden willst
void eingang() { ... } //etc.
Dort packst du halt das rein, was du in den jeweiligen Arbeitschritten erledigen willst.
PS: Bevor du weiter rumstocherst, such dir ein vernünftiges C++ Tutorial und bring dir die Grundlagen der Sprache bei.
-
JA, jetzt seh ich es die buch_anlegen wird garnicht im linker error aufgeführt.
Kennst du ein paar gute Tutorials ?
es klappt jetzt ich komm zur anlegen aber ich glaube die do while is nich ganz ok
while(x != 1); wie sag ich denn das es solange sichtbar bleiben soll ?