From c90284ed6b25f69fdb7f305a08cf05d63a1f7261 Mon Sep 17 00:00:00 2001 From: Tobias Date: Sat, 29 Oct 2022 17:53:01 +0200 Subject: [PATCH] Banksystem optimiert --- .../de/hs_mannheim/informatik/bank/Main.java | 1 + .../informatik/bank/domain/Bank.java | 4 +- .../informatik/bank/domain/Girokonto.java | 16 ++- .../informatik/bank/domain/Konto.java | 36 ++---- .../informatik/bank/domain/KontoTest.java | 20 +-- .../informatik/bank/domain/Kontobewegung.java | 4 + .../informatik/bank/facade/Banksystem.java | 12 +- .../informatik/bank/facade/SystemTest.java | 88 ++++++++------ .../de/hs_mannheim/informatik/bank/ui/UI.java | 115 ++++++++++-------- 9 files changed, 163 insertions(+), 133 deletions(-) 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 16a794f..6e8b4fe 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/Main.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/Main.java @@ -8,6 +8,7 @@ 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); } } \ 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..8e3836a 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 @@ -19,8 +19,10 @@ public class Bank implements Serializable { if (auswahl == 1) k = new Konto(name, ++kontozähler); - else + else if (auswahl == 2) k = new Girokonto(name, ++kontozähler); + else + k = null; konten.put(k.getKontonummer(), k); 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 623810a..f1061b8 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,13 +3,14 @@ package de.hs_mannheim.informatik.bank.domain; import java.io.Serializable; public class Girokonto extends Konto implements Serializable { + private int dispo = 100000; public Girokonto(String inhaber, int kontozähler) { super(inhaber, kontozähler); } public boolean überweise(Girokonto ziel, long betrag, String zweck) { - if (super.getKontostand() - betrag >= -100000) { + if (super.getKontostand() - betrag >= -dispo) { this.auszahlen(betrag, zweck, "Überweisungsausgang", super.getInhaber()); ziel.einzahlen(betrag, zweck, "Überweisungseingang", super.getInhaber()); @@ -19,6 +20,19 @@ public class Girokonto extends Konto implements Serializable { return false; } + @Override + public boolean auszahlen(long betrag, String zweck, String art, String auftraggeber) { + if (stand - betrag >= -dispo) { + stand -= betrag; + kontobewegungen.add(new Kontobewegung(betrag * -1, zweck, art, auftraggeber)); + + return true; + } + + return false; + + } + @Override public String toString() { return "Giro-" + super.toString(); 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 75b6061..e05159b 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 @@ -5,10 +5,10 @@ import java.util.ArrayList; public class Konto implements Serializable { private int nummer; - private long stand = 0; + protected long stand = 0; private String inhaber; - private ArrayList kontobewegungen; + protected ArrayList kontobewegungen; public Konto(String inhaber, int kontozähler) { nummer = 1000 + kontozähler; @@ -51,18 +51,6 @@ public class Konto implements Serializable { return false; } - - public boolean dispoAuszahlen(long betrag, String zweck, String art, String auftraggeber) { - if (stand - betrag >= -100000) { - stand -= betrag; - kontobewegungen.add(new Kontobewegung(betrag * -1, zweck, art, auftraggeber)); - - return true; - } - - return false; - - } public String[] getKontobewegungen() { String[] auflistung = new String[kontobewegungen.size()]; @@ -74,18 +62,16 @@ public class Konto implements Serializable { return auflistung; } - - public long ermittleSaldo() { - - if (kontobewegungen.size() == 5) { - return stand; + + public long saldoBerechnen(int anzahl) { + long saldo = 0; + + for (int i = 0; i < anzahl; i++) { + saldo += kontobewegungen.get(i).getBetrag(); } - return 0; - - - - - + + return saldo; + } } diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/KontoTest.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/KontoTest.java index 0965277..09ee102 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/KontoTest.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/KontoTest.java @@ -2,6 +2,7 @@ package de.hs_mannheim.informatik.bank.domain; import static org.junit.jupiter.api.Assertions.*; +import org.junit.Assert; import org.junit.jupiter.api.Test; class KontoTest { @@ -34,23 +35,26 @@ class KontoTest { @Test void testGiro() { - Girokonto gk = new Girokonto("Müller", 0); - gk.einzahlen(200, "", "", ""); - gk.dispoAuszahlen(300, "","", ""); - assertEquals(-100, gk.getKontostand()); + Konto k = new Girokonto("Müller", 0); + k.einzahlen(200, "", "", ""); + k.auszahlen(300, "","", ""); + + assertEquals(-100, k.getKontostand()); + assertTrue(k.auszahlen(500, "", "", "")); + assertEquals(-600, k.getKontostand()); + + assertFalse(k.auszahlen(101000, "", "", "")); } @Test void testSaldo() { Konto k = new Konto("Müller", 0); - k.ermittleSaldo(); k.einzahlen(200, null, null, null); k.einzahlen(200, null, null, null); - assertEquals(400, k.getKontostand()); + k.auszahlen(100, null, null, null); + assertEquals(300, k.getKontostand()); } - - } 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 d6b15dd..963d045 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 @@ -25,4 +25,8 @@ public class Kontobewegung implements Serializable { + ", auftraggeber=" + auftraggeber + "]"; } + public long getBetrag() { + return betrag; + } + } 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 fb5e3fb..e37627b 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 @@ -55,13 +55,11 @@ public class Banksystem { Persistenz.speichereBankDaten(this.bank, bank.getName()); - if(konto instanceof Girokonto) { - konto.dispoAuszahlen(betrag, "Auszahlung am Schalter", "Auszahlung", konto.getInhaber()); - } else { + if (konto instanceof Konto) { return konto.auszahlen(betrag, "Auszahlung am Schalter", "Auszahlung", konto.getInhaber()); } - - return false; + + return false; } @@ -88,9 +86,9 @@ public class Banksystem { return konto.getKontostand(); } - public long erstelleSaldo(int kontonummer) { + public long ermittleSaldo(int kontonummer, int anzahl) { Konto konto = bank.findeKonto(kontonummer); - return konto.ermittleSaldo(); + return konto.saldoBerechnen(anzahl); } 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 403d3ff..9b1859e 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 @@ -2,68 +2,80 @@ package de.hs_mannheim.informatik.bank.facade; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertTrue; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import java.io.File; +import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import de.hs_mannheim.informatik.bank.infrastructure.Persistenz; -class SystemTest { - +class SystemTest { @Test + @Order(1) void smokeTest() throws Exception { Banksystem bs = new Banksystem("Testsystem"); - assertNotNull(bs); assertEquals(0, bs.getKontenliste().length); assertEquals("Testsystem", bs.getBankname()); } - - @Test - void einzahlen() throws Exception { - Banksystem bs = new Banksystem("Testsystem"); - bs.kontoAnlegen("T", 1); - bs.geldEinzahlen(1000, 500); - assertEquals(500, bs.getKontostand(1000)); - assertNotEquals(1000, bs.getKontostand(1000)); - - bs.geldEinzahlen(1000, -200); - assertEquals(300, bs.getKontostand(1000)); - } - @Test - void auszahlen() throws Exception { + @Order(2) + void einzahlen() throws Exception { Banksystem bs = new Banksystem("Testsystem"); - bs.kontoAnlegen("T", 1); + int knr = bs.kontoAnlegen("T", 1); + bs.geldEinzahlen(knr, 500); + assertEquals(500, bs.getKontostand(knr)); + assertNotEquals(1000, bs.getKontostand(knr)); - assertEquals(0, bs.getKontostand(1000)); - assertFalse(bs.geldAuszahlen(1000, 500)); - + bs.geldEinzahlen(knr, -200); + assertEquals(300, bs.getKontostand(knr)); } - + @Test - void persistieren() throws Exception { - Banksystem bs = new Banksystem("Testsystem"); - - assertNotNull(bs); - assertEquals(0, bs.getKontenliste().length); - assertEquals("Testsystem", bs.getBankname()); - } - - @AfterEach - void löschen() throws Exception { - String datei = "C:\\Users\\Tobias\\git\\Bank-System-\\Bank-Beispiel\\Testsystem-bank-data.ser"; - File f = new File(datei); - f.delete(); + @Order(3) + void auszahlen() throws Exception { + Banksystem bs = new Banksystem("Testsystem"); + int knr = bs.kontoAnlegen("T", 1); + bs.geldEinzahlen(knr, 300); + bs.geldAuszahlen(knr, 200); + + assertEquals(100, bs.getKontostand(knr)); + assertFalse(bs.geldAuszahlen(knr, 500)); + } + @Test + @Order(4) + void persistieren() throws Exception { + Banksystem bs = new Banksystem("Testsystem"); + int knr = bs.kontoAnlegen("T", 1); + bs.geldEinzahlen(knr, 1000); + + bs.geldAuszahlen(knr, 500); + + bs = null; + + Banksystem bs2 = new Banksystem("Testsystem"); + assertEquals(1000, bs2.getKontostand(knr)); - } - + } + + @AfterAll + static void dateiLöschen() throws Exception { + File f = new File("Testsystem-bank-data.ser"); + f.delete(); + } + + + + + +} 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 index b94e859..5529b45 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/ui/UI.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/ui/UI.java @@ -16,61 +16,63 @@ public class UI { 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 anzeigen"); + 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 berechnen"); - System.out.println("9 -> Beenden"); - System.out.println(); + System.out.println("9 -> Beenden"); + System.out.println(); - System.out.print("> "); - int input = Integer.parseInt(sc.nextLine()); - 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: saldoAusgeben(); break; - case 9: break mainloop; - } + 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: + saldoAusgeben(); + break; + case 9: + break mainloop; + } - } catch (Exception e) { - System.err.println(e.getLocalizedMessage()); - } - System.out.println(); + } catch (Exception e) { + System.err.println(e.getLocalizedMessage()); } + System.out.println(); + } System.out.println("Auf Wiedersehen!"); } // hauptmenü - private void saldoAusgeben() { - System.out.println("Bitte Kontonummer angeben: "); - int kontonummer = Integer.parseInt(sc.nextLine()); - System.out.println("Saldo nach 5 Kontobewegungen: "); - System.out.println(bs.erstelleSaldo(kontonummer) / 100); - - - - } - - private void kontenAnzeigen() { + private void kontenAnzeigen() { String[] konten = bs.getKontenliste(); if (konten.length > 0) { System.out.println("Folgende Konten sind aktuell verfügbar:"); @@ -103,7 +105,7 @@ public class UI { System.out.print("Bitte den gewünschten Betrag eingeben: "); double betrag = Double.parseDouble(sc.nextLine()); - long neuerKontostand = bs.geldEinzahlen(kontonummer, (long)betrag * 100); + long neuerKontostand = bs.geldEinzahlen(kontonummer, (long) betrag * 100); System.out.printf("Einzahlung erfolgreich, neuer Kontostand = %.2f Euro", (neuerKontostand / 100.0)); } @@ -116,10 +118,10 @@ public class UI { System.out.print("Bitte den gewünschten Betrag eingeben: "); double betrag = Double.parseDouble(sc.nextLine()); - boolean erfolgreich = bs.geldAuszahlen(kontonummer, (long)betrag * 100); + 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)); + System.out.printf("Auszahlung" + ((!erfolgreich) ? " nicht" : "") + " erfolgreich. "); + System.out.printf("Neuer Kontostand = %.2f Euro.", (bs.getKontostand(kontonummer) / 100.0)); } private void kontoauszugDrucken() { @@ -153,11 +155,18 @@ public class UI { System.out.print("Bitte den Verwendungszweck eingeben: "); String verwendungszweck = sc.nextLine(); - boolean erfolgreich = bs.überweisungBeauftragen(startkonto, zielkonto, (long)(betrag * 100), verwendungszweck); + boolean erfolgreich = bs.überweisungBeauftragen(startkonto, zielkonto, (long) (betrag * 100), verwendungszweck); - System.out.println("Überweisung" + ( (!erfolgreich) ? " nicht" : "") + " erfolgreich ausgeführt."); + 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()); + double saldo = bs.ermittleSaldo(kontonummer, anzahl); + System.out.printf("Der Saldo beträgt %.2f Euro", saldo / 100.0); } - - }