MezData-Logo

Oberfläche zum Verkaufsautomat

Oberfläche mit Java-Swing

VK-Automat Oberfläche

Downloads

BlueJ-Projekt: Verkaufsautomat_V2_bluej.zip

IntelliJ-Projekt: Verkaufsautomat_V2_intellij.zip

Quelltext der Oberfläche

Quellcode [Verkaufsautomat_V2_bluej/Oberflaeche.java]
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
 
public class Oberflaeche extends JFrame { // Das ist der Fensterrahmen des Programms
  private Steuerung dieSteuerung = new Steuerung(); // Die Steuerung ist eine extra Klasse
 
  public Oberflaeche() {   
    getContentPane().add(new MyContainer(dieSteuerung)); // Den Container in den Fensterrahmen eingebaut
    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); // Beenden wenn Rahmen geschlossen 
  }
 
  public static void main(String[] args) { // Main Methode zum starten der Applikation
    Oberflaeche dieOberflaeche = new Oberflaeche();   // Das Fenster wird erzeugt
    dieOberflaeche.setSize(500,500);                  // Die Groesse wird festgelegt
    dieOberflaeche.setTitle("Verkaufsautomat 2 (c) MezMedia '2021");
    dieOberflaeche.setVisible(true);
  }
}
 
class MyContainer extends Container { // Ein Container nimmt die einzelnen Panele auf
  public MyContainer(Steuerung steu){ 
    setLayout(new BorderLayout(10,10));
    NordPanel nord = new NordPanel(steu);
    SuedPanel sued = new SuedPanel(steu);
    add(nord, BorderLayout.NORTH );
    add(new OstPanel(steu,nord,sued), BorderLayout.EAST );
    add(new MittePanel(steu), BorderLayout.CENTER );
    add(sued, BorderLayout.SOUTH );
  } 
}
 
class NordPanel extends JPanel{
  private JTextField dasGeldFeld = new JTextField(5);
  private JButton derEinwurfButton = new JButton("Einwerfen");
  private JLabel dasKassenLabel = new JLabel("0 Cent");
  private Steuerung dieSteuerung; // wir brauchen einen dauerhaften Draht zur Steuerung
 
  public NordPanel(Steuerung steu){
    setBackground(Color.yellow);
    setLayout(new FlowLayout());
    add(new JLabel("Geldeinwurf "));
    add(dasGeldFeld);
    add(derEinwurfButton);
    add(new JLabel("Kasse: "));
    add(dasKassenLabel);
    dieSteuerung = steu;
    derEinwurfButton.addMouseListener(new java.awt.event.MouseAdapter() {
      public void mousePressed(MouseEvent e) {
        int g = Integer.parseInt(dasGeldFeld.getText());
        dasKassenLabel.setText(dieSteuerung.einzahlen(g)+" Cent"); 
      }
    });
  }
  public void anzeigenKasse(){
    dasKassenLabel.setText(dieSteuerung.getKasse()+" Cent");
  }
}
class OstPanel extends JPanel{
  private JLabel dasProduktLabel = new JLabel("Nix");
  private Steuerung dieSteuerung;
  private NordPanel dasNordPanel;
  private SuedPanel dasSuedPanel;
 
