From 3f6b240e227555d2bed527dcaa9e2fe0314c2395 Mon Sep 17 00:00:00 2001 From: Caner Date: Sat, 12 Nov 2022 23:46:48 +0100 Subject: [PATCH] New: Exception Handling von TUI und Banksystem MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New: einfache GUI für Konto erstellen und Kontenliste anzeigen --- .../de/hs_mannheim/informatik/bank/Main.java | 15 +- .../informatik/bank/domain/Bank.java | 5 + .../informatik/bank/domain/Girokonto.java | 1 + .../informatik/bank/domain/Konto.java | 9 + .../informatik/bank/domain/Kontobewegung.java | 3 +- .../informatik/bank/facade/Banksystem.java | 72 +++-- .../bank/gui/KontoAnlegenFrame.java | 66 +++++ .../bank/gui/KontoListingFrame.java | 65 +++++ .../bank/infrastructure/Persistenz.java | 5 +- .../hs_mannheim/informatik/bank/tui/TUI.java | 246 ++++++++++++++++++ .../de/hs_mannheim/informatik/bank/ui/UI.java | 160 ------------ 11 files changed, 462 insertions(+), 185 deletions(-) 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/TUI.java delete mode 100644 Bank-Beispiel/src/de/hs_mannheim/informatik/bank/ui/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 cba5a44..29d9565 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/Main.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/Main.java @@ -1,13 +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.gui.KontoAnlegenFrame; +//import de.hs_mannheim.informatik.bank.gui.KontoListingFrame; +import de.hs_mannheim.informatik.bank.tui.TUI; public class Main { public static void main(String[] args) throws Exception { Banksystem bs = new Banksystem("Spaßkasse Mannheim"); - UI ui = new UI(bs); //test + + TUI ui = new TUI(bs); + +// 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 27aeb58..3f5a541 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 @@ -5,6 +5,7 @@ import java.util.Collection; import java.util.HashMap; public class Bank implements Serializable { + private static final long serialVersionUID = 1L; private String name; private HashMap konten = new HashMap<>(); private int kontozähler; @@ -39,4 +40,8 @@ public class Bank implements Serializable { return konten.get(kontonummer); } + public HashMap getKonten() { + return this.konten; + } + } diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Girokonto.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Girokonto.java index d8f12a9..a14efa0 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Girokonto.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Girokonto.java @@ -3,6 +3,7 @@ package de.hs_mannheim.informatik.bank.domain; import java.io.Serializable; public class Girokonto extends Konto implements Serializable { + private static final long serialVersionUID = 1L; private long dispo = 100000; public Girokonto(String inhaber, int kontozähler) { diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Konto.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Konto.java index e787df5..6ace150 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Konto.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Konto.java @@ -4,6 +4,7 @@ import java.io.Serializable; import java.util.ArrayList; public class Konto implements Serializable { + private static final long serialVersionUID = 1L; private int nummer; protected long stand = 0; private String inhaber; @@ -72,5 +73,13 @@ public class Konto implements Serializable { return saldo; } + + public void rollback() { + + Kontobewegung kbw = kontobewegungen.get(kontobewegungen.size()-1); + stand += kbw.getBetrag() *-1; + kontobewegungen.remove(kontobewegungen.size()-1); + + } } diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontobewegung.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontobewegung.java index 22f1401..9069d74 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontobewegung.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontobewegung.java @@ -4,6 +4,7 @@ import java.io.Serializable; import java.util.Date; public class Kontobewegung implements Serializable { + private static final long serialVersionUID = 1L; private long betrag; private Date datum; private String betreff; @@ -25,7 +26,7 @@ public class Kontobewegung implements Serializable { @Override public String toString() { - return "Kontobewegung [betrag=" + betrag + ", datum=" + datum + ", betreff=" + betreff + ", art=" + art + return "Kontobewegung [betrag=" + betrag/100 + ", datum=" + datum + ", betreff=" + betreff + ", art=" + art + ", auftraggeber=" + auftraggeber + "]"; } diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/Banksystem.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/Banksystem.java index 5ff5144..6a19fbc 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/Banksystem.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/Banksystem.java @@ -1,6 +1,8 @@ package de.hs_mannheim.informatik.bank.facade; +import java.io.IOException; import java.util.Collection; +import java.util.HashMap; import de.hs_mannheim.informatik.bank.domain.Bank; import de.hs_mannheim.informatik.bank.domain.Girokonto; @@ -10,16 +12,24 @@ import de.hs_mannheim.informatik.bank.infrastructure.Persistenz; public class Banksystem { private Bank bank; - public Banksystem(String bankname) throws Exception { + public Banksystem(String bankname) { if (Persistenz.sindDatenGespeichert(bankname)) - this.bank = (Bank) Persistenz.ladeBankDaten(bankname); - else - this.bank = new Bank(bankname); + try { + this.bank = (Bank) Persistenz.ladeBankDaten(bankname); + + return; + + } catch (ClassNotFoundException | IOException e) { + + System.err.println("Persistierte Daten konnten nicht geladen werden."); + } + + this.bank = new Bank(bankname); } - public int kontoAnlegen(String name, int auswahl) throws Exception { + public int kontoAnlegen(String name, int auswahl) throws IOException { int kontonummer = bank.addKonto(name, auswahl); - + Persistenz.speichereBankDaten(this.bank, bank.getName()); return kontonummer; @@ -31,7 +41,7 @@ public class Banksystem { int i = 0; for (Konto k : konten) { - liste[i++] = k.toString(); + liste[i++] = k.toString(); } return liste; @@ -41,22 +51,33 @@ public class Banksystem { return bank.getName(); } - public long geldEinzahlen(int kontonummer, long betrag) throws Exception { + public long geldEinzahlen(int kontonummer, long betrag) throws IOException { Konto konto = bank.findeKonto(kontonummer); konto.einzahlen(betrag, "Einzahlung am Schalter", "Einzahlung", konto.getInhaber()); - Persistenz.speichereBankDaten(this.bank, bank.getName()); - + try { + Persistenz.speichereBankDaten(this.bank, bank.getName()); + + } catch (IOException ioe) { + konto.rollback(); + throw ioe; + } + return konto.getKontostand(); } - public boolean geldAuszahlen(int kontonummer, long betrag) throws Exception { + public boolean geldAuszahlen(int kontonummer, long betrag) throws IOException { Konto konto = bank.findeKonto(kontonummer); - boolean erg = konto.auszahlen(betrag, "Auszahlung am Schalter", "Auszahlung", konto.getInhaber()); - - Persistenz.speichereBankDaten(this.bank, bank.getName()); - + + try { + Persistenz.speichereBankDaten(this.bank, bank.getName()); + + } catch (IOException ioe) { + konto.rollback(); + throw ioe; + } + return erg; } @@ -66,14 +87,21 @@ public class Banksystem { return konto.getKontobewegungen(); } - public boolean überweisungBeauftragen(int startkonto, int zielkonto, long betrag, String verwendungszweck) throws Exception { + public boolean überweisungBeauftragen(int startkonto, int zielkonto, long betrag, String verwendungszweck) + throws IOException { Konto start = bank.findeKonto(startkonto); Konto ziel = bank.findeKonto(zielkonto); if (start instanceof Girokonto && ziel instanceof Girokonto) { - boolean erfolg = ((Girokonto)start).überweise((Girokonto)ziel, betrag, verwendungszweck); - Persistenz.speichereBankDaten(this.bank, bank.getName()); - + boolean erfolg = ((Girokonto) start).überweise((Girokonto) ziel, betrag, verwendungszweck); + + try { + Persistenz.speichereBankDaten(this.bank, bank.getName()); + + } catch (IOException ioe) { + throw ioe; + } + return erfolg; } @@ -88,8 +116,12 @@ public class Banksystem { public long saldoBestimmen(int kontonummer, int anzahl) { Konto konto = bank.findeKonto(kontonummer); - + return konto.berechneSaldo(anzahl); } + public HashMap getKonten() { + return bank.getKonten(); + } + } 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..4834d77 --- /dev/null +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/gui/KontoAnlegenFrame.java @@ -0,0 +1,66 @@ +package de.hs_mannheim.informatik.bank.gui; + +//import java.awt.Container; +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 KontoAnlegenFrame extends JFrame implements ActionListener { + + private static final long serialVersionUID = 1L; + 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) { + System.out.println("Konto anlegen..."); + + try { + int knr = bs.kontoAnlegen(eingabe.getText(), 1); + + 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..06bc318 --- /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.Container; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + + +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 static final long serialVersionUID = 1L; + 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/infrastructure/Persistenz.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/infrastructure/Persistenz.java index 5d08e48..aed427e 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/infrastructure/Persistenz.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/infrastructure/Persistenz.java @@ -3,6 +3,7 @@ package de.hs_mannheim.informatik.bank.infrastructure; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; @@ -13,13 +14,13 @@ public class Persistenz { return new File(name + BANK_DATEI).exists(); } - public static void speichereBankDaten(Object bank, String name) throws Exception { + public static void speichereBankDaten(Object bank, String name) throws IOException { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(name + BANK_DATEI)); oos.writeObject(bank); oos.close(); } - public static Object ladeBankDaten(String name) throws Exception { + public static Object ladeBankDaten(String name) throws IOException, ClassNotFoundException { ObjectInputStream ois = new ObjectInputStream(new FileInputStream(name + BANK_DATEI)); Object bank = ois.readObject(); ois.close(); diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/tui/TUI.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/tui/TUI.java new file mode 100644 index 0000000..32814b6 --- /dev/null +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/tui/TUI.java @@ -0,0 +1,246 @@ +package de.hs_mannheim.informatik.bank.tui; + +import java.util.Scanner; + +import de.hs_mannheim.informatik.bank.facade.Banksystem; + +public class TUI { + private Banksystem bs; + Scanner sc = new Scanner(System.in); + + public TUI(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 -> Konten anzeigen"); + System.out.println("2 -> Konto anlegen"); + System.out.println("3 -> Geld einzahlen"); + System.out.println("4 -> Geld auszahlen"); + System.out.println("5 -> Kontoauszug drucken"); + System.out.println("6 -> Überweisung beauftragen"); + System.out.println("7 -> Saldo abfragen"); + + System.out.println("9 -> Beenden"); + System.out.println(); + + System.out.print("> "); + int input = Integer.parseInt(sc.nextLine()); + System.out.println(); + + try { + switch (input) { + case 1: + kontenAnzeigen(); + break; + case 2: + kontoAnlegen(); + break; + case 3: + geldEinzahlen(); + break; + case 4: + geldAuszahlen(); + break; + case 5: + kontoauszugDrucken(); + break; + case 6: + überweisungBeauftragen(); + break; + case 7: + saldoAbfragen(); + break; + case 9: + break mainloop; + } + + } catch (Exception e) { + System.err.println(e.getLocalizedMessage()); + } + System.out.println(); + } + + System.out.println("Auf Wiedersehen!"); + + } // hauptmenü + + 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 Exception { + + int auswahl = 0; + boolean ok = true; + String name = ""; + + while (ok) { + System.out.println("Bitte den Namen des Kontoinhabers angeben: "); + name = sc.nextLine(); + + System.out.println("Möchten Sie ein Sparkonto (1) oder ein Girokonto (2) anlegen?"); + + try { + auswahl = Integer.parseInt(sc.nextLine()); + + } catch (NumberFormatException nfe) { + System.err.println("Bitte geben Sie eine Zahl ein"); + continue; + } + ok = false; + } + + int kontonummer = bs.kontoAnlegen(name, auswahl); + System.out.println("Konto mit der Nummer " + kontonummer + " neu angelegt."); + } + + private void geldEinzahlen() throws Exception { + + int kontonummer = 0; + double betrag = 0; + boolean ok = false; + + do { + + System.out.println("Bitte geben Sie ihre Kontonummer ein: "); + + try { + + kontonummer = Integer.parseInt(sc.nextLine()); + + if (bs.getKonten().containsKey(kontonummer)) { + + System.out.println("Bitte geben Sie den Betrag ein: "); + + try { + + betrag = Double.parseDouble(sc.nextLine()); + + } catch (NumberFormatException nfe) { + System.err.println("Betrag muss eine Kommazahl sein, Eingabe bitte wiederholen"); + continue; + } + + } + + } catch (NumberFormatException nfe) { + System.err.println("Kontonummer muss eine Zahl sein, Eingabe bitte wiederholen"); + continue; + } + + ok = true; + + } while (!ok); + + long neuerKontostand = bs.geldEinzahlen(kontonummer, (long) betrag * 100); + + System.out.printf("Einzalung erfolgreich, neuer Kontostand = %.2f Euro", (neuerKontostand) / 100.0); + + } + + private void geldAuszahlen() throws Exception { + + int kontonummer = 0; + double betrag = 0; + boolean ok = false; + + do { + + System.out.println("Bitte geben Sie ihre Kontonummer ein: "); + + try { + kontonummer = Integer.parseInt(sc.nextLine()); + + if (bs.getKonten().containsKey(kontonummer)) { + + System.out.println("Ihr aktueller Kontostand beträgt " + bs.getKontostand(kontonummer) / 100 + "€"); + System.out.println("Bitte geben Sie den Betrag ein: "); + + try { + betrag = Double.parseDouble(sc.nextLine()); + + } catch (NumberFormatException nfe) { + System.err.println("Betrag muss eine Kommazahl sein, Eingabe bitte wiederholen"); + continue; + } + + } + + } catch (NumberFormatException nfe) { + System.err.println("Bitte geben Sie Zahlen ein"); + continue; + } + + ok = true; + + } while (!ok); + + boolean erfolg = bs.geldAuszahlen(kontonummer, (long)betrag * 100); + long neuerKontostand = bs.getKontostand(kontonummer) / 100; + + System.out.printf("Auszahlung" + ((!erfolg)? " nicht" : "" ) + " erfolgreich. "); + System.out.println("Neuer Kontostand = " + neuerKontostand + "€"); + + } + + 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("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 saldoAbfragen() { + System.out.print("Bitte die Kontonummer des gewünschten Kontos eingeben: "); + int konto = Integer.parseInt(sc.nextLine()); + + System.out.print("Bitte die Anzahl der Kontobewegungen für den Saldo eingeben: "); + int anzahl = Integer.parseInt(sc.nextLine()); + + long saldo = bs.saldoBestimmen(konto, anzahl); + System.out.printf("Der Saldo nach %d Kontobewegungen beträgt %.2f Euro.%n", anzahl, (saldo / 100d)); + } + +} diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/ui/UI.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/ui/UI.java deleted file mode 100644 index 3f10d79..0000000 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/ui/UI.java +++ /dev/null @@ -1,160 +0,0 @@ -package de.hs_mannheim.informatik.bank.ui; - -import java.util.Scanner; - -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 -> Konten anzeigen"); - System.out.println("2 -> Konto anlegen"); - System.out.println("3 -> Geld einzahlen"); - System.out.println("4 -> Geld auszahlen"); - System.out.println("5 -> Kontoauszug drucken"); - System.out.println("6 -> Überweisung beauftragen"); - System.out.println("7 -> Saldo abfragen"); - - System.out.println("9 -> Beenden"); - System.out.println(); - - System.out.print("> "); - int input = Integer.parseInt(sc.nextLine()); - System.out.println(); - - try { - switch(input) { - case 1: kontenAnzeigen(); break; - case 2: - kontoAnlegen(); - break; - case 3: geldEinzahlen(); break; - case 4: geldAuszahlen(); break; - case 5: kontoauszugDrucken(); break; - case 6: überweisungBeauftragen(); break; - case 7: saldoAbfragen(); break; - case 9: break mainloop; - } - - } catch (Exception e) { - System.err.println(e.getLocalizedMessage()); - } - System.out.println(); - } - - System.out.println("Auf Wiedersehen!"); - - } // hauptmenü - - 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 Exception { - System.out.println("Bitte den Namen des Kontoinhabers angeben: "); - String name = sc.nextLine(); - - System.out.println("Möchten Sie ein Sparkonto (1) oder ein Girokonto (2) anlegen?"); - int auswahl = Integer.parseInt(sc.nextLine()); - - int kontonummer = bs.kontoAnlegen(name, auswahl); - System.out.println("Konto mit der Nummer " + kontonummer + " neu angelegt."); - } - - private void geldEinzahlen() throws Exception { - System.out.println("Geld einzahlen"); - System.out.print("Bitte die gewünschte Kontonummer eingeben: "); - int kontonummer = Integer.parseInt(sc.nextLine()); - - // optional prüfen, ob Konto existiert - - System.out.print("Bitte den gewünschten Betrag eingeben: "); - double betrag = Double.parseDouble(sc.nextLine()); - - long neuerKontostand = bs.geldEinzahlen(kontonummer, (long)betrag * 100); - - System.out.printf("Einzahlung erfolgreich, neuer Kontostand = %.2f Euro", (neuerKontostand / 100.0)); - } - - private void geldAuszahlen() throws Exception { - System.out.println("Geld auszahlen"); - System.out.print("Bitte die gewünschte Kontonummer eingeben: "); - int kontonummer = Integer.parseInt(sc.nextLine()); - - System.out.print("Bitte den gewünschten Betrag eingeben: "); - double betrag = Double.parseDouble(sc.nextLine()); - - 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()); - - // 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 saldoAbfragen() { - System.out.print("Bitte die Kontonummer des gewünschten Kontos eingeben: "); - int konto = Integer.parseInt(sc.nextLine()); - - System.out.print("Bitte die Anzahl der Kontobewegungen für den Saldo eingeben: "); - int anzahl = Integer.parseInt(sc.nextLine()); - - long saldo = bs.saldoBestimmen(konto, anzahl); - System.out.printf("Der Saldo nach %d Kontobewegungen beträgt %.2f Euro.%n", anzahl, (saldo/100d)); - } - -}