[an error occurred while processing this directive]


Rheinland-Pfalz;  Informatik                                 

2008; letzte Aktualisierung:  19.6.2014; Claus Schmitt

Zurück zur Startseite Informatik / Rheinland-Pfalz Startseite Informatik-Rheinland-Pfalz

Lösung zur Übung a

Lösung zur Übung b

Lösung zur Übung c

Lösung zur Übung d

Fachbegiffe suchen für alle Java-Seiten (Index)

 

 zurück zur Java Startseite

 

                                                                                                                                            

                                                                                                                


Objekte und Klassen

Ausführliches Testprogramm für die Klasse WebSiteAuthor2
 
package klassen;
import java.util.Scanner;
public class TestAuthor3 {	
	
		static WebSiteAuthor2 page = new WebSiteAuthor2();
		static Scanner s = new Scanner(System.in);
		static void anzeigen() { // im Browser
			System.out.printf("Entstehungsdatum: %s%n", page.getDatumGeburt());
			System.out.printf("Datum der Aktualisierung: %s%n", page.getDatumAktuell());
			System.out.printf("Mail: %s%n", page.getMail());
			System.out.printf("Zugriffszaehler: %d%n", page.getZugriffsZaehler());
			
			System.out.println("Zähler der Webseite erhöhen beim Lesen? (j/n)");
			String antwort = s.nextLine().toLowerCase(); // Groß- Kleinschreibung egal;
			if (antwort.charAt(0) == 'n')
			   System.out.printf("Text der Web Seite: %s%n", page.getWebText());
			else
			   System.out.printf("Text der Web Seite: %s%n", page.getWebText2());
			System.out.printf("Zugriffszaehler: %d%n%n%n", page.getZugriffsZaehler());
			
		}
		static void editieren() {
			System.out.println("Bisheriger Text:");
			String text = page.getWebText(); // Zugriffszähler zählt nicht mit mit!!!
			System.out.println(text);
			System.out.println("Welcher Text soll angehängt werden?");
			text = text + s.nextLine();
			System.out.println("Aktuelles Datum?");
			String datum = s.nextLine();
			page.setWebText(text, datum);
			System.out.printf("%n%n");
		}
		
		static void zaehlerSetzen()  {
			System.out.println("Wie hoch soll der neue Zähler sein?");
			page.setZaehler(s.nextInt());
			s.nextLine();
		}
		
		public static void main(String[] args) {  //Hauptprogamm
			
			char c = 'q';
			System.out.println("Was wird gewünscht?"); // Menue
			do {
				System.out.println("Ausgabe o, Eingabe i, Zähler setzen z, Ende q");
				String antwort = s.nextLine();
				antwort = antwort.toLowerCase(); // Groß- Kleinschreibung egal
				if (antwort.length() != 0) {
					c = antwort.charAt(0);
					switch (c) {
					case 'o': {
						anzeigen();
						break;
					}
					case 'i': {
						editieren();
						break;
					}
					case 'z' :  {
						zaehlerSetzen();
						break;
					}
					default:
						System.out.println("Eingabe falsch oder Ende!");
					}
				}
			} while (c != 'q');
			System.out.println("Programm Ende");
		}
	}

Ausgabe:
Was wird gewünscht?
Ausgabe o, Eingabe i, Zähler setzen z, Ende q
o
Entstehungsdatum: 1.5.08
Datum der Aktualisierung: 6.5.08
Mail: Die Seite ist klasse
Zugriffszähler: 25
Zähler der Webseite erhöhen beim Lesen? (j/n)
n
Text der Web Seite: ZUM_Kopf Thema 
Zugriffszähler: 25

Ausgabe o, Eingabe i, Zähler setzen z, Ende q
o
Entstehungsdatum: 1.5.08
Datum der Aktualisierung: 6.5.08
Mail: Die Seite ist klasse
Zugriffszähler: 25
Zähler der Webseite erhöhen beim Lesen? (j/n)
j
Text der Web Seite: ZUM_Kopf Thema 
Zugriffszähler: 26

