Witam! Dopiero zaczynam programować w C++ podążając tym kursem w internecie. Chciałem sobie napisać sam taki programik "bankomat", żeby zobaczyć, czego się do tej pory nauczyłem. Poniżej podany kod działa, jednak dopiero po kilkudziesięciu minutach główkowania, a jednak dalej czegoś nie rozumiem.
#include <iostream>
#include <windows.h>
#include <cstdlib>
using namespace std;
int PIN;
int stan = 20000;
int x;
int y;
string imie;
string decyzja;
int main()
{
cout << "Witamy w naszym banku!" << endl;
Sleep(1500);
cout << "Podaj imie:" << endl;
cin >> imie;
cout << "Podaj PIN:" << endl;
cin >> PIN;
if(PIN==4512) {
cout << "Podano prawidlowy PIN!"<<endl;
Sleep(2000);
system("cls");
cout << "Witaj "<< imie<< "!"<<endl;
Sleep(1700);
cout << "Czy chcesz wyplacic jakas kwote?"<< endl<< "Wpisz: TAK/NIE"<< endl;
cin >> decyzja;
y = stan - x;
if((decyzja=="TAK")||(decyzja=="tak")||(decyzja=="Tak")) {
system("cls");
cout << "Stan twojego konta wynosi: " << y<<" zl."<< endl;
Sleep(2000);
cout << "Jaka sume pieniedzy chcesz wyplacic?:"<< endl;
cin >> x;
y = stan - x;
if((stan<x)||(x<=0)){
system("cls");
cout << "Nie mozna wyplacic takiej kwoty!"<<endl;
Sleep(2000);
cout << "Na serio? Chciales oszukac bankomat? Zalosne."<<endl;
Sleep(2000);
cout << "Nastepuje terminacja programu."<<endl;
Sleep(3000);
} else if (stan>=x) {
cout << "Zaczekaj.. Trwa drukowanie banknotow..."<<endl;
Sleep(2500);
system("cls");
cout << "Sukces! Pomyslnie wyplacono "<< x <<" zl."<<endl;
Sleep(3000);
cout << "Stan twojego konta wynosi teraz: " << y<< " zl."<<endl;
Sleep(3000);
system("cls");
cout << "Mamy nadzieje, ze jestes zadowolony z uslug naszego banku! "<<endl;
Sleep(2500);
system("cls");
cout << "Gotowka zostala wyplacona. Za 5 sekund nastapi terminacja programu. "<<endl;
Sleep(2500);
for(int a=5; a>=0; a--) {
Sleep(1000);
system("cls");
cout << a<<endl;
}
system("cls");
cout << "Dziekujemy za skorzystanie z uslug naszego banku!"<<endl;
Sleep(1500);
cout << "Mozesz juz usunac karte ze slotu."<<endl;
Sleep(3500);
cout << "Zapraszamy ponownie!"<<endl;
Sleep(2500);
return 0;
}
}else if((decyzja=="NIE")||(decyzja=="nie")||(decyzja=="Nie")) {
system("cls");
cout << "Konto nie zostalo obciazone."<<endl;
Sleep(3000);
cout << "Stan twojego konta wynosi: " << y<<" zl."<< endl;
Sleep(3000);
cout << "Anulowales wyplate. Za 5 sekund nastapi terminacja programu.";
Sleep (3000);
for(int i=5; i>=0; i--) {
Sleep(1000);
system("cls");
cout << i<<endl;
}
system("cls");
cout << "Dziekujemy za skorzystanie z uslug naszego banku!"<<endl;
Sleep(1500);
cout << "Mozesz juz usunac karte ze slotu."<<endl;
Sleep(3500);
cout << "Zapraszamy ponownie!"<<endl;
Sleep(2500);
return 0;
} else {
system("cls");
cout << "Nie rozpoznano komendy! Zaraz nastapi terminacja programu."<<endl;
Sleep(2700);
}
}else{
system("cls");
cout << "Pin jest nieprawidlowy! Nastapi teraz terminacja programu."<< endl;
Sleep(1500);
cout << "Zapraszamy ponownie!"<< endl;
}
return 0;
}
Podane na dole punkty to moje przypuszczenia i prosiłbym o waszą korektę, jeżeli są błędne.
1. Przez cały czas myślałem, że jeżeli napiszę: y = stan - x; pod "int main()" to będzie to zmienną globalną, która działa na cały plik. Później przekonałem się, że działa bezpośrednio tylko pod danym ifem tylko do jego końca.
2. Jeżeli zapisywane na samej górze zmienne z przedrostkiem "int" działają w całym pliku, to dlaczego po zdefiniowaniu int y = stan - x; działał on połowicznie i tylko pokazywał stan konta, ale nie odejmował wartości x po jej wprowadzeniu? (Gdy wpisywałem wartość x (cin >> x;), to zaraz po tym wyświetlało mi niezmieniony stan bankowy, czyli 20k, ale nie odejmowało wartości x - Próbowałem deklarować to nawet w nawiasie, jako int y = (stan - x), ale to też nic nie dało. Pomogło dopiero, jak widzicie: int y; i pod każdym ifem, który miał do czynienia ze "stanem" zadelkarowanie go jako y = stan - x; - Tak powinno być, czy ja zrobiłem coś źle?
3. I ostatnia rzecz, której nie rozumiem. Skoro zmienna y, to "stan - x," to dlaczego kiedy w miejsce "if((stan<x)||(x<=0)" albo else if "(stan>=x)" - kontynuując. Kiedy w miejsce zmiennej "stan", dam "y", to wszystko działa idealnie, tylko max. wartość, jaką mogę wypłacić to 10k, kiedy wartość "stan" jest równa 20k, a żeby wypłacić to x ma być od "stanu" mniejszy bądź równy. - Tak zdeklarowałem w ifie. Mogę wypłacać do 10k, czyli do połowy tej wartości, później już nie. Ogólnie, każda wartość zadeklarowana w "stanie" skraca się w tym przypadku wtedy o połowę. - To jakoś ze sobą koliduje, czy jak?
I to nie jest tak, że w ogóle się nad tym nie zastanawiałem. Zastanawiałem się.. Długo.
PS; Nie zwracajcie uwagi na wartość merytoryczną cout'ów.
Jeżeli są jakieś nieścisłości (a pewnie są), to piszcie. Bardzo zależy mi, żeby to zrozumieć.
Jeżeli temat łamie regulamin ze wględu na większą ilość "problemów", niż tylko jeden, to proszę go usunąć, ale niemniej jednak wolałem spróbować tutaj napisać.