Ticketautomat

soulguerilla

Mitglied
Guten Abend :D,

ich geh zur Zeit in die 10. Klasse und wir haben als 2-wöchiges Projekt aufbekommen einen Ticketautomaten zu programmieren, da unser Lehrer jetzt aber weg ist und wir nicht wirklich die beste Vorbereitung auf das Thema hatten, bin ich verloren, vor allem weil wir das Projekt nächste Woche abgeben müssen.
Ich arbeite mit dem Java Editor, hab eine Klasse Ticket, eine Klasse Ticketautomat und die Klasse GUI_Ticketautomat (welche zu groß ist um sie abzufotografieren). Mein GUI sieht so aus.
Ich hab die Methoden Ticket kaufen (wenn der Button gedrückt wird), 10, 20, 50 usw. Cent einwerfen, Abbrechen und pruefeEingezahltenBetrag.

Soweit klappt auch alles, bis auf das ich die Methode geldEinwerfen nicht programmiert habe, und auch keine Ahnung habe wie, bzw. wie ich es umsetzen soll, die Idee ist gesamtsumme um x erhöhen (x=eingezahlter Betrag) und bisherGezahlt um x erhöhen, aber ich kriegs einfach nicht hin das zu machen.
Wenn sich jemand erbarmen würde mir zu sagen wie das geht wäre das sehr nett :)


MfG,

soul
 
Zuletzt bearbeitet von einem Moderator:

noobadix

Bekanntes Mitglied
Hallöchen!

Wenn du code-Beispiele zeigen willst, benutz' doch die java-tags. Das ist für den Leser meist angenehmer.

Und zu deiner konkreten Frage, die wohl lautet: "Wie erhöhe ich den Wert einer int-Variablen?":

Java:
int summand1=0, summand2=50,summe=0;
...
summe = summand1+summand2 ;

Oder wie? ^^

Gruß!
 

Fab1

Top Contributor
Grundsätzlich ist natürlich immer der Lehrer schuld. Das musste man gleich im ersten Satz los werden.

Du solltest versuchen nur die Codestellen zu posten, die auch wichtig sind und nicht gleich das ganze Programm.

Nunja aber da du mittlerweile weißt, wie man Java Tags verwendet steht ja nichts mehr im Weg, dass du uns eine wenn auch nicht funktionierende Version postest, wie du es dir gedacht hast. Du hast ja gesagt, wie du es dir vorgestellt hast, aber in diesem Forum wird dir keine eine Lösung posten, was von dir wahrscheinlich auch nicht erwartet wird.

Mit dieser kann man dich dann auf den richtigen Weg bringen, somit ist dabei wenigstens was gelernt.


Eine Schleife wäre beispielsweise nicht verkehrt. Solange der eingezahlte Betrag < Kosten muss der Kunde noch was einzahlen. Anschließend die Differenz ausrechnen, damit man auf das Wechselgeld kommt. Aber darauf kommst du selbst ;)
 

soulguerilla