Ausgabe o, Eingabe i, Zähler setzen z, Ende q
i
Bisheriger Text:
ZUM_Kopf Thema 
Welcher Text soll angehängt werden?
Thema2
Aktuelles Datum?
17.5.08

Ausgabe o, Eingabe i, Zähler setzen z, Ende q
o
Entstehungsdatum: 1.5.08
Datum der Aktualisierung: 17.5.08
Mail: Die Seite ist klasse
Zugriffszähler: 26
Zähler der Webseite erhöhen beim Lesen? (j/n)
j
Text der Web Seite: ZUM_Kopf Thema Thema2
Zugriffszähler: 27

Ausgabe o, Eingabe i, Zähler setzen z, Ende q
q
Eingabe falsch oder Ende!
Programm Ende

zum Anfang der Seite    Begriffe Suchen

 

Lösung zur Übung a)  [Grundkonto; vgl.]

package bank;
public class Konto {
	// beschreibt ein einfaches Grundkonto
	protected double kontoStand;
	protected int kontoNummer;
	
        // Überladen der Konstruktoren
	public Konto(double betrag) {
		kontoStand = betrag;
		kontoNummer=4711;
	}
        // Falls bei der Erzeugung des Objektes (mit new) kein Parameter mitgeschickt wird,
	// wird trotzdem mit this auf den ersten Konstruktor zugegriffen und ein Parameter vorgegeben
	public Konto() {
		this(0);
	}
	public void einzahlen(double betrag) {
		if (betrag >0) 
			// Kurzschreibweise für kontoStand = kontostand + betrag;
			kontoStand += betrag;
		else System.out.println("Betrag ungeeignet");
	}
	public void auszahlen(double betrag) {
		// Kein Minus erlaubt!!!
		if ((betrag >0) && (betrag <= getKontoStand()))
			kontoStand -= betrag;
		else System.out.println("Betrag nicht erlaubt");
	}
	public double getKontoStand() {
		return kontoStand;
	}
	
	public  int getKontoNummer() {
		return kontoNummer;
	}
}
Überladen :  Es können mehrere Konstruktoren angeboten werden, und der Compiler sucht sich den richtigen
gemäß Parameterzahl aus. Ich finde es praktisch, zunächst den Konstruktor mit den meisten Parametern zu 
editieren und dann bei der Entwicklung der anderen Konstruktoren den ersten über this zu verwenden; vgl. u.a.
Kurzschreibweise: statt i = i + 1  kürzer  i += 1
Kontonummer: Da wir momentan  immer nur mit einem Konto  (also z.B. ohne Überweisungen ) arbeiten, 
erhalten alle 4 Konten die gleiche Stammnummer 4711.

Testumgebung zu a)

package bank;
public class Testkonto {
	static Konto k =new Konto(); 
	public static void main(String[] args) {
		
		
		anzeigen();
		k.einzahlen(100);
		anzeigen();
		k.auszahlen(92);
		anzeigen();
		k.einzahlen(7.5);
		anzeigen();
		k.auszahlen(16);
		anzeigen();
		
	}
	public static void anzeigen()  {
		System.out.printf("Auf dem Konto %d sind: %10.2f€%n",k.getKontoNummer(), k.getKontoStand());
	}
}
 
Ausgabe:
Auf dem Konto 4711 sind: 0,00€
Auf dem Konto 4711 sind: 100,00€
Auf dem Konto 4711 sind: 8,00€
Auf dem Konto 4711 sind: 15,50€
Betrag nicht erlaubt
Auf dem Konto 4711 sind: 15,50€
Static: Da die Variablen und Methoden zu keinem Objekt gehören, sondern in der Klasse gebraucht werden, 
ist jeweils der Modifier static erforderlich vgl.u.a.
Um richtig zu testen, ist ein Menue besser, aber das wird in den anderen Beispielen entwickelt.

zum Anfang der Seite    Begriffe Suchen

 

Lösung zur Übung b) [Girokonto mit Überziehungszinsen; vgl.]

