Girokonto
Stellen Sie sich vor, dass Sie bei einer Bank angestellt sind und folgende Aufgabe zu lösen haben: Sie sollen eine Klasse GIROKONTO erstellen.
Bei jedem Girokonto sollen Kontoinhaber, Kundennummer, IBAN und Kontostand vorhanden sein. Jedes Girokonto hat einen Dispositionskredit. Ein Kontoinhaber kann seinen Kontostand ins Negative überziehen, aber nur bis maximal zum Dispositionskredit (Ist der Dispo 2000, so kann der Kontostand -2000 sein, aber nicht -2001). Das Konto hat entweder den Zustand gesperrt oder nicht gesperrt.
Aufgabe 1
a) Erstellen Sie die Attributliste in Java und weisen Sie dabei den Attributen auch die korrekten Datentypen zu.
b) Erstellen Sie den ersten Standardkonstruktor, mit dem ein bestimmtes Konto erstellt werden kann. Der Kontostand ist zunächst immer 0 EUR. Der Dispositionskredit 500 EUR.
c) Nennen Sie diejenigen Attribute, die variabel gehalten werden müssen um unterschiedliche Konten erstellen zu können. Schreiben Sie dann einen sinnvollen zweiten Standardkonstruktor.
d) Erstellen Sie eine geeignete Methode zum Geld einzahlen. Beachten Sie, dass der Betrag der eingezahlt wird, immer positiv sein muss.
e) Erstellen Sie eine Methode zum Geld abheben. Beachten Sie, dass es nicht möglich ist beliebig große Beträge abzuheben. Die Bank lässt es maximal zu, dass das vorhandene Kapital abgehoben wird und, dass nicht vorhandenes Kapital abgehoben wird, wenn der Dispositionskredit dabei nicht überschritten wird. Wenn das Konto gesperrt ist, soll keine Auszahlung mehr möglich sein. Das Konto wird gesperrt, wenn der Kunde einmal versucht hat einen Betrag abzuheben, der seinen Dispositionsrahmen überschreitet. Geben Sie entsprechende Fehlermeldungen über System.out.println(„“); aus. Mögliche Fehlermeldungen wären: „Sie wollen zu viel abheben. Ihr Konto wurde gesperrt“ und „Ihr Konto ist gesperrt. Kontaktieren Sie ihren Banker.“ (Hinweis: Verwenden Sie zwei Fallunterscheidungen)
f) Erstellen Sie eine Methode zum Überweisen von Geld auf andere Girokonten (Hinweis: Führen Sie eine Referenzvariable für das Girokonto ein, auf das das Geld überwiesen werden soll). Verwenden Sie zur Definition der Überweisen-Methode die Einzahlen und Abheben-Methode.
g) Die Bank stellen neben Girokonten auch noch Tagesgeldkonten, Aktiendepots und Kreditkartenkonten zur Verfügung. Führen Sie eine geeignete Vererbungsstruktur mit den genannten Klassen ein.
h) Testen Sie die erstellten Methoden in einer main-Methode und prüfen Sie das Ergebnis:
- Erstellen Sie zwei Girokonten.
- Zahlen Sie auf das erste 100 EUR ein.
- Heben Sie vom zweiten Konto 250 EUR ab.
- Überweisen Sie 20 EUR vom ersten auf das zweite Konto.
Aufgabe 2
Beim Abheben und beim Überweisen können Fehler auftreten. Will der Kunde zu viel abheben, wird die Transaktion nicht ausgeführt. Dies kann zu fatalen Folgen beim Überweisen führen, da eine Überweisung aus einem Abhebevorgang und einem Einzahlungsvorgang besteht. Hier kann es nun passieren, dass der Abhebevorgang fehlschlägt (weil der Kunde zu viel abheben will), der Einzahlungsvorgang aber trotzdem ausgeführt wird. Damit hätte man dann den entsprechenden Betrag aus dem Nichts erschaffen und die Bilanz passt nicht mehr.
Beispiel: Kunde 1 hat 500 EUR auf dem Konto und einen Dispo von 500 EUR. Er kann folglich nur 1000 EUR abheben. Will er 2000 EUR überweisen, so schlägt das Abheben fehl, aber auf das zielkonto werden trotzdem 2000 EUR eingezahlt.
public void abheben(double betrag){ if(Sperrzustand == false){ if(betrag <= Kontostand + Dispo){ Kontostand = Kontostand - betrag; }else{ SOP("Sie wollen zu viel abheben."); SOP("Ihr Konto wurde gesperrt."); Sperrzustand = true; } }else{ SOP("Ihr Konto ist gesperrt. Leider keine Auszahlung möglich. Bitte kontaktieren Sie ihren Kundenberater."); } } public void ueberweisen(double betrag, GIROKONTO ziel){ abheben(betrag); ziel.einzahlen(betrag); }
- Führe bei der Abheben-Methode einen boolschen Rückgabewert ein, der signalisiert, ob der Abhebevorgang erfolgreich war.
- Verwende den Rückgabewert der Abheben-Methode in der Überweisen-Methode. Die Einzahlung in der Überweisen-Methode soll nur dann ausgeführt werden, wenn vorher die Abheben-Methode erfolgreich ausgeführt wurde.
- Führe bei der Überweisen-Methode ebenfalls einen boolschen Rückgabewert ein, der signalisiert, ob der Überweisungsvorgang erfolgreich war.
Aufgabe 3
Entwerfen und implementieren Sie eine Klasse Konto zur Darstellung von Bankkonten mit folgenden Eigenschaften:
- Attribute für Saldo und Kreditrahmen. Diese Daten sollen intern in Euro verwaltet werden (1 Euro = 1.95583 DM).
- Attribut für die Kontonummer (positive ganze Zahl).
- Attribut für den Kontoinhaber. Implementieren Sie eigene Klassen zur Repräsentation von Kunden und Adressen. Ein Kunde soll mindestens durch Namen, Vornamen, Kundennummer und Adresse beschrieben werden. Zur Adresse gehören wenigstens Straße, Hausnummer, Postleitzahl und Stadt.
- Geeignete Konstruktoren.
- Methoden zum lesenden Zugriff auf die Attribute.
- Methoden zum Einzahlen und Abheben von Euro- oder DM-Beträgen. Beachten Sie, daß der Kreditrahmen nicht überzogen werden darf.
- Statten Sie alle Klassen mit einer toString-Methode mit folgender Signatur aus: public String toString();
- Implementieren Sie eine Klasse KontoTest, die in ihrer main-Methode ein Konto anlegt und interaktiv Einzahlungen und Abhebungen (wahlweise in DM oder Euro) ermöglicht und den jeweiligen Kontostand anzeigt.