Mitglied
Ok, Danke erstmal, also das mit summand 1 + summand 2 = summe ist ja logisch, aber das müsste ich dann ja für jede Preisstufe (also 10Ct, 20Ct, 50Ct, 1€ und 2€) machen, geht es nicht irgendwie das man irgendwie mit einer set-Methode x einsetzt und das dann in der jeweiligen Methode für die Preisstufe spezifiziert, also einmal die Methode
Java:
public void geldEinwerfen() {
         setBisherGezahlt = x //eingezahlterBetrag
         setGesamtsumme = x

und dann
Java:
public void 10ct
         geldEinwerfen(x=10)

Hoffe das ist einigermaßen verständlich.
 

noobadix

Bekanntes Mitglied
Also,was passieren soll:

1. Kunde bestellt Ticket, Variable "Preis" wird mit Ticketpreis besetzt
2. Kunde bezahlt Ticket, indem er auf einen der Geldeinwurfbuttons drückt, die Summe wird dabei in der Variablen "bisherGezahlt" gespeichert und diese mit "Preis" vergeglichen.

Jeder Button hat seinen Listener und in diesem muss die Methode geldEinwerfen(int wert) mit seinem Wert (0.5, 1.0, 2.0, ...) aufgerufen werden, in welcher dann "bisherGezahlt" dem Argument entsprechend erhöht wird.
Hilft das?
 
Zuletzt bearbeitet:

soulguerilla

Mitglied
Ja,

nur wie mach ich die Methode geldEinwerfen so, dass die Werte um x erhöht werden und nicht um 1 oder 2 oder irgendeine vordefinierte zahl. D.h. bei 10ct einwerfen werden sie um 10 erhöht, bei 1€ um 100, denn sonst müsste ich die Methode fünf mal machen.
Das müsste doch mit get-set Methoden möglich sein oder?
 

noobadix

Bekanntes Mitglied
Kennst du denn schon Methoden mit Argumenten? Oder anders: Was funktioniert nicht mit folgender Methode:

Java:
public void geldEinwerfen(int x){
    summe = summe + x;                     //oder auch: summe += x
}

?

Diese könntest du dann in jedem Listener mit dem entsprechenden Wert aufrufen.
 
Zuletzt bearbeitet:

soulguerilla

Mitglied
Ne kenn ich nicht, wie gesagt wir haben diese Woche erst mit dem Thema angefangen, deswegen hab ich auch keinen Plan von nix :)
 
Zuletzt bearbeitet:

noobadix

Bekanntes Mitglied
Aaaah, na dann lies dir am besten fix die java Grundlagen an! Lohnt sich m.E., Programmieren ist 'ne nützliche Sache (wenn man nicht grad eh sein Leben lang nur Fernsehen gucken will ^^).

Hier in diesem Fall kann ich dir sagen:

Übliche Methoden sind in java folgendermaßen aufgebaut: Modifier Rückgabetyp Name(Argumente){ code }

Modifier: static, public, private usw.
Rückgabetyp: void (=nichts) oder irgendeinen Datentypen
Name: selbst ausgedachter, max. 32 zeichen langer Name
Argumente: sozusagen Variablen, die nur innerhalb der Methode sichtbar sind, werden beim Aufrufen der Methode initialisiert

Nun kannste folgendes machen:

Java:
class ButtonListener implements ActionListener{
     private int erhoehungsBetrag;

     public ButtonListener(int erhoehungsbetrag){
          this.erhoehungsBetrag = erhoehungsBetrag;
     }

     public void actionPerformed(ActionEvent e){
          geldEinwerfen(erhoehungsBetrag);
     }
}

Die Methode, die so heißt wie die Klasse (ButtonListener), ist der Konstruktor, dieser wird aufgerufen, wann immer eine Klasse instanziiert wird. Die Klasse hat als Instanzvariable "erhoehungsBetrag", deren Wert im Konstruktor bestimmt wird. Mit "this" sagt man, dass man die Instanzvariable meint und nicht die lokale Variable der Methode.
Gleichzeitig implementiert die Klasse das Interface ActionListener, was bedeutet, dass bestimmte (je nach Interface) Methoden implementiert, also geschrieben, werden MÜSSEN (im Falle ActionListener ist das public void actionPerformed(ActionEvent e) ).

So, und nun kannste für jeden Button ganz easy folgendes machen:

Java:
button10er.addActionListener(new ButtonListener(10));
button20er.addActionListener(new ButtonListener(20));
button100er.addActionListener(new ButtonListener(100));
...

EDIT: Stell Fragen, wenn dir etwas unklar oder so ist! Es wäre für dich sehr vorteilhaft, wenn du alles en Detail verstehen würdest! Darfst natürlich auch googlen. ^^ Aber versuche deine Probleme möglichst zu isolieren/klar herauszuarbeiten und nicht ein Programm hier hineinzuposten mit nichts weiter als "Proggi geht nicht, macht's mal heile!".
 
Zuletzt bearbeitet:

soulguerilla

