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:
// 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);
}
}
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);
}
}
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);
}
}
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);
}
}
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);
}
}
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)"