From 045046d222b8d0abd1e0ce87c926e19a9a34dabd Mon Sep 17 00:00:00 2001 From: Sarah Kaminski Date: Tue, 25 Oct 2022 14:40:23 +0200 Subject: [PATCH] Bank-System Stand 25.10.2022 14:38 --- .../informatik/bank/domain/Girokonto.java | 15 +++++++++- .../informatik/bank/domain/Konto.java | 18 ++++++++++-- .../informatik/bank/domain/KontoTest.java | 22 +++++++++++++- .../informatik/bank/domain/Kontobewegung.java | 6 +++- .../informatik/bank/facade/Banksystem.java | 15 ++++++++-- .../informatik/bank/facade/SystemTest.java | 28 +++++++++++++++++- .../bank/infrastructure/Persistenz.java | 2 +- .../de/hs_mannheim/informatik/bank/ui/UI.java | 29 ++++++++++++++++--- 8 files changed, 121 insertions(+), 14 deletions(-) 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 d9b1d77..51850d6 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 @@ -19,9 +19,22 @@ public class Girokonto extends Konto implements Serializable { return false; } + // Dispokredit (Grenze: 5.000€) + public boolean auszahlen(long betrag, String zweck, String art, String auftraggeber) { + if (super.stand - betrag >= -500000) { + super.stand -= betrag; + + kontobewegungen.add(new Kontobewegung(betrag * -1, zweck, art, auftraggeber)); + + return true; + } + + return false; + } + @Override public String toString() { return "Giro-" + super.toString(); } -} +} \ No newline at end of file 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 31220e1..f028bd9 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; @@ -62,5 +62,17 @@ public class Konto implements Serializable { return auflistung; } + + public int getAnzahlKontobewegungen() { + return kontobewegungen.size(); + } + + public long getSaldo(int zahl) { + long saldo = 0; + for (int i = 0; i < zahl; i++) { + saldo = saldo + kontobewegungen.get(i).getBetrag(); + } + return saldo; + } -} +} \ No newline at end of file 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 04e96ae..8bf5f2e 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 @@ -31,5 +31,25 @@ class KontoTest { assertFalse(k2.auszahlen(500, "Test", "Auszahlung", "JUnit")); assertEquals(50, k2.getKontostand()); } + + @Test + void testSaldo() { + Konto k = new Girokonto("Müller", 0); + + //100 einzahlen + k.einzahlen(10000, null, null, null); + //200 einzahlen + k.einzahlen(20000, null, null, null); + //300 einzahlen + k.einzahlen(30000, null, null, null); + //5000 auszahlen + k.auszahlen(500000, null, null, null); + + assertEquals(4, k.getAnzahlKontobewegungen()); + assertEquals(10000, k.getSaldo(1)); + assertEquals(30000, k.getSaldo(2)); + assertEquals(60000, k.getSaldo(3)); + assertEquals(-440000, k.getSaldo(4)); + } -} +} \ No newline at end of file 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..c9fde1d 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; + } + +} \ No newline at end of file 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 5d72301..f7d9dd9 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 @@ -52,10 +52,11 @@ public class Banksystem { public boolean geldAuszahlen(int kontonummer, long betrag) throws Exception { Konto konto = bank.findeKonto(kontonummer); + boolean erfolgreich = konto.auszahlen(betrag, "Auszahlung am Schalter", "Auszahlung", konto.getInhaber()); Persistenz.speichereBankDaten(this.bank, bank.getName()); - return konto.auszahlen(betrag, "Auszahlung am Schalter", "Auszahlung", konto.getInhaber()); + return erfolgreich; } public String[] erstelleKontoauszug(int kontonummer) { @@ -80,5 +81,15 @@ public class Banksystem { return konto.getKontostand(); } + + public int getAnzahlKontobewegungen(int kontonummer) { + Konto konto = bank.findeKonto(kontonummer); + return konto.getAnzahlKontobewegungen(); + } + + public long berechneSaldo(int kontonummer, int zahl) { + Konto konto = bank.findeKonto(kontonummer); + return konto.getSaldo(zahl); + } -} +} \ No newline at end of file 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 0ce5674..8ec5e05 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 @@ -1,8 +1,12 @@ package de.hs_mannheim.informatik.bank.facade; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; +import java.io.File; + +import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Test; class SystemTest { @@ -11,9 +15,31 @@ class SystemTest { void smokeTest() throws Exception { Banksystem bs = new Banksystem("Testsystem"); + File file = new File("C:\\Users\\Sarah Kaminski\\git\\Bank-System\\Testsystem-bank-data.ser"); + assertNotNull(bs); assertEquals(0, bs.getKontenliste().length); assertEquals("Testsystem", bs.getBankname()); + + int kontonr1 = bs.kontoAnlegen("Müller", 1); + int kontonr2 = bs.kontoAnlegen("Schulz", 2); + int kontonr3 = bs.kontoAnlegen("Eiche", 2); + + assertEquals(1000, bs.geldEinzahlen(kontonr1, 1000)); + assertNotEquals(1000, bs.geldEinzahlen(kontonr2, 4000)); + assertEquals(200, bs.geldEinzahlen(kontonr3, 200)); + + assertEquals(true, bs.geldAuszahlen(kontonr1, 600)); + assertEquals(400, bs.getKontostand(kontonr1)); + assertEquals(false, bs.geldAuszahlen(kontonr1, 1000)); + assertEquals(400, bs.getKontostand(kontonr1)); + assertEquals(true, bs.geldAuszahlen(kontonr2, 4000)); + assertEquals(0, bs.getKontostand(kontonr2)); + assertEquals(true, bs.geldAuszahlen(kontonr3, 500)); + assertEquals(-300, bs.getKontostand(kontonr3)); + assertEquals(true, bs.geldAuszahlen(kontonr3, 100)); + assertEquals(-400, bs.getKontostand(kontonr3)); + + file.delete(); } - } 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..df81dc0 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 @@ -27,4 +27,4 @@ public class Persistenz { return bank; } -} +} \ No newline at end of file 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 001e321..61f587e 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 @@ -27,6 +27,7 @@ public class UI { System.out.println("4 -> Geld auszahlen"); System.out.println("5 -> Kontoauszug drucken"); System.out.println("6 -> Überweisung beauftragen"); + System.out.println("7 -> Saldo bis zu einer bestimmten Transaktion berechnen"); System.out.println("9 -> Beenden"); System.out.println(); @@ -38,13 +39,12 @@ public class UI { try { switch(input) { case 1: kontenAnzeigen(); break; - case 2: - kontoAnlegen(); - break; + case 2: kontoAnlegen(); break; case 3: geldEinzahlen(); break; case 4: geldAuszahlen(); break; case 5: kontoauszugDrucken(); break; case 6: überweisungBeauftragen(); break; + case 7: SaldoBisBerechnen(); break; case 9: break mainloop; } @@ -145,5 +145,26 @@ public class UI { System.out.println("Überweisung" + ( (!erfolgreich) ? " nicht" : "") + " erfolgreich ausgeführt."); } + + private void SaldoBisBerechnen() { + System.out.print("Bitte die gewünschte Kontonummer eingeben: "); + int kontonummer = Integer.parseInt(sc.nextLine()); + + int anzahlKontobewegungen = bs.getAnzahlKontobewegungen(kontonummer); + + System.out.println(); + System.out.println("Sie haben bisher " + anzahlKontobewegungen + ". Kontobewgungen"); + System.out.print("Bitte geben Sie daher eine Zahl zwischen 1 und " + anzahlKontobewegungen +" ein: "); + System.out.println(); + int zahl = Integer.parseInt(sc.nextLine()); + + if (zahl <= anzahlKontobewegungen && zahl > 0) { + long saldo = bs.berechneSaldo(kontonummer, zahl); + System.out.println("Ihr Saldo zwischen der 1. und der " + zahl + ". Kontobewegung beträgt: " + ((double)(saldo/100)) + "€"); + } else { + System.out.println("Leider haben Sie eine 0, eine negative Zahl oder eine höhere Zahl als Ihren gesamten Kontobewegungen eingegeben"); + } + + } -} +} \ No newline at end of file