Mitglied
Also ich glaub das sprengt den Rahmen dann doch, weil bei sowas glaubt mir niemand das ich selbst drauf gekommen bin. Hab jetzt auch mal den Lehrer angemailt, er sagt als Methode reicht einfach

Java:
gesamtsumme = gesamtsumme + x

er schreibt das x in diesem Fall als Parameter übergeben wird.
Jetzt ist aber das Problem, dass mir Java nen Fehler ausspuckt, von wegen das er die Variable nicht findet, die Variable ist aber in der Klasse Ticketautomat als public angegeben, heißt das dann nicht das ich die auch in anderen Klassen benutzen kann?
Hier der Fehlercode
Java:
Compiliere H:\Ticketautomat\GUI_Ticketautomat.java mit Java-Compiler
GUI_Ticketautomat.java:167:12: error: cannot find symbol
           gesamtsumme = gesamtsumme + x;
           ^
  symbol:   variable gesamtsumme
  location: class GUI_Ticketautomat
 

pro2

Bekanntes Mitglied
Kannst du. Dann musst du aber in der anderen Klasse schreiben:
Code:
klassenName.gesamtsumme
- falls du die Variable als static deklariert hast
oder
Code:
instanzName.gesamtsumme
- falls du deine entsprechende Klasse instanziiert hast in der anderen Klasse. Also z. B. so was gemacht hast:
Code:
Geldautomat instanzName = new Geldautomat();

klassenName und instanzName stellen dabei natürlich die Namen dar, die du dafür vergeben hast. ;)
 

noobadix

Bekanntes Mitglied
Die Variable "gesamtsumme" ist auf deinen Fotos nicht public, sondern private und das sollte auch so bleiben. Um diese Variable zu verändern bietet die Klasse "Ticketautomat" getter und setter, benutze sie!

Falls es noch hakt, poste mal deine Klasse GUI_Ticketautomat.
 

soulguerilla

Mitglied
Ok hab ich gemacht, gibt jedoch wieder mehrere Fehler.


Die Methode sieht (noch) so aus:
Java:
public void geldEinwerfen() {
           Ticketautomat.gesamtsumme = gesamtsumme + x;
           }

Die Fehler sind
Java:
Compiliere H:\Ticketautomat\GUI_Ticketautomat.java mit Java-Compiler
GUI_Ticketautomat.java:167:25: error: gesamtsumme has private access in Ticketautomat
           Ticketautomat.gesamtsumme = gesamtsumme + x;
                        ^
GUI_Ticketautomat.java:167:40: error: cannot find symbol
           Ticketautomat.gesamtsumme = gesamtsumme + x;
                                       ^
  symbol:   variable gesamtsumme
  location: class GUI_Ticketautomat
GUI_Ticketautomat.java:167:54: error: x is not public in Component; cannot be accessed from outside package
           Ticketautomat.gesamtsumme = gesamtsumme + x;
                                                     ^
Note: GUI_Ticketautomat.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
3 errors


@noob: Ich weiß, ich hatte sie aber mal auf public umgestellt um zu gucken obs klappt.


Hier auch nochmal der gesamte Code der GUI Klasse. :))))
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 18.06.2012
  * @author
  */

public class GUI_Ticketautomat extends JFrame {
  // Anfang Attribute
  private JLabel jL_Titel = new JLabel();
  private JTextArea jTA_Display = new JTextArea("");
    private JScrollPane jTA_DisplayScrollPane = new JScrollPane(jTA_Display);
  private JComboBox jCB_Ticketauswahl = new JComboBox();
  private JComboBox jCB_Preisstufenwahl = new JComboBox();
  private JTextArea jTA_Auswahl = new JTextArea("");
    private JScrollPane jTA_AuswahlScrollPane = new JScrollPane(jTA_Auswahl);
  private JButton jB_TicketKaufen = new JButton();
  private JButton jB_10Ct = new JButton();
  private JButton jB_20Ct = new JButton();
  private JButton jB_50Ct = new JButton();
  private JButton jB_100Ct = new JButton();
  private JButton jB_200Ct = new JButton();
  private JButton jB_Abbrechen = new JButton();
  private Ticketautomat ticketkauf = new Ticketautomat();
  private Ticket fahrschein = new Ticket();
  // Ende Attribute
  
