Rückgabe eines return Wertes für die aktualisierte Ausgabe



  • Hi !

    Bin mal ein bisschen weiter gekommen mit meinem Programm. Jetzt stoße ich aber auf das Problem, das ich eine Wert in ein anderen Programmteil übergeben möchte. Praxisnah erläutert , möchte ich folgendes realisieren:
    #Ich habe anfangs in itsKontostand =2000 euro. Jetzt hebe ich (leider nur rein virtuell 😉 ) 50 Euro von meinem Konto ab und möchte den Wert natürlich von meinem Konto abziehen. Sprich 2000-50 (ist ja leicht zu machen) aber mit einer return Funktion kann ich den neuen Wert also die 1950 euro nicht an itsKontostandNeu übergeben.
    Also ich würde gerne den Rückgabewert von „int Kontostand::GetKontostandNeu()“ an das Hauptprogramm zurückgeben und wenn ich dann noch mal Kontostand aufrufe, dass das Programm weiß, es ist weniger geworden.

    Dachte eigentlich das die Variable ( die ja nur im Unterprogramm vorhanden ist ) mit return nach aussen gegeben wird, so dass man diese weiter benutzen kann ( oder hat das mit lokaler und globaler Variable zu tun ?)

    Ich hoffe ihr versteht was ich meine ( für mich ist das Programm schon recht komplex).

    Da fällt mir noch ein , als zweites habe ich mit Hilfe von fstream (binär) Dateien erstellen lassen durch den Benutzer praktisch , der sich vor dem benutzen in einem anderen Programm erst ein Konto anlegen soll.
    Wie eben schon angesprochen sind die Daten aber binär. Unter Linux konnte ich die nicht ändern , aber unter Windows schon und mit normalen Daten wie Name , Bank, Nr etc beschreiben. Mein Bankautomat liesst diese Daten beim Start auch ein , indem es den Benutzer nach seinem Namen fragt und es sich dann die Daten vom Benutzer aus der Datei zieht.Später möchte ich den neuen Kontostand dann noch da rein schreiben lassen. Den dadurch habe ich ja die Möglichkeit meine Daten dauerhaft zu speichern und zu aktualisieren !
    Wie schaffe ich es aber ( kenne nur den Befehl ios::binary) das die Daten vom User im Klartext gespeichert werden ?

    Gruß,
    Dirk

    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    int menue();
    int menueGeldkarte();
    int Auszahlung();
    void ItsKontostand();  //Prototypen
    void Geldkarte();
    int ItsKontostandNeu();
    void KarteLaden();
    void KarteEntladen();
    void Abbruch();
    
    //****** Klasse Kontostand - Hauptklasse bald public für anerde******
    class Kontostand
    {
    public:
    	Kontostand() {}
    	~Kontostand() {}
    
    	int GetKontostand();
    	int GetKontostandNeu();
    	void SetKontostandNeu(int) {}
    
    public:
    
    	int itsKonto;
    	long KontoNeu;
    	long temp;
    	long temp2;
    };
    
    //******Festlegung des Kontostandes der Klasse Konto für angemeldeten Benutzer******
    int Kontostand::GetKontostand()
    {
    
    	itsKonto = 2000;
    	int &rItsKonto =itsKonto;
    	return rItsKonto;
    }
    
    //******Deklaration des Kontostandes nach dem Abheben von 50 Euro - leider noch statisch******
    int Kontostand::GetKontostandNeu()
    {
         temp = 2000;
         temp2 = 50;
         KontoNeu = temp-temp2;
         return KontoNeu;
    }
    
    //******Hauptprogramm von Bankautomat******
    
    int main()
    
    {
    
    	cout <<"\t*******Willkommen*******\n\n\n";
    	cout <<"Bitte fueren sie ihre Karte ein: \n";
    
    //******Einlesen der Kundendaten aus Konto.c
    char filename[80];
    cout <<"Ihr Nachname : ";
    cin >> filename;
    ifstream fin(filename);
    char ch;
    while (fin.get(ch))
    cout <<ch;
    fin.close();
    
    	cout <<"Vielen Dank\n\n\n";
    
    	bool exit = false;
    	for(;;) //Endlosschleife
    	{
    		int choice = menue();
    		switch (choice)
    		{
    		case (1): ItsKontostand();
    			break;
    		case (2): Auszahlung();
    			break;
    		case(3): Geldkarte();
    			break;
    		case 4: ItsKontostandNeu();
    			break;
    		case (5): exit = true ;
    			break;
    		default: cout <<"Bitte erneut waehlen!\n";
    			break;
    		}
    
    		if(exit)
    			break;
    	}
    
    	return 0;
    }
    
    //***************************************Unterprogramme***********************************************
    
    //******Prototyp Unterprogramm Auszahlung()
    int Auszahlung()
    
    {
        int betrag,pin;
        int KontoNeu;
        //Kontostand test;
    	int PIN = 0000;
    	cout <<"Bitte waehlen sie eine Betrag <= 100 Euro\n";
    	cin >>betrag;
    
    	if (betrag <=100)
    	{
    		cout <<"\tBitte geben sie ihren PIN ein: \n";
    		cin >>pin;
    
    		if(PIN == pin)
    		{
     	        cout <<"Einen Moment bitte, der Betrag von " <<betrag<< "Euro wird ausgegeben\n";
    		    return betrag;   
    
               }
               else
               {        
                   for ( int i = 0; i>=3 ; i++)
                   {
    
                       if (i ==3)
                       {cout <<"Der Eingegeben PIN war falsch - .Versuch\n";
                        cout <<"Karte gesperrt!!";
                        cout << i;
                        }
                        }
                   }
               }
               }
    
    //******Prototyp Unterprogramm Kontostand vor dem Abheben******
    void ItsKontostand()
    {
    Kontostand neu;
    
    cout <<"Ihr Kontostand betraegt : " <<neu.GetKontostand() << " Euro " << endl;
    
    }
    
    //******Prototyp Unterprogramm Kontostand nach dem Abheben******
    int ItsKontostandNeu()
    {
    Kontostand Diba;
    cout <<"Ihr Kontostand betraegt : " <<Diba.GetKontostandNeu() << " Euro " << endl;
    }
    
    //******Prototyp Unterprogramm der Funktion Geldkarte - noch in Arbeit******
    
    //******Kontostand der Geldkarte******
    void Geldkarte()
    {
    	bool exit = false;
    	for(;;) //Endlosschleife
    	{
    		int choiceKarte = menueGeldkarte();
    		switch (choiceKarte)
    		{
    		case (1): KarteLaden();
    			break;
    		case (2): KarteEntladen();
    			break;
    		case(3): exit = true ;
    			break;
    		default: cout <<"Bitte erneut waehlen!\n";
    			break;
    		}
    
    		if(exit)
    			break;
    	}
    
    }
    
    //*********Aufruf des Hauptprogramm Menues*********
    int menue()
    {
    	int choice;
    	cout <<"\t*********MENUE*********\n\n";
    	cout <<"\n (1)Kontostand\n (2)Auszahlung\n (3)Geldkarte\n (4)Neuer Kontostand\n (5)Beenden\n";
    	cin >> choice;
    	return choice;
    }
    
    //*********Aufruf des Unterprogramm Menues Geldkarte*********
    int menueGeldkarte()
    {
    	int choiceKarte;
    	cout <<"\t*********MENUE Geldkarte********\n\n";
    	cout <<"\n (1)Karte Laden\n (2)Karte entladen\n (3)Beenden\n ";
    	cin >> choiceKarte;
    	return choiceKarte;
    }
    
    //******Option Geldkarte Laden - noch in Arbeit******
    void KarteLaden()
    {
    cout <<"Keine Daten\n";
    }
    
    //******Option Geldkarte Entladen - noch in Arbeit******
    void KarteEntladen()
    {
    cout <<"Leer\n!";
    }
    
    //******Option Geldkarte Abbruch - noch in Arbeit******
    void Abbruch()
    {
    for (int abbruch = 0 ;abbruch <=1 ;)
    {
    break;
    }
    }
    


  • Sequentiell schreiben:
    Also binär ist beim Speichern von Klassen eigentlich schöner. Aber du kannst auch einfach sämtliche attribute auf einen Filestream "werfen".
    Also mit

    ofstream file("dateiname.txt", ios::out);
    

    einen stream anlegen, und dann mit

    file << konto1.kontostand << ";" << konto1.name << .......
    

    auslesen geschieht dann genau anders herum.....

    Falls ich dein anderes Problem richtig verstehe:
    Mache einfach eine Methode

    setKontostand(double KontostandNeu)
    {
        this->kontostand = KontostandNeu;
        ...
    }
    

    mit der du den neuen Betrag setzt....



  • Hallöchen !

    Um noch mal das Binäre Datei Problem anzusprechen.Dein Tip funktioniert in der hinsicht , das er das nun als .txt File speichert, aber wenn ich mit die Datei dann ansehe sind da nur ein paar kryptische Zeichen drin wie: "² W OE" 😕 Nach meinem Programm aber , sollte er die abgespeicherten Kundendaten in das File legen!
    Wenn ich mir das eingegeben auch noch mal zur Sicherheit anzeigen lassen, steht es auch richtig drin. Scheint so als würde er das in ASCII übergeben, kann das sein ?

    int FRAVO()	
    {
    cout <<"\tKundendatenerfassung fuer Kunden der Frankfurter Volksbank!\n\n";
    char filename[80];
    cout <<"Bitte Dateiname eingeben: ";
    cin >>filename;
    ofstream fout("filename.txt", ios::out);
    if(!fout)
    
    if(!fout)
    {
    	cout <<"Es ist nicht moeglich " <<filename << " zu oeffnen\n";
    	return(1);
    }
    int PIN,kontonum;
    float betrag;
    
    cout <<"Bitte geben sie ihre Kontonummer ein: \n";
    cin >> kontonum;
    cout <<"Bitte geben sie ihrern PIN ein: \n";
    cin >>PIN;
    cout <<"Bitte geben sie den einzuzahlenden Betrag ein\n";
    cin >> betrag;
    
    Kunde_A FRAVO(kontonum,PIN,betrag);
    cout <<kontonum;
    cout <<PIN;
    fout.write((char*) &FRAVO,sizeof FRAVO);
    
    fout.close();
    

    Die Klasse zu dem Code Abschnitt ist folgende

    class Kunde_A
    {
    	public:
    	Kunde_A(long konto,int PiN, float betrag):itsKontonummer(konto),itsPIN(PiN),itsBetrag(betrag) {}
    	~Kunde_A() {}
    
    	int GetKontonummer() {return itsKontonummer;}
    	int GetPIN() {return itsPIN;}
    
    	void SetKontonummer(int kontonummer) {itsKontonummer = kontonummer;}
    	void SetPIN(int PIN) {itsPIN = PIN;}
    	private:
    
    	int itsKontonummer;
    	int itsPIN;
    	float itsBetrag;
    };
    


  • Habe ich richtig verstanden du willst die Kundendaten im Klartext in einem File.
    Wenn das so ist dann must du sie auch im Klartext speichern.
    ersetze

    fout.write((char*) &FRAVO,sizeof FRAVO);
    

    durch

    fout << FRAVO.itsKontonummer << ";" << FRAVO.itsPIN << ";" << FRAVO.itsBetrag << endl;
    

    Kurt
    Edit: habe gerade gesehen die felder sind private. Dann besser

    fout << FRAVO.GetKontonummer() << ";" << FRAVO.GetPIN() << ";" << FRAVO.getBetrag() << endl;
    

    getBetrag() fehlt noch.



  • Jetzt klappt es !

    Danke !! 🙂 🙂

    Gruß,

    Dirk


Anmelden zum Antworten