000
21.05.2006, 11:45 Uhr
FlorianW
|
Hallo, ich arbeite mich gerade in Klassen und Dateien mit c++ ein und wollte zur übung ein programm schreiben, das Daten eines Bankkontos verarbeitet und in eine txt datei schreibt, allerdings funtionirt das nicht so wie ich mir das vorstelle, ich hab schon einige stunden damit verbracht und verstehe nicht, was ich falsch gemacht habe... Hier erstmal der Quellcode:
C++: |
#include <iostream> #include <fstream> #include <string> #include <windows.h>
using namespace std;
int wahl = 0; int wahlb = 0;
class konto { public: string name; string passwort; string passworteing; string guthabenstr; string kontotyp; string nameneu, passwortneu, guthabenstrneu, kontotypneu; int guthabenint; char guthabeninttostring[100]; int k;
void kontoeinlesen() //Funktion um die vorhandenen daten auszulesen { ifstream konto_lesen;
string dateiname = "kontodatei.txt";
konto_lesen.open(dateiname.c_str(), ios_base::in);
cout<<"Folgende Konten sind gespeichert und koennen bearteitet werden:"<<endl; int i = 1; while (!konto_lesen.eof()) { getline( konto_lesen, name); getline( konto_lesen, passwort); getline( konto_lesen, guthabenstr); getline( konto_lesen, kontotyp); cout<<i<<")"<<name<<endl; i++; };
kontoauswaehlen();
cout<<name<<endl; cout<<guthabenstr<<endl; cout<<kontotyp<<endl<<endl<<endl;
cout<<"\nGeben Sie das Passwort fuer dieses Konto ein:"<<endl; cin>>passworteing; if(passworteing != passwort) { cout<<endl<<endl<<"FALSCHES PASSWORT!!!"<<endl<<endl<<endl; } else { cout<<endl<<endl<<"Passwort als Korrekt erkannt!"<<endl<<endl<<endl;
cout<<"Was moechten Sie bearbeiten?\n1)Name\n2)Kontostand\n3)Kontotyp\n4)Alles"<<endl; cin>>wahl;
switch (wahl) { case 1: fflush(stdin); cout<<"Geben Sie den neuen Namen ein:"<<endl; getline( cin, nameneu); break;
case 2: fflush(stdin); cout<<"Geben Sie den neuen Kontostand ein:"<<endl; getline( cin, guthabenstrneu); break;
case 3: fflush(stdin); cout<<"Geben Sie den neuen Kontotyp ein:"<<endl; getline( cin, kontotypneu); break;
case 4: fflush(stdin); cout<<"Geben Sie den neuen Namen ein:"<<endl; getline( cin, nameneu); fflush(stdin); cout<<"Geben Sie den neuen Kontostand ein:"<<endl; getline( cin, guthabenstrneu);
fflush(stdin); cout<<"Geben Sie den neuen Kontotyp ein:"<<endl; getline( cin, kontotypneu); break;
default: cout<<"\n\n\t\t!!!UNGUELTIGE EINGABE!!!"<<endl;
};
cout<<name<<endl; cout<<guthabenstr<<endl; cout<<kontotyp<<endl;
cout<<endl<<endl<<"Moechten Sie die aenderungen Speichern?\n1)Ja\n2)Nein"<<endl; wahl = 0; cin>>wahl;
switch (wahl) { case 1: kontoschreiben(nameneu, passwortneu, guthabenstrneu, kontotypneu); // kontoschreiben2(i);
break;
case 2:
break;
default: cout<<"\n\n\t\t!!!UNGUELTIGE EINGABE!!!"<<endl; };
};//Ende else für pw eingabe
konto_lesen.close();
};
void kontoauswaehlen() //teilfuntion, gehört zu 'kontoeinlesen()' {
ifstream konto_lesen;
string dateiname = "kontodatei.txt";
konto_lesen.open(dateiname.c_str(), ios_base::in);
cout<<"Welches Konto bearbeiten?"<<endl; cin>>k;
while (k > 0) { getline( konto_lesen, name); getline( konto_lesen, passwort); getline( konto_lesen, guthabenstr); getline( konto_lesen, kontotyp); k--; };
konto_lesen.close();
};
int kontoschreiben(string nameneu, string passwortneu, string guthabenstrneu, string kontotypneu) //teilfuntion, gehört zu 'kontoeinlesen()' GEHT NOCH NICHT {
ifstream konto_lesen;
string dateiname = "kontodatei.txt";
konto_lesen.open(dateiname.c_str(), ios_base::in);
string name[100], passwort[100], guthabenstr[100], kontotyp[100];
// k--; int i=0;
while (konto_lesen.eof() == false) { getline( konto_lesen, name[i]); getline( konto_lesen, passwort[i]); getline( konto_lesen, guthabenstr[i]); getline( konto_lesen, kontotyp[i]); i++; };
konto_lesen.close();
ofstream konto_schreiben; // string dateiname = "kontodatei.txt";
konto_schreiben.open(dateiname.c_str(), ios_base::out);// | ios_base::app);
while(i >= 0) { konto_schreiben<<name[i]<<endl; konto_schreiben<<passwort[i]<<endl; konto_schreiben<<guthabenstr[i]<<endl; konto_schreiben<<kontotyp[i]<<endl; i--; };
konto_schreiben<<name<<endl; konto_schreiben<<passwort<<endl; konto_schreiben<<guthabenstr<<endl; konto_schreiben<<kontotyp;
konto_schreiben.close();
return i; };
void kontoschreiben2(int i) { ofstream konto_schreiben; string dateiname = "kontodatei.txt";
konto_schreiben.open(dateiname.c_str(), ios_base::out);
while(i >= 0) { konto_schreiben<<name[i]<<endl; konto_schreiben<<passwort[i]<<endl; konto_schreiben<<guthabenstr[i]<<endl; konto_schreiben<<kontotyp[i]<<endl; i--; };
konto_schreiben<<name<<endl; konto_schreiben<<passwort<<endl; konto_schreiben<<guthabenstr<<endl; konto_schreiben<<kontotyp;
konto_schreiben.close();
};
};
int main() { konto test;
test.guthabenint = 0;
cout<<"Konto Aendern:"<<endl; test.kontoeinlesen(); return 0; };
|
dazu gehört noch die datei (kann auch anders aussehen, halt nach dem prinzip): (der name muss 'kontodatei.txt' lauten)
Code: |
Michael Schumacher pw1 150 Sparkonto Oliver Kahn pw2 222 Girokonto Ralf Schumacher pw3 500 Sparkonto
|
Mein problem ist, dass wenn ich ein konto verändere und es speichern möchte geht das nicht, in der datei stehen nur die alten daten und irgendwelcher müll.
kann mir jemend helfen? Gruss, Florian |