  public GUI_Ticketautomat(String title) {
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 750; 
    int frameHeight = 550;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten
    
    jL_Titel.setBounds(192, 24, 391, 65);
    jL_Titel.setText("KVB - Ticketautomat");
    jL_Titel.setFont(new Font("Dialog", Font.BOLD, 40));
    cp.add(jL_Titel);
    jTA_DisplayScrollPane.setBounds(32, 112, 673, 89);
    cp.add(jTA_DisplayScrollPane);
    jCB_Ticketauswahl.setBounds(32, 216, 225, 33);
    jCB_Ticketauswahl.setToolTipText("Ticket wählen");
    jCB_Ticketauswahl.setFont(new Font("Dialog", Font.BOLD, 16));
    jCB_Ticketauswahl.addItemListener(new ItemListener() { 
      public void itemStateChanged(ItemEvent evt) { 
        jCB_Ticketauswahl_ItemStateChanged(evt);
      }
    });
    jCB_Ticketauswahl.setModel(new DefaultComboBoxModel(new String[] {"Einzelticket Erwachsene", "Einzelticket Kinder", "4-er Ticket Erwachsene", "4-er Ticket Kinder", "Tagesticket 1 Person", "Tagesticket 4 Personen"}));
    jCB_Ticketauswahl.setEditable(true);
    cp.add(jCB_Ticketauswahl);
    jCB_Preisstufenwahl.setBounds(32, 272, 225, 33);
    jCB_Preisstufenwahl.setToolTipText("Preisstufe wählen");
    jCB_Preisstufenwahl.setModel(new DefaultComboBoxModel(new String[] {"K", "1a", "1b", "2a", "2b", "3", "4", "5"}));
    jCB_Preisstufenwahl.setFont(new Font("Dialog", Font.BOLD, 16));
    jCB_Preisstufenwahl.setEditable(true);
    cp.add(jCB_Preisstufenwahl);
    jTA_AuswahlScrollPane.setBounds(32, 328, 353, 169);
    cp.add(jTA_AuswahlScrollPane);
    jB_TicketKaufen.setBounds(408, 216, 209, 97);
    jB_TicketKaufen.setText("TICKET KAUFEN");
    jB_TicketKaufen.setMargin(new Insets(2, 2, 2, 2));
    jB_TicketKaufen.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        jB_TicketKaufen_ActionPerformed(evt);
      }
    });
    jB_TicketKaufen.setFont(new Font("Dialog", Font.BOLD, 22));
    cp.add(jB_TicketKaufen);
    jB_10Ct.setBounds(408, 336, 73, 33);
    jB_10Ct.setText("10 Ct");
    jB_10Ct.setMargin(new Insets(2, 2, 2, 2));
    jB_10Ct.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        jB_10Ct_ActionPerformed(evt);
      }
    });
    cp.add(jB_10Ct);
    jB_20Ct.setBounds(408, 384, 73, 33);
    jB_20Ct.setText("20 Ct");
    jB_20Ct.setMargin(new Insets(2, 2, 2, 2));
    jB_20Ct.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        jB_20Ct_ActionPerformed(evt);
      }
    });
    cp.add(jB_20Ct);
    jB_50Ct.setBounds(408, 432, 73, 33);
    jB_50Ct.setText("50 Ct");
    jB_50Ct.setMargin(new Insets(2, 2, 2, 2));
    jB_50Ct.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        jB_50Ct_ActionPerformed(evt);
      }
    });
    cp.add(jB_50Ct);
    jB_100Ct.setBounds(544, 336, 73, 33);
    jB_100Ct.setText("1 €");
    jB_100Ct.setMargin(new Insets(2, 2, 2, 2));
    jB_100Ct.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        jB_100Ct_ActionPerformed(evt);
      }
    });
    cp.add(jB_100Ct);
    jB_200Ct.setBounds(544, 384, 73, 33);
    jB_200Ct.setText("2 €");
    jB_200Ct.setMargin(new Insets(2, 2, 2, 2));
    jB_200Ct.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        jB_200Ct_ActionPerformed(evt);
      }
    });
    cp.add(jB_200Ct);
    jB_Abbrechen.setBounds(512, 448, 145, 49);
    jB_Abbrechen.setText("ABBRECHEN");
    jB_Abbrechen.setMargin(new Insets(2, 2, 2, 2));
    jB_Abbrechen.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        jB_Abbrechen_ActionPerformed(evt);
      }
    });
    jB_Abbrechen.setFont(new Font("Dialog", Font.BOLD, 18));
    cp.add(jB_Abbrechen);
    // Ende Komponenten
    
    setVisible(true);
  } // end of public GUI_Ticketautomat
  
  // Anfang Methoden
  public void jB_TicketKaufen_ActionPerformed(ActionEvent evt) {
    if (jCB_Ticketauswahl.getSelectedIndex() != 0 &&
    jCB_Preisstufenwahl.getSelectedIndex() != 0 ) {
      
      if (jCB_Ticketauswahl.getSelectedIndex() > 4 &&
      jCB_Preisstufenwahl.getSelectedIndex() == 1) {
        
        jTA_Display.setText("Bei Auswahl eines Zeittickets ist die Wahl der Preisstufe Kurzstrecke nicht möglich.");
        
        jTA_Display.append("\n" + "Bitte wählen Sie die passende Preisstufe oder ein anderes Ticket.");
        
      } else {

        jTA_Display.setText("Sie haben " + jCB_Ticketauswahl.getSelectedItem().toString() + "\n");
        jTA_Display.append("Preisstufe: " + jCB_Preisstufenwahl.getSelectedItem().toString() + "\n");
        jTA_Display.append("Bitte zahlen Sie " + ticketkauf.getPreis(jCB_Ticketauswahl.getSelectedIndex() - 1, jCB_Preisstufenwahl.getSelectedIndex() -1) + " Cent.");
      } // end of if-else
    }} // end of jB_TicketKaufen_ActionPerformed
  
  
    public void geldEinwerfen() {
           Ticketautomat.gesamtsumme = gesamtsumme + x;

    }

    public void jB_10Ct_ActionPerformed(ActionEvent evt) {

    } // end of jB_10Ct_ActionPerformed
  
  public void jB_20Ct_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
  } // end of jB_20Ct_ActionPerformed
  
  public void jB_50Ct_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
  } // end of jB_50Ct_ActionPerformed
  
  public void jB_100Ct_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
  } // end of jB_100Ct_ActionPerformed
  
  public void jB_200Ct_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
  } // end of jB_200Ct_ActionPerformed
  
  public void jB_Abbrechen_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
  } // end of jB_Abbrechen_ActionPerformed
  

  public void pruefeEingezahltenBetrag() {
    if (fahrschein.getPreisInCent() <= ticketkauf.getBisherGezahlt()) {
      jTA_Display.setText("Bitte entnehmen Sie Ihr Ticket und das Wechselgeld dem Ausgabefach.");
      jTA_Display.setText("**********************************");
      jTA_Display.append("\n" + "*** " + fahrschein.getTicketBezeichnung() );
      jTA_Display.append("\n" + "*** Preisstufe: " + fahrschein.getPreisstufe() );
      jTA_Display.append("\n" + "*** " + fahrschein.getPreisInCent() + " Cent");
      jTA_Display.append("\n" + "**********************************");
      jTA_Display.append("\n");
      
      int wechselgeld = ticketkauf.getBisherGezahlt() - fahrschein.getPreisInCent();
      if (wechselgeld > 0) {
        jTA_Display.append("\n" + "Ihr Wechselgeld: " + wechselgeld + " Cent");
        int z = ticketkauf.getGesamtsumme() - wechselgeld;
        ticketkauf.setGesamtsumme( z );
        
      }
      ticketkauf.setBisherGezahlt( 0 );
      
    } else {
      
      int fehlbetrag = fahrschein.getPreisInCent() - ticketkauf.getBisherGezahlt();
      jTA_Display.setText("Sie haben " + ticketkauf.getBisherGezahlt() + "Cent eingeworfen. Bitte zahlen Sie noch " + fehlbetrag + " Cent!");
    } // end of if-else
  }
    

  
  public static void main(String[] args) {
    new GUI_Ticketautomat("GUI_Ticketautomat");
  } // end of main
  public void jCB_Ticketauswahl_ItemStateChanged(ItemEvent evt) {
    // TODO hier Quelltext einfügen
  } // end of jCB_Ticketauswahl_ItemStateChanged

  // Ende Methoden
  }

Hoffe der hilft irgendwie weiter
 

pro2

Bekanntes Mitglied
Mach es ohne GUI, bitte. Wenn es dann klappt, kannst du eine GUI bauen. Und was für ein schrecklicher GUI Editor hat das veranstaltet..? ^^

Dann als nächstes heißt dein Ticketautomat nicht Ticketautomat sondern ticketkauf. Also heißt es logischerweise
Code:
ticketkauf.gesamtsumme
. Und das schreibt man natürlich für jede Variable..
Gib deinen Variablen vernünftige Namen und nicht "x". Das benutzt man höchstens für Koordinaten. Und weiterhin.. wo ist deine Variable x deklariert? Wo soll sie herkommen? Bis auf in der Methode gibt es sie nirgendwo.. schau dir noch einmal nobadix Post von oben an.

Und das sind alles absolute Grundlagen die du hier falsch machst, das musst du unbedingt nachholen (gründlich durcharbeiten), sonst kriegst so was nie hin! :)
 
Zuletzt bearbeitet:

soulguerilla

Mitglied
Mach es ohne GUI, bitte. Wenn es dann klappt, kannst du eine GUI bauen. Und was für ein schrecklicher GUI Editor hat das veranstaltet..? ^^
[/qoute]

Java Editor^^

Dann als nächstes heißt dein Ticketautomat nicht Ticketautomat sondern ticketkauf. Also heißt es logischerweise
Code:
ticketkauf.gesamtsumme
. Und das schreibt man natürlich für jede Variable..
:/
Gib deinen Variablen vernünftige Namen und nicht "x". Das benutzt man höchstens für Koordinaten. Und weiterhin.. wo ist deine Variable x deklariert? Wo soll sie herkommen? Bis auf in der Methode gibt es sie nirgendwo.. schau dir noch einmal nobadix Post von oben an.

Hm, das x war dafür gedacht das ich das in der Methode geldEinwerfen einfach x schreibe und dann in der jeweiligen Methode für 10ct usw. das x ersetzt wird, also mit 10 usw. Aber scheint nicht zu klappen.

Jetzt ist aber immernoch der Fehler das die Variable gesamtsumme private ist, ist es nicht egal eigentlich obs public oder private ist?
 

pro2

Bekanntes Mitglied
http://www.java-forum.org/blogs/eraaaa/98-java-modifier.html

Hm, das x war dafür gedacht das ich das in der Methode geldEinwerfen einfach x schreibe und dann in der jeweiligen Methode für 10ct usw. das x ersetzt wird, also mit 10 usw. Aber scheint nicht zu klappen.

Klar das geht. Aber wie ich sagte.. schau dir mal den Unterschied zwischen deiner Methode und der an. Oder schau dir mal n Kapitel in einem Buch / sonst was zu Methoden an.
 

x22

Bekanntes Mitglied
Soweit ich mich erinnere ist das eine Übungsaufgabe in Java lernen mit BlueJ (Ist ein Buch).

Leiht euch das in ner Bibliothek aus, da wird das komplette Programm "Ticketautomat" erklärt.
 

Ähnliche Java Themen

Neue Themen


Oben