• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Rozbudowany program "bankomat" z odc. 2 , prosze o test, porade.

Object Storage Arubacloud
0 głosów
284 wizyt
pytanie zadane 23 września 2015 w C i C++ przez e4 Nowicjusz (160 p.)

Witam wszystkich

Nazwalem sie na tym forum e4, poniewaz juz po obejzeniu 3 filmow bardzo skojazylo mi sie to z szachami. Zaczalem sie uczyc C++ z filmami Miroslawa i jest to moj pierwszy jezyk programowania. Po obejzeniu filmu o petlach postanowilem jako prace domowa polaczyc zdobyta juz wiedze i edytowac program z bankomatem z odcinka drugiego tak aby byla mozliwosc wpisania blednego pinu tylko 4 razy, nastepnie karta zostaje zablokowana. Wydaje mi sie, ze podolalem temu zadaniu, jendak prosil bym was o przetestowanie programu i ewentualne propozycje, a mianowicie, czy mozna bylo by to zrobic w jakis prostszy sposob, uzywajac technik z 3 pierwszych odcinkow.

Tutaj kod programu:

----------------------------------------------------------------------------

#include <iostream>
#include <cstdlib>

using namespace std;
string PIN;
int proby=4; //ilosc mozliwych szans na  wpisanie pinu zanim karta zostanie zablokowana

int main()
{
    cout << "Witaj w bankomacie" << endl;

    do{

    cout<<"Podaj PIN:";
    cin >>PIN;


    if(PIN=="1720") // POPRAWNY PIN
    {
        cout<<"Poprawny PIN, dziekuje";
    return 1; //zakanczam program, gosciu moze wyplacac kase

    }

    else
    {
        proby= proby-1;

         if (proby>1)
        {
            system("cls");  // funkcja czyszczaca ekran z poprzedniej zawartosci
            cout<<"Niepoprawny PIN, mozesz sprobowac jeszcze "<<proby<<" razy"<<endl;
        }
        else
        {
            system("cls");  // funkcja czyszczaca ekran z poprzedniej zawartosci
            cout<<"!!!Ostatnia szansa, po wpisaniu blednego pinu karta zostanie zablokowana!!!"<<endl;
        }
    }
    }while (proby>0);
    system("cls");  // funkcja czyszczaca ekran z poprzedniej zawartosci
    cout<<"Wpisales bledny pin 3 razy, karta zostala zablokowana. Skontaktuj sie z bankiem."<<endl<<"Numer telefonu: 0123456789"<<endl;


    return 0; // zakanczam program, karta zablokowana
}

 

Z tego miejsca tez dziekuje panu Miroslawowi, za bardzo latwo przyswajalny material. Brawo.

2 odpowiedzi

+1 głos
odpowiedź 23 września 2015 przez Ehlert Ekspert (212,670 p.)
edycja 23 września 2015 przez Ehlert

Miło widzieć dobrze napisane pytanie. Kod pokolorowany. Tak wgl jak na początkującego zaskakująco czytelnie napisane. Co do kodu:

Zamień string na int. To po prostu liczba, więc nie ma potrzeby deklarować stringa.

Jeśli w pętli używasz cin'a wypada czyścić bufor

std::cin.clear();
std::cin.sync();

Jeśli kończysz program poprawnie daj return 0;

proby = proby -1;
//to samo co
proby--;
//albo
proby-=1;

 

 

komentarz 23 września 2015 przez gromula Stary wyjadacz (10,070 p.)
String nie pomija 0 na początku, int tak :)

PIN 0123

Int PIN 123

String PIN 0123
Panimajesz?
komentarz 23 września 2015 przez Ehlert Ekspert (212,670 p.)

W sumie, racja. Mój błąd wink

komentarz 23 września 2015 przez e4 Nowicjusz (160 p.)
std::cin.clear();
std::cin.sync();

w ktorym miejscu mam tego uzywac, na koncu kazdej jednej petli gdzie uzytwalem CIN?

A uzywanie return 0 dla poprawnego zakonczenia, czy poprostu standardowo uzywac return 0 do kazdego zakonczenia programu? Mam na mysli, czy w przyszlosci moga wystapic opcje, gdy bede potrzebowal uzywac np. return 3, 2, 1, 0 i wtedy 0 zawsze bedzie finalna opcja?

Dziekuje za pochwale ale prawde mowiac CodeBlock sam pokolorowal, ja tylko wkleilem tu uzywajac stosownej do tego opcji ;), a opcje z uzywaniem "//" i pisaniem komentarza zauwazylem w jakims kodzie jakiegos goscia, pomyslalem, ze to niezly pomysl, zeby sie nie gubic.
Pozniej sproboje dorobic jeszcze petle for, ktora po kilku sekundach bedzie przekierowywac do nastepnego okna. Gdy mi sie uda wkleje kod tutaj i wezme sie za  odcinek nr 4 ;)

