Parkautomat läuft nicht richtig



  • Kann mir das mal jemand erklären. So wie ich das sehe werden doch in dem Forum Probleme mit Programmabläufen besprochen oder?? Was ist denn dann mein Problem?? Ist das etwa kein Programmablauffehler??

    Bitte erklären!! DANKE!!

    Gruß

    falke_21



  • Im BCB-Forum geht es prinzipiell um Fragen zu Besonderheiten des BCB-Compilers und/oder der VCL-Bibliothek oder zur IDE. Dein Problem berührt nichts davon.

    In der Tat geht es bei dir um den Programmablauf. Der ist aber wie gesagt auch nicht wirklich C- oder C++-spezifisch sondern kann eher mit einem ordentlichen PAP gelöst werden. Und für solche Erörterungen ist "Rund um" perfekt geeignet.



  • Falke_21 schrieb:

    [...]Und weiterhin kann man dann keinen Beleg mehr drucken.

    Konnte man vorher aber auch nicht.

    Falke_21 schrieb:

    (1.) Kann man das auch ohne case und break befehlen machen. Evtl nur mit if und else. (2.) Und nur einer do-while schleife.

    1. Ja, ist aber vom Quellcode her länger.
    2. Nein.

    Der Grund, weshalb man nicht länger als 60 Minuten parken kann ist der, weil er die Schleife nur 3-mal durchläuft, man müsste sowas wie eine Enter-Abfrage machen, dass er die Zeit misst, und dann aufhört, sobald ENTER gedrückt wird. Das kann ich dir im BCB machen, aber in der Konsolenprogrammierung weiß ich nicht, wie das geht.



  • Also ich habe das Programm mal umgeschrieben und damit folgende Fehler behoben.

    - Nicht länger als 60Minuten parken
    - Belegausdruck nicht möglich
    - Eine do-while schleife nicht möglich

    So das Programm läuft bis auf einen kleinen Schönheitsfehler optimal

    # include <iostream.h>
    # include <conio.h>
    
    int main()
    {
        int Parkdauer, Zeittakt;
        float Einheit, Betrag;
        char Taste;
        char ende = 'j';
        char GK;
    
        Zeittakt = 15;
        Parkdauer = 0;
        Betrag = 0;
        Einheit = 0.50;
        cout <<"Guten Tag \n";
        do
        {
    
          cout <<"Bitte geben Sie die Parkdauer ein :";
          cin >> Taste;
          cout <<"\n";
    
          if (Taste == 'p' || Taste == 'P')
          {
    
           Parkdauer = Parkdauer + Zeittakt;
           cout <<"Parkdauer: "<<Parkdauer<<" min\n\n";
          }
          else
          {
          if (Taste == 'o' || Taste == 'O')
          {
           cout <<"Geldkarte wird gelesen\n";
           cout <<"Betrag auf der Geldkarte ausreichend?? ";
           cin >> GK;
    
           if (GK == 'j' || GK == 'J')
           {
            cout <<"Betrag ausreichend\n";
            Betrag = Einheit * Parkdauer / Zeittakt;
            cout <<"Beleg wird gedruckt\n";
            cout <<"Zu zahlender Betrag : "<<Betrag<<" Euro\n\n\n";
            Betrag = 0;
            Parkdauer = 0;
            cout<<"Moechten Sie das Programm wiederholen? [J/N]";
            cin>>ende;
            clrscr();
           }
    
           if (GK == 'n' || GK == 'N')
           {
            cout <<"Betrag nicht ausreichend\n";
            clrscr();
           }
    
          }
          else
          {
              cout<<"!!!FEHLER!!!\n";
              cout<<"Falsche Eingabe!!\n";
              cout<<"Vorgang abgebrochen\n";
              Betrag = 0;
              Parkdauer = 0;
          }
        }
    }
    
    while(ende =='j' || ende =='J');
    
    return 0;
    }
    

    Sobald das Programm wiederholt wird soll der "neue" Benutzer begrüsst werden. Wie schaffe ich das??
    Ich denke das wird nur mit einer zweiten Schleife möglich sein, finde aber irgendwie nicht die richtige Stelle.



  • ..



  • Hatte grad nix zu tun...
    Schauts euch mal an:

    #include <iostream.h>
    #include <conio.h> 
    
    void nochmal (char * ende, int* Parkdauer, float* Betrag, int* Besucher);
    
    int main() 
    { 
        int Parkdauer, Zeittakt, Besucher=1; 
        float Einheit, Betrag; 
        char Taste; 
        char ende='j'; 
        char GK;
        Zeittakt = 15; 
        Parkdauer = 0; 
        Betrag = 0;
        Einheit = 0.50; 
        cout <<"Guten Tag \n"; 
        cout <<"Tasten: p = Parkdauer erhöhen\n        b = Bar zahlen\n        o = Mit Geldkarte zahlen\n        q = Quit\n"; 
        do 
        { 
          cout <<"Sie sind der: "<<Besucher <<". Besucher\n"; 
          cout <<"Bitte geben Sie die Parkdauer ein :"; 
          cin >> Taste; 
          cout <<"\n"; 
          if (Taste == 'p' || Taste == 'P') 
          {
           Parkdauer = Parkdauer + Zeittakt; 
           cout <<"Parkdauer: "<<Parkdauer<<" min\n\n"; 
          } 
          else 
          { 
                    if (Taste == 'b' || Taste == 'B') 
                    { 
                            cout<<"****Betrag Bar Zahlen****\n"; 
                            Betrag=Parkdauer*Einheit/Zeittakt;
                            cout<<"\nNoch zu Zahlen: "<<Betrag<<" €\n";
                            nochmal(&ende, &Parkdauer, &Betrag, &Besucher);
                    } 
                    if (Taste == 'q' || Taste == 'Q') 
                    { 
                            break; 
                    } 
                    if (Taste == 'o' || Taste == 'O') 
                    { 
                            cout <<"Geldkarte wird gelesen\n"; 
                            cout <<"Betrag auf der Geldkarte ausreichend?? "; 
                            cin >> GK; 
                            if (GK == 'j' || GK == 'J') 
                            { 
                                    cout <<"Betrag ausreichend\n"; 
                                    Betrag = Einheit * Parkdauer / Zeittakt; 
                                    cout <<"Beleg wird gedruckt\n";
                                    cout <<"Zu zahlender Betrag : "<<Betrag<<" Euro\n\n\n";
                                    nochmal(&ende, &Parkdauer, &Betrag, &Besucher);
                            }
                            if (GK == 'n' || GK == 'N')
                            {
                                    cout <<"Betrag nicht ausreichend\n";
                                    getch();
                                    nochmal(&ende, &Parkdauer, &Betrag, &Besucher);
                            }
                    }
                    if (Taste != 'b' && Taste != 'B' && GK != 'j' && GK != 'J' && GK != 'n' && GK != 'N' && Taste != 'o' && Taste != 'O')
                    {
                            cout<<"!!!FEHLER!!!\n";
                            cout<<"Falsche Eingabe!!\n";
                            cout<<"Vorgang abgebrochen\n";
                            nochmal(&ende, &Parkdauer, &Betrag, &Besucher);
                    } 
           } 
        } 
        while(ende =='j' || ende =='J'); 
        return 0; 
    }
    
    void nochmal (char * ende, int * Parkdauer, float * Betrag, int * Besucher)
    {
            getch();
            clrscr();
            cout<<"Moechten Sie das Programm wiederholen? [J/N]";
            cin>>*ende;
            clrscr();
            *Parkdauer=0; 
            *Betrag=0; 
            *Besucher=*Besucher+1;
    }
    

    😃

    Funktioniert soweit alles, "Bar" zahlen is neu 😃 😃 😃
    Auch das mit dem "neuen" Besucher funkt ...ohne Schleife! Dafür mit Funktion 😃



  • Bitte unterteil das riesen Ding mal in mehrere kleine Funktionen. Das ist ja schrecklich. 😮



  • Wiso? ich finds ok so..
    Nur, dass wenn ich es selbst programmiert hätte ein "switch" anstatt die tausend if´s da stände...



  • Hi,

    also dein Programm ist schon nicht schlecht.

    Leider bekommt der 2. Besucher die Auflistung der mögl. Befehle nicht mehr mit und müsste somit ausprobieren wofür welche Taste steht *g*

    Aber ansonsten sehr gut.

    Ich persönlich würde es auch mit anderen Befehlen schreiben als nur if und else. Leider scheint mein Lehrer nur keine Ahnung vom Programmieren haben so dass ich nicht alle Befehle benutzen darf 😞

    Die Begrüssung jedes Kunden fehlt aber noch *g*



  • Gut, dann würde ich ne Variable vorschlagen die geprüft wird, und wenn sie auf einem bestimmten Wert ist, den sie am anfang nicht hat und erst beim zweiten Kunde bekommt soll noch eine Begrüßung kommen und die Auflistung der Befehle (die du selbst ja noch gar nicht aufgelistet hattest :p )... Außerdem steht ja schon "Sie sind der x. Besucher..." dran...
    🙂

    Bezüglich deines Lehrers hat er entweder wirklich keine Ahnung oder will sicher stellen, dass ihr die Befehle die ihr gerade lernt auch wirklich kapiert 😉
    Also nich verzagen...


Anmelden zum Antworten