Kunde einer Bank
Schreiben Sie eine Klasse namens Kunde. Sie soll den Kunden einer Bank darstellen, der Konten besitzen kann.
- Die Klasse soll Attribute für
- den Vornamen (String)
- den Nachnamen (String)
- die Adresse (String)
- das Geburtsdatum (java.time.LocalDate)
- Schreiben Sie einen Konstruktor, der für alle Attribute Parameter hat. Die Adresse sollte keine leere Zeichenkette ("") und nicht null sein. Schreiben Sie ggf. unbekannt in das Attribut. Das Geburtsdatum soll nicht null sein, schreiben Sie ggf. den Rückgabewert der statischen Methode LocalDate.now() in das Attribut.
- Geben Sie der Klasse get-Methoden für Adress- und Geburtstagsattribut.
- Geben Sie der Klasse eine set-Methode für die Adresse. Die Adresse sollte keine leere Zeichenkette ("") und auch nicht null sein.
- Schreiben Sie folgende Methoden:
- public String getVollstaendigerName()
sie liefert Vor- und Nachnamen zusammengesetzt zurück. - public int getAlter()
Sie liefert zurück, wie alt der Kunde ist.(siehe unten) - public String toString()
gibt eine String-Darstellung der Kundendaten zurück (Tipp: statische Methode datumFormatiert in EinAusgabe) - public Girokonto kontoErstellen()
Sie erzeugt ein neues Girokonto für diesen Kunden, d. h. der vollständige Name von this wird als Kontoinhaber eingetragen.
- public String getVollstaendigerName()
- Schreiben Sie ein Hauptprogramm:
- Die Nutzenden sollen ihren Namen, ihre Adresse und ihr Geburtsdatum eingeben. (Tipp: statische Methoden der Klasse EinAusgabe nutzen!)
- Geben Sie alle gespeicherten Daten des Kunden und sein Alter aus.
- Erzeugen Sie ein neues Konto für den Kunden und geben Sie alle Daten des neu erzeugten Girokontos in der Eingabeaufforderung (Terminal) aus.
- In der Klasse java.time.LocalDate gibt es die statische Methode
public static LocalDate now()
Sie liefert das heutige Datum zurück, damit Sie es in einer Variablen speichern können. - Die Klasse java.time.Period stellt eine Zeitdauer, also z. B. den Abstand zwischen dem Geburtstag und dem heutigen Tag, dar und hat folgende praktische Methoden:
- public static Period between(LocalDate start, LocalDate ende)
Sie berechnet den Abstand zwischen den beiden Datumsangaben start und ende und gibt ihn als Period-Objekt zurück. - public int getYears()
gibt zurück, aus wie vielen vollen Jahren die Zeitdauer this besteht..
gegeben ist
import java.text.NumberFormat;
/**
* Die Objekte dieser Klasse stellen Girokonten bei einer Bank dar. Modelliert
* werden der Inhaber, die Kontonummer und der Kontostand des Girokontos. Der
* Kontostand ist dabei nie negativ.
*
* @author Dorothea Hubrich
*
*/
public class Girokonto {
/**
* die groesste bisher vergebene Kontonummer aller Girokonto-Objekte im
* Programm
*/
private static long groessteNummer = 0;
/**
* liefert eine neue noch nicht vergebene Kontonummer und merkt sich, dass
* diese nun verwendet wird
*
* @Return neue Kontonummer
*/
public static long holeNeueNummer() {
Girokonto.groessteNummer++;
return Girokonto.groessteNummer;
}
/**
* die Kontonummer
*/
private final long kontonummer;
/**
* der Kontostand, immer positiv
*/
private double kontostand;
/**
* Der Name des Inhabers
*/
private String inhaber;
/**
* dieser Konstruktor erstellt ein Standardkonto mit einem Anfangskontostand
* von 0 und einem unbekannten Kontoinhaber
*/
public Girokonto() {
this("unbekannt", 0.0);
}
/**
* Dieser Konstruktor erstellt ein leeres Konto fuer den angegebenen Inhaber
*
* @param inhaber der neue Kontoinhaber
* @param adresse
* @param geburtstag
*/
public Girokonto(String inhaber, int geburtstag, String adresse) {
this(inhaber, 0.0);
}
/**
* Dieser Konstruktor erstellt ein Konto fuer den angegebenen Inhaber mit
* dem angegebenen Kontostand
*
* @param inhaber der neue Kontoinhaber
* @param anfangsstand der anfaengliche Kontostand; darf nicht negativ sein
*/
public Girokonto(String inhaber, double anfangsstand) {
this.inhaber = "unbekannt";
boolean inOrdnung = inhaber != null && !inhaber.equals("");
if (inOrdnung == true) {
this.inhaber = inhaber;
}
this.kontostand = 0.0;
if (anfangsstand >= 0) {
this.kontostand = anfangsstand;
}
this.kontonummer = Girokonto.holeNeueNummer();
}
/**
* @Return die Kontonummer
*/
public long getKontonummer() {
return this.kontonummer;
}
/**
* @Return aktueller Kontostand
*/
public double getKontostand() {
return this.kontostand;
}
/**
* liefert den Kontostand als String fuer die Ausgabe formatiert
*
* @Return Kontostand mit 2 Nachkommastellen und Euro-Zeichen
*/
public String getStandFormatiert() {
NumberFormat nf = NumberFormat.getCurrencyInstance();
String ausgabetext = nf.format(this.kontostand);
return ausgabetext;
}
/**
* @param der Name des neuen Inhabers
*/
public void setInhaber(String inhaber) {
boolean inOrdnung = inhaber != null && !inhaber.equals("");
if (inOrdnung == true) {
this.inhaber = inhaber;
}
}
/**
* @Return Name des Inhabers
*/
public String getInhaber() {
return this.inhaber;
}
/**
* zahlt den Betrag auf this ein
*
* @param betrag der einzuzahlender Betrag, darf nicht negativ sein
*/
public void einzahlen(double betrag) {
if (betrag > 0) {
this.kontostand = this.kontostand + betrag;
}
}
/**
* hebt den gewuenschten betrag von this ab
*
* @param betrag der gewuenschte Abhebungsbetrag, darf nicht negativ sein
* @Return true, wenn die Abhebung moeglich war;
* false, wenn das Konto nicht ausreichend gedeckt ist
*/
public boolean abheben(double betrag) {
boolean kontoGedeckt = this.kontostand >= betrag;
if (betrag > 0 && kontoGedeckt) {
this.kontostand = this.kontostand - betrag;
return true;
}
return false;
}
/**
* berechnet die Zinsen gemaess dem uebergebenen Zinssatz und addiert sie
* zum aktuellen Kontostand
*
* @param zinssatzInProzent ein Wert zwischen 0 und 100
* @Return die berechneten Zinsen oder 0, wenn der zinssatzInProzent nicht
* zwischen 0 und 100 liegt.
*/
public double zinsenDazu(double zinssatzInProzent) {
if (zinssatzInProzent < 0 || zinssatzInProzent > 100) {
return 0;
}
double zinsen;
zinsen = this.kontostand * zinssatzInProzent / 100.0;
this.kontostand = this.kontostand + zinsen;
return zinsen;
}
/**
* Ueberweist den angegebenen Betrag von this auf das Empfaenger-Konto
*
* @param betrag Ueberweisungsbetrag
* @param empfaenger Konto des Empfaengers
* @Return true, wenn die Ueberweisung ausgefuehrt werden konnte;
* false, wenn nicht.
*/
public boolean ueberweisen(double betrag, Girokonto empfaenger) {
boolean geklappt;
geklappt = this.abheben(betrag);
if (geklappt == true) {
empfaenger.einzahlen(betrag);
return true;
}
return false;
}
@Override
public String toString() {
String ausgabe;
ausgabe = "Auf dem Girokonto " + this.kontonummer + " von "
+ this.inhaber + " sind " + this.getStandFormatiert() + ".";
return ausgabe;
}
}