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..715adee 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,15 @@ package de.hs_mannheim.informatik.bank.domain; import java.io.Serializable; public class Girokonto extends Konto implements Serializable { + + private long dispo = 0; public Girokonto(String inhaber, int kontozähler) { super(inhaber, kontozähler); } public boolean überweise(Girokonto ziel, long betrag, String zweck) { - if (super.getKontostand() - betrag >= 0) { + if (super.getKontostand() - betrag >= dispo) { this.auszahlen(betrag, zweck, "Überweisungsausgang", super.getInhaber()); ziel.einzahlen(betrag, zweck, "Überweisungseingang", super.getInhaber()); @@ -19,6 +21,14 @@ public class Girokonto extends Konto implements Serializable { return false; } + public void setDispo(long neuerDispo) { + dispo = neuerDispo * -1; + } + + public long getDispo() { + return dispo; + } + @Override public String toString() { return "Giro-" + super.toString(); diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/GirokontoTest.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/GirokontoTest.java new file mode 100644 index 0000000..fc0e31c --- /dev/null +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/GirokontoTest.java @@ -0,0 +1,19 @@ +package de.hs_mannheim.informatik.bank.domain; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +class GirokontoTest { + + @Test + void testDispo() { + Girokonto konto = new Girokonto("Max Mustermann", 0); + konto.setDispo(1000); + konto.auszahlen(1001, "Test", "Test", konto.getInhaber()); + assertEquals(0, konto.getKontostand()); + konto.auszahlen(1000, "Test", "Test", konto.getInhaber()); + assertEquals(-1000, konto.getKontostand()); + } + +} 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..5aed933 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 @@ -41,7 +41,10 @@ public class Konto implements Serializable { } public boolean auszahlen(long betrag, String zweck, String art, String auftraggeber) { - if (stand - betrag >= 0) { + long dispo = 0; + if (this instanceof Girokonto) + dispo = ((Girokonto) this).getDispo(); + if (stand - betrag >= dispo) { stand -= betrag; kontobewegungen.add(new Kontobewegung(betrag * -1, zweck, art, auftraggeber)); @@ -62,5 +65,13 @@ public class Konto implements Serializable { return auflistung; } + + public long saldoBerechnen(int anzahlKontobew) { + long saldo = 0; + for (int i = 0; i < anzahlKontobew; i++) { + saldo += kontobewegungen.get(i).getBetrag(); + } + 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 04e96ae..1ed93b6 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,15 @@ class KontoTest { assertFalse(k2.auszahlen(500, "Test", "Auszahlung", "JUnit")); assertEquals(50, k2.getKontostand()); } + + @Test + void testSaldoBerechnen() { + Konto k = new Konto("Max Mustermann", 0); + k.einzahlen(1000, null, "Einzahlung", null); + k.einzahlen(2000, null, "Einzahlung", null); + k.einzahlen(3000, null, "Einzahlung", null); + k.auszahlen(250, null, "Auszahlung", null); + assertEquals(1000+2000+3000-250, k.saldoBerechnen(4)); + } } 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..0923e6f 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 @@ -24,5 +24,15 @@ public class Kontobewegung implements Serializable { return "Kontobewegung [betrag=" + betrag + ", datum=" + datum + ", betreff=" + betreff + ", art=" + art + ", auftraggeber=" + auftraggeber + "]"; } + + public long getBetrag() { + return betrag; + } + + public String getArt() { + return art; + } + + } 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..18f2f91 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 @@ -50,12 +50,16 @@ public class Banksystem { return konto.getKontostand(); } - public boolean geldAuszahlen(int kontonummer, long betrag) throws Exception { + public boolean geldAuszahlen(int kontonummer, long betrag) throws Exception { // Fehler es wird vor der eigentlichen Auszahlung gespeichert Konto konto = bank.findeKonto(kontonummer); - - Persistenz.speichereBankDaten(this.bank, bank.getName()); - - return konto.auszahlen(betrag, "Auszahlung am Schalter", "Auszahlung", konto.getInhaber()); + if (konto.auszahlen(betrag, "Auszahlung am Schalter", "Auszahlung", konto.getInhaber())) { + Persistenz.speichereBankDaten(this.bank, bank.getName()); + return true; + } + else { + Persistenz.speichereBankDaten(this.bank, bank.getName()); + return false; + } } public String[] erstelleKontoauszug(int kontonummer) { @@ -80,5 +84,9 @@ public class Banksystem { return konto.getKontostand(); } + + public long saldoAnzeigen(int kontonummer, int anzahlKontobew) { + return bank.findeKonto(kontonummer).saldoBerechnen(anzahlKontobew); + } } 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..c450a26 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 @@ -3,8 +3,15 @@ package de.hs_mannheim.informatik.bank.facade; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; +import java.io.File; +import java.io.FileInputStream; +import java.io.ObjectInputStream; + import org.junit.jupiter.api.Test; +import de.hs_mannheim.informatik.bank.domain.Bank; +import de.hs_mannheim.informatik.bank.infrastructure.Persistenz; + class SystemTest { @Test @@ -14,6 +21,27 @@ class SystemTest { assertNotNull(bs); assertEquals(0, bs.getKontenliste().length); assertEquals("Testsystem", bs.getBankname()); + new File("Testsystem-bank-data.ser").delete(); + } + + @Test + void einzahlenTest() throws Exception { + new File("Testsystem-bank-data.ser").delete(); + Banksystem bs = new Banksystem("Testsystem"); + bs.kontoAnlegen("Max", 0); + bs.geldEinzahlen(1000, 250); + assertEquals(250, bs.getKontostand(1000)); + ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Testsystem-bank-data.ser")); + Bank newBs = (Bank) ois.readObject(); + assertEquals(250, newBs.findeKonto(1000).getKontostand()); + bs.geldAuszahlen(1000, 250); + assertEquals(0, bs.getKontostand(1000)); + ObjectInputStream ois2 = new ObjectInputStream(new FileInputStream("Testsystem-bank-data.ser")); + newBs = (Bank) ois2.readObject(); + assertEquals(0, newBs.findeKonto(1000).getKontostand()); + ois.close(); + ois2.close(); + new File("Testsystem-bank-data.ser").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 001e321..24ec413 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 anzeigen"); System.out.println("9 -> Beenden"); System.out.println(); @@ -45,6 +46,7 @@ public class UI { case 4: geldAuszahlen(); break; case 5: kontoauszugDrucken(); break; case 6: überweisungBeauftragen(); break; + case 7: saldoAnzeigen(); break; case 9: break mainloop; } @@ -145,5 +147,17 @@ public class UI { System.out.println("Überweisung" + ( (!erfolgreich) ? " nicht" : "") + " erfolgreich ausgeführt."); } + + private void saldoAnzeigen() { + System.out.print("Bitte die Kontonummer des Kontos angeben, dessen Saldo berechnet werden soll: "); + int kontoNr = Integer.parseInt(sc.nextLine()); + + System.out.print("Bitte die Anzahl an Kontobewegungen angeben: "); + int anzahlKontobew = Integer.parseInt(sc.nextLine()); + + long saldo = bs.saldoAnzeigen(kontoNr, anzahlKontobew); + + System.out.println("Berechneter Saldo: " + saldo); + } }