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 > Wechselgeldautomat
Automat mit Geldrückgabe
Nach dem Webstart erscheint links oben ein Extra-Fenster mit der Automaten-Simulation:
Bitte Beträge mit Punkt (statt Komma) eingeben und dann
den Rückgabe-Knopf drücken/anklicken.
Es werden nur Münzen zu 5 € / 2 € / 1 € / 0.50 € / 0.20 € und 0.10 € zurück gegeben.
Wenn die Java-JRE installiert ist, können Sie das Programm jetzt sofort ausführen:
Hier klicken zum Webstart des Geldrückgabe-Automaten |
Danach Öffnen von Geldrueckgabe-Automat.jnlp [mit Java(TM) Webstart Launcher
(Standard)] wählen/bestätigen
und bei evtl. Sicherheitswarnung vor der Ausführung von Geldautomat_Start das Risiko akzeptieren und OK
drücken.
Wenn Sie außerdem gefragt werden, ob Sie eine Desktop- und eine Startmenüverknüpfung
anlegen wollen,
sollten Sie zustimmen, wenn Sie die Wechselgeldrückgabe auch nach Verlassen dieser Webseite nochmal ausprobieren wollen.
Wird nach dem Klick Geldrueckgabe-Automat.jnlp herunter geladen oder werden Sie gefragt, womit Sie
Geldrueckgabe-Automat.jnlp öffnen wollen oder
ob/wohin Sie die Datei speichern wollen, haben Sie entweder kein Java installiert oder ihr Browser (z.B. Opera) unterstützt keinen
Webstart.
Im letzten Fall empfiehlt sich nachfolgend der Download der .jar-Datei:
Sie können den Automat auch als ausführbare Java-Datei Geldrueckgabe-Automat(r-krell.de).jar (8 kB) herunter laden und später lokal auf Ihrem Rechner starten (Java-Umgebung JRE vorausgesetzt). Die Ausführung als Applet im Browser wird von mir hingegen nicht mehr angeboten: Gründe, Abhilfe und alle Downloads (in neuem Tab)
Nachfolgend der Java-Quelltext, der auf drei Dateien verteilt ist, wobei für den mittleren Teil vier Alternativen genannt werden:
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 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
public void init()
{
Geldautomat_GUI a;
a = new Geldautomat_GUI();
a.führeAus();
}
}
zurück zur Seite „Informatik mit Java, Teil c)"