From 1bf1606f2e993ede291e2f99fac0615aa8f0995f Mon Sep 17 00:00:00 2001 From: Joel Date: Sun, 10 Jan 2021 17:06:35 +0100 Subject: [PATCH] added admin menu; number of coins; number of blank tickets; some other small improvements --- Fahrkartenautomat/src/Fahrkartenautomat.java | 195 +++++++++++++++++-- 1 file changed, 181 insertions(+), 14 deletions(-) diff --git a/Fahrkartenautomat/src/Fahrkartenautomat.java b/Fahrkartenautomat/src/Fahrkartenautomat.java index d23a02c..002d49f 100644 --- a/Fahrkartenautomat/src/Fahrkartenautomat.java +++ b/Fahrkartenautomat/src/Fahrkartenautomat.java @@ -7,6 +7,12 @@ import java.util.Scanner; class Fahrkartenautomat { + private static int ticketRohlinge = 5; + + // Anzahl der vorrätigen 2 EUR, 1 EUR, 50 CENT, 20 CENT, 10 CENT, 5 CENT Münzen + private static final double[] wertMuenzen = {2, 1, 0.5, 0.2, 0.1, 0.05}; + private static int[] anzahlMuenzen = {10, 10, 10, 10, 10, 10}; + public static double auswahlErfassen (){ //=================================================================== // Array für die Bezeichnungen @@ -21,11 +27,11 @@ class Fahrkartenautomat "Kleingruppen-Tageskarte Berlin AB", "Kleingruppen-Tageskarte Berlin BC", "Kleingruppen-Tageskarte Berlin ABC"}; - + // Array für die jeweiligen Preise double[] preise = {2.9, 3.3, 3.6, 1.9, 8.6, 9.0, 9.6, 23.5, 24.3, 24.9}; //=================================================================== - + Scanner tastatur = new Scanner(System.in); double zuZahlenderBetrag = 0.0; @@ -38,7 +44,8 @@ class Fahrkartenautomat int i=0; for (; i>falsche Eingabe<<"); warte(1000); continue;} } - zuZahlenderBetrag = anzahlErfassen(einzelBetrag); + zuZahlenderBetrag += anzahlErfassen(einzelBetrag); } return zuZahlenderBetrag; } @@ -86,6 +98,7 @@ class Fahrkartenautomat } break; } + ticketRohlinge-=anzahlTickets; return anzahlTickets * einzelBetrag; } @@ -151,37 +164,46 @@ class Fahrkartenautomat List rueckgabeMuenzen = new ArrayList(); - while(rückgabebetrag > 1.9) // 2 EURO-Münzen + while(rückgabebetrag > 1.9 && anzahlMuenzen[0] > 0) // 2 EURO-Münzen { + anzahlMuenzen[0] -= 1; rueckgabeMuenzen.add(muenzeErstellen(2, "EURO")); rückgabebetrag -= 2.0; } - while(rückgabebetrag > 0.9) // 1 EURO-Münzen + while(rückgabebetrag > 0.9 && anzahlMuenzen[1] > 0) // 1 EURO-Münzen { + anzahlMuenzen[1] -= 1; rueckgabeMuenzen.add(muenzeErstellen(1, "EURO")); rückgabebetrag -= 1.0; } - while(rückgabebetrag > 0.49) // 50 CENT-Münzen + while(rückgabebetrag > 0.49 && anzahlMuenzen[2] > 0) // 50 CENT-Münzen { + anzahlMuenzen[2] -= 1; rueckgabeMuenzen.add(muenzeErstellen(50, "CENT")); rückgabebetrag -= 0.5; } - while(rückgabebetrag > 0.19) // 20 CENT-Münzen + while(rückgabebetrag > 0.19 && anzahlMuenzen[3] > 0) // 20 CENT-Münzen { + anzahlMuenzen[3] -= 1; rueckgabeMuenzen.add(muenzeErstellen(20, "CENT")); rückgabebetrag -= 0.2; } - while(rückgabebetrag > 0.09) // 10 CENT-Münzen + while(rückgabebetrag > 0.09 && anzahlMuenzen[4] > 0) // 10 CENT-Münzen { + anzahlMuenzen[4] -= 1; rueckgabeMuenzen.add(muenzeErstellen(10, "CENT")); rückgabebetrag -= 0.1; } - while(rückgabebetrag > 0.049)// 5 CENT-Münzen + while(rückgabebetrag > 0.049 && anzahlMuenzen[5] > 0)// 5 CENT-Münzen { + anzahlMuenzen[5] -= 1; rueckgabeMuenzen.add(muenzeErstellen(5, "CENT")); rückgabebetrag -= 0.05; } - muenzenAusgeben(rueckgabeMuenzen); + if (rueckgabeMuenzen.size() > 0) + muenzenAusgeben(rueckgabeMuenzen); + else + errorAnzeigen(2); } } @@ -231,26 +253,171 @@ class Fahrkartenautomat System.out.println("\nVergessen Sie nicht, den Fahrschein\n"+ "vor Fahrtantritt entwerten zu lassen!\n"+ "Wir wünschen Ihnen eine gute Fahrt.\n\n"); - warte(2000); + warte(4000); } public static void admin() { + Scanner tastatur = new Scanner(System.in); + byte auswahl; + boolean imGange = true; System.out.println("Administrationsmenü\n============"); + System.out.printf("verbleibende Ticketrohlinge: %d\n", ticketRohlinge); + System.out.printf("Kassenstand: %.2f EUR\n", kassenstandGes()); + kassenstandM(); + + while (imGange) { + System.out.println("Kasse leeren (1)"); + System.out.println("Kasse auffüllen (2)"); + System.out.println("Ticketrohlinge auffüllen (3)"); + System.out.println("Adminmenü verlassen (4)"); + System.out.print("Ihre Wahl: "); + try { + auswahl = tastatur.nextByte(); + } + catch(InputMismatchException e) { + auswahl = 0; + tastatur.nextLine(); + } + + switch(auswahl) { + case 1: + kasseLeeren(); + imGange = false; + break; + case 2: + kasseAuffuellen(); + imGange = false; + break; + case 3: + ticketsAuffuellen(); + imGange = false; + break; + case 4: + imGange = false; + break; + default: + System.out.println(" >>falsche Eingabe<<"); + warte(1000); + } + } } + public static void errorAnzeigen(int error) { + switch (error) { + case 1: + System.out.println("\n\n\n\n\n\n\n\nSTÖRUNG\n" + + "=======\n" + "Die Ticketrohlinge sind leider aufgebraucht.\nWir bitten um Entschuldigung.\nTechniker erreichbar unter 030 12345" ); + System.exit(0); + break; + case 2: + System.out.println("\n\n\n\n\n\n\n\nSTÖRUNG\n" + + "=======\n" + "Es konnte kein passendes Wechselgeld ausgegeben werden.\nIhr eingegebenes Geld wurde zurückgegeben.\n" + + "Ein Ticket wurde nicht ausgegeben.\nWir bitten um Entschludigung\nTechniker erreichbar unter 030 12345"); + System.exit(0); + } + } + + public static void kassenstandM() { + for (int i = 0; i < anzahlMuenzen.length; i++) { + if (wertMuenzen[i] >= 1) + System.out.printf("%.0f EUR-Münzen: %d Stück\n", wertMuenzen[i], anzahlMuenzen[i]); + else { + int wert = (int) ((double)(wertMuenzen[i])*(double)100); + System.out.printf("%d CENT-Münzen: %d Stück\n", wert, anzahlMuenzen[i]); + } + } + } + + + public static double kassenstandGes() { + double kassenstand = 0.0; + for (int i = 0; i < anzahlMuenzen.length; i++) { + for (int j = 0; j < anzahlMuenzen[i] ; j++) + kassenstand += wertMuenzen[i]; + } + return kassenstand; + } + + public static void kasseLeeren() { + System.out.println("Kasse wurde geleert"); + for (int i = 0; i < anzahlMuenzen.length; i++) { + anzahlMuenzen[i] = 0; + } + admin(); + } + + + public static void kasseAuffuellen() { + Scanner tastatur = new Scanner(System.in); + int hinzu = 0; + for (int i = 0; i < anzahlMuenzen.length; i++) { + if (wertMuenzen[i] >= 1) + System.out.printf("Wieviele %.0f EUR-Münzen sollen hinzugefügt werden:", wertMuenzen[i]); + else { + int wert = (int) ((double)(wertMuenzen[i])*(double)100); + System.out.printf("Wieviele %d CENT-Münzen sollen hinzugefügt werden: ", wert); + } + while(true) { + try { + hinzu = tastatur.nextInt(); + } + catch(InputMismatchException e) { + hinzu = 0; + tastatur.nextLine(); + } + if (hinzu > 0) { + anzahlMuenzen[i] += hinzu; + break; + } + else System.out.println("ungültige Eingabe\n"); + + } + } + admin(); + } + + + + public static void ticketsAuffuellen() { + Scanner tastatur = new Scanner(System.in); + int ticketsHinzu = 0; + while(true) { + System.out.print("Wieviele Rohlinge sollen aufgefüllt werden?: "); + try { + ticketsHinzu = tastatur.nextInt(); + } + catch(InputMismatchException e) { + ticketsHinzu = 0; + tastatur.nextLine(); + } + if (ticketsHinzu > 0) { + ticketRohlinge += ticketsHinzu; + admin(); + break; + } + else System.out.println("ungültige Eingabe\n"); + + } + } + + public static void main(String[] args) { + double zuZahlenderBetrag; double rueckgabebetrag; - while (true) { + while (ticketRohlinge > 0) { zuZahlenderBetrag = auswahlErfassen(); rueckgabebetrag = fahrkartenBezahlen(zuZahlenderBetrag); - fahrkartenAusgeben(); rueckgeldAusgeben(rueckgabebetrag); + fahrkartenAusgeben(); verabschiedungAnzeigen(); } + errorAnzeigen(1); } + + } class Muenze {