diff --git a/Bank-Beispiel/.classpath b/Bank-Beispiel/.classpath
index 57bca72..257ce1d 100644
--- a/Bank-Beispiel/.classpath
+++ b/Bank-Beispiel/.classpath
@@ -6,5 +6,6 @@
+
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 12cbed5..15b36fd 100644
--- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/Main.java
+++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/Main.java
@@ -5,7 +5,7 @@ import de.hs_mannheim.informatik.bank.ui.UI;
public class Main {
- public static void main(String[] args) {
+ public static void main(String[] args) throws Exception {
Banksystem bs = new Banksystem("Spaßkasse Mannheim");
System.out.println("Hallo");
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 5fc7f0b..47957af 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
@@ -28,6 +28,15 @@ public class Bank implements Serializable {
return konto.zahleEin(einzahlung);
}
+ public long zahleAus(Integer kontonummer, long einzahlung) {
+ Konto konto = konten.get(kontonummer);
+
+ if(konto == null)
+ return Long.MIN_VALUE;
+
+ return konto.zahleAus(einzahlung);
+ }
+
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
new file mode 100644
index 0000000..fb246e3
--- /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.zahleAus(betrag);
+ ziel.zahleEin(betrag);
+
+ 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 6a68b15..8db70ac 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
@@ -8,7 +8,7 @@ public class Konto implements Serializable {
private static final long serialVersionUID = 1281848917479629785L;
- private static int kontozähler = 0; // warum nicht hier direkt auf 1000 setzen
+ private static int kontozähler = 0;
private int nummer;
private long stand = 0;
@@ -17,10 +17,10 @@ public class Konto implements Serializable {
private ArrayList auszuge = new ArrayList<>();
public Konto(String inhaber) {
- nummer = 1000 + kontozähler++; // warum ab 1000?
+ nummer = 1000 + kontozähler++;
this.inhaber = inhaber;
+
}
-
public int getKontonummer() {
return nummer;
@@ -29,21 +29,40 @@ public class Konto implements Serializable {
public long getKontostand() {
return stand;
}
+ public String getInhaber() {
+ return inhaber;
+ }
public long zahleEin(long einzahlung) {
this.stand += einzahlung;
+ String auftraggeber = "Klaus";
// inhaber muss theoretisch ermittelt werden mit scanner
- auszuge.add(new Kontoauszug(stand, einzahlung, inhaber));
+ auszuge.add(new Kontoauszug(stand, einzahlung, auftraggeber));
return stand;
}
-
+ public long zahleAus(long einzahlung) {
+ if (stand - einzahlung >= 0) {
+ stand -= einzahlung;
+ String auftraggeber = "Test";
+ auszuge.add(new Kontoauszug(stand,einzahlung, auftraggeber));
+ return stand;
+ }
+ System.out.println("Sie möchten zu viel abheben. Aktueller Stand: " + stand);
+ return stand;
+ }
+
public List getAuszuge() {
return auszuge;
}
@Override
public String toString() {
- return "Konto [nummer=" + nummer + ", inhaber=" + inhaber + "]"; // warum fehlt der kontostand
+ return "Konto [nummer=" + nummer + ", inhaber=" + inhaber + "]" + "Konotstand= " + stand; // warum fehlt der kontostand
}
+ 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
new file mode 100644
index 0000000..5e3ffb4
--- /dev/null
+++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/KontoTest.java
@@ -0,0 +1,33 @@
+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.zahleEin(100);
+ assertEquals(100, k2.getKontostand());
+ //assertTrue(k2.zahleAus(50, "Test", "Einzahlung", "JUnit"));
+ assertEquals(50, k2.getKontostand());
+
+ //assertFalse(k2.zahleAus(500, "Test", "Einzahlung", "JUnit"));
+ assertEquals(50, k2.getKontostand());
+ }
+
+
+ }
+
+
diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontoauszug.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontoauszug.java
index b063f50..ab4f146 100644
--- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontoauszug.java
+++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontoauszug.java
@@ -18,6 +18,7 @@ public class Kontoauszug implements Serializable {
@Override
public String toString() {
- return "Datum: " + date.toString() + " | Kontostand: " + kontostand + " | Betrag: " + (betrag < 0 ? "-" : "+") + betrag + " | " + "Auftraggeber: " + auftraggeber;
+ return "Datum: " + date.toString() + " | Kontostand: " + kontostand + " | Betrag: "+ betrag + " | "
+ + "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 fd84c8a..ca96411 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
@@ -4,6 +4,7 @@ import java.util.Collection;
import java.util.List;
import de.hs_mannheim.informatik.bank.domain.Bank;
+import de.hs_mannheim.informatik.bank.domain.Girokonto;
import de.hs_mannheim.informatik.bank.domain.Konto;
import de.hs_mannheim.informatik.bank.domain.Kontoauszug;
import persistence.BankSerializer;
@@ -11,19 +12,26 @@ import persistence.BankSerializer;
public class Banksystem {
private Bank bank;
- public Banksystem(String bankname) {
- this.bank = new Bank(bankname);
+ public Banksystem(String bankname) throws Exception {
+ if (BankSerializer.sindDatenGespeichert())
+ this.bank = (Bank) BankSerializer.ladeBankDaten();
+ else
+ this.bank = new Bank(bankname);
}
- public Banksystem() {
- // TODO Auto-generated constructor stub
- }
+ public int kontoAnlegen(String name, int auswahl) throws Exception {
+ Konto k;
+
+ if (auswahl == 1)
+ k = new Konto(name);
+ else
+ k = new Girokonto(name);
-
- public int kontoAnlegen(String name) {
- Konto k = new Konto(name);
bank.addKonto(k);
+ BankSerializer.speichereBankDaten(this.bank);
+ BankSerializer.speichereKontozähler(k.getKontozähler());
+
return k.getKontonummer();
}
@@ -42,6 +50,10 @@ public class Banksystem {
public long zahleEin(Integer kontonummer, long einzahlung) {
return bank.zahleEin(kontonummer, einzahlung);
}
+ public long zahleAus(Integer kontonummer, long einzahlung) {
+ return bank.zahleAus(kontonummer, einzahlung);
+ }
+
public long getKontostand(Integer kontonummer) {
return bank.getKontostand(kontonummer);
@@ -55,21 +67,23 @@ public class Banksystem {
public String getBankname() {
return bank.getName();
}
+
+ /*public boolean überweisungBeauftragen(int startkonto, int zielkonto, long betrag, String verwendungszweck) {
+ Konto start = bank.existiertKonto(startkonto);
+ Konto ziel = bank.existiertKonto(zielkonto);
+
+ if (start instanceof Girokonto && ziel instanceof Girokonto) {
+ return ((Girokonto)start).überweise((Girokonto)ziel, betrag, verwendungszweck);
+ }
+
+ return false;
+ }*/
public List getAuszuge(Integer kontonummer) {
return bank.getAuszuge(kontonummer);
}
- //Erklärung Serializer, null hat keinen Wert und Bank wird mit this aufgerufen wegen private
- public void ladeSitzung() {
- Bank bank = BankSerializer.readFromFile("meine_tolle_bank.txt");
- if(bank != null)
- this.bank = bank;
- }
- public void speichereSitzung() {
- BankSerializer.saveToFile("meine_tolle_bank.txt", bank);
- }
public void einzahlen(int i) {
// TODO Auto-generated method stub
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 fcef1f5..577e090 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,54 +10,69 @@ public class UI {
private Banksystem bs;
Scanner sc = new Scanner(System.in);
- public UI(Banksystem bs) {
+ public UI(Banksystem bs) throws Exception {
this.bs = bs;
- bs.ladeSitzung();
hauptmenü();
}
- private void hauptmenü() {
+ private void hauptmenü() throws Exception {
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 -> Auf Konto einzahlen");
- System.out.println("4 -> Von Konto abheben");
- System.out.println("5 -> Kontostand anzeigen");
- System.out.println("6 -> Kontoauszug anzeigen");
- System.out.println("9 -> Beenden");
- System.out.println();
+ 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 -> Auf Konto einzahlen");
+ System.out.println("4 -> Von Konto abheben");
+ System.out.println("5 -> Kontostand anzeigen");
+ System.out.println("6 -> Kontoauszug anzeigen");
- System.out.print("> ");
- String input = sc.nextLine();
- int inputNumber = 0;
-
- if(!input.equalsIgnoreCase(""))
- inputNumber = Integer.parseInt(input);
-
- System.out.println();
+ System.out.println("9 -> Beenden");
+ System.out.println();
- switch(inputNumber) {
- case 1: kontenAnzeigen(); break;
- case 2: kontoAnlegen(); break;
- case 3: kontoEinzahlen(); break;
- case 4: kontoAbheben(); break;
- case 5: kontostandAnzeigen(); break;
- case 6: kontoauszugAnzeigen(); break;
- case 9: bs.speichereSitzung(); break mainloop;
- default: break;
- }
+ System.out.print("> ");
+ String input = sc.nextLine();
+ int inputNumber = 0;
+
+ if (!input.equalsIgnoreCase(""))
+ inputNumber = Integer.parseInt(input);
+
+ System.out.println();
+
+ switch (inputNumber) {
+ case 1:
+ kontenAnzeigen();
+ break;
+ case 2:
+ kontoAnlegen();
+ break;
+ case 3:
+ kontoEinzahlen();
+ break;
+ case 4:
+ kontoAbheben();
+ break;
+ case 5:
+ kontostandAnzeigen();
+ break;
+ case 6:
+ kontoauszugAnzeigen();
+ break;
+ // case 7 : überweisungBeauftragen();break;
+ case 9:
+ break mainloop;
+ default:
+ break;
}
+ }
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:");
@@ -69,78 +84,110 @@ public class UI {
}
}
- private void kontoAnlegen() {
+ private void kontoAnlegen() throws Exception {
System.out.println("Bitte den Namen des Kontoinhabers angeben: ");
- String name = sc.nextLine(); // warum kein null check / empty check
+ String name = sc.nextLine(); // warum kein null check / empty check
- int kontonummer = bs.kontoAnlegen(name);
+ System.out.println("Möchten Sie ein Sparkonto (1) oder ein Girokonto (2) anlegen?");
+ Integer auswahl = Integer.parseInt(sc.nextLine()); // warum kein null check / empty check
+
+ int kontonummer = bs.kontoAnlegen(name, auswahl);
System.out.print("Konto mit der Nummer " + kontonummer + " neu angelegt.");
System.out.println();
}
-
+
private void kontoEinzahlen() {
// Konto ermitteln
System.out.print("Bitte die Kontonummer angeben: ");
- Integer kontonummer = sc.nextInt(); // warum kein null check / empty check
+ Integer kontonummer = Integer.parseInt(sc.nextLine()); // warum kein null check / empty check
- if(!bs.existiertKonto(kontonummer)) {
+ if (!bs.existiertKonto(kontonummer)) {
System.out.print("Kein Konto mit dieser Kontonummer existiert.");
return;
- // hier kann man auch wieder kontoEinzahlen aufrufen, für eine erneute Eingabemöglichkeit, dann muss aber vorher geprüft werden, ob Konten existieren.
+ // hier kann man auch wieder kontoEinzahlen aufrufen, für eine erneute
+ // Eingabemöglichkeit, dann muss aber vorher geprüft werden, ob Konten
+ // existieren.
}
-
+
// Betrag ermitteln
System.out.print("Bitte den einzuzahlenden Betrag angeben: ");
- long betrag = sc.nextLong();
-
+ double betrag = Double.parseDouble(sc.nextLine());
+ if (betrag <= 0) {
+ System.out.println("Du kannst mit diesem Betrag nicht einzahlen, bitte versuche nochmal");
+ return;
+ }
// Einzahlen
- long kontostand = bs.zahleEin(kontonummer, betrag);
- System.out.print("Konto mit der Nummer " + kontonummer + " hat einen Kontostand von " + kontostand);
+ long kontostand = bs.zahleEin(kontonummer, (long) betrag * 100);
+ System.out.print("Konto mit der Nummer " + kontonummer + " hat einen Kontostand von " + kontostand / 100.0);
System.out.println();
}
-
-
+
private void kontoAbheben() {
// Konto ermitteln
System.out.println("Bitte die Kontonummer angeben: ");
- Integer kontonummer = sc.nextInt();
-
- if(!bs.existiertKonto(kontonummer)) {
+ Integer kontonummer = Integer.parseInt(sc.nextLine());
+
+ if (!bs.existiertKonto(kontonummer)) {
System.out.println("Kein Konto mit dieser Kontonummer existiert.");
-
+ return;
}
-
// Betrag ermitteln
System.out.println("Bitte den abzuhebenden Betrag angeben: ");
- long betrag = sc.nextLong();
-
+ double betrag = Double.parseDouble(sc.nextLine());
+ if (betrag <= 0) {
+ System.out.println("Du kannst mit diesem Betrag nicht auszahlen, bitte versuche nochmal");
+ return;
+ }
+
// Abheben
- long kontostand = bs.zahleEin(kontonummer, -betrag);
- System.out.println("Konto mit der Nummer " + kontonummer + " hat einen Kontostand von " + kontostand);
+ long kontostand = bs.zahleAus(kontonummer, (long) betrag * 100);
+ System.out.println("Konto mit der Nummer " + kontonummer + " hat einen Kontostand von " + kontostand / 100.0);
}
-
+
private void kontoauszugAnzeigen() {
// Konto ermitteln
System.out.println("Bitte die Kontonummer angeben: ");
Integer kontonummer = sc.nextInt();
-
- if(!bs.existiertKonto(kontonummer)) {
+
+ if (!bs.existiertKonto(kontonummer)) {
System.out.println("Kein Konto mit dieser Kontonummer existiert.");
return;
}
-
+
List auszuge = bs.getAuszuge(kontonummer);
-
- for(Kontoauszug auszug : auszuge)
+
+ for (Kontoauszug auszug : auszuge)
System.out.println(auszug);
}
- private void kontostandAnzeigen() {
+ private void kontostandAnzeigen() {
// Konto ermitteln
System.out.println("Bitte die Kontonummer angeben: ");
Integer kontonummer = sc.nextInt();
-
- System.out.println("Konto mit der Nummer " + kontonummer + " hat einen Kontostand von " + bs.getKontostand(kontonummer));
+
+ System.out.println(
+ "Konto mit der Nummer " + kontonummer + " hat einen Kontostand von " + bs.getKontostand(kontonummer));
}
-
+ /*
+ * 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."); }
+ */
+
}
diff --git a/Bank-Beispiel/src/persistence/BankSerializer.java b/Bank-Beispiel/src/persistence/BankSerializer.java
index 1b7d155..815eae4 100644
--- a/Bank-Beispiel/src/persistence/BankSerializer.java
+++ b/Bank-Beispiel/src/persistence/BankSerializer.java
@@ -12,29 +12,38 @@ import de.hs_mannheim.informatik.bank.domain.Bank;
public class BankSerializer {
- public static void saveToFile(String filename, Bank bank) {
- try(ObjectOutputStream fos = new ObjectOutputStream(new FileOutputStream(new File(filename)))) {
- fos.writeObject(bank);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
+ 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 Bank readFromFile(String filename) {
- try(ObjectInputStream fos = new ObjectInputStream(new FileInputStream(new File(filename)))) {
- try {
- return (Bank) fos.readObject();
- } catch (ClassNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- return null;
+ 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/persistence/BankSerializer2.java b/Bank-Beispiel/src/persistence/BankSerializer2.java
new file mode 100644
index 0000000..9f51b26
--- /dev/null
+++ b/Bank-Beispiel/src/persistence/BankSerializer2.java
@@ -0,0 +1,44 @@
+package persistence;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+public class BankSerializer2 {
+
+ public static void main(String[] args) {
+
+ File inFile = new File("C:/Users/mehta/OneDrive/Masaüstü/Input");
+ File outFile = new File("C:/Users/mehta/OneDrive/Masaüstü/Input");
+
+ BankSerializer2.inFileStream(inFile, outFile);
+
+ }
+
+ public static void inFileStream(File in, File out) {
+ InputStream inStream = null;
+ OutputStream outStream = null;
+
+ try {
+ inStream = new FileInputStream(in);
+ outStream = new FileOutputStream(out);
+
+ int input;
+ while ((input = inStream.read()) != -1) {
+ outStream.write(input);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ inStream.close();
+ outStream.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
\ No newline at end of file