www.r-krell.de
Webangebot für Schule und Unterricht, Software, Fotovoltaik und mehr

Willkommen/Übersicht  >  Informatik  >   Informatik mit Java, Teil c) > Java-AWT-Demo > Geldautomat


Automat mit Geldrückgabe

Bedienungsanleitung:
Beträge mit Punkt (statt Komma) eingeben und den 'Rückgabe'-Knopf anklicken!






Bitte speichern Sie zunächst die Programmdatei

Geldrueckgabe-Automat (r-krell.de).jar (8 kB)

auf Ihrem Computer und starten ("öffnen") Sie dann die herunter geladene Datei durch Anklicken.
Am besten schieben Sie danach das geöffnete Programmfenster nach oben links,
sodass Sie gleichzeitig diese Seite lesen können.



Mehr zum Start von Java-Programmen als Application (und nicht mehr als Applet) auf meiner Extraseite Übersicht über meine Java-Programme - Appletprobleme und Downloads (in neuem Tab)


Nachfolgend der Quelltext, der auf drei Dateien verteilt, wobei für die mittlere Datei vier Alternativen genannt sind:


zum Seitenanfang / zum Seitenende

// Automat mit Geldrückgabe
// Hier: Oberfläche
// Java jdk 1.1.18 -- Krell, 28.1.01

import java.awt.*;
import java.awt.event.*;

public class Geldautomat_GUI extends Frame
{
  Label lbZuza = 
new Label ("zu zahlen :");
  Label lbGege = 
new Label ("gegeben :");
  TextField tfZuza = 
new TextField ("",10);
  TextField tfGege = 
new TextField ("",10);
  TextArea taAusgabe = 
new TextArea ("",10,25);
  Button btRückgabe = 
new Button ("Rückgabe");
  Label lbQuelle = 
new Label (" www.r-krell.de > Informatik > Java");

  
//Einbinden eines Rechenwerks (egal, welche Nummer)
  Geldautomat_Rechnung4 rechner = new Geldautomat_Rechnung4();
  
  
public void richteFensterEin()
  {
    
//Funktion des Schließknopfes ergänzen
    addWindowListener(
    
  new WindowAdapter()
      {
      
   public void windowClosing (WindowEvent e)
        {
          setVisible (
false);
          dispose ();
          System.exit (0);
        }
      }
    );
    setTitle(
"Geldautomat");
    setSize (210,310);
    setLayout (
new FlowLayout());
  } 

  
public void richteKnopfEin()
  {
    btRückgabe.addActionListener(
      
new ActionListener()
      { 
        
public void actionPerformed (ActionEvent e)
        {
          
//Nachfolgender Text kommt immer, wird aber bei
          //richtigen Zahlen überschrieben
          taAusgabe.setText("Falsche Eingabe(n)!");

          
//Umwandlung des Textes in (Komma-)Zahlen
          Double gegeObj = Double.valueOf(tfGege.getText());
          Double zuzaObj = Double.valueOf(tfZuza.getText());
          
double gege    = gegeObj.doubleValue();
          
double zuza    = zuzaObj.doubleValue();

          
//Ausgabe (ersetzt "Falsche Eingabe")
          if (gege < zuza)
          {
            tfGege.setText(
"");
            taAusgabe.setText(
""+gege+"\nzurück, da zu wenig."
             +"\nMindestens "+zuza+" geben!");
          }
          
else
          {   
            taAusgabe.setText(
"Sie erhalten zurück:\n"+
              rechner.gibZurück(gege-zuza)+
"======"); 
          }  
        }
      }          
    );
  }

  
public void führeAus()
  {
    richteFensterEin();
    richteKnopfEin();
    add (lbZuza);
    add (tfZuza);
    add (lbGege);
    add (tfGege);
    add (btRückgabe);
    add (taAusgabe);
    add (lbQuelle);
    setVisible(
true);
  }
}




zum Seitenanfang / zum Seitenende

public class Geldautomat_Rechnung1
// 1. Version: 5 While-Schleifen; noch kein Rundungsausgleich
{
  
public String gibZurück (double zurück)
  
//Hinweis: Bei manchen Beträgen -- z.B. zu zahlen 4.80,
  //gegeben 15.0, fehlt ein Groschen (bzw. 10 Cent, angezeigt aals 0.10) bei der Rückgabe wegen 
  //Ungenauigkeit bei der Dualdarstellung von dezimal 0.1
  //auch 24.80/25 oder 4/5.6
  {     
     String rückgabe = 
"";     
 
     
while(zurück>=5)
     {
       rückgabe = rückgabe + 
"5,-\n";
       zurück = zurück-5;
     }
   
     
while(zurück>=2)
     {
       rückgabe = rückgabe + 
"2,-\n";
       zurück = zurück-2;
     }
      
     
while(zurück>=1)
     {
       rückgabe = rückgabe + 
"1,-\n";
       zurück = zurück-1;
     }
      
     
while(zurück>=0.50)
     {
       rückgabe = rückgabe + 
"-,50\n";
       zurück = zurück-0.50;
     }
        
     
while(zurück>=0.10)
     {
        rückgabe = rückgabe + 
"-,10\n";
        zurück = zurück-0.10;
     }
     
return (rückgabe);
  }

}