package bank;
public class GiroKonto extends Konto {
	protected double dispoKredit;
	protected double dispoZins;
	
	// Überladen der Konstruktoren
	public GiroKonto(double betrag, double dispoKredit, double dispoZins) {
		super(betrag);
		this.dispoKredit = dispoKredit;
		this.dispoZins = dispoZins;
	}
	
	// Falls bei der Erzeugung des Objektes (mit new) kein Parameter mitgeschickt wird,
	// wird trotzdem mit this auf den ersten Konstruktor zugegriffen und 3 Parameter vorgegeben
	public GiroKonto() {
		this(0, 4000, 12);
	}
	// Überschreiben der Methode der Methode der Basisklasse
	public void auszahlen(double betrag) {
		if ((betrag >0) && (betrag <= getKontoStand() + getDispoKredit()))
			kontoStand -=betrag;
		else
			System.out.println("Betrag nicht erlaubt");
	}
	public double berechneTageszinsen() {
		if (getKontoStand() >= 0)
			return 0;
		// Formel für Tageszinsen
		else
			return (double) -getKontoStand() * getDispoZins() / 100 / 365;
	}
	public double getDispoKredit() {
		return dispoKredit;
	}
	public double getDispoZins() {
		return dispoZins;
	}
	public void setDispoKredit(double dispoKredit) {
		this.dispoKredit = dispoKredit;
	}
	public void setDispoZins(double dispoZins) {
            if ((dispoZins>0)&&(dispoZins <100))
		this.dispoZins = dispoZins;
            else System.out.println("Falscher Prozentsatz!");
	}
}
Überladen: Das entsprechende Vorgehen wie im ersten Beispiel.
Methoden: Neue sind dazu gekommen; die andern gelten weiter; nur die Methode auszahlen ist überschrieben 
worden (dabei wird die Signatur unverändert übernommen; der Methodenrumpf wird angepasst); vgl. auch.

zum Anfang der Seite    Begriffe Suchen


Testumgebung zu b)

package bank;
import java.util.Scanner;
public class TestGiro {
	// static GiroKonto k =new GiroKonto(100,3000,10);
	static GiroKonto k = new GiroKonto();
	public static void main(String[] args) {
		// Anzeigen der Startwerte des Kontos
		anzeigend();
		anzeigen();
		System.out.println("\nWas wird gewünscht?");
		// Weitere Möglichkeit für neue Zeile \n (im String)
		int antwort;
		// Eingabeschleife für das Menue
		do {
			System.out
					.println("\nEinzahlen 1, Auszahlen 2, Kontostand 3, Dispozinsen berechnen und abziehen 4, Ende 0");
			antwort = gibGanzeZahl(0, 4);
			menue(antwort);
		} while (antwort != 0);
	}
	public static void menue(int i) {
		switch (i) {
		case 1: {
			System.out.println("Wieviel € einzahlen?");
			k.einzahlen(gibGleitZahl());
			break;
		}
		case 2: {
			System.out.println("Wieviel € auszahlen?");
			k.auszahlen(gibGleitZahl());
			break;
		}
		case 3: {
			anzeigen();
			break;
		}
		case 4: {
			if (k.getKontoStand() < 0) {
				System.out
						.printf("Seit wie viel Tagen sind Sie mit %6.2f€ im Soll?%n",k.getKontoStand());
				int tage = gibGanzeZahl(0, 365);
				double zinsen = k.berechneTageszinsen() * tage;
				System.out.printf("An Zinsgebühren fallen an %6.2f€%n", zinsen);
				k.auszahlen(zinsen);
				System.out
						.printf("Neuer Kontostand %6.2f%n", k.getKontoStand());
			} else
				System.out.println("Kein Minus!");
			break;
		}
		default:
			break;
		}
	}
	public static void anzeigend() {
		System.out.printf(
				"Dipositionskredit ist: %10.2f€, Dispositionszins ist %6.2f%%%n",
				k.getDispoKredit(), k.getDispoZins());
	}
	public static void anzeigen() {
		System.out.printf("Auf dem Konto %d sind: %10.2f€%n", k
				.getKontoNummer(), k.getKontoStand());
	}
	public static int gibGanzeZahl(int unterGrenze, int oberGrenze) {
		// Liefert ganze Zahl von unterGrenze bis oberGrenze zurück
		Scanner s = new Scanner(System.in);
		// Wegen der Schleifenabbruchbedingung erhält i einen ganzzahligen Wert;
		// aber außerhab des erlaubten Bereiches
		int i = unterGrenze - 1;
		do {
			System.out.printf("Bitte eine "
					+ "ganze Zahl eingeben von %d bis %d%n", unterGrenze,
					oberGrenze);
			if (s.hasNextInt())
				i = s.nextInt();
			else
				s.nextLine();
		} while ((i < unterGrenze) || (i > oberGrenze));
		return i;
	}
	public static double gibGleitZahl() {
		Scanner s = new Scanner(System.in);
		double zahl = 0;
		boolean ok = false;
		do {
			System.out.println("Bitte eine Zahl eingeben ");
			if (s.hasNextDouble()) {
				zahl = s.nextDouble();
				ok = true;
			} else
				s.nextLine();
		} while (!ok);
		return zahl;
	}
}
Menue: Wg. der Übersicht dafür eine eigene Methode.
Zahlen einlesen: Da dies sehr häufig vorkommt, wird dies über zwei Methoden (Ganzzahl / Gleitzahl)
modularisiert.
 
