From 917dda46eb2c13f740db1ebb66bfd64defca8ca9 Mon Sep 17 00:00:00 2001 From: KDippold <2023962@stud.hs-mannheim.de> Date: Tue, 25 Oct 2022 15:18:25 +0200 Subject: [PATCH] Fertig --- Bank-Beispiel/.classpath | 6 +- .../informatik/bank/domain/Girokonto.java | 38 +++++- .../informatik/bank/domain/Konto.java | 18 ++- .../informatik/bank/domain/KontoTest.java | 49 +++++++- .../informatik/bank/facade/Banksystem.java | 23 +++- .../informatik/bank/facade/SystemTest.java | 45 ++++++- .../bank/infrastructure/Persistenz.java | 6 +- .../de/hs_mannheim/informatik/bank/ui/UI.java | 116 +++++++++++------- 8 files changed, 236 insertions(+), 65 deletions(-) diff --git a/Bank-Beispiel/.classpath b/Bank-Beispiel/.classpath index 257ce1d..6220d0d 100644 --- a/Bank-Beispiel/.classpath +++ b/Bank-Beispiel/.classpath @@ -1,11 +1,7 @@ - - - - - + 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..755fcad 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 @@ -4,24 +4,54 @@ import java.io.Serializable; public class Girokonto extends Konto implements Serializable { + private long dispo = 1000; + 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) { this.auszahlen(betrag, zweck, "Überweisungsausgang", super.getInhaber()); ziel.einzahlen(betrag, zweck, "Überweisungseingang", super.getInhaber()); - + return true; + } else if (super.getKontostand() + dispo - betrag >= 0) { + dispo = dispo - betrag + super.getKontostand(); + this.auszahlen(super.getKontostand(), zweck, "Überweisungsausgang", super.getInhaber()); // wenn dispo + // verwendet + // wird ist + // kontostand 0 + ziel.einzahlen(betrag, zweck, "Überweisungseingang", super.getInhaber()); } - + return false; } - + + @Override + public boolean auszahlen(long betrag, String zweck, String art, String auftraggeber) { + if (stand - betrag >= 0) { + stand = stand - betrag; + + getKontobw().add(new Kontobewegung(betrag * -1, zweck, art, auftraggeber)); + + return true; + } else if (stand + dispo - betrag >= 0) { + dispo = dispo - betrag + super.getKontostand(); + stand = 0; + getKontobw().add(new Kontobewegung(betrag * -1, zweck, art, auftraggeber)); + } + + return false; + } + @Override public String toString() { return "Giro-" + super.toString(); } + public long getDispo() { + return dispo; + } + } 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..3191cb6 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,7 +5,7 @@ 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; @@ -38,6 +38,7 @@ public class Konto implements Serializable { stand += betrag; kontobewegungen.add(new Kontobewegung(betrag, zweck, art, auftraggeber)); + } public boolean auszahlen(long betrag, String zweck, String art, String auftraggeber) { @@ -63,4 +64,19 @@ public class Konto implements Serializable { return auflistung; } + public ArrayList getKontobw() { + return kontobewegungen; + } + + public String[] getSaldo() { + String[] saldo = new String[11]; + for (int i = 10; i > 0; i--) { + saldo[i - 1] = kontobewegungen.get(kontobewegungen.size() - i).toString(); + } + + saldo[10] = "Kontostand: " + stand; + + 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..888341e 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 @@ -11,20 +11,20 @@ class KontoTest { Konto k = new Konto("Müller", 0); assertEquals("Müller", k.getInhaber()); assertEquals(1000, k.getKontonummer()); - assertEquals(0, k.getKontostand()); + assertEquals(0, k.getKontostand()); } - + @Test void testKontoEinUndAuszahlung() { Konto k = new Konto("Müller", 0); Konto k2 = new Konto("Mayer", 1); - + assertEquals("Mayer", k2.getInhaber()); assertNotEquals(k.getKontonummer(), k2.getKontonummer()); - + k2.einzahlen(100, "Test", "Einzahlung", "JUnit"); assertEquals(100, k2.getKontostand()); - + assertTrue(k2.auszahlen(50, "Test", "Auszahlung", "JUnit")); assertEquals(50, k2.getKontostand()); @@ -32,4 +32,43 @@ class KontoTest { assertEquals(50, k2.getKontostand()); } + @Test + void dispoTest() { + Girokonto k = new Girokonto("Müller", 0); + Girokonto k2 = new Girokonto("Mayer", 0); + + k.einzahlen(100, "Test", "Einzahlung", "JUnit"); + k.überweise(k2, 200, "Test"); + assertEquals(900, k.getDispo()); + assertEquals(0, k.getKontostand()); + assertEquals(200, k2.getKontostand()); + + } + + @Test + void saldoTest() { + Girokonto k = new Girokonto("Müller", 0); + k.einzahlen(100, "Test", "Einzahlung", "JUnit"); + k.einzahlen(100, "Test", "Einzahlung", "JUnit"); + k.einzahlen(100, "Test", "Einzahlung", "JUnit"); + k.einzahlen(100, "Test", "Einzahlung", "JUnit"); + k.einzahlen(100, "Test", "Einzahlung", "JUnit"); + k.einzahlen(100, "Test", "Einzahlung", "JUnit"); + k.einzahlen(100, "Test", "Einzahlung", "JUnit"); + k.einzahlen(100, "Test", "Einzahlung", "JUnit"); + k.einzahlen(100, "Test", "Einzahlung", "JUnit"); + k.einzahlen(100, "Test", "Einzahlung", "JUnit"); + k.einzahlen(100, "Test", "Einzahlung", "JUnit"); + k.einzahlen(100, "Test", "Einzahlung", "JUnit"); + k.einzahlen(100, "Test", "Einzahlung", "JUnit"); + k.einzahlen(100, "Test", "Einzahlung", "JUnit"); + k.einzahlen(100, "Test", "Einzahlung", "JUnit"); + k.einzahlen(100, "Test", "Einzahlung", "JUnit"); + k.einzahlen(100, "Test", "Einzahlung", "JUnit"); + k.einzahlen(100, "Test", "Einzahlung", "JUnit"); + assertNotNull(k.getSaldo()); + String[] saldo = k.getSaldo(); + assertEquals("Kontostand: 1800", saldo[10]); + } + } 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..1b3d5e1 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 @@ -19,7 +19,7 @@ public class Banksystem { public int kontoAnlegen(String name, int auswahl) throws Exception { int kontonummer = bank.addKonto(name, auswahl); - + Persistenz.speichereBankDaten(this.bank, bank.getName()); return kontonummer; @@ -31,7 +31,7 @@ public class Banksystem { int i = 0; for (Konto k : konten) { - liste[i++] = k.toString(); + liste[i++] = k.toString(); } return liste; @@ -46,13 +46,13 @@ public class Banksystem { konto.einzahlen(betrag, "Einzahlung am Schalter", "Einzahlung", konto.getInhaber()); Persistenz.speichereBankDaten(this.bank, bank.getName()); - + return konto.getKontostand(); } public boolean geldAuszahlen(int kontonummer, long betrag) throws Exception { Konto konto = bank.findeKonto(kontonummer); - + Persistenz.speichereBankDaten(this.bank, bank.getName()); return konto.auszahlen(betrag, "Auszahlung am Schalter", "Auszahlung", konto.getInhaber()); @@ -69,7 +69,7 @@ public class Banksystem { Konto ziel = bank.findeKonto(zielkonto); if (start instanceof Girokonto && ziel instanceof Girokonto) { - return ((Girokonto)start).überweise((Girokonto)ziel, betrag, verwendungszweck); + return ((Girokonto) start).überweise((Girokonto) ziel, betrag, verwendungszweck); } return false; @@ -81,4 +81,17 @@ public class Banksystem { return konto.getKontostand(); } + public boolean checkSaldo(int kontonummer) { + Konto konto = bank.findeKonto(kontonummer); + if (konto.getKontobw().size() % 1 == 0) { + return true; + } + return false; + } + + public String[] printSaldo(int kontonummer) { + Konto konto = bank.findeKonto(kontonummer); + return konto.getSaldo(); + } + } 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..5cb2001 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,6 +3,10 @@ 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.*; + +import de.hs_mannheim.informatik.bank.infrastructure.Persistenz; + import org.junit.jupiter.api.Test; class SystemTest { @@ -10,10 +14,49 @@ class SystemTest { @Test void smokeTest() throws Exception { Banksystem bs = new Banksystem("Testsystem"); - + assertNotNull(bs); assertEquals(0, bs.getKontenliste().length); assertEquals("Testsystem", bs.getBankname()); } + @Test + void einzahlenTest() throws Exception { + Banksystem bs = new Banksystem("Testsystem"); + + bs.geldEinzahlen(bs.kontoAnlegen("Kai", 1), 500); + assertEquals(500, bs.getKontostand(1000)); + File file = new File("C:\\Users\\Kai\\git\\Bank-System\\Bank-Beispiel\\Testsystem-bank-data.ser"); + file.delete(); + } + + @Test + void auszahlenTest() throws Exception { + Banksystem bs = new Banksystem("Testsystem"); + + bs.geldEinzahlen(bs.kontoAnlegen("Kai", 1), 500); + bs.geldAuszahlen(1000, 400); + + assertEquals(100, bs.getKontostand(1000)); + File file = new File("C:\\Users\\Kai\\git\\Bank-System\\Bank-Beispiel\\Testsystem-bank-data.ser"); + file.delete(); + } + + @Test + void persistenzTest() throws Exception { + Banksystem bs = new Banksystem("Testsystem"); + + bs.geldEinzahlen(bs.kontoAnlegen("Kai", 1), 500); + + bs = null; + + Banksystem bs1 = new Banksystem("Testsystem"); + + assertEquals(500, bs1.getKontostand(1000)); + + File file = new File("C:\\Users\\Kai\\git\\Bank-System\\Bank-Beispiel\\Testsystem-bank-data.ser"); + 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..319b5ad 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 @@ -8,7 +8,7 @@ import java.io.ObjectOutputStream; public class Persistenz { private static final String BANK_DATEI = "-bank-data.ser"; - + public static boolean sindDatenGespeichert(String name) { return new File(name + BANK_DATEI).exists(); } @@ -18,12 +18,12 @@ public class Persistenz { oos.writeObject(bank); oos.close(); } - + public static Object ladeBankDaten(String name) throws Exception { ObjectInputStream ois = new ObjectInputStream(new FileInputStream(name + BANK_DATEI)); Object bank = ois.readObject(); ois.close(); - + return bank; } 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..151b8c2 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,49 +16,59 @@ 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"); + 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("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 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 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 kontenAnzeigen() { + private void kontenAnzeigen() { String[] konten = bs.getKontenliste(); if (konten.length > 0) { System.out.println("Folgende Konten sind aktuell verfügbar:"); @@ -91,8 +101,13 @@ 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); + if (checkSaldo(kontonummer)) { + String[] saldo = printSaldo(kontonummer); + for (int i = 0; i < 11; i++) { + System.out.println(saldo[i]); + } + } System.out.printf("Einzahlung erfolgreich, neuer Kontostand = %.2f Euro", (neuerKontostand / 100.0)); } @@ -104,10 +119,15 @@ 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); - - System.out.printf("Auszahlung" + ((!erfolgreich)? " nicht" : "" )+ " erfolgreich. "); - System.out.printf("Neuer Kontostand = %.2f Euro.", (bs.getKontostand(kontonummer) / 100.0)); + boolean erfolgreich = bs.geldAuszahlen(kontonummer, (long) betrag * 100); + if (checkSaldo(kontonummer)) { + String[] saldo = printSaldo(kontonummer); + for (int i = 0; i < 11; i++) { + System.out.println(saldo[i]); + } + } + System.out.printf("Auszahlung" + ((!erfolgreich) ? " nicht" : "") + " erfolgreich. "); + System.out.printf("Neuer Kontostand = %.2f Euro.", (bs.getKontostand(kontonummer) / 100.0)); } private void kontoauszugDrucken() { @@ -141,9 +161,23 @@ 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); + if (checkSaldo(startkonto)) { + String[] saldo = printSaldo(startkonto); + for (int i = 0; i < 11; i++) { + System.out.println(saldo[i]); + } + } + System.out.println("Überweisung" + ((!erfolgreich) ? " nicht" : "") + " erfolgreich ausgeführt."); + } - System.out.println("Überweisung" + ( (!erfolgreich) ? " nicht" : "") + " erfolgreich ausgeführt."); + private boolean checkSaldo(int kontonummer) { + return bs.checkSaldo(kontonummer); + + } + + private String[] printSaldo(int kontonummer) { + return bs.printSaldo(kontonummer); } }