Cześć,
Mam do napisania program w języku c++ bankomat z uwzględnieniem poniższych założeń:
"Zakłada się, że bankomat jest automatem wolnostojącym, z dostępem do Internetu.
Bankomat jest powiązany w bankiem internetowym, w którym klient na konto. Klient może
pobrać z bankomatu kwotę nie wyższą niż połowa stanu jego konta. Sekwencja operacji
poboru gotówki z bankomatu – jest losowa.
Przed pobraniem gotówki z bankomatu, klient jest identyfikowany poprzez :
a) Numer PIN;
b) Kartę bankową (odpowiednie dane:.
Konwersacja klienta z bankomatem odbywa się za pomocą ekranu. Identyfikacja klienta jest
dokonywana raz na godzinę (tzn., że po nieprawidłowej identyfikacji, następuje blokada na 1
godzinę). W przypadku prawidłowej identyfikacji – klient podaje kwotę, która ma być
wypłacona. W przypadku braku pokrycia tej kwoty, następuje blokada na 1 dzień.
W stanie początkowym, w kasetach bankomatu znajduje się :
a) 10 banknotów – o nominale 200PLN;
b) 10 banknotów – o nominale 100PLN;
c) 10 banknotów – o nominale 50PLN;
d) 10 banknotów – o nominale 20PLN;
e) 10 banknotów – o nominale 10PLN;
Bankomat może wydawać kwoty, które są wielokrotnością 10PLN (do 500PLN) – od
banknotów o najwyższych nominałach do banknotów o najniższych nominałach.
Jeśli bankomat nie ma banknotów o jakichś nominałach lub nie może wydać żądanej kwoty to
jest częściowo niesprawny. W takim przypadku bankomat powinien podać na ekranie
„najbliższą” kwotę – niższą lub wyższą – którą może wydać. Jeśli bankomat nie potrafi
wydać żądanej kwoty – to jest niesprawny."
Do momentu wypłacanie gotówki jakoś mi się udawało, ale fragment z wypłatą gotówki jak widać trochę mnie przerasta mimo wielu różnych prób nie udało mi się osiągnąć zamierzonego efektu.
Do przechowywania banknotów stworzyłem tabele w której mamy banknot oraz jego ilość i tutaj właśnie pojawia się problem, nie do końca wiem w jaki sposób się do niej odwołać tak żeby po wypłaceniu gotówki zmniejszała się ilość banknotów. W teorii wydaje mi się, że wiem jak to zrobić, ale w praktyce moje umiejętności nie są wystarczające.
Teoria :)
Wydaje mi się, że po podaniu kwoty program powinien sprawdzić czy kwota jest wielokrotnością 10, oraz czy nie jest większa od 500, jeżeli oba warunki są spełnione powinien sprawdzić ile w podanej kwocie znajduje się banknotów 200 złotowych, 100 złotowych itp., następnie wypłacić daną kwotę i odjąć ilość banknotów wypłaconych od ilości banknotów które mamy w bankomacie.
Będę wdzięczny za każdą pomoc :)
Pozdrawiam serdecznie
#include "stdafx.h"
using namespace std;
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <time.h>
#include <ctime>
#include <algorithm>
#include <vector>
#include <cstdlib>
long int unix_timestamp()
{
time_t t = std::time( 0 );
long int now = static_cast < long int >( t );
return now;
}
struct banknotyWbankomacie {
const int banknot;
const int liczba;
};
int main( int nargc, char * argv[] )
{
int balance;
int pin;
int numer_karty;
int blokada;
int opcja;
pin = 1234;
numer_karty = 662579860;
time_t now = time( NULL );
struct tm * tm = localtime( & now );
cout << "Witamy w naszym bankomacie!" << endl;
cout << "Wybierz 1, aby wlozyc karte." << endl;
cout << "Wybierz 2, aby zakonczyc sesje." << endl;
cin >> opcja;
if( opcja == 1 )
{
}
logowanie:
cout << "Karta o numerze 662579860" << endl;
cout << "Prosze o podanie numeru pin: ";
cin >> pin;
if( pin != 1234 )
{
cout << "Twoje konto zostało zablokowane." << endl;
cout << "Blokada bedzie trwac od ";
asctime( tm );
cout << asctime( tm );
cout << "do ";
tm->tm_hour += 1;
cout << asctime( tm );
long int now = unix_timestamp();
blokada = now + 60;
Sleep( 5000 );
cout << "Zapraszamy za godzine i zyczymy milego dnia" << endl;
system( "cls" );
do
{
cout << "Witamy w naszym bankomacie!" << endl;
cout << "Wybierz 1, aby wlozyc karte." << endl;
cout << "Wybierz 2, aby zakonczyc sesje." << endl;
cin >> opcja;
if( opcja == 1 )
{
now = unix_timestamp();
if( blokada > now )
{
cout << "Twoja karta jest zablokowana" << endl;
cout << "Prosze wyjac karte i wrocic ponownie po zakonczeniu blokady" << endl;
cout << " Zapraszamy o " << asctime( tm ) << endl;
Sleep( 5000 );
system( "cls" );
}
else if( blokada < now )
{
goto logowanie;
}
}
} while( opcja == 1 );
}
else if( pin == 1234 )
{
banknotyWbankomacie banknotyDostepne[] = {
{ 200, 10 },
{ 100, 10 },
{ 50, 10 },
{ 20, 10 },
{ 10, 10 }
};
system( "PAUSE" );
}
wyglowanie:
if( opcja == 2 )
{
cout << "Dziekujemy za skorzystanie z naszych uslug" << endl;
system( "PAUSE" );
return 0;
}
}