package pl.edu.agh;
import java.util.Scanner;
public class Automat implements ElektronicznyKasjer, MagazynProduktow, InputUzytkownika, OutputUzytkownika {
Moneta gr10=new Moneta(0,10);
Moneta gr20=new Moneta(0,20);
Moneta gr50=new Moneta(0,50);
Moneta zloty=new Moneta(0,100);
Moneta zloty2=new Moneta(0,200);
Moneta zloty5=new Moneta(0,500);
Moneta[] kredyt= {gr10,gr20,gr50,zloty,zloty2,zloty5};
int liczKredyt() {
int tmp=0;
for (int i=0;i<6;i++)
tmp+=kredyt[i].wartoscMonety*kredyt[i].iloscMonet;
return tmp;
}
Produkt[] tablica;
Moneta[] skarbiec;
Automat (Produkt[] _tablica, Moneta[] _skarbiec) {
tablica=_tablica;
skarbiec=_skarbiec;
}
Scanner odczyt
= new Scanner
(System.
in);
public void dodajProdukt() {}
public void wyswietlProdukty() {
System.
out.
println("Dostepne napoje : n");
int i=0;
while (i<tablica.length) {
System.
out.
println(tablica
[i
].
nazwa + " | Cena : " + tablica
[i
].
cena + "gr "
+ " | Ilość : " + tablica[i].ilosc + " | Wybierz : " + ++i +" n");
}
}
public void wyswietlKredyt () {
System.
out.
println("Kredyt = " + liczKredyt
());
}
public void wrzucMonete () {
System.
out.
println("Wrzuc pieniadze : ");
int ilosc=odczyt.nextInt();
przyjmijPieniadze(ilosc);
}
public void przyjmijPieniadze (int ilosc) {
switch (ilosc) {
case 10:
kredyt[0].iloscMonet++; break;
case 20:
kredyt[1].iloscMonet++; break;
case 50:
kredyt[2].iloscMonet++; break;
case 100:
kredyt[3].iloscMonet++; break;
case 200:
kredyt[4].iloscMonet++; break;
case 500:
kredyt[5].iloscMonet++; break;
default :
System.
out.
println("Niezgodna waluta lub wartosc monety");
zwrocPieniadze();
}
}
public void wprowadzNrProduktu () {
System.
out.
println("Proszę wybrac napój : ");
int nrNapoju = odczyt.nextInt();
wydajProdukt(nrNapoju);
}
public boolean sprawdzProdukt (int nrNapoju) {
if (nrNapoju < 0 || tablica.length < nrNapoju )
return false;
else if (tablica[nrNapoju-1].ilosc==0)
return false;
else if (tablica[nrNapoju-1].cena > liczKredyt() )
return false;
else
return true;
}
public void wydajProdukt (int nrNapoju) {
if (sprawdzProdukt(nrNapoju) ){
System.
out.
println("Wydawanie napoju...");
int reszta=liczKredyt()-tablica[nrNapoju-1].cena;
if (reszta!=0)
zwrocReszte(reszta);
wplacDoSkarbca();
tablica[nrNapoju-1].ilosc--;
}
else {
System.
out.
println("Nie mozna wydac napoju");
zwrocPieniadze();
}
}
public void zwrocReszte (int reszta) {
if (sprawdzReszte(reszta)) {
System.
out.
println("Zwracam reszte : " + reszta
);
for (int i=0;i<6;i++)
kredyt[i].iloscMonet=0;
System.
out.
println("Kredyt : " + liczKredyt
());
}
else {
zwrocPieniadze();
}
}
public boolean sprawdzReszte (int reszta) {
int zwracana=0;
int tmp=reszta;
int i=5;
while (i>-1 && tmp!=0) {
if ((double)tmp/skarbiec[i].wartoscMonety < 1 || skarbiec[i].iloscMonet==0
|| (double)tmp/kredyt[i].wartoscMonety < 1) {
i--;
}
else{
if((double)tmp/skarbiec[i].wartoscMonety >= 1 && skarbiec[i].iloscMonet>0) {
zwracana+=skarbiec[i].wartoscMonety;
tmp-=skarbiec[i].wartoscMonety;
}
else {
zwracana+=kredyt[i].wartoscMonety;
tmp-=kredyt[i].wartoscMonety;
}
}
}
tmp=reszta;
i=5;
if (zwracana==reszta) {
while (i>-1) {
if ((double)tmp/skarbiec[i].wartoscMonety < 1 || skarbiec[i].iloscMonet==0
|| (double)tmp/kredyt[i].wartoscMonety < 1) {
i--;
}
else{
if((double)tmp/skarbiec[i].wartoscMonety >= 1 && skarbiec[i].iloscMonet>0) {
skarbiec[i].iloscMonet--;
tmp-=skarbiec[i].wartoscMonety;
}
else {
kredyt[i].iloscMonet--;
tmp-=skarbiec[i].wartoscMonety;
}
}
}
return true;
}
return false;
}
public void wplacDoSkarbca () {
for (int i=0;i<6;i++)
skarbiec[i].iloscMonet+=kredyt[i].iloscMonet;
}
public void zwrocPieniadze () {
System.
out.
println("Nie przeprowadzono zakupu, zwracam : " + liczKredyt
());
for (int i=0;i<6;i++)
kredyt[i].iloscMonet=0;
}
public void zarzadajZwrotuPieniedzy () {
zwrocPieniadze ();
}
}