Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Bankomat Programm Schule

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
24.02.2005, 20:47 Uhr
hirs_cpp



Hallo erstmal,

ich habe ein(eigentlich mehrere) Problem(e)

Also wir sollten von der Schule aus ein Programm über die Ferien schreiben das wie folgt aufgebaut sein sollte:

Übung:

Bankomat

1)Kontonummer, PIN-Code, Kontostand --> private
2)Bei Kontomanipulation: PIN-Code und Kontonummer abfragen und auf Richtigkeit prüfen --> Bei Falscheingabe: Meldung und neuerlicher Versuch(Pin 3x falsch --> Programmabbruch)
3) Menü: 1 Geld abheben
2 Geld einzahlen
4) Am Ende: Neuen Kontostand ausgeben


Ich habe es soweit schon einmal gemacht und es funktioniert auch weitgehend, aber es gibt ein paar Probs: der Kontostand soll float sein, ist er auch, aber wenn ich geld behebe oder einzahle und nachher eben addiere oder subtrahiere und danach den neuen Kontostand ausgebe ist es immer eine gerade Zahl(int).

Und noch etwas: wie funktioniert es dass ich zwei verschiedene Konten(als Klassenobjekt) deklariere und nachher im Programm zwischen Konto 1 und 2(od. x viele) auswählen muss/kann?!


hier mein bisherige Codeach ja ich bin noch programmieranfänger, lese gerade ein buch(c++ in 21 tagen by jesse liberty(falls es jemand kennt)) und will es damit lernen):


Code:
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>



class bankomat
{
public:
    int getKnr() {return Knr;};
    void setKnr(int Knrs);
    int getPin();
    void setPin(int Pins);
    float getKstand();
    void setKstand(float Kstands);
private:
    int Knr;
    int Pin;
    float Kstand;
};

void bankomat::setKnr(int Knrs)
{
    Knr = Knrs;
}

int bankomat::getPin()
{
    return Pin;
}

void bankomat::setPin(int Pins)
{
    Pin = Pins;
}

float bankomat::getKstand()
{
    return Kstand;
}

void bankomat::setKstand(float Kstands)
{
    Kstand = Kstands;
}


int main()
{int i, pinabfr, knrabfr, abfr, a;

    bankomat konto0;

    konto0.setKnr(12345);
    konto0.setPin(1001);
    konto0.setKstand(300.00);

    printf("\n ************\n *          *\n * Bankomat *      programmed by hirs\n *          *\n ************\n");
  


    printf("\n Bitte geben Sie Ihre Kontonummer ein: ");
    scanf("%d", &knrabfr);
    if(knrabfr != konto0.getKnr())
    {
        printf("\n KONTONUMMER NICHT VORHANDEN\n\n PROGRAMM WIRD NUN BEENDET");
        getch();
        cout << "\n";
        return 0;
    }



    for(i=0;i<3;i++)
    {

        printf("\n Bitte Pin-Code eingeben: ");
        fflush(stdin);
        scanf("%d", &pinabfr);

        if(pinabfr == konto0.getPin())
        {
            printf("\n Aktueller Kontostand: %.2f", konto0.getKstand());
            printf(" Euro\n Was wollen Sie tun?\n (1)Geld abheben    (2)Geld einzahlen\n ");
            break;
        }

        else
        {
            printf("\n PIN-CODE FALSCH EINGEGEBEN\n");
            printf("\n Sie haben noch ");
            printf("%d", 2-i);
            printf(" Versuche\n ");
        }

        if(i==2)
        {
            printf("\n DAS PROGRAMM WIRD NUN BEENDET\n ");
            return 0;
        }
    }

    scanf("%d", &abfr);

    if(abfr == 1)
    {
        printf("\n Bitte den abzuhebenden Betrag eingeben: ");
        scanf("%d", &a);
        konto0.setKstand(konto0.getKstand() - a);
        printf("\n Neuer Kontostand: %.2f", konto0.getKstand());
        printf(" Euro\n\n\n Auf Wiedersehen\n ");
        getch();

    }

    else if(abfr == 2)
    {
        printf("\n Bitte den einzuzahlenden Betrag eingeben: ");
        scanf("%d", &a);
        konto0.setKstand(konto0.getKstand() + a);
        printf("\n Neuer Kontostand: %.2f", konto0.getKstand());
        printf(" Euro\n\n\n Auf Wiedersehen\n ");
        getch();
    }

    else
    {
        printf("\n FALSCHE EINGABE\n\n PROGRAMM WIRD NUN BEENDET");
      
        getch();
    }
    return 0;
}



Danke im voraus

mfg hirs
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.02.2005, 20:51 Uhr
enno-tyrant
Frag nicht!


mmh, kommt mir irgendwie bekannt vor
--
...um etwas zu verstehen muß man wissen wie es funktioniert...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.02.2005, 23:03 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


hatte gerade langeweile...
hier hast du nen ansatz

C++:
#include <iostream>
#include <string>
#include <vector>


class Konto;
class Bankomat;

std::ostream& operator<<(std::ostream& , Konto&);
std::ostream& operator<<(std::ostream& , Bankomat&);


class Konto{
    
    public:

        Konto(unsigned int _kontoNr,std::string _pin,float _saldo=0):kontoNr(_kontoNr),pin(_pin),saldo(_saldo){gesperrt=false;}
        Konto(Konto& k){kontoNr=k.kontoNr;pin=k.pin;saldo=k.saldo;gesperrt=k.gesperrt;}        
        void Buchung(float delta){saldo+=delta;}
        bool validPin(std::string _pin){return pin==_pin;}
        unsigned int getKontoNr(){return kontoNr;}
        void konto_entsperren(){gesperrt=false;}
        void konto_sperren(){gesperrt=true;}
        bool ist_gesperrt(){return gesperrt;}
        float getSaldo(){return saldo;}
        void changePin(std::string _pin);

        friend std::ostream& operator<<(std::ostream& , Konto&);
        
    private:
        unsigned int kontoNr;
        std::string pin;
        float saldo;
        bool gesperrt;

};

std::ostream& operator<<(std::ostream& os,Konto& k){
    os<<"Kontonummer: "<<k.kontoNr<<"\tPin: "<<k.pin<<"\tSaldo: "<<k.saldo<<"\tSperrung: "<<k.gesperrt<<std::endl;
    return os;
}


void Konto::changePin(std::string pin){std::cout<<"Not yet implemented"<<std::endl;}


class Bankomat{

    public:
        Bankomat(){angemeldet=-1;}
        Bankomat(std::vector<Konto*>& _kontenliste):kontenliste(_kontenliste){angemeldet=-1;}
        ~Bankomat(){for(int i=0;i<kontenliste.size();++i)delete kontenliste[i];}
        void addKonto(Konto &k){kontenliste.push_back(new Konto(k));}
        void Transaktion();

        friend std::ostream& operator<<(std::ostream& , Bankomat&);


    private:
        void Anmeldung();
        int angemeldet;
        std::vector<Konto*> kontenliste;
    
};

std::ostream& operator<<(std::ostream& os,Bankomat& b){
    for(int i=0;i<b.kontenliste.size();++i)
        os<<*b.kontenliste[i];
    return os;
}


void Bankomat::Anmeldung(){

    int i,j,kontoNr;
    std::string pin;
    
    std::cout<<"Bitte geben Sie Ihre Kontonummer ein: ";
    std::cin>>kontoNr;

    for(i=0;i<kontenliste.size();++i){
        if(kontenliste[i]->getKontoNr()==kontoNr && !kontenliste[i]->ist_gesperrt())break;
    }
    
    if(i==kontenliste.size()){
        std::cout<<"Konto existiert nicht oder ist gesperrt"<<std::endl;
        return;
    }
    
    for(j=0;j<3;++j){
        std::cout<<"Bitte Pin-Code eingeben: ";
        std::cin>>pin;
        if(kontenliste[i]->validPin(pin))break;
    }
    if(j==3){
        std::cout<<"3 mal falsche Pin, Konto wird gesperrt"<<std::endl;
        kontenliste[i]->konto_sperren();
        return;
    }
    
    angemeldet=i;

}

void Bankomat::Transaktion(){

    int wahl;
    float betrag;
    std::string frage[2];
    frage[0]="\n Bitte den abzuhebenden Betrag eingeben: ";
    frage[1]="\n Bitte den einzuzahlenden Betrag eingeben: ";

    Anmeldung();

    if(angemeldet<0)return;

    for(wahl=-4711;wahl!=3;){
        std::cout<<"Ihr aktueller Kontostand ist: "<<kontenliste[angemeldet]->getSaldo()<<std::endl;
        std::cout<<"(1)Abheben"<<std::endl;
        std::cout<<"(2)Einzahlen"<<std::endl;
        std::cout<<"(3)Ende"<<std::endl;
        std::cout<<"Ihre Wahl?: ";
        std::cin>>wahl;
    
        if(wahl==1 || wahl==2)
            std::cout<<frage[wahl-1];
            std::cin>>betrag;
            kontenliste[angemeldet]->Buchung(betrag*(wahl==1?-1:1));
        
    }
    std::cout<<"Feierabend"<<std::endl;
    angemeldet=-1;

}



int main(){


    Bankomat bm;
    bm.addKonto(Konto(1,"abc",0));
    bm.addKonto(Konto(2,"abc",100));
    bm.addKonto(Konto(3,"abc",-30));
    bm.addKonto(Konto(4,"abc",25));
    bm.addKonto(Konto(10,"abc",-1000));
    bm.addKonto(Konto(123,"abc",666666));
//    std::cout<<bm;

    bm.Transaktion();

}




--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.02.2005, 12:42 Uhr
hirs_cpp



Danke sehr für die Antwort, ich bin leider noch Anfänger in sachen C++ programmieren. Also mit deinem Code kenn ich mich nicht so ganz aus, muss mal mein Buch weiter lesen, mal sehn wie es dann aussieht

mfg hirs


PS: leicht möglich :-) --> enno-tyrant
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.02.2005, 12:48 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Also mit deinem Code kenn ich mich nicht so ganz aus


also soviel anders hab ich doch nicht gemacht.. das einzige was ich noch hinzugefügt habe ist den << operator zu überladen damit man sich ganz einfach die kontodaten ausgeben lassen kann...

also z.b. mit std::cout<<bm; schmeisst der alle Bankkonten aus... kannst das natürlich auch von hand machen und jedes attribut einzeln ansprechen...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.02.2005, 12:52 Uhr
hirs_cpp



na net dasst kompliziert geschrieben hast, nur i kenn mi no net aus mit operator, und des mit dem std::ostream& was i no net ganz, i hoff des kommt in dem buch vor, jetz war i grad bei klassen und schleifen, jetz kommen Zeiger dran.

Danke noch mal

mfg hirs
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: