From 70f8fbd0b0265c9258d5df2eeb126697fab3cd34 Mon Sep 17 00:00:00 2001 From: Tobias Date: Mon, 28 Nov 2022 13:10:16 +0100 Subject: [PATCH] =?UTF-8?q?GUI=20und=20Enums=20hinzugef=C3=BCgt=20+=20Kund?= =?UTF-8?q?endaten?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../de/hs_mannheim/informatik/bank/Main.java | 16 +- .../informatik/bank/domain/Bank.java | 38 ++- .../informatik/bank/domain/Geldanlage.java | 4 + .../informatik/bank/domain/Kontoart.java | 6 + .../informatik/bank/domain/Kunde.java | 42 +++ .../informatik/bank/facade/SystemTest.java | 9 +- .../bank/gui/KontoAnlegenFrame.java | 65 +++++ .../bank/gui/KontoListingFrame.java | 65 +++++ .../hs_mannheim/informatik/bank/tui/UI.java | 275 ++++++++++++++++++ 9 files changed, 503 insertions(+), 17 deletions(-) create mode 100644 Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontoart.java create mode 100644 Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kunde.java create mode 100644 Bank-Beispiel/src/de/hs_mannheim/informatik/bank/gui/KontoAnlegenFrame.java create mode 100644 Bank-Beispiel/src/de/hs_mannheim/informatik/bank/gui/KontoListingFrame.java create mode 100644 Bank-Beispiel/src/de/hs_mannheim/informatik/bank/tui/UI.java diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/Main.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/Main.java index 6e8b4fe..1e965b4 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/Main.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/Main.java @@ -1,14 +1,24 @@ package de.hs_mannheim.informatik.bank; import de.hs_mannheim.informatik.bank.facade.Banksystem; -import de.hs_mannheim.informatik.bank.ui.UI; +import de.hs_mannheim.informatik.bank.tui.UI; +import de.hs_mannheim.informatik.bank.gui.KontoAnlegenFrame; +import de.hs_mannheim.informatik.bank.gui.KontoListingFrame; public class Main { public static void main(String[] args) throws Exception { Banksystem bs = new Banksystem("Spaßkasse Mannheim"); - UI ui = new UI(bs); - System.out.println(ui); +// UI ui = new UI(bs); +// System.out.println(ui); + + KontoAnlegenFrame kaf = new KontoAnlegenFrame(bs); + kaf.setVisible(true); + + + KontoListingFrame klf = new KontoListingFrame(bs); + klf.setVisible(true); + } } \ No newline at end of file diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Bank.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Bank.java index 05a4e9b..2e9f3b4 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Bank.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Bank.java @@ -2,35 +2,40 @@ package de.hs_mannheim.informatik.bank.domain; import java.io.Serializable; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; +import java.util.TreeMap; public class Bank implements Serializable { private String name; - private HashMap konten = new HashMap<>(); + private TreeMap konten = new TreeMap<>(); + private HashMap kunden = new HashMap<>(); private int kontozähler; - + private int kundenzähler; + public Bank(String name) { this.name = name; this.kontozähler = -1; + this.kundenzähler = -1; } - - public int addKonto(String name, int auswahl) { + + public int addKonto(String name, Kontoart kontoart) { Konto k; - if (auswahl == 1) + if (kontoart == Kontoart.Sparkonto) k = new Konto(name, ++kontozähler); - else + else k = new Girokonto(name, ++kontozähler); - + konten.put(k.getNummer(), k); - + return k.getNummer(); } - + public String getName() { return name; } - + public Collection getKontenliste() { return konten.values(); } @@ -39,4 +44,17 @@ public class Bank implements Serializable { return konten.get(kontonummer); } + public int addKunde(String name, String vorname, int alter, String wohnort) { + Kunde k; + k = new Kunde(vorname, name, alter, wohnort, ++kundenzähler); + kunden.put(k.getID(), k); + return k.getID(); + } + + public Collection getKundenliste() { + return kunden.values(); + } + + + } diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Geldanlage.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Geldanlage.java index dc40e1e..ae45bf1 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Geldanlage.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Geldanlage.java @@ -25,4 +25,8 @@ public abstract class Geldanlage implements Serializable{ return " [nummer=" + nummer + ", inhaber=" + inhaber; } + + + + } diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontoart.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontoart.java new file mode 100644 index 0000000..d77885f --- /dev/null +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontoart.java @@ -0,0 +1,6 @@ +package de.hs_mannheim.informatik.bank.domain; + +public enum Kontoart { + Sparkonto, Girokonto, Tagesgeldkonto + +} diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kunde.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kunde.java new file mode 100644 index 0000000..9644c4d --- /dev/null +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kunde.java @@ -0,0 +1,42 @@ +package de.hs_mannheim.informatik.bank.domain; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; + +public class Kunde implements Serializable{ + private int id; + private String vorname; + private String name; + private int alter; + private String wohnort; + private int zähler; + private ArrayList konten = new ArrayList<>(); + + Kunde( String vorname, String name, int alter, String wohnort, int zähler) { + this.id = 100 + zähler; + this.vorname = vorname; + this.name = name; + this.alter = alter; + this.wohnort = wohnort; + + } + + public int getGeldanlage(Konto k, int nummer) { + return k.getNummer(); + + } + + public int getID() { + return id; + } + + public String toString() { + return "Kunde [ID=" + id + ", vorname=" + vorname + ", name=" + name + ", alter=" + alter + ", wohnort=" + wohnort + "]"; + } + + public void addKonto(Konto k) { + konten.add(k); + } + +} diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/SystemTest.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/SystemTest.java index 5d95d57..9da1542 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/SystemTest.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/SystemTest.java @@ -14,6 +14,7 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; +import de.hs_mannheim.informatik.bank.domain.Kontoart; import de.hs_mannheim.informatik.bank.infrastructure.Persistenz; class SystemTest { @@ -31,7 +32,7 @@ class SystemTest { @Order(2) void einzahlen() throws Exception { Banksystem bs = new Banksystem("Testsystem"); - int knr = bs.kontoAnlegen("T", 1); + int knr = bs.kontoAnlegen("T", Kontoart.Sparkonto); bs.geldEinzahlen(knr, 500); assertEquals(500, bs.getKontostand(knr)); assertNotEquals(1000, bs.getKontostand(knr)); @@ -44,7 +45,7 @@ class SystemTest { @Order(3) void auszahlen() throws Exception { Banksystem bs = new Banksystem("Testsystem"); - int knr = bs.kontoAnlegen("T", 1); + int knr = bs.kontoAnlegen("T", Kontoart.Sparkonto); bs.geldEinzahlen(knr, 300); bs.geldAuszahlen(knr, 200); @@ -57,8 +58,8 @@ class SystemTest { @Order(4) void persistieren() throws Exception { Banksystem bs = new Banksystem("Testsystem"); - int knr = bs.kontoAnlegen("Test2", 2); - int knr2 = bs.kontoAnlegen("Test3", 2); + int knr = bs.kontoAnlegen("Test2", Kontoart.Sparkonto); + int knr2 = bs.kontoAnlegen("Test3", Kontoart.Sparkonto); bs.geldEinzahlen(knr, 1000); bs.geldAuszahlen(knr, 500); diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/gui/KontoAnlegenFrame.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/gui/KontoAnlegenFrame.java new file mode 100644 index 0000000..24f054c --- /dev/null +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/gui/KontoAnlegenFrame.java @@ -0,0 +1,65 @@ +package de.hs_mannheim.informatik.bank.gui; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.IOException; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.JTextField; + +import de.hs_mannheim.informatik.bank.domain.Kontoart; +import de.hs_mannheim.informatik.bank.facade.Banksystem; + +public class KontoAnlegenFrame extends JFrame implements ActionListener { + + private JTextField eingabe; + private JTextArea ausgabe; + private JButton ok; + + private Banksystem bs; + + public KontoAnlegenFrame(Banksystem bs) { + this.bs = bs; + + this.setTitle(bs.getBankname()); + this.setSize(300, 300); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + eingabe = new JTextField(20); + + ausgabe = new JTextArea(5, 20); + ausgabe.setLineWrap(true); + ausgabe.setWrapStyleWord(true); + + // Die Ausgabe automatisch scrollbar machen, wenn Sie nicht + // mehr auf den Bildschirm passen sollte. + JScrollPane sp = new JScrollPane(ausgabe); + + ok = new JButton("Konto anlegen"); + ok.addActionListener(this); + +// Container cp = this.getContentPane(); + this.add(eingabe, "North"); + this.add(sp, "Center"); + this.add(ok, "South"); + } + + + + @Override + public void actionPerformed(ActionEvent e) { + + try { + int knr = bs.kontoAnlegen(eingabe.getText(), Kontoart.Sparkonto); + + this.ausgabe.append("Neues Konto angelegt: " + knr + "\n"); + } catch (IOException e1) { + e1.printStackTrace(); + } + + } + +} diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/gui/KontoListingFrame.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/gui/KontoListingFrame.java new file mode 100644 index 0000000..1cba586 --- /dev/null +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/gui/KontoListingFrame.java @@ -0,0 +1,65 @@ +package de.hs_mannheim.informatik.bank.gui; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.IOException; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.JTextField; + +import de.hs_mannheim.informatik.bank.facade.Banksystem; + +public class KontoListingFrame extends JFrame implements ActionListener { + private JTextField eingabe; + private JTextArea ausgabe; + private JButton ok; + + private Banksystem bs; + + public KontoListingFrame(Banksystem bs) { + this.bs = bs; + + this.setTitle(bs.getBankname()); + this.setSize(300, 300); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + eingabe = new JTextField(20); + + ausgabe = new JTextArea(5, 20); + ausgabe.setLineWrap(true); + ausgabe.setWrapStyleWord(true); + + // Die Ausgabe automatisch scrollbar machen, wenn Sie nicht + // mehr auf den Bildschirm passen sollte. + JScrollPane sp = new JScrollPane(ausgabe); + + ok = new JButton("Kontenliste abrufen"); + ok.addActionListener(this); + + // Container cp = this.getContentPane(); + // this.add(eingabe, "North"); + this.add(sp, "Center"); + this.add(ok, "South"); + } + + @Override + public void actionPerformed(ActionEvent e) { + System.out.println("Kontenliste abrufen..."); + + ausgabe.setText(""); + String[] konten = bs.getKontenliste(); + + for (String konto : konten) { + ausgabe.append(konto + "\n"); + } + + + } + +} + + + diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/tui/UI.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/tui/UI.java new file mode 100644 index 0000000..30f00a6 --- /dev/null +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/tui/UI.java @@ -0,0 +1,275 @@ +package de.hs_mannheim.informatik.bank.tui; + +import java.io.IOException; +import java.util.Scanner; + +import de.hs_mannheim.informatik.bank.domain.Kontoart; +import de.hs_mannheim.informatik.bank.facade.Banksystem; + +public class UI { + private Banksystem bs; + Scanner sc = new Scanner(System.in); + + public UI(Banksystem bs) { + this.bs = bs; + hauptmenü(); + } + + private void hauptmenü() { + System.out.println("Willkommen bei der " + bs.getBankname() + "!"); + + mainloop: while (true) { + System.out.println(); + System.out.println("--------"); + System.out.println("Hauptmenü"); + System.out.println("1 -> Kunde registrieren"); + System.out.println("2 -> Konten anzeigen"); + System.out.println("3 -> Konto anlegen"); + System.out.println("4 -> Geld einzahlen"); + System.out.println("5 -> Geld auszahlen"); + System.out.println("6 -> Kontoauszug drucken"); + System.out.println("7 -> Überweisung beauftragen"); + System.out.println("8 -> Saldo berechnen"); + System.out.println("9 -> Kunden anzeigen"); + System.out.println("10 -> Beenden"); + System.out.println(); + + System.out.print("> "); + int input = 0; + try { + input = Integer.parseInt(sc.nextLine()); + System.out.println(); + } catch (Exception e) { + System.err.println("Ungültige Eingabe, bitte eine Zahl von 1-10 eingeben"); + } + + try { + switch (input) { + case 1: + kundeAnlegen(); + break; + case 2: + kontenAnzeigen(); + break; + case 3: + kontoAnlegen(); + break; + case 4: + geldEinzahlen(); + break; + case 5: + geldAuszahlen(); + break; + case 6: + kontoauszugDrucken(); + break; + case 7: + überweisungBeauftragen(); + break; + case 8: + saldoAusgeben(); + break; + case 9: + kundenAnzeigen(); + break; + case 10: + break mainloop; + } + + } catch (Exception e) { + System.err.println(e.getLocalizedMessage()); + } + System.out.println(); + } + + System.out.println("Auf Wiedersehen!"); + + } // hauptmenü + + private void kundeAnlegen() throws IOException { + int alter = 0; + boolean ok = false; + System.out.println("Bitte Vornamen eingeben:"); + String vn = sc.nextLine(); + System.out.println("Bitte Nachnamen eingeben:"); + String nn = sc.nextLine(); + do { + System.out.println("Bitte Alter eingeben:"); + try { + alter = Integer.parseInt(sc.nextLine()); + } catch (NumberFormatException npe) { + System.err.println("Alter muss eine Ganzzahl sein"); + continue; + } + ok = true; + } while (!ok); + System.out.println("Bitte Wohnort angeben"); + String wo = sc.nextLine(); + int id = bs.kundeAnlegen(vn, nn, alter, wo); + System.out.println("Kunde mit der ID " + id + " registriert."); + + } + + private void kontenAnzeigen() { + String[] konten = bs.getKontenliste(); + + if (konten.length > 0) { + System.out.println("Folgende Konten sind aktuell verfügbar:"); + for (String s : konten) { + System.out.println(s); + } + } else { + System.out.println("Bisher keine Konten angelegt."); + } + } + + private void kontoAnlegen() throws IOException { + int auswahl = 0; + boolean ok = false; + Kontoart[] konten; + System.out.println("Bitte den Namen des Kontoinhabers angeben: "); + String name = sc.nextLine(); + + do { + System.out.println("Welche Art von Konto möchten Sie anlegen?"); + konten = Kontoart.values(); + for (int i = 0; i < konten.length; i++) { + System.out.println(" " + konten[i] + " " + "(" + (i + 1) + ")"); + } + System.out.print("> "); + + try { + auswahl = Integer.parseInt(sc.nextLine()); + } catch (NumberFormatException e) { + System.err.println("Eingabe muss eine Zahl (1-3) sein"); + continue; + } + ok = true; + + } while (!ok); + int kontonummer = bs.kontoAnlegen(name, konten[auswahl - 1]); + System.out.println(konten[auswahl - 1] + " mit der Nummer " + kontonummer + " neu angelegt."); + } + + private void geldEinzahlen() throws IOException { + int kontonummer = 0; + double betrag = 0; + boolean ok = false; + + System.out.println("Geld einzahlen"); + do { + System.out.print("Bitte die gewünschte Kontonummer eingeben: "); + try { + kontonummer = Integer.parseInt(sc.nextLine()); + } catch (NumberFormatException | NullPointerException ne) { + System.err.println("Ungültige Kontonummer, bitte nochmal eingeben!"); + continue; + } + // optional prüfen, ob Konto existiert + + System.out.print("Bitte den gewünschten Betrag eingeben: "); + try { + betrag = Double.parseDouble(sc.nextLine()); + } catch (NumberFormatException nfe) { + System.err.println("Betrag muss eine Kommazahl sein, bitte Eingabe wiederholen!"); + continue; + } + + ok = true; + } while (!ok); + + long neuerKontostand = bs.geldEinzahlen(kontonummer, (long) betrag * 100); + + System.out.printf("Einzahlung erfolgreich, neuer Kontostand = %.2f Euro", (neuerKontostand / 100.0)); + + } + + private void geldAuszahlen() throws IOException { + int kontonummer = 0; + double betrag = 0; + boolean ok = false; + + System.out.println("Geld auszahlen"); + do { + System.out.print("Bitte die gewünschte Kontonummer eingeben: "); + try { + kontonummer = Integer.parseInt(sc.nextLine()); + } catch (NumberFormatException | NullPointerException ne) { + System.err.println("Ungültige Kontonummer, bitte nochmal eingeben!"); + continue; + } + + System.out.print("Bitte den gewünschten Betrag eingeben: "); + try { + betrag = Double.parseDouble(sc.nextLine()); + } catch (NumberFormatException nfe) { + System.err.println("Betrag muss eine Kommazahl sein, bitte Eingabe wiederholen!"); + continue; + } + ok = true; + } while (!ok); + + boolean erfolgreich = bs.geldAuszahlen(kontonummer, (long) betrag * 100); + + System.out.printf("Auszahlung" + ((!erfolgreich) ? " nicht" : "") + " erfolgreich. "); + System.out.printf("Neuer Kontostand = %.2f Euro.", (bs.getKontostand(kontonummer) / 100.0)); + } + + private void kontoauszugDrucken() { + System.out.print("Bitte die gewünschte Kontonummer für den Auszug eingeben: "); + int kontonummer = Integer.parseInt(sc.nextLine()); + + System.out.println(); + + // in echt auf einem Drucker + System.out.println("Auszug für Konto " + kontonummer); + String[] kontobewegungen = bs.erstelleKontoauszug(kontonummer); + + if (kontobewegungen.length > 0) + for (String kb : kontobewegungen) { + System.out.println(kb); + } + else + System.out.println("Noch keine Kontobewegungen."); + } + + private void überweisungBeauftragen() throws Exception { + System.out.print("Bitte die Kontonummer des Ausgangskontos der Überweisung eingeben: "); + int startkonto = Integer.parseInt(sc.nextLine()); + + System.out.print("Bitte die Kontonummmer für das Zielkonto der Überweisung eingeben: "); + int zielkonto = Integer.parseInt(sc.nextLine()); + + System.out.print("Bitte den gewünschten Überweisungsbetrag eingeben: "); + double betrag = Double.parseDouble(sc.nextLine()); + + System.out.print("Bitte den Verwendungszweck eingeben: "); + String verwendungszweck = sc.nextLine(); + + boolean erfolgreich = bs.überweisungBeauftragen(startkonto, zielkonto, (long) (betrag * 100), verwendungszweck); + + System.out.println("Überweisung" + ((!erfolgreich) ? " nicht" : "") + " erfolgreich ausgeführt."); + } + + private void saldoAusgeben() { + System.out.println("Bitte Kontonummer angeben: "); + int kontonummer = Integer.parseInt(sc.nextLine()); + System.out.println("Bitte die Anzahl an Kontobewegungen auswählen: "); + int anzahl = Integer.parseInt(sc.nextLine()); + long saldo = bs.ermittleSaldo(kontonummer, anzahl); + System.out.printf("Der Saldo nach %d Kontobewegungen beträgt %.2f Euro.%n", anzahl, (saldo / 100d)); + + } + + private void kundenAnzeigen() { + String[] kunden = bs.getKundenliste(); + if (kunden.length > 0) { + for (String k : kunden) { + System.out.println(k); + } + } else { + System.out.println("Keine Kunden registriert."); + } + } + +}