import java.awt.Container; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextArea; /** * Eine grafische Benutzeroberfläche zur Verwaltung von Konten. * * @author Annabelle Klarl * */ public class BankFrame extends JFrame implements ActionListener { private JButton bankEroeffnenButton; private JButton kontoEroeffnenButton; private JButton einzahlenButton; private JButton abhebenButton; private JButton kontostandButton; private JButton gesamtSaldoButton; private JTextArea ausgabeBereich; private Bank bank; /** * In diesem Programmstück wird das Fenster erzeugt. */ public BankFrame() { /* In der Kopfleiste des Fenster steht "BankFrame" */ this.setTitle("BankFrame"); /* Das Fenster ist 700 Pixel breit und 350 Pixel hoch. */ this.setSize(700, 350); /* Hier werden alle Buttons erzeugt. */ this.bankEroeffnenButton = new JButton("Bank eröffnen"); this.kontoEroeffnenButton = new JButton("Konto eröffnen"); this.einzahlenButton = new JButton("Einzahlen"); this.abhebenButton = new JButton("Abheben"); this.kontostandButton = new JButton( "Kontostand eines Kontos ausgeben"); this.gesamtSaldoButton = new JButton( "Gesamtsaldo aller Konten"); /* Hier wird der Ausgabe-Bereich erzeugt. */ this.ausgabeBereich = new JTextArea(10, 100); /* Hier werden alle Buttons zusammengruppiert. */ JPanel kontenPanel = new JPanel(); kontenPanel.setLayout(new GridLayout(5, 1)); kontenPanel.add(this.kontoEroeffnenButton); kontenPanel.add(this.einzahlenButton); kontenPanel.add(this.abhebenButton); kontenPanel.add(this.kontostandButton); kontenPanel.add(this.gesamtSaldoButton); JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new GridLayout(1, 2)); buttonPanel.add(this.bankEroeffnenButton); buttonPanel.add(kontenPanel); /* * Der ContentPane ist der Ausschnitt des Fensters, auf dem Widgets d.h. * Interaktionselemente (wie eine TextArea oder ein Button) platziert * werden können. */ Container contentPane = this.getContentPane(); contentPane.setLayout(new GridLayout(2, 1)); /* Hier wird die Gruppe von Buttons platziert. */ contentPane.add(buttonPanel); /* Hier wird der Ausgabebereich platziert. */ contentPane.add(this.ausgabeBereich); /* * Hier wird der Frame als Listener für Knopfdruck-Ereignisse bei jedem * Button registriert. */ this.bankEroeffnenButton.addActionListener(this); this.kontoEroeffnenButton.addActionListener(this); this.einzahlenButton.addActionListener(this); this.abhebenButton.addActionListener(this); this.kontostandButton.addActionListener(this); this.gesamtSaldoButton.addActionListener(this); /* * Wird das Fenster geschlossen (d.h. auf X gedrückt), wird mit Hilfe * dieser Programmzeile auch unser Programm ordnungsgemäß beendet. */ this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } /** * Dieses Programmstück wird immer dann ausgeführt, wenn ein Benutzer auf * einen Button drückt. */ @Override public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if (source == this.bankEroeffnenButton) { this.bankEroeffnen(); } else if (source == this.kontoEroeffnenButton) { this.kontoEroeffnen(); } else if (source == this.einzahlenButton) { this.einzahlen(); } else if (source == this.abhebenButton) { this.abheben(); } else if (source == this.kontostandButton) { this.kontostandBerechnen(); } else if (source == this.gesamtSaldoButton) { this.gesamtSaldoBerechnen(); } } /** * Diese Methode erzeugt eine neue Bank, falls es momentan keine gibt. */ private void bankEroeffnen() { if (this.bank != null) { this.ausgabeBereich .setText("Es wurde bereits eine Bank mit dem Namen " + this.bank.getName() + " eröffnet."); } else { String einlesenName = JOptionPane .showInputDialog("Name der Bank: "); String einlesenMaxKonten = JOptionPane .showInputDialog("Maximale Anzahl an Konten: "); int maxKonten = Integer.parseInt(einlesenMaxKonten); this.bank = new Bank(einlesenName, maxKonten); this.ausgabeBereich .setText("Folgende Bank wurde eröffnet: " + this.bank + " mit dem Namen " + this.bank.getName()); } } /** * Diese Methode eröffnet ein neues Konto, falls die Bank noch Platz für ein * neues Konto hat und es momentan eine Bank gibt. */ private void kontoEroeffnen() { if (this.bank == null) { this.ausgabeBereich .setText("Es wurde noch keine Bank eröffnet."); } else { String einlesenKontoNr = JOptionPane .showInputDialog("Kontonummer: "); int kontoNummer = Integer.parseInt(einlesenKontoNr); String einlesenAnfangsbetrag = JOptionPane .showInputDialog("Anfangsbetrag: "); double anfangsBetrag = Double .parseDouble(einlesenAnfangsbetrag); boolean eroeffnet = this.bank.kontoEroeffnen(kontoNummer, anfangsBetrag); if (eroeffnet) { this.ausgabeBereich .setText("Das Konto mit der Kontonummer " + kontoNummer + " und dem Anfangsbetrag €" + anfangsBetrag + " wurde eröffnet."); } else { this.ausgabeBereich .setText("Es kann kein neues Konto angelegt werden," + "da diese Bank nicht mehr Konten anbietet."); } } } /** * Diese Methode zahlt einen gegebenen Betrag auf ein Konto ein, falls * dieses existiert. */ private void einzahlen() { if (this.bank == null) { this.ausgabeBereich .setText("Es wurde noch keine Bank eröffnet."); } else { String einlesenKontoNr = JOptionPane .showInputDialog("Kontonummer: "); int kontoNummer = Integer.parseInt(einlesenKontoNr); String einlesenBetrag = JOptionPane .showInputDialog("Einzuzahlender Betrag: "); double betrag = Double.parseDouble(einlesenBetrag); boolean eingezahlt = this.bank.einzahlen(kontoNummer, betrag); if (eingezahlt) { this.ausgabeBereich.setText("Es wurden " + betrag + " € auf das Konto mit der Kontonummer " + kontoNummer + " eingezahlt."); } else { this.ausgabeBereich .setText("Der Betrag konnte nicht eingezahlt werden, " + "da kein Konto mit der angegebenen Kontonummer existiert."); } } } /** * Diese Methode hebt einen gegebenen Betrag von einem Konto ab, falls * dieses existiert. */ private void abheben() { if (this.bank == null) { this.ausgabeBereich .setText("Es wurde noch keine Bank eröffnet."); } else { String einlesenKontoNr = JOptionPane .showInputDialog("Kontonummer: "); int kontoNummer = Integer.parseInt(einlesenKontoNr); String einlesenBetrag = JOptionPane .showInputDialog("Auszuzahlender Betrag: "); double betrag = Double.parseDouble(einlesenBetrag); boolean abgehoben = this.bank .abheben(kontoNummer, betrag); if (abgehoben) { this.ausgabeBereich.setText("Es wurden " + betrag + " € von dem Konto mit der Kontonummer " + kontoNummer + " abgehoben."); } else { this.ausgabeBereich .setText("Der Betrag konnte nicht abgehoben werden, " + "da kein Konto mit der angegebenen Kontonummer existiert."); } } } /** * Diese Methode gibt den Kontostand für ein Konto aus. */ private void kontostandBerechnen() { if (this.bank == null) { this.ausgabeBereich .setText("Es wurde noch keine Bank eröffnet."); } else { String einlesenKontoNr = JOptionPane .showInputDialog("Kontonummer: "); int kontoNummer = Integer.parseInt(einlesenKontoNr); double kontoStand = this.bank.kontoStand(kontoNummer); this.ausgabeBereich .setText("Der Kontostand des Kontos mit der Kontonummer " + kontoNummer + " ist €" + kontoStand); } } /** * Diese Methode berechnet den Saldo aller Konten. */ private void gesamtSaldoBerechnen() { if (this.bank == null) { this.ausgabeBereich .setText("Es wurde noch keine Bank eröffnet."); } else { double gesamtSaldo = this.bank.gesamtSaldo(); this.ausgabeBereich .setText("Das Gesamtsaldo aller Konten dieser Bank ist €" + gesamtSaldo); } } }