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