fork download
  1. /* Getraenke Automat Version 0.5 */
  2.  
  3. #include<stdio.h>
  4.  
  5. // --- Funktions-Prototypen ---------------------------
  6. int auswahlGetraenkeSorte();
  7. int eingabeMenge();
  8. float ermittlePreis(int sorte);
  9. float bezahlen(float zuZahlen);
  10. int pruefeGeldstueck(float muenze);
  11. void ausgabeGetraenke(int sorte, int menge);
  12.  
  13. // --- Hauptprogramm ----------------------------------
  14. int main() {
  15. printf("Getraenke Automat v0.5\n\n");
  16.  
  17. int sorte, menge;
  18. float preis, zuZahlen, gezahlt;
  19.  
  20. sorte = auswahlGetraenkeSorte();
  21. preis = ermittlePreis(sorte);
  22. menge = eingabeMenge();
  23. zuZahlen = preis * menge;
  24. gezahlt = bezahlen(zuZahlen);
  25.  
  26. if(gezahlt >= zuZahlen) {
  27. ausgabeGetraenke(sorte, menge);
  28. printf("\n\nVielen Dank, bitte entnehmen sie ihre Getraenke.\n");
  29. }else {
  30. printf("\n\nBezahlvorgang abgebrochen.\n");
  31. printf("Ausgabe von %.2f Euro.\n", gezahlt);
  32. }
  33.  
  34. return 0;
  35. }
  36.  
  37. // --- Funktionen -------------------------------------
  38. int auswahlGetraenkeSorte() {
  39. int sorte;
  40. printf("Waehlen sie ihr Getraenk aus:\n");
  41. printf("1) Wasser (0,50 Euro)\n");
  42. printf("2) Limonade (1,00 Euro)\n");
  43. printf("3) Bier (2,00 Euro)\n\n");
  44. printf("Geben sie 1, 2 oder 3 ein: ");
  45. scanf("%d", &sorte);
  46. return sorte;
  47. }
  48.  
  49. int eingabeMenge() {
  50. int menge=1;
  51. printf("\nGeben sie die gewuenschte Menge ein: ");
  52. scanf("%d", &menge);
  53. return menge;
  54. }
  55.  
  56. /* ermittelt den Preis zu einer Sorte
  57. Parameter: sorte, Nummer der Sorte
  58. Return-Value: Preis
  59. */
  60. float ermittlePreis(int sorte) {
  61. float preis=0;
  62. switch(sorte) {
  63. case 1: preis = 0.5; break;
  64. case 2: preis = 1.0; break;
  65. case 3: preis = 2.0; break;
  66. }
  67. return preis;
  68. }
  69.  
  70. /* Startet Bezahlvorgang
  71. Parameter: zuZahlen, zu zahlender Betrag
  72. Return-Value: gezahlter Betrag
  73. */
  74. float bezahlen(float zuZahlen) {
  75. printf("\n--- Bezahlvorgang ---\n");
  76. printf("\nBezahlvorgang abbrechen mit 0\n");
  77. float einwurf, gezahlt=0;
  78. do {
  79. printf("\nEs fehlen noch %.2f Euro.", zuZahlen-gezahlt);
  80. printf("\nBitte werfen sie ein Geldstueck ein: ");
  81. scanf("%f", &einwurf);
  82.  
  83. // Abbruch pruefen
  84. if(einwurf == 0) {
  85. break;
  86. }
  87.  
  88. // eingeworfenen Betrag anrechnen
  89. if(pruefeGeldstueck(einwurf)) {
  90. gezahlt += einwurf;
  91. }else {
  92. printf("\nIhr Geldstueck ist ungueltig.");
  93. }
  94.  
  95. } while(gezahlt < zuZahlen);
  96.  
  97. return gezahlt;
  98. }
  99.  
  100. /* prueft Geldstueck auf Gueltigkeit
  101. Parameter: muenze, entpricht eingeworfenem Geldstueck
  102. Return-Value: 1, gueltige Muenze
  103. 0, falsche Muenze
  104. */
  105. int pruefeGeldstueck(float muenze) {
  106. // Muenzwert in ganze Zahl umrechnen, also in Cent.
  107. // Da die case Anweisung nicht mit floats arbeiten kann.
  108. int cent = muenze * 100;
  109. switch(cent) {
  110. case 5: return 1;
  111. case 10: return 1;
  112. case 20: return 1;
  113. case 50: return 1;
  114. case 100: return 1;
  115. case 200: return 1;
  116. default: return 0;
  117. }
  118. }
  119.  
  120. void ausgabeGetraenke(int sorte, int menge) {
  121. printf("\n--- Getraenkeausgabe ---\n");
  122. int i;
  123. for(i=0; i < menge; i++) {
  124. printf("\nFlasche %d von %d der Sorte %d wurde ausgegeben.",
  125. i+1, menge, sorte);
  126. }
  127. }
Success #stdin #stdout 0s 2296KB
stdin
Standard input is empty
stdout
Getraenke Automat v0.5

Waehlen sie ihr Getraenk aus:
1) Wasser (0,50 Euro)
2) Limonade (1,00 Euro)
3) Bier (2,00 Euro)

Geben sie 1, 2 oder 3 ein: 
Geben sie die gewuenschte Menge ein: 
--- Bezahlvorgang ---

Bezahlvorgang abbrechen mit 0

Es fehlen noch 0.00 Euro.
Bitte werfen sie ein Geldstueck ein: 
Ihr Geldstueck ist ungueltig.
--- Getraenkeausgabe ---

Flasche 1 von 1 der Sorte -1217585164 wurde ausgegeben.

Vielen Dank, bitte entnehmen sie ihre Getraenke.