komentarz 23 września 2015 przez Ehlert Ekspert (212,670 p.)

0 jest umowną opcją kiedy program kończy się bezbłędnie, dlatego Twoje 1 mnie zdziwiło. Bufor czyść na końcu pętli smiley

Widzę ambitnie laugh jak naszybciej składnia a potem złota obiektówka.

Pozdrawiam.

komentarz 23 września 2015 przez e4 Nowicjusz (160 p.)
edycja 23 września 2015 przez e4

Ok,  gdy wczesniej zdefiniowalem

using namespace std;

to wystarczy tak?

cin.clear();
cin.sync();

rozumiem, ze gdy czyszcze bufor to poprostu program wykona sie szybciej? Domyslnie chcialbym miec wiedze na temat pisania lub edycji VST, muzka to moja glowna pasja, a ze sekwencery muzyczne sa scisle powiazane z programowaniem to nic nie szkodzi na przeszkodzie do nowej umiejetnosci ;) No ale do tego trzeba liznac podstawy. Bede staral sie regularnie pisac na forum, gdyz jest to jakiegos rodzaju zacheta do pracy.

komentarz 23 września 2015 przez Ehlert Ekspert (212,670 p.)

Jeśli chcemy mieć większą kontrolę nad strumieniem wejściowym to powinniśmy czyścić jego zawartość przed każdym wczytaniem danych. Aby to zrobić musimy wywołać dwie metody strumienia std::cin. Pierwszą z nich jest std::cin.clear(), która czyści flagi błędu. Drugą metodą jest std::cin.sync(), która czyści bufor strumienia.

Więcej TUTAJ

0 głosów
odpowiedź 23 września 2015 przez e4 Nowicjusz (160 p.)

Tutaj, troche rozwinieta werjs o petle for, oraz mam pytanie czy wyczyscilem bufor w odpowiednim miejcu?

 

#include <iostream>
#include <cstdlib>
#include <windows.h>

using namespace std;
string PIN;
int proby=4; //ilosc mozliwych szans na  wpisanie pinu zanim karta zostanie zablokowana


int main()
{
    cout << "Witaj w bankomacie" << endl;

    do{
    cin.clear();
    cin.sync();

    cout<<"Podaj PIN:";
    cin >>PIN;


    if(PIN=="1720") // POPRAWNY PIN
    {

           for (int i=4; i>=0; i--)
        {
                if  (i>0)
                {
            system("cls");
            cout<<"Poprawny PIN, dziekuje"<<endl;
            cout<<"Zostaniesz przekierowany do nastepnej strony za "<<i<<" sekund."<<endl;
            Sleep(1000);
                }

                else
                {

            system("cls");
            cout<<"Witamy w naszym banku, wybierz jedna z opcji: "<<endl;
            Sleep(2000);

                }
        }

    return 0; //zakanczam program, gosciu moze wyplacac kase

    }

    else
    {
        proby--;

         if (proby>1)
        {
            system("cls");  // funkcja czyszczaca ekran z poprzedniej zawartosci
            cout<<"Niepoprawny PIN, mozesz sprobowac jeszcze "<<proby<<" razy"<<endl;
        }
        else
        {
            system("cls");  // funkcja czyszczaca ekran z poprzedniej zawartosci
            cout<<"!!!Ostatnia szansa, po wpisaniu blednego pinu karta zostanie ZABLOKOWANA!!!"<<endl;
        }
    }
    }while (proby>0);

       for (int i=6; i>=0; i--)
        {
                if  (i>0)
                {
            system("cls");
            cout<<"Wpisales bledny pin 3 razy, karta zostala ZABLOKOWANA. Skontaktuj sie z bankiem."
            <<endl<<"Numer telefonu: 0123456789"<<endl;
            cout<<"Bedziesz mogl wyciagnac karte za "<<i<<" sekund."<<endl;
            Sleep(1000);
                }

                else
                {
            system("cls");
            cout<<"Wyciagnij karte."<<endl<<"Karta ZABLOKOWANA."<<endl<<endl<<"Skontaktuj sie z bankiem"
            <<endl<<"Numer telefonu: 0123456789"<<endl;;
            Sleep(3000);

                }
        }


    return 1; // zakanczam program, karta zablokowana
}

 

Pozdrawiam

Podobne pytania

0 głosów
1 odpowiedź 447 wizyt
0 głosów
2 odpowiedzi 187 wizyt
pytanie zadane 24 listopada 2019 w Rozwój zawodowy, nauka, praca przez wupics Nowicjusz (120 p.)
0 głosów
1 odpowiedź 89 wizyt
pytanie zadane 29 marca 2020 w C i C++ przez Miszka255 Początkujący (280 p.)

92,550 zapytań

141,394 odpowiedzi

319,522 komentarzy

61,935 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...