Ausgabe:
Dipositionskredit ist: 4000,00€, Dispositionszins ist 12,00%
Auf dem Konto 4711 sind: 0,00€
 
Was wird gewünscht?
 
Einzahlen 1, Auszahlen 2, Kontostand 3, Dispozinsen berechnen und abziehen 4, Ende 0
Bitte eine ganze Zahl eingeben von 0 bis 4
1
Wieviel € einzahlen?
Bitte eine Zahl eingeben
1000
 
Einzahlen 1, Auszahlen 2, Kontostand 3, Dispozinsen berechnen und abziehen 4, Ende 0
Bitte eine ganze Zahl eingeben von 0 bis 4
2
Wieviel € auszahlen?
Bitte eine Zahl eingeben
3000
 
Einzahlen 1, Auszahlen 2, Kontostand 3, Dispozinsen berechnen und abziehen 4, Ende 0
Bitte eine ganze Zahl eingeben von 0 bis 4
4
Seit wie viel Tagen sind Sie mit -2000,00€ im Soll?
Bitte eine ganze Zahl eingeben von 0 bis 365
156
An Zinsgebühren fallen an 102,58€
Neuer Kontostand -2102,58
 
Einzahlen 1, Auszahlen 2, Kontostand 3, Dispozinsen berechnen und abziehen 4, Ende 0
Bitte eine ganze Zahl eingeben von 0 bis 4
2
Wieviel € auszahlen?
Bitte eine Zahl eingeben
1897
 
Einzahlen 1, Auszahlen 2, Kontostand 3, Dispozinsen berechnen und abziehen 4, Ende 0
Bitte eine ganze Zahl eingeben von 0 bis 4
4
Seit wie viel Tagen sind Sie mit -3999,58€ im Soll?
Bitte eine ganze Zahl eingeben von 0 bis 365
112
An Zinsgebühren fallen an 147,27€
Betrag nicht erlaubt
Neuer Kontostand -3999,58
D.h., wenn der Dispositionsrahmen ausgeschöft ist, müssen die Sollzinsen anderweitig 
beglichen werden...

zum Anfang der Seite    Begriffe Suchen

 

Lösung zur Übung c)   [Girokonto mit Überziehungs- und Guthabenzinsen; vgl.]

