Gut, dank eurer Hilfe konnte ich das Problem lösen, danke!
Jetzt tut sich ein zweites auf.
Ich habe es so programmiert, dass wenn zu viel Geld eingegeben wurde, Geld aus wechsel in kapital geht.
Funktioniert auch ganz prima, aber nur, wenn man mit den Münzen aus wechsel auch das Restgeld "zusammenbauen" kann.
Als Beispiel:
Der Kaffee kostet 60 Cent, es wird 1 Euro (also 100 Cent) eingeworfen.
Wenn jetzt 4 * 10 Cent, 2 * 20 Cent oder 2 * 10 Cent und 1 * 20 Cent in wechsel vorhanden sind klappt die ausgabe wunderbar.
Wenn jedoch nur 1 * 50 Cent drin ist bleibt die Schleife stehen.
Kann mir jemand einen Tipp geben, wie ich vorher abfragen kann, ob genug Wechselgeld vorhanden ist?
Ich hab das schon mit Schleifen probiert, aber es nicht richtig hinbekommen.
for(i=0;i<4;i++)
{
for(r=1;r<4;r++)
{
if ((wechsel.menge * wechsel.wert) - wechselgeld >= 0 || (wechsel[r].menge * wechsel[r].wert) - wechselgeld >= 0 || wechselgeld / (wechsel.menge * wechsel.wert) + (wechsel[r].menge * wechsel[r].wert) <= 1)
{
so hab ich die schleife gebaut
Anbei mal der ganze Code
#include <stdio.h>
// Geld
typedef struct {
char name[15]; // Name des Geldstücks
int wert; // Wert
int menge; // Anzahl
} geld;
// Kaffeerezepte
typedef struct {
char name[15]; // Name
int becher; // Becher
int milch; // Milch in ml
int kaffee; // Kaffee in gr
int kakao; // Kakaopulver in gr
} kaffeerezept;
// Bestand
typedef struct {
char name[15];
int anzahl;
} bestand;
geldeingabe (preis)
{
//Kaffeearray
kaffeerezept rezept[4]={
{"Kaffee",1,0,250,0},
{"Cappucino",1,125,125,0},
{"Esspresso",1,0,100,0},
{"Kakao",1,250,0,25},
};
// KapitalArray (Geld des Benutzers)
geld kapital[5]={
{"Zehn Cent",10,0}, // Array Speicher 0
{"Zwanzig Cent",20,0}, // Array Speicher 1
{"Fünfzig Cent",50,0},
{"Ein Euro",100,0},
{"Zwei Euro",200,0} // Array Speicher 4
};
// Geld, welches eingeworfen wurde aber noch nicht in die Kasse übergegangen ist
geld automat[5]={
{"Zehn Cent",10,0}, // Array Speicher 0
{"Zwanzig Cent",20,0}, // Array Speicher 1
{"Fünfzig Cent",50,0},
{"Ein Euro",100,0},
{"Zwei Euro",200,0} // Array Speicher 4
};
// Kasse (Einnahmen)
geld kasse[5]={
{"Zehn Cent",10,0}, // Array Speicher 0
{"Zwanzig Cent",20,0}, // Array Speicher 1
{"Fünfzig Cent",50,0},
{"Ein Euro",100,0},
{"Zwei Euro",200,0} // Array Speicher 4
};
// Kasse (Einnahmen)
geld wechsel[5]={
{"Zehn Cent",10,0}, // Array Speicher 0
{"Zwanzig Cent",20,0}, // Array Speicher 1
{"Fünfzig Cent",50,0},
{"Ein Euro",100,0},
{"Zwei Euro",200,0} // Array Speicher 4
};
FILE * kapital_datei; // Vorhandenes Geld
FILE * wechsel_datei; // Vorhandenes Wechselgeld
FILE * kasse_datei; // Einnahmen
FILE * automat_datei; // Einnahmen
FILE * bestand_datei; // Kaffebestand
int i; // Zählvariable;
int geldeingabe; // Für die Geldstückauswahl
int geldeingezahlt = 0; // Eingezahltes Geld
int wechselgeld = 0;
int geldwertinsg;
int geldwertinsg_temp;
kapital_datei=fopen("kapital.dat","r");
for(i=0;i<5;i++)
{
fscanf(kapital_datei, "%d", &kapital[i].menge);
}
fclose(kapital_datei);
for(i=0;i<5;i++) // Prüfe ob Geld üerhaupt reicht
{
geldwertinsg_temp =kapital[i].menge * kapital[i].wert;
geldwertinsg = geldwertinsg + geldwertinsg_temp;
}
if (geldwertinsg < 60)
{
printf("Sie haben nicht genug Geld!");
}
else {
printf("Werfen sie bitte %d Cent ein.\n", preis);
printf("1 für 10 Cent. Sie haben %d 10 Centmünzen\n", kapital[0].menge);
printf("2 für 20 Cent. Sie haben %d 20 Centmünzen\n", kapital[1].menge);
printf("3 für 50 Cent. Sie haben %d 10 Centmünzen\n", kapital[2].menge);
printf("4 für 1 Euro. Sie haben %d 1 Euromünzen\n", kapital[3].menge);
printf("5 für 2 Euro. Sie haben %d 2 Euromünzen\n", kapital[4].menge);
/* printf("6 um die Geldeingabe abzubrechen und ein anderes Getränk zu wählen\n"); Funktioniert noch nicht */
do
{
scanf("%d", &geldeingabe);
kasse_datei=fopen("kasse.dat", "r"); // Kasse wird kontrolliert
for(i=0;i<5;i++) fscanf(kasse_datei, "%d", &kasse[i].menge);
fclose(kasse_datei);
kapital_datei=fopen("kapital.dat", "r"); // Kapital wird kontrolliert
for(i=0;i<5;i++) fscanf(kapital_datei, "%d", &kapital[i].menge);
fclose(kapital_datei);
switch (geldeingabe) // Geld wird aus dem Kapital entnommen und in den Automaten gegeben
{
case 1:
if (kapital[0].menge <= 0)
printf("Keine 10 Centmünzen vorhanden!");
else
{
geldeingezahlt = geldeingezahlt + 10;
automat[0].menge = automat[0].menge + 1;
kapital[0].menge = kapital[0].menge -1;
}
break;
case 2:
if (kapital[1].menge <= 0)
printf("Keine 20 Centmünzen vorhanden!");
else
{
geldeingezahlt = geldeingezahlt + 20;
automat[1].menge = automat[1].menge + 1;
kapital[1].menge = kapital[1].menge -1;
}
break;
case 3:
if (kapital[2].menge <= 0)
printf("Keine 50 Centmünzen vorhanden!");
else
{
geldeingezahlt = geldeingezahlt + 50;
automat[2].menge = automat[2].menge + 1;
kapital[2].menge = kapital[2].menge -1;
}
break;
case 4:
if (kapital[3].menge <= 0)
printf("Keine 1 Euromünzen vorhanden!");
else
{
geldeingezahlt = geldeingezahlt + 100;
automat[3].menge = automat[3].menge + 1;
kapital[3].menge = kapital[3].menge -1;
}
break;
case 5:
if (kapital[4].menge <= 0)
printf("Keine 2 Euromünzen vorhanden!");
else
{
geldeingezahlt = geldeingezahlt + 200;
automat[4].menge = automat[4].menge + 1;
kapital[4].menge = kapital[4].menge -1;
}
break;
/* case 6:
printf("Sie haben die Geldeingabe abgebrochen.");
default: printf("Falsche Zahl angegeben!\n"); läiuft noch nicht */
}
kapital_datei=fopen("kapital.dat", "w+b"); // Kapital wird aktuallisiert
for(i=0;i<5;i++) fprintf(kapital_datei, "%d\n", kapital[i].menge);
fclose(kapital_datei);
if (geldeingezahlt > preis)
{
printf("Sie haben %d Cent eingegeben und bekommen %d zurück.\n", geldeingezahlt, (geldeingezahlt -preis));
wechselgeld = geldeingezahlt - preis;
wechsel_datei=fopen("wechsel.dat", "r"); // Wechselgeld wird kontrolliert
for(i=0;i<5;i++) fscanf(kasse_datei, "%d", &wechsel[i].menge);
fclose(wechsel_datei);
while(wechselgeld != 0) {
for(i=0;i<5;i++)
{
if (wechsel[i].menge == 0) {}
else
{
if (wechsel[i].wert > wechselgeld) {}
else
{
wechselgeld = wechselgeld - wechsel[i].wert;
wechsel[i].menge = wechsel[i].menge -1;
kapital[i].menge = kapital[i].menge +1;
}
} // 1. else
} // for
} // while
kapital_datei=fopen("kapital.dat", "w+b"); // Geld in kapital gespeichert
for(i=0;i<5;i++) fprintf(kapital_datei, "%d\n", kapital[i].menge);
fclose(kapital_datei);
wechsel_datei=fopen("wechsel.dat", "w+b"); // Geld in Kasse gespeichert
for(i=0;i<5;i++) fprintf(wechsel_datei, "%d\n", wechsel[i].menge);
fclose(wechsel_datei);
}
else
{
if ((preis - geldeingezahlt) != 0)
{
printf("Sie haben %d Cent eingegeben. \n Es fehlen noch %d Cent\n", geldeingezahlt, (preis - geldeingezahlt));
}
else
{
printf("Sie haben %d Cent eingegeben. Ihr Getränk kommt ...\n\n" ,geldeingezahlt);
}
}
} // erstes do
while (geldeingezahlt < preis);
for(i=0;i<4;i++)
{
kasse[i].menge = kasse[i].menge + automat[i].menge; // Geld wird aus dem Automaten in die Kasse gegeben
}
kasse_datei=fopen("kasse.dat", "w+b"); // Geld in Kasse gespeichert
for(i=0;i<5;i++) fprintf(kasse_datei, "%d\n", kasse[i].menge);
fclose(kasse_datei);
} // else, wenn genug geld da ist
}
main()
{
FILE * kapital_datei; // Vorhandenes Geld
FILE * wechsel_datei; // Vorhandenes Wechselgeld
FILE * kasse_datei; // Einnahmen
FILE * bestand_datei; // Kaffebestand
// Bestandarry
bestand bestand_array[4]={
{"Becher",0},
{"Kaffepulver",0},
{"Milch",0},
{"Kakaopulver",0},
};
int i; // Zählvariable;
int kwahl;
int preis;
const int KAFFEEPREIS = 60;
const int CAPPUCINOPREIS = 90;
// do {
printf ("Willkommen bei Starbucks\n"); //hrhr, irre komisch ...
printf ("Wählen Sie ein Getränk. Geben Sie ein:\n");
printf ("\n 1 für Kaffee\n 2 für Cappucino\n 3 für Esspresso\n 4 für Kakao\n\n");
// Bestand laden
bestand_datei=fopen("bestand.dat", "r");
for(i=0;i<4;i++) fscanf(bestand_datei, "%d", &bestand_array[i].anzahl);
fclose(bestand_datei);
scanf("%d", &kwahl);
switch(kwahl)
{
case 1: printf("Sie haben Kaffee gewählt.\n"); // Materialcheck Kaffe
preis = KAFFEEPREIS;
if (bestand_array[0].anzahl < 1)
{
printf("Leider keine Becher vorhanden!\n");
}
else
if (bestand_array[2].anzahl < 250)
{
printf("Zutaten nicht ausreichend vorhanden!\n");
}
else
{
geldeingabe(preis);
bestand_array[0].anzahl = bestand_array[0].anzahl -1; // Bestand der Zutaten verringern
bestand_array[2].anzahl = bestand_array[2].anzahl -250;
bestand_datei=fopen("bestand.dat", "w+b"); // neuen Bestand speichern
for(i=0;i<4;i++) fprintf(bestand_datei, "%d\n", bestand_array[i].anzahl);
fclose(bestand_datei);
}
break;
case 2: printf("Sie haben Cappucino gewählt.\n"); // Materialcheck Cappucino
preis = CAPPUCINOPREIS;
if (bestand_array[0].anzahl < 1)
{
printf("Leider keine Becher vorhanden!\n");
}
else
if ((bestand_array[2].anzahl < 125) || bestand_array[1].anzahl < 125)
{
printf("Zutaten nicht ausreichend vorhanden!\n");
}
geldeingabe(preis);
break;
}
// }
// while ( 1 ); lässt das ganze immer wieder ablaufen
return 0; }
[/PHP]