zum Seitenanfang / zum Seitenende

public class Geldautomat_Rechnung2
// 2. Version: 5 While-Schleifen; mit Rundungsausgleich
{
  
public String gibZurück (double zurück)
  
//Ohne Rundungsausgleich fehlt bei manchen Beträgen -- 
  //z.B. zu zahlen 4.80, gegeben 15.0, 
  //ein Groschen bei der Rückgabe wegen 
  //Ungenauigkeit bei der Dualdarstellung von dezimal 0.1
  //zum Ausgleich werden hier 0.0001 DM addiert.
  {     
     String rückgabe = 
"";     
 
     zurück = zurück + 0.0001; 
// Rundungsausgleich 
     while(zurück>=5)
     {
       rückgabe = rückgabe + 
"5,-\n";
       zurück = zurück-5;
     }
   
     
while(zurück>=2)
     {
       rückgabe = rückgabe + 
"2,-\n";
       zurück = zurück-2;
     }
      
     
while(zurück>=1)
     {
       rückgabe = rückgabe + 
"1,-\n";
       zurück = zurück-1;
     }
      
     
while(zurück>=0.50)
     {
       rückgabe = rückgabe + 
"-,50\n";
       zurück = zurück-0.50;
     }
        
     
while(zurück>=0.10)
     {
        rückgabe = rückgabe + 
"-,10\n";
        zurück = zurück-0.10;
     }
     
return (rückgabe);
  }

}




zum Seitenanfang / zum Seitenende

public class Geldautomat_Rechnung3
// 3. Version: 1 While-Schleife, 5x individuell aufgerufen;
// mit Rundungsausgleich
{
  
double nochZurück; 
  String bisherAusgezahlt;

  
void gibMünzsorte (double wert)
  
// gibt Münzen einer Sorte zurück
 {
   
while(nochZurück>=wert)
   {
     bisherAusgezahlt = bisherAusgezahlt + wert+
"0\n";
     nochZurück = nochZurück - wert;
   }
 }

  
public String gibZurück (double zurück)
  {     
    nochZurück = zurück + 0.0001; 
// Rundungsausgleich 
    bisherAusgezahlt = "";
    gibMünzsorte (5.0);
    gibMünzsorte (2.0);
    gibMünzsorte (1.0);
    gibMünzsorte (0.5);
    gibMünzsorte (0.1);
    
return (bisherAusgezahlt);
  }

}




zum Seitenanfang / zum Seitenende

public class Geldautomat_Rechnung4
// 4. Version: 1 While-Schleife, durch For-Schleife aufgerufen;
// Reihung nötig, da Münzwerte unterschiedliche Abstände haben
// und so mit dem Index statt mit dem Wert gearbeitet werden kann.

// Mit Rundungsausgleich
{
  
double nochZurück; 
  String bisherAusgezahlt;
  
double[] münze = { 5.0, 2.0, 1.0, 0.5, 0.1 };

  
void gibMünzsorte (double wert)
  
// gibt Münzen einer Sorte zurück
 {
   
while(nochZurück>=wert)
   {
     bisherAusgezahlt = bisherAusgezahlt + wert+
"0\n";
     nochZurück = nochZurück - wert;
   }
 }

  
public String gibZurück (double zurück)
  {     
    nochZurück = zurück + 0.0001; 
// Rundungsausgleich 
    bisherAusgezahlt = "";
    
for (int sorte=0; sorte < münze.length; sorte++)
    {
      gibMünzsorte (münze[sorte]);
    }
    
return (bisherAusgezahlt);
  }

}




zum Seitenanfang / zum Seitenende

public class Geldautomat_Start extends java.applet.Applet 
{
  
//Start als selbständige Application
  public static void main (String[] s) 
  {
    Geldautomat_GUI a;
    a = 
new Geldautomat_GUI();
    a.führeAus();
  }
  
  
//Start als Applet aus dem Web-Browser (seit 2017 nicht mehr erlaubt)
  public void init()
  {
    Geldautomat_GUI a;
    a = 
new Geldautomat_GUI();
    a.führeAus();
  }

}    
    



zurück zur Seite „Informatik mit Java, Teil c)"


zum Anfang dieser Seite
Willkommen/Übersicht   -   Was ist neu?   -   Software   -   Mathematik   -   Physik   -   Informatik   -   Schule: Lessing-Gymnasium und -Berufskolleg   -   Fotovoltaik   -   & mehr   -   Kontakt: e-Mail,  News-Abo, Gästebuch, Impressum   -   Grußkarten, site map, Download und Suche

Diese Seite ist Teil des Webangebots https://www.r-krell.de.