Klasse



  • Hallo Ihr,
    ich habe ein für mich großes Problem..
    Ich möchte gerne eine Klasse erstellen...in dieser Klasse soll es möglich sein den Kontostand zu erfahren und auch etwas einzuzahlen bzw. auszugeben...
    Jetzt habe ich mir da schon einiges zusammengereimt, aber irgendwie passt alles nicht...

    Bräuchte ein paar nützliche Tips...
    Vielen Dank für eure Hilfe!

    :xmas1:

    #include <iostream>
    using namespace std;
    
    class Konto
    {
    	double kontostand;
    
    public: 
    	Konto() : kontostand(2000) {}
    
    	void einzahlen(void);
    	double auszahlen(void);
    	double getKontostand(void) { return kontostand;}
    };
    
    void Konto::einzahlen(void)
    {
    	double einzahlwert;
    	cout << " Geben Sie ein, wieviel Sie einzahlen wollen: ";
    	kontostand = kontostand + einzahlwert;
    
    }
    
    double Konto::auszahlen(void)
    {
    	double auszahlwert;
    	cout << " Geben Sie ein, wieviel Sie abheben wollen: ";
    	kontostand = kontostand - auszahlwert;
    	return kontostand;
    
    }
    
    int main()
    {
    
    	double eingabe;
    	cout << " **** Herzlich willkommen auf Ihrem Konto ***\n\n\n";
    	cout << " \n Moechten Sie Ihren Kontostand sehen? (j/n)";
    	cin >> eingabe;
    
    	Konto konto1;
    	konto1.getKontostand();
    
    	if (eingabe == 'j')
    	{
    
    		cout << " Ihr aktueller Kontostand betraegt: \n" << konto1.getKontostand() << "Euro" << endl;
    
    	}
    	if (eingabe == 'n')
    	{
    
    		cout << " Moechten Sie Geld ein oder auszahlen? (e/a)";
    		cout << " Wenn Sie das Programm verlassen moechten geben \nSie bitte v ein!\n";
    		cin >> eingabe;
    	}
    	 if (eingabe == 'e')
    	{
    		cout << konto1.einzahlen();
    
    	}
    	 if (eingabe == 'a')
    	{
    		cout << konto1.auszahlen();
    	}
    	 if (eingabe == 'v')
    	{
    		cin >> eingabe;
    		cout << " *** Herzlichen Dank für Ihren Besuch *** " << endl;
    
    	}
    	cin.get();
    
    	return 0;
    }
    


  • Fehlt doch nur noch das einlesen:

    void Konto::einzahlen(void)
    {
        double einzahlwert;
        cout << " Geben Sie ein, wieviel Sie einzahlen wollen: ";
        cin >> einzahlwert;
        kontostand = kontostand + einzahlwert;
    }
    

    und

    double Konto::auszahlen(void)
    {
        double auszahlwert;
        cout << " Geben Sie ein, wieviel Sie abheben wollen: ";
        cin >> auszahlwert;
        kontostand = kontostand - auszahlwert;
        return kontostand;
    }
    

    Ich frage mich nur, wie du den ganzen Rest hingekriegt hast, wenn du unten in main() weißt, wie man cin benutzt, aber oben bei den Methodendefinitionen nicht...

    Felix :xmas2:



  • War mir nicht sicher...

    sobald ich 'j' eingebe und enter drücker schliesst das Fenster ohne eine aktion...

    viele warnings...z.b. das auszahlwert ohne initialisierung verwendet wurde, was heisst das genau?

    irgendwo muss noch ein Fehler sein... :xmas1:



  • Hmm probier mal statt cin.get() am Ende cin >> eingabe;

    MfG



  • das mit dem schließen, guck mal hier in die faq, bei dem problem das ein programm ncihts macht oder nur ganz kurz auftaucht. Weiterhin:

    in main musst du char eingabe und nicht double eingabe nehmen. DOuble speichert zahlen, du willst aber buchstaben eingeben, also nimmst du char.



  • Die Tipps waren ja schon mal hilfreich...
    jetzt gibt er wenigstens schon den Kontostand aus...danach is allerdings schluß...
    kann ich das ganze auch umschreiben?

    Stimmt das wirklich? Oder habe ich was vergessen?

    if (eingabe == 'e')
    	{
    		konto1.einzahlen();
    
    	}
    

    VIelen Dank



  • Aus Code lernt man

    #include <iostream> 
    
    class Konto 
    { 
        double kontostand; 
    
    public: 
        Konto() : kontostand(2000) { }
    	~Konto() { }
    
        void Einzahlen(); 
        void Auszahlen(); 
        double getKontostand() { return kontostand; } 
    }; 
    
    void Konto::Einzahlen() 
    { 
        double einzahlwert; 
    
        std::cout << "Geben Sie ein, wieviel Sie einzahlen wollen: ";
        std::cin >> einzahlwert;
    
        kontostand += einzahlwert;
    } 
    
    void Konto::Auszahlen() 
    { 
        double auszahlwert; 
    
        std::cout << "Geben Sie ein, wieviel Sie abheben wollen: ";
        std::cin >> auszahlwert;
    
        kontostand -= auszahlwert; 
    } 
    
    int main() 
    { 
    	std::cout << " **** Herzlich willkommen auf Ihrem Konto *** " << std::endl << std::endl; 
    
    	char eingabe = ' ';
    
    	Konto konto1;
    
        while('v' != eingabe)
    	{
    		std::cout << std::endl << "<s> Kontostand einsehen" << std::endl;
    		std::cout << "<e> Einzahlen" << std::endl;
    		std::cout << "<a> Auszahlen" << std::endl;
    		std::cout << "<v> Beenden" << std::endl << std::endl;
    
    		std::cin >> eingabe;
    
    		switch(eingabe)
    		{
    		case 's':
    			std::cout << konto1.getKontostand() << std::endl;
    			break;
    		case 'e':
    			konto1.Einzahlen();
    			break;
    		case 'a':
    			konto1.Auszahlen();
    			break;
    		case 'v':
    			std::cout << " *** Herzlichen Dank für Ihren Besuch *** " << std::endl;
    		default:
    			break;
    		}
    	}
    
        return 0; 
    }
    


  • Problem erledigt...vielen Dank für eure Hilfe.. 🤡



  • Visual Newbie schrieb:

    double kontostand;
    

    Fataler Fehler. Nimm hier auf JEDEN FALL int!



  • Nimm halt float.

    Musst dann aber auch

    Konto() : kontostand(2000.0f) {}

    schreiben



  • Es geht hier eher darum, dass bei größeren Zahlen bei double Rundungsfehler auftreten und man deswegen (jedenfalls bei kritischen Programmen, wie bei Banken) int oder irgend einen anderen Datentyp verwendet, bei dem keine Rundungsfehler auftreten. Aber bei dem simplen Beispiel denke ich nicht, dass es wirklich viel ausmacht. Man sollte es vielleicht nur wissen, falls man später mal "richtige" Anwendungen schreibt...

    Felix :xmas1: :xmas2:



  • Hallo Visual Newbie,

    mal eine kleine Anmerkung zum Design. Es ist in der Regel von Vorteil, das Frontend und das Modell zu trennen. Das Frontend ist der Teil des Programmes, in dem Du Benuzer Eingaben erhältst und die Ausgabe machst. In obigem Fall die Konsole. Dein Model ist die Konto-Klasse.

    Du kannst nach diesem Ansatz z. B. die Buchungs-Daten in der Main abfragen und dann erst an die Konto-Klasse übergeben. Der Code währe dann Folgender.

    class Konto 
    {
    private:
        double kontostand; 
    
    public: 
        Konto(void) : kontostand(2000.0L) { }
        ~Konto(void) { }
    
        void Einzahlen(double einzahlwert) { kontostand += einzahlwert; } 
        void Auszahlen(double auszahlwert) { kontostand -= auszahlwert; }
        double getKontostand() const { return kontostand; } 
    }; 
    
    int main() 
    { 
    	std::cout << " **** Herzlich willkommen auf Ihrem Konto *** " << std::endl << std::endl; 
    
    	char eingabe = ' ';
    
    	Konto konto1;
    
        while('v' != eingabe)
    	{
    		std::cout << std::endl << "<s> Kontostand einsehen" << std::endl;
    		std::cout << "<e> Einzahlen" << std::endl;
    		std::cout << "<a> Auszahlen" << std::endl;
    		std::cout << "<v> Beenden" << std::endl << std::endl;
    
    		std::cin >> eingabe;
    
    		switch(eingabe)
    		{
    		case 's':
    			std::cout << konto1.getKontostand() << std::endl;
    			break;
    		case 'e':
    			{
    			double betrag;
    			std::cout << "Einzahlungsbetrag: ";
    			std::cin >> betrag;
    			konto1.Einzahlen(betrag);
    			}
    			break;
    		case 'a':
    			{
    			double betrag;
    			std::cout << "Auszahlungsbetrag: ";
    			std::cin >> betrag;
    			konto1.Auszahlen(betrag);
    			break;
    			}
    		case 'v':
    			std::cout << " *** Herzlichen Dank für Ihren Besuch *** " << std::endl;
    		default:
    			break;
    		}
    	}
    }
    

    Ich hoffe das hilft Dir weiter

    Viele Grüße
    Knecht


Anmelden zum Antworten