Geld­au­to­mat

int Kontostand = 5000;

// Scheine, die zurück gegeben werden
int Fuenfziger;
int Zwanziger;
int Zehner;

void setup()
{
  Serial.begin(9600);

  // auf serielle Verbindung warten

  while (!Serial) {;}
  KontostandAnzeigen(Kontostand);
  Serial.println();
}

void loop()
{
  // abgehobener/eingezahlter Betrag
  int Betrag;

  // auf serielle Eingabe warten
  while (Serial.available() > 0)
  {
    // Eingabe im Seriellen Monitor lesen
    String Eingabe = Serial.readStringUntil(char(13));
    Eingabe = Eingabe.substring(0, Eingabe.length());

    // Testen, ob das erste Zeichen + oder - ist
    if (Eingabe.charAt(0) == '+' || Eingabe.charAt(0) == '-')
    {
      // Auszahlung
      if (Eingabe.startsWith("-"))
      {
        Betrag = Eingabe.toInt() * -1;

        // Betrag muss durch 10 teilbar sein
        if (Betrag % 10 == 0) BetragAuszahlen(Betrag);
      }

      // Einzahlung
      if (Eingabe.startsWith("+"))
      {
        Betrag = Eingabe.toInt();

        // Betrag muss durch 10 teilbar sein
        if (Betrag % 10 == 0) BetragEinzahlen(Betrag);
      }
    }
  }
}

void BetragEinzahlen(int Betrag)
{
  Kontostand = Kontostand + Betrag;
  Serial.println("Du m\u00f6chtest " + String(Betrag) + " \u20ac einzahlen.");
  AnzahlScheine(Betrag);
  KontostandAnzeigen(Kontostand);
}

void BetragAuszahlen(int Betrag)
{
  // der auszuzahlende Betrag ist zu hoch
  if (Kontostand - Betrag < 0)
  {
    Serial.println("Auszahlung nicht m\u00f6glich!");
    Serial.println("Kontostand ist im Soll: " + String(Kontostand - Betrag) + " \u20ac");
    Serial.println("Bitte gib einen kleineren Betrag ein!");
    Serial.println("----------------------------------------");
  }

  // Betrag auszahlen
  else
  {
    Kontostand = Kontostand - Betrag;
    Serial.println("Du m\u00f6chtest " + String(Betrag) + " \u20ac abheben.");
    Serial.println("Du bekommst:");
    
    // Anzahl der Scheine (50, 20 und 10) feststellen
    AnzahlScheine(Betrag);
    KontostandAnzeigen(Kontostand);
  }
}

void KontostandAnzeigen(int Kontostand)
{
  // Kontostand anzeigen
  Serial.println("Neuer Kontostand: " + String(Kontostand) + " \u20ac");
  Serial.println("-------------------------------------------------------");
  Serial.println("Wie viel m\u00f6chtest du einzahlen oder abheben?");
  Serial.println("Der Betrag muss durch 10 teilbar sein!");
  Serial.println("Auszahlung -> dem Betrag ein - Zeichen voranstellen");
  Serial.println("Einzahlung -> dem Betrag ein + Zeichen voranstellen");
  Serial.println("-------------------------------------------------------");
}

void AnzahlScheine(int Betrag)
{
  // Anzahl der 50er
  int Rest = Betrag % 50;

  /*
    vom Betrag den Rest abziehen
    Beispiel:
    130 % 50 ergibt Rest 30
    130 - 30 = 100
    100 ist durch 50 teilbar
  */
  Fuenfziger = (Betrag - Rest) / 50;
  /*
    Rest berechnen
    wenn nicht durch 20 teilbar, kann neuerRest nur 10er sein
    30 % 20 ergibt Rest 10
  */
  int neuerRest = Rest % 20;

  /*
    Anzahl der 20er
    der neueRest muss von Rest abgezogen werden
    -> ergibt die 20er
  */
  Zwanziger = (Rest - neuerRest) / 20;

  // Anzahl der 10er
  Zehner = neuerRest / 10;

  // Anzahl der Geldscheine anzeigen
  if (Fuenfziger > 0) Serial.println(String(Fuenfziger) + " F\u00fcnfziger");
  if (Zwanziger > 0) Serial.println(String(Zwanziger) + " Zwanziger");
  if (Zehner > 0) Serial.println(String(Zehner) + " Zehner");
}

Letzte Aktualisierung: 25. Jul 2023 @ 11:23