package bank;
public class GiroZins extends GiroKonto{
    protected double zins;
    public GiroZins() {
    	super();
    	zins =1;
    	
    }
public double berechneTageszinsenPlus() {
	if (getKontoStand()<= 0) return 0;
	// Formel für Tageszinsen
	else return (double)getKontoStand()*getZins()/100/365;
}
public double getZins() {
	return zins;
}
public void setZins(double zins) {
	this.zins = zins;
}
}
Diese Klasse erbt von GiroKonto und damit auch von Konto; sie steuert weitere Attribute und Methoden bei;
überschrieben wird nichts.

zum Anfang der Seite    Begriffe Suchen


Testumgebung zu c)
package bank;
import java.util.Scanner;
public class TestGiroZins {
	static GiroZins k = new GiroZins();
	public static void main(String[] args) {
		// Anzeigen der Startwerte des Kontos
		anzeigenz();
		anzeigen();
		System.out.println("\nWas wird gewünscht?");
		// Weitere Möglichkeit für neue Zeile \n (im String)
		int antwort;
		// Eingabeschleife für das Menue
		do {
			System.out.printf("\n  [1] Einzahlen " + "\n  [2] Auszahlen "
					+ "\n  [3] Kontostand"
					+ "\n  [4] %5.2f%% Dispozinsen berechnen und abziehen"
					+ "\n  [5] %5.2f%% Guthabenzinsen berechnen und gutschreiben"
					+ "\n  [0] Ende ",k.getDispoZins(),k.getZins());
			antwort = gibGanzeZahl(0, 5);
			menue(antwort);
		} while (antwort != 0);
	}
	public static void menue(int i) {
		switch (i) {
		case 1: {
			System.out.println("Wieviel € einzahlen?");
			k.einzahlen(gibGleitZahl());
			break;
		}
		case 2: {
			System.out.println("Wieviel € auszahlen?");
			k.auszahlen(gibGleitZahl());
			break;
		}
		case 3: {
			anzeigen();
			break;
		}
		case 4: {
			if (k.getKontoStand() < 0) {
				System.out.printf(
						"Seit wie viel Tagen sind Sie mit %6.2f€ im Soll?%n", k
								.getKontoStand());
				int tage = gibGanzeZahl(0, 365);
				double zinsen = k.berechneTageszinsen() * tage;
				System.out.printf("An Zinsgebühren fallen an %6.2f€%n", zinsen);
				k.auszahlen(zinsen);
				System.out
						.printf("Neuer Kontostand %6.2f%n", k.getKontoStand());
			} else
				System.out.println("Kein Minus!");
			break;
		}
		case 5: {
			if (k.getKontoStand() > 0) {
				System.out.printf(
						"Seit wie viel Tagen haben Sie das Guthaben %6.2f€?%n",
						k.getKontoStand());
				int tage = gibGanzeZahl(0, 365);
				double zinsen = k.berechneTageszinsenPlus() * tage;
				System.out.printf("Als Zinsen erhalten Sie %6.2f€%n", zinsen);
				k.einzahlen(zinsen);
				System.out
						.printf("Neuer Kontostand %6.2f%n", k.getKontoStand());
			} else
				System.out.println("Kein Guthaben!");
			break;
		}
		default:
			break;
		}
	}
	public static void anzeigenz() {
		System.out
				.printf(
						"Dipositionskredit ist: %10.2f€, Dispositionszins ist %6.2f%%, Guthabenzins ist %6.2f%%%n",
						k.getDispoKredit(), k.getDispoZins(), k.getZins());
	}
	public static void anzeigen() {
		System.out.printf("Auf dem Konto %d sind: %10.2f€%n", k
				.getKontoNummer(), k.getKontoStand());
	}
	public static int gibGanzeZahl(int unterGrenze, int oberGrenze) {
		// Liefert ganze Zahl von unterGrenze bis oberGrenze zurück
		Scanner s = new Scanner(System.in);
		// Wegen der Schleifenabbruchbedingung erhält i einen ganzzahligen Wert;
		// aber
		// außerhab des erlaubten Bereiches
		int i = unterGrenze - 1;
		do {
			System.out.printf("Bitte eine "
					+ "ganze Zahl eingeben von %d bis %d%n", unterGrenze,
					oberGrenze);
			if (s.hasNextInt())
				i = s.nextInt();
			else
				s.nextLine();
		} while ((i < unterGrenze) || (i > oberGrenze));
		return i;
	}
	public static double gibGleitZahl() {
		Scanner s = new Scanner(System.in);
		// Wegen der Schleifenabbruchbedingung erhält i einen ganzzahligen Wert;
		// aber
		// außerhab des erlaubten Bereiches
		double zahl = 0;
		boolean ok = false;
		do {
			System.out.println("Bitte eine Zahl eingeben ");
			if (s.hasNextDouble()) {
				zahl = s.nextDouble();
				ok = true;
			} else
				s.nextLine();
		} while (!ok);
		return zahl;
	}
}
Das Menue erleichtert das Testen.
Ausgabe:
Dipositionskredit ist: 4000,00€, Dispositionszins ist 12,00%, Guthabenzins ist 0,50%
Auf dem Konto 4711 sind: 0,00€
 