  public OstPanel(Steuerung steu, NordPanel nord, SuedPanel sued){
    JButton tmp;
    setBackground(Color.green);
    dieSteuerung = steu;
    dasNordPanel = nord;
    dasSuedPanel = sued;
    setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
    add(Box.createVerticalStrut(20));
    tmp = new JButton("Produkt" + 0);
    add (tmp);
    tmp.addMouseListener(new java.awt.event.MouseAdapter() {
      public void mousePressed(MouseEvent e) {
        klickProdukt(0);
      }
    });
    add(Box.createVerticalStrut(20));
    tmp = new JButton("Produkt" + 1);
    add (tmp);
    tmp.addMouseListener(new java.awt.event.MouseAdapter() {
      public void mousePressed(MouseEvent e) {
        klickProdukt(1);
      }
    });
    add(Box.createVerticalStrut(20));
    tmp = new JButton("Produkt" + 2);
    add (tmp);
    tmp.addMouseListener(new java.awt.event.MouseAdapter() {
      public void mousePressed(MouseEvent e) {
        klickProdukt(2);
      }
    });
    add(Box.createVerticalStrut(20));
    tmp = new JButton("Produkt" + 3);
    add (tmp);
    tmp.addMouseListener(new java.awt.event.MouseAdapter() {
      public void mousePressed(MouseEvent e) {
        klickProdukt(3);
      }
    });
    add(Box.createVerticalGlue());
    add(dasProduktLabel);
  }
  private void klickProdukt(int i){
    int n = dieSteuerung.verkaufe(i);
    if (n < 0) 
      dasProduktLabel.setText("Es fehlen "+-n+" Cent");
    else {
      dasSuedPanel.ausgeben();
      dasProduktLabel.setText("Danke!");
    }    
    dasNordPanel.anzeigenKasse();
  }
}
class MittePanel extends JPanel{
  private JTextArea dieTextArea = new JTextArea(8,20);
  public MittePanel(Steuerung steu){
    String s[]= new String[4];   
    setBackground(Color.white);
    setLayout(new FlowLayout());
    add(dieTextArea);
    dieTextArea.append("Hier eine Übersicht der Produkte\n\n");
    steu.init(s);
    for (int i=0;i<s.length;i++) dieTextArea.append(s[i]+" Cent\t Produkt "+i+"\n\n");
  }
}
class SuedPanel extends JPanel{
  private JTextArea dieAusgabeArea = new JTextArea(8,20);
  private Steuerung dieSteuerung;
  public SuedPanel(Steuerung steu){
    setBackground(Color.red);
    setLayout(new FlowLayout());
    dieSteuerung = steu;
    add(dieAusgabeArea);
    dieAusgabeArea.append("Ausgabe");
  }
  public void ausgeben(){
    String s[]= new String[8];
    dieSteuerung.ausgebenWechselgeld(s);
    dieAusgabeArea.setText("Wechselgeld: \n");
    int i=0;
    while (s[i]!=null)
      dieAusgabeArea.append(s[i++]+"\n");
  }    
}

Quellcode Steuerung

Quellcode [Verkaufsautomat_V2_bluej/Steuerung.java]
public class Steuerung{
  private String warenName[]={"Lila Lutscher","Blaue Bohnen","Mungos","Billies"};
  private int warenPreis[]={100,90,200,35};
  private int kasse;
 
  public void init(String s[]){ // Ausgeben des Angebots: warenName warenPreis
    int i;
    for (i=0;i<warenName.length;i++){
      s[i]=warenName[i]+" : "+warenPreis[i];  
    }    
  }
 
  public int einzahlen(int g){ // Betrag g wird zur Kasse hinzugefuegt
    return kasse += g;
  }
 
  public int getKasse(){ // Geldbetrag der Kasse zurueckgeben
    return kasse;
  } 
 
  public void ausgebenWechselgeld(String s[]){ // Restgeld aus der Kasse zurueckgeben bis sie leer ist
    int mWerte[]={1,2,5,10,20,50,100,200};
    String mNamen[]={"1 Cent","2 Cent","5 Cent","10 Cent","20 Cent","50 Cent","1 Euro","2 Euro"};
    int i,a,j=0;
    i=7;
    while (kasse>0){
      a=kasse/mWerte[i];
      if (a>0) 
        s[j++]=a+ " * "+mNamen[i];
      kasse=kasse%mWerte[i];
      i--;
    }    
  }
 
  public int verkaufe(int w){ // Ware aus Schacht w soll gekauft werden
    if (kasse>=warenPreis[w])
      return kasse -= warenPreis[w];    
    return kasse-warenPreis[w];   
  }
}

Erstellen Sie ein Übersichts-Klassendiagramm ohne Attribute und Methoden für den Verkaufsautomat!

Klassenübersichtsdiagramm Klassendiagramm

In Welcher Reihenfolge werden die Objekte erzeugt? Geschwätziges Programm: [Verkaufsautomat_V2-plapper_bluej.zip] [Verkaufsautomat_V2-plapper_intellij.zip]

Erstellen Sie für ein Klassendiagramm mit Attributen und Methoden mit diesen Klassen: Oberflaeche ,Steuerung, MyContainer, NordPanel, MittePanel, SuedPanel, OstPanel.

Klassendiagramm Klassendiagramm

Der Münzeinwurf soll geändert werden -für jede Münzsorte ein Button. Modifizieren Sie das Programm.

Lösung: Verkaufsautomat_V21_bluej.zip