Piszę prosty symulator bankomatu w konsoli i program niespodziewanie się sypie podczas logowania, a w obecnym etapie powinien wrócić do menu bankomatu. Pomoże ktoś? Prawdopodobnie sypie się coś na poziome wczytywania danych do tablic.
main.cpp
#include <iostream>
#include "naglowki.h"
using namespace std;
int main()
{
while(true)
{
Bankomat bank;
bank.pokaz();
}
return 0;
}
naglowki.h
#include <iostream>
using namespace std;
class Bankomat
{
int PIN_do_rejestracji, ilosc_klientow;
int *PINy, *StanyKont;
public:
void pokaz();
void zaloguj();
void zarejestruj();
void proceslogowania();
void procesrejestracji();
void wczytajiloscklientow();
void zapisziloscklientow();
};
menubankomatu.cpp
#include <iostream>
#include "naglowki.h"
#include <windows.h>
#include <conio.h>
using namespace std;
void Bankomat::pokaz()
{
char wybor;
while(true)
{
system("cls");
cout << "Witaj w banku!" << endl << endl;
cout << "1. Zaloguj" << endl;
cout << "2. Zarejestruj" << endl << endl;
cout << "Wybor: ";
wybor = getch();
switch(wybor)
{
case '1':
{
zaloguj();
break;
}
case '2':
{
zarejestruj();
break;
}
default:
{
system("cls");
cout << "Podaj cyfre '1' lub '2'!";
Sleep(2000);
}
}
}
}
funkcjebankomatu.cpp
#include <iostream>
#include "naglowki.h"
#include <windows.h>
#include <sstream>
#include <stdio.h>
using namespace std;
void Bankomat::zaloguj()
{
int PIN;
while(true)
{
system("cls");
cout << "\t" << "LOGOWANIE" << endl << endl;
cout << "Podaj PIN: ";
if(!(cin>>PIN))
{
system("cls");
cout << "Podaj czterocyfrowy PIN!";
cin.clear();
cin.sync();
Sleep(2000);
}
else
{
int dlugosc;
ostringstream ss;
ss << PIN;
string PINstring = ss.str();
dlugosc = PINstring.length();
ss.str("");
if((dlugosc > 4) || (dlugosc < 4))
{
system("cls");
cout << "PIN posiada 4 cyfry!";
cin.clear();
cin.sync();
Sleep(2000);
}
else
{
system("cls");
proceslogowania();
break;
}
}
}
}
void Bankomat::zarejestruj()
{
while(true)
{
system("cls");
cout << "\t" << "REJESTRACJA" << endl << endl;
cout << "Podaj PIN do rejestracji: ";
if(!(cin>>PIN_do_rejestracji))
{
system("cls");
cout << "Podaj czterocyfrowy PIN!";
cin.clear();
cin.sync();
Sleep(2000);
}
else
{
int dlugosc;
ostringstream ss;
ss << PIN_do_rejestracji;
string PINstring = ss.str();
dlugosc = PINstring.length();
ss.str("");
if((dlugosc > 4) || (dlugosc < 4))
{
system("cls");
cout << "PIN posiada 4 cyfry!";
cin.clear();
cin.sync();
Sleep(2000);
}
else
{
system("cls");
procesrejestracji();
break;
}
}
}
}
logowanieirejestracja.cpp
#include <iostream>
#include "naglowki.h"
#include <fstream>
#include <windows.h>
using namespace std;
void Bankomat::proceslogowania()
{
fstream plik;
wczytajiloscklientow();
PINy = new int[ilosc_klientow];
StanyKont = new int[ilosc_klientow];
plik.open("uzytkownicy.txt", ios::in);
if(plik.good() == false)
{
system("cls");
cout << "Blad polaczenia z baza danych!";
Sleep(2000);
}
else
{
int nr_linii = 1;
string linia;
int licznik = 0;
while(getline(plik, linia))
{
switch(nr_linii)
{
case 1:
{
PINy[licznik] = atoi(linia.c_str());
licznik++;
}
}
if(nr_linii == 2)
{
nr_linii = 0;
}
nr_linii++;
}
plik.clear();
plik.close();
plik.open("uzytkownicy.txt", ios::in);
if(plik.good() == false)
{
system("cls");
cout << "Blad polaczenia z baza danych!";
Sleep(2000);
}
else
{
int nr_linii2 = 1;
string linia2;
int licznik2 = 0;
while(getline(plik, linia2))
{
switch(nr_linii2)
{
case 2:
{
StanyKont[licznik2] = atoi(linia2.c_str());
licznik2++;
}
}
if(nr_linii2 == 2)
{
nr_linii2 = 0;
}
nr_linii2++;
}
plik.clear();
plik.close();
}
}
}
void Bankomat::procesrejestracji()
{
fstream plik;
wczytajiloscklientow();
plik.open("uzytkownicy.txt", ios::out | ios::app);
if(plik.good() == false)
{
system("cls");
cout << "Blad polaczenia z baza danych!";
Sleep(2000);
}
else
{
int PoczatkowyStanKonta = 0;
plik << PIN_do_rejestracji << endl;
plik << PoczatkowyStanKonta << endl;
ilosc_klientow++;
}
plik.close();
zapisziloscklientow();
}
iloscklientow.cpp
#include <iostream>
#include "naglowki.h"
#include <fstream>
#include <windows.h>
using namespace std;
void Bankomat::wczytajiloscklientow()
{
fstream plik;
plik.open("iloscklientow.txt", ios::in);
if(plik.good() == false)
{
system("cls");
cout << "Blad polaczenia z baza danych!";
Sleep(2000);
}
else
{
int nr_linii = 1;
string linia;
while(getline(plik, linia))
{
switch(nr_linii)
{
case 1:
{
ilosc_klientow = atoi(linia.c_str());
}
}
}
plik.close();
}
}
void Bankomat::zapisziloscklientow()
{
fstream plik;
plik.open("iloscklientow.txt", ios::out);
if(plik.good() == false)
{
system("cls");
cout << "Blad polacznie z baza danych!";
Sleep(2000);
}
else
{
plik << ilosc_klientow;
}
plik.close();
}