Was wird gewünscht?
 
[1] Einzahlen
[2] Auszahlen
[3] Kontostand
[4] 12,00% Dispozinsen berechnen und abziehen
[5] 0,50% Guthabenzinsen berechnen und gutschreiben
[0] Ende Bitte eine ganze Zahl eingeben von 0 bis 5
1
Wieviel € einzahlen?
Bitte eine Zahl eingeben
1000
 
[1] Einzahlen
[2] Auszahlen
[3] Kontostand
[4] 12,00% Dispozinsen berechnen und abziehen
[5] 0,50% Guthabenzinsen berechnen und gutschreiben
[0] Ende Bitte eine ganze Zahl eingeben von 0 bis 5
5
Seit wie viel Tagen haben Sie das Guthaben 1000,00€?
Bitte eine ganze Zahl eingeben von 0 bis 365
142
Als Zinsen erhalten Sie 1,95€
Neuer Kontostand 1001,95
 
[1] Einzahlen
[2] Auszahlen
[3] Kontostand
[4] 12,00% Dispozinsen berechnen und abziehen
[5] 0,50% Guthabenzinsen berechnen und gutschreiben
[0] Ende Bitte eine ganze Zahl eingeben von 0 bis 5
2
Wieviel € auszahlen?
Bitte eine Zahl eingeben
2001,95
 
[1] Einzahlen
[2] Auszahlen
[3] Kontostand
[4] 12,00% Dispozinsen berechnen und abziehen
[5] 0,50% Guthabenzinsen berechnen und gutschreiben
[0] Ende Bitte eine ganze Zahl eingeben von 0 bis 5
4
Seit wie viel Tagen sind Sie mit -1000,00€ im Soll?
Bitte eine ganze Zahl eingeben von 0 bis 365
17
An Zinsgebühren fallen an 5,59€
Neuer Kontostand -1005,59
 
[1] Einzahlen
[2] Auszahlen
[3] Kontostand
[4] 12,00% Dispozinsen berechnen und abziehen
[5] 0,50% Guthabenzinsen berechnen und gutschreiben
[0] Ende Bitte eine ganze Zahl eingeben von 0 bis 5
5
Kein Guthaben!
 
 

zum Anfang der Seite    Begriffe Suchen

 

Lösung zur Übung d)   [Sparkonto;  vgl.]

