From 666fd4909a4433333d63f0e755fdd835519bfe0d Mon Sep 17 00:00:00 2001 From: Oliver Hummel Date: Fri, 21 Oct 2022 10:25:54 +0200 Subject: [PATCH] =?UTF-8?q?Aufr=C3=A4umarbeiten=20(Refactorings)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Kontozähler und Persistenz aufgeräumt * Domänenfunktionalität aus dem Banksystem in die Bank geschoben --- .../informatik/bank/domain/Bank.java | 13 +++++++- .../informatik/bank/domain/Girokonto.java | 4 +-- .../informatik/bank/domain/Konto.java | 22 ++----------- .../informatik/bank/domain/KontoTest.java | 19 +++++++----- .../informatik/bank/facade/Banksystem.java | 22 +++++-------- .../informatik/bank/facade/SystemTest.java | 19 ++++++++++++ .../bank/infrastructure/Persistenz.java | 31 +++++-------------- 7 files changed, 61 insertions(+), 69 deletions(-) create mode 100644 Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/SystemTest.java 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 f268979..27aeb58 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 @@ -7,13 +7,24 @@ import java.util.HashMap; public class Bank implements Serializable { private String name; private HashMap konten = new HashMap<>(); + private int kontozähler; public Bank(String name) { this.name = name; + this.kontozähler = -1; } - public void addKonto(Konto k) { + public int addKonto(String name, int auswahl) { + Konto k; + + if (auswahl == 1) + k = new Konto(name, ++kontozähler); + else + k = new Girokonto(name, ++kontozähler); + konten.put(k.getKontonummer(), k); + + return k.getKontonummer(); } public String getName() { 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 a6e7587..d9b1d77 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,8 +4,8 @@ import java.io.Serializable; public class Girokonto extends Konto implements Serializable { - public Girokonto(String inhaber) { - super(inhaber); + public Girokonto(String inhaber, int kontozähler) { + super(inhaber, kontozähler); } public boolean überweise(Girokonto ziel, long betrag, String zweck) { 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 6783f1f..31220e1 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 @@ -1,31 +1,17 @@ package de.hs_mannheim.informatik.bank.domain; -import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; -import de.hs_mannheim.informatik.bank.infrastructure.Persistenz; - public class Konto implements Serializable { - private static int kontozähler = 0; - - static { // die bislang eleganteste Lösung, die mir eingefallen ist - try { - if (Persistenz.sindDatenGespeichert()) - kontozähler = Persistenz.ladeKontozähler(); - } catch (IOException e) { - e.printStackTrace(); - } - } - private int nummer; private long stand = 0; private String inhaber; private ArrayList kontobewegungen; - public Konto(String inhaber) { - nummer = 1000 + kontozähler++; + public Konto(String inhaber, int kontozähler) { + nummer = 1000 + kontozähler; this.inhaber = inhaber; this.kontobewegungen = new ArrayList<>(); @@ -76,9 +62,5 @@ public class Konto implements Serializable { return auflistung; } - - public int getKontozähler() { - return kontozähler; - } } 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 7cf10b7..04e96ae 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 @@ -7,23 +7,28 @@ import org.junit.jupiter.api.Test; class KontoTest { @Test - void testKonto() { - Konto k = new Konto("Müller"); + void testKontoBasics() { + Konto k = new Konto("Müller", 0); assertEquals("Müller", k.getInhaber()); assertEquals(1000, k.getKontonummer()); - assertEquals(0, k.getKontostand()); + assertEquals(0, k.getKontostand()); + } - Konto k2 = new Konto("Mayer"); + @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()); - assertEquals(1001, k2.getKontonummer()); k2.einzahlen(100, "Test", "Einzahlung", "JUnit"); assertEquals(100, k2.getKontostand()); - assertTrue(k2.auszahlen(50, "Test", "Einzahlung", "JUnit")); + + assertTrue(k2.auszahlen(50, "Test", "Auszahlung", "JUnit")); assertEquals(50, k2.getKontostand()); - assertFalse(k2.auszahlen(500, "Test", "Einzahlung", "JUnit")); + assertFalse(k2.auszahlen(500, "Test", "Auszahlung", "JUnit")); assertEquals(50, k2.getKontostand()); } 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 9c5b184..5d72301 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 @@ -11,26 +11,18 @@ public class Banksystem { private Bank bank; public Banksystem(String bankname) throws Exception { - if (Persistenz.sindDatenGespeichert()) - this.bank = (Bank) Persistenz.ladeBankDaten(); + if (Persistenz.sindDatenGespeichert(bankname)) + this.bank = (Bank) Persistenz.ladeBankDaten(bankname); else this.bank = new Bank(bankname); } public int kontoAnlegen(String name, int auswahl) throws Exception { - Konto k; - - if (auswahl == 1) - k = new Konto(name); - else - k = new Girokonto(name); - - bank.addKonto(k); + int kontonummer = bank.addKonto(name, auswahl); - Persistenz.speichereBankDaten(this.bank); - Persistenz.speichereKontozähler(k.getKontozähler()); + Persistenz.speichereBankDaten(this.bank, bank.getName()); - return k.getKontonummer(); + return kontonummer; } public String[] getKontenliste() { @@ -53,7 +45,7 @@ public class Banksystem { Konto konto = bank.findeKonto(kontonummer); konto.einzahlen(betrag, "Einzahlung am Schalter", "Einzahlung", konto.getInhaber()); - Persistenz.speichereBankDaten(this.bank); + Persistenz.speichereBankDaten(this.bank, bank.getName()); return konto.getKontostand(); } @@ -61,7 +53,7 @@ public class Banksystem { public boolean geldAuszahlen(int kontonummer, long betrag) throws Exception { Konto konto = bank.findeKonto(kontonummer); - Persistenz.speichereBankDaten(this.bank); + Persistenz.speichereBankDaten(this.bank, bank.getName()); return konto.auszahlen(betrag, "Auszahlung am Schalter", "Auszahlung", konto.getInhaber()); } 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 new file mode 100644 index 0000000..0ce5674 --- /dev/null +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/SystemTest.java @@ -0,0 +1,19 @@ +package de.hs_mannheim.informatik.bank.facade; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import org.junit.jupiter.api.Test; + +class SystemTest { + + @Test + void smokeTest() throws Exception { + Banksystem bs = new Banksystem("Testsystem"); + + assertNotNull(bs); + assertEquals(0, bs.getKontenliste().length); + assertEquals("Testsystem", bs.getBankname()); + } + +} 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 b72919e..5d08e48 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 @@ -2,46 +2,29 @@ package de.hs_mannheim.informatik.bank.infrastructure; import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.FileOutputStream; -import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class Persistenz { - private static final String BANK_DATEI = "bank.ser"; - private static final String ZÄHLER_DATEI = "zähler.ser"; + private static final String BANK_DATEI = "-bank-data.ser"; - public static boolean sindDatenGespeichert() { - return new File(BANK_DATEI).exists(); + public static boolean sindDatenGespeichert(String name) { + return new File(name + BANK_DATEI).exists(); } - public static void speichereBankDaten(Object bank) throws Exception { - ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(BANK_DATEI)); + public static void speichereBankDaten(Object bank, String name) throws Exception { + ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(name + BANK_DATEI)); oos.writeObject(bank); oos.close(); } - public static void speichereKontozähler(int kontozähler) throws IOException { - ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(ZÄHLER_DATEI)); - oos.writeInt(kontozähler); - oos.close(); - } - - public static Object ladeBankDaten() throws Exception { - ObjectInputStream ois = new ObjectInputStream(new FileInputStream(BANK_DATEI)); + 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; } - - public static int ladeKontozähler() throws FileNotFoundException, IOException { - ObjectInputStream ois = new ObjectInputStream(new FileInputStream(ZÄHLER_DATEI)); - int zähler = ois.readInt(); - ois.close(); - - return zähler; - } }