diff --git a/.project b/.project new file mode 100644 index 0000000..4da22b8 --- /dev/null +++ b/.project @@ -0,0 +1,11 @@ + + + Bank-System + + + + + + + + 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 0b66d3d..5fc7f0b 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,9 +1,14 @@ package de.hs_mannheim.informatik.bank.domain; +import java.io.Serializable; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.List; -public class Bank { +public class Bank implements Serializable { + + private static final long serialVersionUID = -4051540516262811680L; private String name; private HashMap konten = new HashMap<>(); @@ -15,12 +20,43 @@ public class Bank { konten.put(k.getKontonummer(), k); } + public long zahleEin(Integer kontonummer, long einzahlung) { + Konto konto = konten.get(kontonummer); + + if(konto == null) + return Long.MIN_VALUE; + + return konto.zahleEin(einzahlung); + } + public String getName() { return name; } + public long getKontostand(Integer kontonummer) { + Konto konto = konten.get(kontonummer); + + if(konto == null) + return Long.MIN_VALUE; + + return konto.getKontostand(); + } + + // Damit nicht auf nicht existierende Konten eingezahlt werden kann + public boolean existiertKonto(Integer kontonummer) { + return konten.containsKey(kontonummer); + } + public Collection getKontenliste() { return konten.values(); } + public List getAuszuge(Integer kontonummer) { + Konto konto = konten.get(kontonummer); + + if(konto == null) + return new ArrayList<>(); + + return konto.getAuszuge(); + } } 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 654d503..6a68b15 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,24 +1,49 @@ package de.hs_mannheim.informatik.bank.domain; -public class Konto { - private static int kontozähler = 0; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +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 int nummer; - private long stand = 0; + private long stand = 0; private String inhaber; + + private ArrayList auszuge = new ArrayList<>(); public Konto(String inhaber) { - nummer = 1000 + kontozähler++; + nummer = 1000 + kontozähler++; // warum ab 1000? this.inhaber = inhaber; } + public int getKontonummer() { return nummer; } + + public long getKontostand() { + return stand; + } + public long zahleEin(long einzahlung) { + this.stand += einzahlung; + // inhaber muss theoretisch ermittelt werden mit scanner + auszuge.add(new Kontoauszug(stand, einzahlung, inhaber)); + return stand; + } + + public List getAuszuge() { + return auszuge; + } + @Override public String toString() { - return "Konto [nummer=" + nummer + ", inhaber=" + inhaber + "]"; + return "Konto [nummer=" + nummer + ", inhaber=" + inhaber + "]"; // warum fehlt der kontostand } } 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 new file mode 100644 index 0000000..b063f50 --- /dev/null +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontoauszug.java @@ -0,0 +1,23 @@ +package de.hs_mannheim.informatik.bank.domain; + +import java.io.Serializable; +import java.util.Date; + +public class Kontoauszug implements Serializable { + + private static final long serialVersionUID = -1220632421439291641L; + private long kontostand, betrag; + private Date date = new Date(); + private String auftraggeber; + + public Kontoauszug(long kontostand, long betrag, String auftraggeber) { + this.kontostand = kontostand; + this.betrag = betrag; + this.auftraggeber = auftraggeber; + } + + @Override + public String toString() { + return "Datum: " + date.toString() + " | Kontostand: " + kontostand + " | Betrag: " + (betrag < 0 ? "-" : "+") + 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 821c2a9..fd84c8a 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 @@ -1,9 +1,12 @@ package de.hs_mannheim.informatik.bank.facade; import java.util.Collection; +import java.util.List; import de.hs_mannheim.informatik.bank.domain.Bank; import de.hs_mannheim.informatik.bank.domain.Konto; +import de.hs_mannheim.informatik.bank.domain.Kontoauszug; +import persistence.BankSerializer; public class Banksystem { private Bank bank; @@ -12,6 +15,11 @@ public class Banksystem { this.bank = new Bank(bankname); } + public Banksystem() { + // TODO Auto-generated constructor stub + } + + public int kontoAnlegen(String name) { Konto k = new Konto(name); bank.addKonto(k); @@ -31,7 +39,42 @@ public class Banksystem { return liste; } + public long zahleEin(Integer kontonummer, long einzahlung) { + return bank.zahleEin(kontonummer, einzahlung); + } + + public long getKontostand(Integer kontonummer) { + return bank.getKontostand(kontonummer); + } + + // Damit nicht auf nicht existierende Konten eingezahlt werden kann + public boolean existiertKonto(Integer kontonummer) { + return bank.existiertKonto(kontonummer); + } + public String getBankname() { return bank.getName(); } -} + + + 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 + + } + + +} \ No newline at end of file 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 d6eb6e9..fcef1f5 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 @@ -1,7 +1,9 @@ package de.hs_mannheim.informatik.bank.ui; +import java.util.List; import java.util.Scanner; +import de.hs_mannheim.informatik.bank.domain.Kontoauszug; import de.hs_mannheim.informatik.bank.facade.Banksystem; public class UI { @@ -10,30 +12,44 @@ public class UI { public UI(Banksystem bs) { this.bs = bs; + bs.ladeSitzung(); hauptmenü(); } private void hauptmenü() { System.out.println("Willkommen bei der " + bs.getBankname() + "!"); - - mainloop: + 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(); System.out.print("> "); - int input = Integer.parseInt(sc.nextLine()); + String input = sc.nextLine(); + int inputNumber = 0; + + if(!input.equalsIgnoreCase("")) + inputNumber = Integer.parseInt(input); + System.out.println(); - switch(input) { + switch(inputNumber) { case 1: kontenAnzeigen(); break; case 2: kontoAnlegen(); break; - case 9: break mainloop; + case 3: kontoEinzahlen(); break; + case 4: kontoAbheben(); break; + case 5: kontostandAnzeigen(); break; + case 6: kontoauszugAnzeigen(); break; + case 9: bs.speichereSitzung(); break mainloop; + default: break; } } @@ -55,10 +71,76 @@ public class UI { private void kontoAnlegen() { System.out.println("Bitte den Namen des Kontoinhabers angeben: "); - String name = sc.nextLine(); + String name = sc.nextLine(); // warum kein null check / empty check - int kontonummer = bs.kontoAnlegen(name); - System.out.println("Konto mit der Nummer " + kontonummer + " neu angelegt."); + int kontonummer = bs.kontoAnlegen(name); + 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 + + 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. + } + + // Betrag ermitteln + System.out.print("Bitte den einzuzahlenden Betrag angeben: "); + long betrag = sc.nextLong(); + + // Einzahlen + long kontostand = bs.zahleEin(kontonummer, betrag); + System.out.print("Konto mit der Nummer " + kontonummer + " hat einen Kontostand von " + kontostand); + System.out.println(); + } + + + private void kontoAbheben() { + // Konto ermitteln + System.out.println("Bitte die Kontonummer angeben: "); + Integer kontonummer = sc.nextInt(); + + if(!bs.existiertKonto(kontonummer)) { + System.out.println("Kein Konto mit dieser Kontonummer existiert."); + + } + + // Betrag ermitteln + System.out.println("Bitte den abzuhebenden Betrag angeben: "); + long betrag = sc.nextLong(); + + // Abheben + long kontostand = bs.zahleEin(kontonummer, -betrag); + System.out.println("Konto mit der Nummer " + kontonummer + " hat einen Kontostand von " + kontostand); + } + + private void kontoauszugAnzeigen() { + // Konto ermitteln + System.out.println("Bitte die Kontonummer angeben: "); + Integer kontonummer = sc.nextInt(); + + if(!bs.existiertKonto(kontonummer)) { + System.out.println("Kein Konto mit dieser Kontonummer existiert."); + return; + } + + List auszuge = bs.getAuszuge(kontonummer); + + for(Kontoauszug auszug : auszuge) + System.out.println(auszug); } + 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)); + } + } diff --git a/Bank-Beispiel/src/persistence/BankSerializer.java b/Bank-Beispiel/src/persistence/BankSerializer.java new file mode 100644 index 0000000..1b7d155 --- /dev/null +++ b/Bank-Beispiel/src/persistence/BankSerializer.java @@ -0,0 +1,40 @@ +package persistence; + +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; + +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(); + } + } + + 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; + } +}