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