package bank;
public class SparKonto extends Konto {
	private double zins;
	public SparKonto(double betrag, double zins) {
		super(betrag);
		setZins(zins);
	}
	public SparKonto() {
		super();
		zins = 1;
	}
        // Überschreiben der Methode der Methode der Basisklasse
	public void auszahlen(double betrag) {
		if (betrag > 2000)
			System.out.println("Höchstes 2000€ vom Sparbuch!");
		else 
			// Die Methode der Basisklasse wird verwendet
			super.auszahlen(betrag);
		// Das Konto darf nicht komplett geräumt werden
		if (getKontoStand() < 1){
			System.out.printf("Der Kontostand wäre %6.2f€ und muss wenigstens 1€ sein%n",getKontoStand());
			System.out.printf("%6.2f€ werden einbezahlt%n",1-getKontoStand());
			einzahlen(1-getKontoStand());}
	}
	public double berechneTageszinsenPlus() {
		if (getKontoStand() <= 0)
			return 0;
		// Formel für Tageszinsen
		else
			return (double) getKontoStand() * getZins() / 100 / 365;
	}
	public double getZins() {
		return zins;
	}
	public void setZins(double zins) {
		this.zins = zins;
	}
}
Überschreiben: Diese Klasse erbt direkt von Konto und steuert ebenfalls neue Attribute und Methoden bei;
interessant ist, dass die Methode auszahlen zwar wieder überschrieben, aber trotzdem auch gebraucht wird...
In einem solchen Fall greift man auf die Basisklasse mit super zu.
Wegen der besonderen Bedingung "Kontostand mindestens 1€ ", hätte man hier auch auf super.auszahlen 
verzichten können...
Mit der Abfrage :        if ((betrag >0) && (betrag <= getKontoStand()-1))
hätte sich das Problem beim Übeschreiben eleganter lösen lassen. 

Hier sollte gezeigt werden, dass man Methoden überschreiben und gleichzeitig weiter nutzen kann...

zum Anfang der Seite    Begriffe Suchen


Testumgebung zu d)

package bank;
import java.util.Scanner;
public class TestSpar {
	static SparKonto k = new SparKonto(100, 2.5);
	public static void main(String[] args) {
		// Anzeigen der Startwerte des Kontos
		anzeigenz();
		anzeigen();
		System.out.println("\nWas wird gewünscht?");
		// Weitere Möglichkeit für neue Zeile \n (im String)
		int antwort;
		// Eingabeschleife für das Menue
		do {
			System.out.printf("\n  [1] Einzahlen " + "\n  [2] Auszahlen "
					+ "\n  [3] Kontostand"
					+ "\n  [4] %5.2f%% Guthabenzinsen berechnen und gutschreiben"
					+ "\n  [0] Ende ",k.getZins());
			antwort = gibGanzeZahl(0, 4);
			menue(antwort);
		} while (antwort != 0);
	}
	public static void menue(int i) {
		switch (i) {
		case 1: {
			System.out.println("Wieviel € einzahlen?");
			k.einzahlen(gibGleitZahl());
			break;
		}
		case 2: {
			System.out.println("Wieviel € auszahlen?");
			k.auszahlen(gibGleitZahl());
			break;
		}
		case 3: {
			anzeigen();
			break;
		}
		case 4: {
			if (k.getKontoStand() > 0) {
				System.out.printf(
						"Seit wie viel Tagen haben Sie das Guthaben %6.2f€?%n",
						k.getKontoStand());
				int tage = gibGanzeZahl(0, 365);
				double zinsen = k.berechneTageszinsenPlus() * tage;
				System.out.printf("Als Zinsen erhalten Sie %6.2f€%n", zinsen);
				k.einzahlen(zinsen);
				System.out
						.printf("Neuer Kontostand %6.2f%n", k.getKontoStand());
			} else
				System.out.println("Kein Guthaben!");
			break;
		}
		default:
			break;
		}
	}
	public static void anzeigenz() {
		System.out.printf("Guthabenzins ist %6.2f%%%n", k.getZins());
	}
	public static void anzeigen() {
		System.out.printf("Auf dem Konto %d sind: %10.2f€%n", k
				.getKontoNummer(), k.getKontoStand());
	}
	public static int gibGanzeZahl(int unterGrenze, int oberGrenze) {
		// Liefert ganze Zahl von unterGrenze bis oberGrenze zurück
		Scanner s = new Scanner(System.in);
		// Wegen der Schleifenabbruchbedingung erhält i einen ganzzahligen Wert;
		// aber
		// außerhab des erlaubten Bereiches
		int i = unterGrenze - 1;
		do {
			System.out.printf("Bitte eine "
					+ "ganze Zahl eingeben von %d bis %d%n", unterGrenze,
					oberGrenze);
			if (s.hasNextInt())
				i = s.nextInt();
			else
				s.nextLine();
		} while ((i < unterGrenze) || (i > oberGrenze));
		return i;
	}
	public static double gibGleitZahl() {
		Scanner s = new Scanner(System.in);
		// Wegen der Schleifenabbruchbedingung erhält i einen ganzzahligen Wert;
		// aber
		// außerhab des erlaubten Bereiches
		double zahl = 0;
		boolean ok = false;
		do {
			System.out.println("Bitte eine Zahl eingeben ");
			if (s.hasNextDouble()) {
				zahl = s.nextDouble();
				ok = true;
			} else
				s.nextLine();
		} while (!ok);
		return zahl;
	}
}
Ausgabe:
Guthabenzins ist 2,50%
Auf dem Konto 4711 sind: 100,00€
 
