diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/Bank-System-New.iml b/.idea/Bank-System-New.iml new file mode 100644 index 0000000..50e375a --- /dev/null +++ b/.idea/Bank-System-New.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/junit_jupiter_5_9_1.xml b/.idea/libraries/junit_jupiter_5_9_1.xml new file mode 100644 index 0000000..54fcd99 --- /dev/null +++ b/.idea/libraries/junit_jupiter_5_9_1.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..c075574 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..7d1b98d --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..797acea --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Bank-Beispiel.zip b/Bank-Beispiel.zip new file mode 100644 index 0000000..3b41f8c Binary files /dev/null and b/Bank-Beispiel.zip differ diff --git a/Bank-Beispiel/Bank-Beispiel.iml b/Bank-Beispiel/Bank-Beispiel.iml new file mode 100644 index 0000000..824b03c --- /dev/null +++ b/Bank-Beispiel/Bank-Beispiel.iml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ 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..86e5992 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 @@ -26,6 +26,10 @@ public class Bank implements Serializable { return k.getKontonummer(); } + public long getSaldo(int kontonummer, int zahl){ + Konto konto=findeKonto(kontonummer); + return konto.getSaldo(zahl); + } public String getName() { return name; 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..ba760ce 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,12 +4,13 @@ import java.io.Serializable; public class Girokonto extends Konto implements Serializable { + private long dispo=400; 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() + dispo >=betrag) { this.auszahlen(betrag, zweck, "Überweisungsausgang", super.getInhaber()); ziel.einzahlen(betrag, zweck, "Überweisungseingang", super.getInhaber()); @@ -18,7 +19,45 @@ public class Girokonto extends Konto implements Serializable { return false; } - + + public long getDispo() { + return dispo; + } + + public boolean auszahlen(long betrag, String zweck, String art, String auftraggeber) { + + if (super.getKontostand() + dispo >=betrag) { + + if (super.getKontostand()>=betrag){ + return super.auszahlen(betrag,zweck,art,auftraggeber); + }else { + long kontostand = getKontostand(); + super.auszahlen(kontostand,zweck,art,auftraggeber); + this.dispo -= betrag-kontostand; + return true; + } + }else { + return false; + } + } + + public void einzahlen(long betrag, String zweck, String art, String auftraggeber) { + long schulden = 400-dispo; + if (schulden>0){ + if (betrag<= schulden){ + dispo+=betrag; + super.einzahlen(0,zweck,art,auftraggeber); + return; + }else{ + dispo=400; + super.einzahlen(betrag-schulden,zweck,art,auftraggeber); + } + }else { + super.einzahlen(betrag,zweck,art,auftraggeber); + } + } + + @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 31220e1..3bd6abe 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 @@ -4,63 +4,76 @@ import java.io.Serializable; import java.util.ArrayList; public class Konto implements Serializable { - private int nummer; - private long stand = 0; - private String inhaber; + private int nummer; + private long stand = 0; + private String inhaber; - private ArrayList kontobewegungen; + private ArrayList kontobewegungen; - public Konto(String inhaber, int kontozähler) { - nummer = 1000 + kontozähler; - this.inhaber = inhaber; + public Konto(String inhaber, int kontozähler) { + nummer = 1000 + kontozähler; + this.inhaber = inhaber; - this.kontobewegungen = new ArrayList<>(); - } + this.kontobewegungen = new ArrayList<>(); + } - public int getKontonummer() { - return nummer; - } + public int getKontonummer() { + return nummer; + } - @Override - public String toString() { - return "Konto [nummer=" + nummer + ", inhaber=" + inhaber + "]"; - } + @Override + public String toString() { + return "Konto [nummer=" + nummer + ", inhaber=" + inhaber + "]"; + } - public String getInhaber() { - return inhaber; - } + public String getInhaber() { + return inhaber; + } - public long getKontostand() { - return stand; - } + public long getKontostand() { + return stand; + } - public void einzahlen(long betrag, String zweck, String art, String auftraggeber) { - stand += betrag; + public void einzahlen(long betrag, String zweck, String art, String auftraggeber) { + stand += betrag; - kontobewegungen.add(new Kontobewegung(betrag, zweck, art, auftraggeber)); - } + kontobewegungen.add(new Kontobewegung(betrag, zweck, art, auftraggeber)); + } - public boolean auszahlen(long betrag, String zweck, String art, String auftraggeber) { - if (stand - betrag >= 0) { - stand -= betrag; + public boolean auszahlen(long betrag, String zweck, String art, String auftraggeber) { + if (stand - betrag >= 0) { + stand -= betrag; - kontobewegungen.add(new Kontobewegung(betrag * -1, zweck, art, auftraggeber)); + kontobewegungen.add(new Kontobewegung(betrag * -1, zweck, art, auftraggeber)); - return true; - } + return true; + } - return false; - } + return false; + } - public String[] getKontobewegungen() { - String[] auflistung = new String[kontobewegungen.size()]; + public String[] getKontobewegungen() { + String[] auflistung = new String[kontobewegungen.size()]; - int i = 0; - for (Kontobewegung kb : kontobewegungen) { - auflistung[i++] = kb.toString(); - } + int i = 0; + for (Kontobewegung kb : kontobewegungen) { + auflistung[i++] = kb.toString(); + } - return auflistung; - } + return auflistung; + } + + public long getSaldo(int zahl) { + if (zahl > getKontobewegungen().length) { + throw new RuntimeException("Ungültige Eingabe"); + } + long summe = 0; + for (int i = 0; i < zahl; i++) { + Kontobewegung bewegung = kontobewegungen.get(i); + summe = summe + bewegung.getBetrag(); + } + return summe; + + } } 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..ef515f1 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 @@ -19,6 +19,10 @@ public class Kontobewegung implements Serializable { this.datum = new Date(); } + public long getBetrag() { + return betrag; + } + @Override public String toString() { return "Kontobewegung [betrag=" + betrag + ", datum=" + datum + ", betreff=" + betreff + ", art=" + 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..27a4b04 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,14 @@ public class Banksystem { 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()); + if (konto instanceof Girokonto){ + return ((Girokonto) konto).auszahlen(betrag, "Auszahlung am Schalter", "Auszahlung", konto.getInhaber()); + }else{ + return konto.auszahlen(betrag, "Auszahlung am Schalter", "Auszahlung", konto.getInhaber()); + } } public String[] erstelleKontoauszug(int kontonummer) { @@ -81,4 +85,8 @@ public class Banksystem { return konto.getKontostand(); } + public long getSaldo(int kontonummer,int zahl){ + return bank.getSaldo(kontonummer,zahl); + } + } 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..bd45a18 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,19 +1,151 @@ package de.hs_mannheim.informatik.bank.facade; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - +import de.hs_mannheim.informatik.bank.domain.Bank; +import de.hs_mannheim.informatik.bank.infrastructure.Persistenz; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; +import java.io.FileInputStream; +import java.io.ObjectInputStream; +import java.nio.file.Files; +import java.nio.file.Path; + +import static org.junit.jupiter.api.Assertions.*; + 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 smokeTest() throws Exception { + Banksystem bs = new Banksystem("Testsystem"); + + assertNotNull(bs); + assertEquals(0, bs.getKontenliste().length); + assertEquals("Testsystem", bs.getBankname()); + if (Files.exists(Path.of("Testsystem" + Persistenz.BANK_DATEI))) { + Files.delete(Path.of("Testsystem" + Persistenz.BANK_DATEI)); + } + + } + + @Test + @Order(2) + public void testGeldEinzahlen() throws Exception { + Banksystem banksystem = new Banksystem("Sparkasse1"); + banksystem.kontoAnlegen("Mauer", 1); + banksystem.geldEinzahlen(1000, 300L); + Assertions.assertEquals(300L, (long) banksystem.getKontostand(1000)); + if (Files.exists(Path.of("Sparkasse1" + Persistenz.BANK_DATEI))) { + Files.delete(Path.of("Sparkasse1" + Persistenz.BANK_DATEI)); + } + + } + + @Test + @Order(3) + public void testGeldAuszahlen() throws Exception{ + + Banksystem banksystem = new Banksystem("Sparkasse2"); + banksystem.kontoAnlegen("Mauer2",1); + banksystem.geldEinzahlen(1000,300L); + banksystem.geldAuszahlen(1000,87L); + Assertions.assertEquals(213,(long)banksystem.getKontostand(1000)); + if(Files.exists(Path.of("Sparkasse2"+Persistenz.BANK_DATEI))) + + { + Files.delete(Path.of("Sparkasse2" + Persistenz.BANK_DATEI)); + } + +} + + @Test + @Order(4) + public void testGeldAuszahlen2() throws Exception { + Banksystem banksystem = new Banksystem("Sparkasse3"); + banksystem.kontoAnlegen("Mauer3", 1); + banksystem.geldEinzahlen(1000, 300L); + + assertFalse( banksystem.geldAuszahlen(1000, 940L) ); + if (Files.exists(Path.of("Sparkasse3" + Persistenz.BANK_DATEI))) { + Files.delete(Path.of("Sparkasse3" + Persistenz.BANK_DATEI)); + } + + } // Mehr auszahlen als erlaubt + + @Test + @Order(5) + public void testDispoAuszahlen() throws Exception { + Banksystem banksystem = new Banksystem("Sparkasse4"); + banksystem.kontoAnlegen("Mauer5", 0); + banksystem.geldEinzahlen(1000, 300L); + assertTrue(banksystem.geldAuszahlen(1000,400L)); + assertEquals(banksystem.getKontostand(1000),0); //Konto ist auf 0 + banksystem.geldEinzahlen(1000,101L); + assertEquals(banksystem.getKontostand(1000),1); + if (Files.exists(Path.of("Sparkasse4" + Persistenz.BANK_DATEI))) { + Files.delete(Path.of("Sparkasse4" + Persistenz.BANK_DATEI)); + } + } + @Test + @Order(6) + public void testDispoÜberweisung() throws Exception { + Banksystem banksystem = new Banksystem("Sparkasse5"); + banksystem.kontoAnlegen("Mauer7", 0); + banksystem.kontoAnlegen("Mauer8", 0); + banksystem.geldEinzahlen(1000, 300L); + assertTrue(banksystem.überweisungBeauftragen(1000,1001,400L,"liebe")); + assertEquals(banksystem.getKontostand(1000),0); //Konto ist auf 0 + assertEquals(banksystem.getKontostand(1001),400L); + assertTrue(banksystem.überweisungBeauftragen(1001,1000,501L,"Lieb")); + assertEquals(banksystem.getKontostand(1000),401L); + assertEquals(banksystem.getKontostand(1001),0); + if (Files.exists(Path.of("Sparkasse5" + Persistenz.BANK_DATEI))) { + Files.delete(Path.of("Sparkasse5" + Persistenz.BANK_DATEI)); + } + } + @Test + @Order(7) + public void testSaldo() throws Exception { + Banksystem banksystem = new Banksystem("Sparkasse6"); + banksystem.kontoAnlegen("Mauer7", 0); + banksystem.geldEinzahlen(1000, 300L); + banksystem.geldAuszahlen(1000, 17L); + banksystem.geldAuszahlen(1000, 90L); + banksystem.geldEinzahlen(1000, 10L); + banksystem.geldAuszahlen(1000, 45L); + assertEquals(banksystem.getSaldo(1000, 0), 0); + assertEquals(banksystem.getSaldo(1000, 2), 283L); + assertEquals(banksystem.getSaldo(1000, 3), 193L); + assertEquals(banksystem.getSaldo(1000, 4), 203L); + assertEquals(banksystem.getSaldo(1000, 5), 158L); + + + if (Files.exists(Path.of("Sparkasse6" + Persistenz.BANK_DATEI))) { + Files.delete(Path.of("Sparkasse6" + Persistenz.BANK_DATEI)); + } + } + + @Test + @Order(8) + public void testPersistenz() throws Exception { + Banksystem banksystem = new Banksystem("SparkassePersistenz"); + banksystem.kontoAnlegen("Mauer7", 0); + banksystem.geldEinzahlen(1000, 300L); + + assertTrue(Files.exists(Path.of("SparkassePersistenz" + Persistenz.BANK_DATEI))); //existenz der datei + + ObjectInputStream ois = new ObjectInputStream(new FileInputStream("SparkassePersistenz" + Persistenz.BANK_DATEI)); + Bank bank = (Bank) ois.readObject(); // von datei lesen + ois.close(); + assertNotNull(bank); + assertNotNull(bank.findeKonto(1000)); + assertEquals(bank.findeKonto(1000).getKontostand(),300L); + + if (Files.exists(Path.of("SparkassePersistenz" + Persistenz.BANK_DATEI))) { + Files.delete(Path.of("SparkassePersistenz" + Persistenz.BANK_DATEI)); + } + } + + } 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..57e4fe2 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 @@ -7,7 +7,7 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class Persistenz { - private static final String BANK_DATEI = "-bank-data.ser"; + public static final String BANK_DATEI = "-bank-data.ser"; public static boolean sindDatenGespeichert(String name) { return new File(name + BANK_DATEI).exists(); 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..b0696cd 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 abfragen"); 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: saldoAbfragen(); break; case 9: break mainloop; } @@ -58,6 +60,19 @@ public class UI { } // hauptmenü + + private void saldoAbfragen(){ + System.out.print("Bitte die gewünschte Kontonummer eingeben: "); + int kontonummer = Integer.parseInt(sc.nextLine()); + + // optional prüfen, ob Konto existiert + + System.out.print("Bitte den gewünschte Zahl eingeben: "); + int zahl = Integer.parseInt(sc.nextLine()); + long saldo =bs.getSaldo(kontonummer,zahl); + System.out.printf("Ihr Saldo beträgt = %.2f Euro", (saldo / 100.0)); + } + private void kontenAnzeigen() { String[] konten = bs.getKontenliste(); if (konten.length > 0) { @@ -89,11 +104,11 @@ public class UI { // optional prüfen, ob Konto existiert System.out.print("Bitte den gewünschten Betrag eingeben: "); - double betrag = Double.parseDouble(sc.nextLine()); + long betrag = Long.parseLong(sc.nextLine()); - long neuerKontostand = bs.geldEinzahlen(kontonummer, (long)betrag * 100); + Long neuerKontostand = bs.geldEinzahlen(kontonummer, betrag ); - System.out.printf("Einzahlung erfolgreich, neuer Kontostand = %.2f Euro", (neuerKontostand / 100.0)); + System.out.println("Einzahlung erfolgreich, neuer Kontostand (Euro): "+ neuerKontostand ); } private void geldAuszahlen() throws Exception { @@ -102,12 +117,12 @@ public class UI { int kontonummer = Integer.parseInt(sc.nextLine()); System.out.print("Bitte den gewünschten Betrag eingeben: "); - double betrag = Double.parseDouble(sc.nextLine()); + long betrag = Long.parseLong(sc.nextLine()); - boolean erfolgreich = bs.geldAuszahlen(kontonummer, (long)betrag * 100); + boolean erfolgreich = bs.geldAuszahlen(kontonummer, betrag ); System.out.printf("Auszahlung" + ((!erfolgreich)? " nicht" : "" )+ " erfolgreich. "); - System.out.printf("Neuer Kontostand = %.2f Euro.", (bs.getKontostand(kontonummer) / 100.0)); + System.out.println("Einzahlung erfolgreich, neuer Kontostand (Euro): "+ bs.getKontostand(kontonummer )); } private void kontoauszugDrucken() { diff --git a/Spaßkasse Mannheim-bank-data.ser b/Spaßkasse Mannheim-bank-data.ser new file mode 100644 index 0000000..871973c Binary files /dev/null and b/Spaßkasse Mannheim-bank-data.ser differ