diff --git a/Bank-Beispiel/.classpath b/Bank-Beispiel/.classpath
index 9e73c62..3f38f40 100644
--- a/Bank-Beispiel/.classpath
+++ b/Bank-Beispiel/.classpath
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
@@ -9,3 +10,16 @@
+=======
+
+
+
+
+
+
+
+
+
+
+
+>>>>>>> branch 'main' of https://gitty.informatik.hs-mannheim.de/hummel/Bank-System.git
diff --git a/Bank-Beispiel/.gitignore b/Bank-Beispiel/.gitignore
index 573316e..d95873c 100644
--- a/Bank-Beispiel/.gitignore
+++ b/Bank-Beispiel/.gitignore
@@ -179,3 +179,8 @@ replay_pid*
# Built Visual Studio Code Extensions
*.vsix
+<<<<<<< HEAD
+=======
+/bank.ser
+/zähler.ser
+>>>>>>> branch 'main' of https://gitty.informatik.hs-mannheim.de/hummel/Bank-System.git
diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/Main.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/Main.java
index 5328527..9b10fc2 100644
--- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/Main.java
+++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/Main.java
@@ -5,9 +5,14 @@ import de.hs_mannheim.informatik.bank.ui.UI;
public class Main {
+<<<<<<< HEAD
public static void main(String[] args) {
Banksystem bs = new Banksystem("Sparkasse Mannheim");
+=======
+ public static void main(String[] args) throws Exception {
+ Banksystem bs = new Banksystem("Spaßkasse Mannheim");
+>>>>>>> branch 'main' of https://gitty.informatik.hs-mannheim.de/hummel/Bank-System.git
UI ui = new UI(bs);
}
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 808463b..33c7f7f 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
@@ -1,5 +1,6 @@
package de.hs_mannheim.informatik.bank.domain;
+<<<<<<< HEAD
import java.util.Collection;
import java.util.HashMap;
@@ -46,4 +47,34 @@ public class Bank {
return konten.get(kontonummer).getStand();
}
+=======
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.HashMap;
+
+public class Bank implements Serializable {
+ private String name;
+ private HashMap konten = new HashMap<>();
+
+ public Bank(String name) {
+ this.name = name;
+ }
+
+ public void addKonto(Konto k) {
+ konten.put(k.getKontonummer(), k);
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public Collection getKontenliste() {
+ return konten.values();
+ }
+
+ public Konto findeKonto(int kontonummer) {
+ return konten.get(kontonummer);
+ }
+
+>>>>>>> branch 'main' of https://gitty.informatik.hs-mannheim.de/hummel/Bank-System.git
}
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
new file mode 100644
index 0000000..a6e7587
--- /dev/null
+++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Girokonto.java
@@ -0,0 +1,27 @@
+package de.hs_mannheim.informatik.bank.domain;
+
+import java.io.Serializable;
+
+public class Girokonto extends Konto implements Serializable {
+
+ public Girokonto(String inhaber) {
+ super(inhaber);
+ }
+
+ 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;
+ }
+
+ return false;
+ }
+
+ @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 5c52216..82a9601 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,5 +1,6 @@
package de.hs_mannheim.informatik.bank.domain;
+<<<<<<< HEAD
public class Konto {
private static int kontozaehler = 0;
@@ -28,6 +29,87 @@ public class Konto {
public void setStand(long stand) {
this.stand = stand;
+=======
+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++;
+ this.inhaber = inhaber;
+
+ this.kontobewegungen = new ArrayList<>();
+ }
+
+ public int getKontonummer() {
+ return nummer;
+ }
+
+ @Override
+ public String toString() {
+ return "Konto [nummer=" + nummer + ", inhaber=" + inhaber + "]";
+ }
+
+ public String getInhaber() {
+ return inhaber;
+ }
+
+ public long getKontostand() {
+ return stand;
+ }
+
+ public void einzahlen(long betrag, String zweck, String art, String auftraggeber) {
+ stand += betrag;
+
+ 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;
+
+ kontobewegungen.add(new Kontobewegung(betrag * -1, zweck, art, auftraggeber));
+
+ return true;
+ }
+
+ return false;
+ }
+
+ public String[] getKontobewegungen() {
+ String[] auflistung = new String[kontobewegungen.size()];
+
+ int i = 0;
+ for (Kontobewegung kb : kontobewegungen) {
+ auflistung[i++] = kb.toString();
+ }
+
+ return auflistung;
+ }
+
+ public int getKontozähler() {
+ return kontozähler;
+>>>>>>> branch 'main' of https://gitty.informatik.hs-mannheim.de/hummel/Bank-System.git
}
}
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
new file mode 100644
index 0000000..7cf10b7
--- /dev/null
+++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/KontoTest.java
@@ -0,0 +1,30 @@
+package de.hs_mannheim.informatik.bank.domain;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.junit.jupiter.api.Test;
+
+class KontoTest {
+
+ @Test
+ void testKonto() {
+ Konto k = new Konto("Müller");
+ assertEquals("Müller", k.getInhaber());
+ assertEquals(1000, k.getKontonummer());
+ assertEquals(0, k.getKontostand());
+
+ Konto k2 = new Konto("Mayer");
+ 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"));
+ assertEquals(50, k2.getKontostand());
+
+ assertFalse(k2.auszahlen(500, "Test", "Einzahlung", "JUnit"));
+ assertEquals(50, k2.getKontostand());
+ }
+
+}
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
new file mode 100644
index 0000000..d6b15dd
--- /dev/null
+++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontobewegung.java
@@ -0,0 +1,28 @@
+package de.hs_mannheim.informatik.bank.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class Kontobewegung implements Serializable {
+ private long betrag;
+ private Date datum;
+ private String betreff;
+ private String art;
+ private String auftraggeber;
+
+ public Kontobewegung(long betrag, String betreff, String art, String auftraggeber) {
+ this.betrag = betrag;
+ this.betreff = betreff;
+ this.art = art;
+ this.auftraggeber = auftraggeber;
+
+ this.datum = new Date();
+ }
+
+ @Override
+ public String toString() {
+ return "Kontobewegung [betrag=" + betrag + ", datum=" + datum + ", betreff=" + betreff + ", art=" + art
+ + ", auftraggeber=" + auftraggeber + "]";
+ }
+
+}
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 3672307..a22656a 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
@@ -3,6 +3,7 @@ package de.hs_mannheim.informatik.bank.facade;
import java.util.Collection;
import de.hs_mannheim.informatik.bank.domain.Bank;
+
import de.hs_mannheim.informatik.bank.domain.Konto;
public class Banksystem {
@@ -43,6 +44,95 @@ public class Banksystem {
public long kontoAnzeigen(int kontonummer) {
return bank.kontoAnzeigen(kontonummer);
+=======
+import de.hs_mannheim.informatik.bank.domain.Girokonto;
+import de.hs_mannheim.informatik.bank.domain.Konto;
+import de.hs_mannheim.informatik.bank.infrastructure.Persistenz;
+
+public class Banksystem {
+ private Bank bank;
+
+ public Banksystem(String bankname) throws Exception {
+ if (Persistenz.sindDatenGespeichert())
+ this.bank = (Bank) Persistenz.ladeBankDaten();
+ 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);
+
+ Persistenz.speichereBankDaten(this.bank);
+ Persistenz.speichereKontozähler(k.getKontozähler());
+
+ return k.getKontonummer();
+ }
+
+ public String[] getKontenliste() {
+ Collection konten = bank.getKontenliste();
+ String[] liste = new String[konten.size()];
+
+ int i = 0;
+ for (Konto k : konten) {
+ liste[i++] = k.toString();
+ }
+
+ return liste;
+ }
+
+ public String getBankname() {
+ return bank.getName();
+ }
+
+ public long geldEinzahlen(int kontonummer, long betrag) throws Exception {
+ Konto konto = bank.findeKonto(kontonummer);
+ konto.einzahlen(betrag, "Einzahlung am Schalter", "Einzahlung", konto.getInhaber());
+
+ Persistenz.speichereBankDaten(this.bank);
+
+ return konto.getKontostand();
+ }
+
+ public boolean geldAuszahlen(int kontonummer, long betrag) throws Exception {
+ Konto konto = bank.findeKonto(kontonummer);
+
+ Persistenz.speichereBankDaten(this.bank);
+
+ return konto.auszahlen(betrag, "Auszahlung am Schalter", "Auszahlung", konto.getInhaber());
+ }
+
+ public String[] erstelleKontoauszug(int kontonummer) {
+ Konto konto = bank.findeKonto(kontonummer);
+
+ return konto.getKontobewegungen();
+ }
+
+ public boolean überweisungBeauftragen(int startkonto, int zielkonto, long betrag, String verwendungszweck) {
+ Konto start = bank.findeKonto(startkonto);
+ Konto ziel = bank.findeKonto(zielkonto);
+
+ if (start instanceof Girokonto && ziel instanceof Girokonto) {
+ return ((Girokonto)start).überweise((Girokonto)ziel, betrag, verwendungszweck);
+ }
+
+ return false;
+ }
+
+ public long getKontostand(int kontonummer) {
+ Konto konto = bank.findeKonto(kontonummer);
+
+ return konto.getKontostand();
+
+ }
+ /*
+ branch 'main' of https://gitty.informatik.hs-mannheim.de/hummel/Bank-System.git
+ */
+
}
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
new file mode 100644
index 0000000..b72919e
--- /dev/null
+++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/infrastructure/Persistenz.java
@@ -0,0 +1,47 @@
+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";
+
+ public static boolean sindDatenGespeichert() {
+ return new File(BANK_DATEI).exists();
+ }
+
+ public static void speichereBankDaten(Object bank) throws Exception {
+ ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(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));
+ 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;
+ }
+
+}
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 76f5b51..98e79bf 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
@@ -10,6 +10,7 @@ public class UI {
public UI(Banksystem bs) {
this.bs = bs;
+<<<<<<< HEAD
hauptmenue();
}
@@ -90,6 +91,142 @@ public class UI {
System.out.println("Ihr aktueller Kontostand betraegt: " + bs.kontoAnzeigen(kontonummer) + " Euro");
+=======
+ hauptmenü();
+ }
+
+ 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");
+
+ System.out.println("9 -> Beenden");
+ 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;
+ }
+
+ } catch (Exception e) {
+ System.err.println(e.getLocalizedMessage());
+ }
+ System.out.println();
+ }
+
+ System.out.println("Auf Wiedersehen!");
+
+ } // hauptmenü
+
+ private void kontenAnzeigen() {
+ String[] konten = bs.getKontenliste();
+ if (konten.length > 0) {
+ System.out.println("Folgende Konten sind aktuell verfügbar:");
+ for (String s : konten) {
+ System.out.println(s);
+ }
+ } else {
+ System.out.println("Bisher keine Konten angelegt.");
+ }
+ }
+
+ private void kontoAnlegen() throws Exception {
+ System.out.println("Bitte den Namen des Kontoinhabers angeben: ");
+ String name = sc.nextLine();
+
+ System.out.println("Möchten Sie ein Sparkonto (1) oder ein Girokonto (2) anlegen?");
+ int auswahl = Integer.parseInt(sc.nextLine());
+
+ int kontonummer = bs.kontoAnlegen(name, auswahl);
+ System.out.println("Konto mit der Nummer " + kontonummer + " neu angelegt.");
+ }
+
+ private void geldEinzahlen() throws Exception {
+ System.out.println("Geld einzahlen");
+ 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ünschten Betrag eingeben: ");
+ double betrag = Double.parseDouble(sc.nextLine());
+
+ long neuerKontostand = bs.geldEinzahlen(kontonummer, (long)betrag * 100);
+
+ System.out.printf("Einzahlung erfolgreich, neuer Kontostand = %.2f Euro", (neuerKontostand / 100.0));
+ }
+
+ private void geldAuszahlen() throws Exception {
+ System.out.println("Geld auszahlen");
+ System.out.print("Bitte die gewünschte Kontonummer eingeben: ");
+ int kontonummer = Integer.parseInt(sc.nextLine());
+
+ 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));
+ }
+
+ private void kontoauszugDrucken() {
+ System.out.print("Bitte die gewünschte Kontonummer für den Auszug eingeben: ");
+ int kontonummer = Integer.parseInt(sc.nextLine());
+
+ System.out.println();
+
+ // in echt auf einem Drucker
+ System.out.println("Auszug für Konto " + kontonummer);
+ String[] kontobewegungen = bs.erstelleKontoauszug(kontonummer);
+
+ if (kontobewegungen.length > 0)
+ for (String kb : kontobewegungen) {
+ System.out.println(kb);
+ }
+ else
+ System.out.println("Noch keine Kontobewegungen.");
+ }
+
+ private void überweisungBeauftragen() {
+ System.out.print("Bitte die Kontonummer des Ausgangskontos der Überweisung eingeben: ");
+ int startkonto = Integer.parseInt(sc.nextLine());
+
+ System.out.print("Bitte die Kontonummmer für das Zielkonto der Überweisung eingeben: ");
+ int zielkonto = Integer.parseInt(sc.nextLine());
+
+ System.out.print("Bitte den gewünschten Überweisungsbetrag eingeben: ");
+ double betrag = Double.parseDouble(sc.nextLine());
+
+ System.out.print("Bitte den Verwendungszweck eingeben: ");
+ String verwendungszweck = sc.nextLine();
+
+ boolean erfolgreich = bs.überweisungBeauftragen(startkonto, zielkonto, (long)(betrag * 100), verwendungszweck);
+
+ System.out.println("Überweisung" + ( (!erfolgreich) ? " nicht" : "") + " erfolgreich ausgeführt.");
+>>>>>>> branch 'main' of https://gitty.informatik.hs-mannheim.de/hummel/Bank-System.git
}
}