Was wird gewünscht?
 
[1] Einzahlen
[2] Auszahlen
[3] Kontostand
[4] 2,50% Guthabenzinsen berechnen und gutschreiben
[0] Ende
Bitte eine ganze Zahl eingeben von 0 bis 4
1
Wieviel € einzahlen?
Bitte eine Zahl eingeben
2900
 
[1] Einzahlen
[2] Auszahlen
[3] Kontostand
[4] 2,50% Guthabenzinsen berechnen und gutschreiben
[0] Ende
Bitte eine ganze Zahl eingeben von 0 bis 4
4
Seit wie viel Tagen haben Sie das Guthaben 3000,00€?
Bitte eine ganze Zahl eingeben von 0 bis 365
79
Als Zinsen erhalten Sie 16,23€
Neuer Kontostand 3016,23
 
[1] Einzahlen
[2] Auszahlen
[3] Kontostand
[4] 2,50% Guthabenzinsen berechnen und gutschreiben
[0] Ende
Bitte eine ganze Zahl eingeben von 0 bis 4
2
Wieviel € auszahlen?
Bitte eine Zahl eingeben
3000
Höchstens 2000€ vom Sparbuch!
 
[1] Einzahlen
[2] Auszahlen
[3] Kontostand
[4] 2,50% Guthabenzinsen berechnen und gutschreiben
[0] Ende
Bitte eine ganze Zahl eingeben von 0 bis 4
2
Wieviel € auszahlen?
Bitte eine Zahl eingeben
2000
 
[1] Einzahlen
[2] Auszahlen
[3] Kontostand
[4] 2,50% Guthabenzinsen berechnen und gutschreiben
[0] Ende
Bitte eine ganze Zahl eingeben von 0 bis 4
2
Wieviel € auszahlen?
Bitte eine Zahl eingeben
1020
Betrag nicht erlaubt
 
[1] Einzahlen
[2] Auszahlen
[3] Kontostand
[4] 2,50% Guthabenzinsen berechnen und gutschreiben
[0] Ende
Bitte eine ganze Zahl eingeben von 0 bis 4
3
Auf dem Konto 4711 sind: 1016,23€
 
[1] Einzahlen
[2] Auszahlen
[3] Kontostand
[4] 2,50% Guthabenzinsen berechnen und gutschreiben
[0] Ende
Bitte eine ganze Zahl eingeben von 0 bis 4
2
Wieviel € auszahlen?
Bitte eine Zahl eingeben
1016,23
Der Kontostand wäre 0,00€ und muss wenigstens 1€ sein
1,00€ werden einbezahlt
Da die Methode Auszahlen der Basisklasse das Räumen des Kontos bis auf 0€ erlaubt, muss in der Klasse
Sparkonto nachgebessert und der Kontostand wenigstens auf 1€ gebracht werden; vgl. oben.

zum Anfang der Seite    Begriffe Suchen

Ergänzungen und Anregungen bitte an Claus Schmitt
 

Zurück zur Startseite Informatik / Rheinland-Pfalz Startseite Informatik-Rheinland-Pfalz
Impressum · Datenschutz