Zum Forum springen
Benachrichtigungen
Alles löschen

[Geschlossen] Java: Kontoführung

12 Beiträge
7 Benutzer
0 Reactions
1,405 Ansichten
Dauser
Beigetreten: 19.03.2007
Oldschool Grinder

Hi,
habe hier eine Übungsaufgabe und weiß überhaupt nicht wie ich die anpacken soll. Ich lese mir die ganze Zeit die Vorlesungsscripte durchm komme aber auf keinen grünen Zweig.

hier die Aufgabe:

Aufgabe 13: Kontoführung (60 Punkte)
Implementieren Sie folgende Klassen in einem Package banking mit den angegebenen Attributen und Methoden:

· Klasse Bank:
o Attribut kunden: Array vom Typ Kunde
o Attribut konten: Array vom Typ Konto
o Attribut name: Typ String
o Attribut blz: Typ int
o Methode: Kunde legeNeuenKundenAn(String name, String vorname)
Erzeugt ein neues Kunde-Objekt mit dem übergebenen Namen, legt es im Array kunden ab und gibt
anschließend den neuen Kunden zurück.
o Methode Konto erstelleNeuesKonto(Kunde kunde)
Erzeugt ein neues Konto-Objekt für den übergebenen Kunden als Kontoinhaber, legt das Konto im Array
konten ab und gibt das neue Konto zurück.
o Klassenattribut naechsteKundenNummer: Typ int
Dieses Klassenattribut dient als Zähler für die Kunden, die mittels der Methode
legeNeuenKundenAn() erzeugt werden, um eine eindeutige Kundennummer vergeben zu
können. Initialer Wert: 1.
o Klassenattribut naechsteKontoNummer: Typ int
Analog zu vorigem Attribut, jedoch für Konten anstatt Kunden.

· Klasse Konto:
o Attribut inhaber: Typ Kunde
o Attribut bank: Typ Bank
o Attribut kontonummer: Typ int
o Attribut kontostand: Typ double
o Attribut transaktionen: Array vom Typ Transaktion
o Methode: void zahleEin(Einzahlung einzahlung)
Nimmt die übergebene Einzahlung entgegen, verändert den Kontostand entsprechend und speichert
die Transaktion im Array der Transaktionen an der ersten unbenutzten Stelle.
o Methode: Auszahlung zahleAus(double betrag)
Sofern das Konto über ausreichend Deckung verfügt, wird die Auszahlung mit dem gewünschten Betrag
ausgeführt, andernfalls über den entsprechend geringeren Betrag. Erzeugt wird außerdem ein
Auszahlung-Objekt (über den tatsächlich ausgezahlten Betrag), in den Transaktionen gespeichert
und zurückgegeben. Ist das Konto leer, bleiben die Transaktionen unverändert und die Methode gibt
null zurück.
o Methode: boolean ueberweise(Ueberweisung ueberweisung)
Sofern das Konto über ausreichend Deckung verfügt, wird die übergebene Überweisung ausgeführt, das
Ueberweisung-Objekt in den Transaktionen gespeichert und true zurückgeliefert. Andernfalls wird
die Überweisung nicht ausgeführt und false zurückgeliefert. (Hinweis: Die Überweisung soll nicht in
den Transaktionen des Empfängers auftauchen.)
o Methode: String generiereKontoAuszug()
Erzeugt einen String mit einer textuellen Repräsentation der letzten 5 Transaktionen. Für jede
Transaktion sollen das Datum und der Wert in einer eigenen Zeile aufgenommen werden.

· Klasse Kunde:
o Attribut name: Typ String
o Attribut vorname: Typ String
o Attribut kundenNummer: Typ int
o Attribut strasse: Typ String
o Attribut ort: Typ String
o Attribut plz: Typ int
· Abstrakte Klasse Transaktion:
o Attribut wert: Typ double
o Attribut datum: Typ String
· Klasse Einzahlung, abgeleitet von Transaktion:
o Attribut einzahlerName: Typ String
· Klasse Auszahlung, abgeleitet von Transaktion.
· Klasse Ueberweisung, abgeleitet von Transaktion:
o Attribut empfaenger: Typ Konto
o Attribut zweck: Typ String

Erzeugen Sie für jede Klasse außerdem einen Konstruktor, der die unterstrichenen Attribute initialisiert, Getter-
Methoden für alle Membervariablen und Setter-Methoden für die nicht unterstrichenen. Arrays besitzen eine initiale
Größe von 5 und werden dynamisch auf das doppelte ihrer aktuellen Größe erweitert, wenn kein Platz mehr im Array
vorhanden ist. Neue Elemente werden an der ersten unbenutzten Position im Array gespeichert.
Deklarieren Sie alle Membervariablen als private, alle Methoden als public.
Definieren Sie eine main-Methode in der Klasse Bank, die 3 Kunden und Konten bei 2 Banken erzeugt. Führen Sie 2
Transaktionen jeder Art durch.

Hinweise:
1. Besitzt der Konstruktor der Oberklasse Parameter, so muss dieser explizit mittels super(…) und passenden
Argumenten aufgerufen werden.
2. Um einen String zu erhalten, der das aktuelle Datum beinhaltet, können Sie folgenden Ausdruck benutzen:
String datum = java.text.DateFormat.getDateInstance().format(new Date());

Ich habe erstmal alle Klassen erstellt mit den dazugehörigen Attributen.
Was ist damit gemeint: Attribut kunden: Array vom Typ Kunde ?
Ich verstehe das so, dass kunden ein array ist, indem alle neuen Kunden abgelegt werden. Wie erzeuge ich das array? ich habe jetzt das dastehn: "private Kunde[] kunden;" ist das richtig?
Dann habe ich mir von Eclipse jeweils die Konstruktoren zu den Klassen erstellen lassen (geht das? bzw. ist das immer richtig?)
Nun versuche ich die Klassen zu schreiben und hänge bei der ersten legeNeuenKundenAn. Ich soll ja das Array "kunden" erstmal mit der Göße 5 erstellen. wie mache ich das? Ich glaube es hängt bhei mir beim Attribut "kunden" (siehe oben).

Ich erwarte/will keine lösung der Aufgabe, sondern ein paar Tipps und Antworten auf meine Fragen.
Dankeschön =)


11 Antworten
paIIe
Beigetreten: 02.02.2006
Oldschool Grinder

ansich steht ja die gesamte lösung der Aufgabe schon in der Beschreibung. Du musst halt wie du schon festgestellt hast, nur noch die methoden ausformulieren.

als kleiner hinweis zu den arrays:

mit dem "Array vom Typ Kunde" ist gemeint das du ein Array anlegst in dem Objekte vom Typ Kunden gespeichert werden, also quasi schon so wie du es gesagt hast.
ein neues Array erzeugst du über

Kunde kunde[] = new Kunde[5];

damit erstellst du ein Array namens kunde in dem du fünf Objekte vom Typ Kunde (welches du ja im späteren Verlauf noch anlegen sollst speichern kannst und dann über den index i auf die elemente zugreifen kannst.
Bedenke dabei das bei einem Array die Nummerrierung von 0 bis i - 1 geht, du also kunde[0] bis kunde[4] hast auf die du zugreifen kannst.

weitere grundlagen zum thema arrays findest du ganz einfach unter google --> java + array
oder einfach mal hier schauen.

hoffe das hilft dir erstmal ein wenig weiter


sortho
Beigetreten: 17.02.2006
Oldschool Grinder

Schreib doch mal Deine drei Klassen. Und dann poste die mal - dann schau ich mir das mal an. Wenn Du das Gerüst hast, dann werden Deine genauen Probleme sichtbar. Die Klassen mit den Attributen und den Methodenrümpfen sollte ja kein Problem sein, oder?


Dauser Themenstarter
Dauser
Beigetreten: 19.03.2007
Oldschool Grinder
Ecsmo
Beigetreten: 23.04.2007
Oldschool Grinder

Ich hab jetzt keine Lust alles durchzuschauen und mit deiner Aufgabe zu vergleichen aber was mir auf Anhieb aufgefallen ist:

Attribute werden immer mit "private" deklariert. Das fehlt bei dir in jeder Klasse.


Dauser Themenstarter
Dauser
Beigetreten: 19.03.2007
Oldschool Grinder

wieso immer private?
Wenn ich in Transaktion die Variablen private mache, dann sind sie ja nicht mehr sichtbar, wenn ich in Konto (zahle ein) darauf zugreifen kann, oder?


Ecsmo
Beigetreten: 23.04.2007
Oldschool Grinder

Du kommst doch immer über die Getter- und Setter-Methoden ran!


cruz
Beigetreten: 17.12.2006
PokerStrategist

// int guthaben ist der Übergabeparameter
public void setGuthaben (int guthaben)
{
// this bezieht sich auf die mit private deklarierte Variable
this.guthaben = guthaben;
}

// int ist Rückgabeparamater
public int getGuthaben()
{
//hier könnte man auch das this weglassen
return this.guthaben;
}

wenn du öfters sone Aufgaben erledigen musst würde ich mir allerdings mal n Java-Grundlagen-Buch zulegen


Mit private kapselst du deine Instanzvariablen. Wird dir momentan überflüssig vorkommen, wenn dein Programm jedoch wächst, ist es sinnvoll nur die Klasse selbst die Variablen modifizieren zu lassen. (über get und set Methoden)

Als Buch kann ich nur immer wieder die Heads first Reihe empfehlen. Mittlerweile auch übersetzt als Java von Kopf bis Fuß. Teuer aber jeden Euro wert.


Ecsmo
Beigetreten: 23.04.2007
Oldschool Grinder

Ich habe noch den Balzert "Grundlagen der Java-Programmierung" als PDF da. Wennde Bock hast meldest du dich einfach. holgerguenther über skype.

Für meinen recht kompetenten Prof ist das die Bibel.


sortho
Beigetreten: 17.02.2006
Oldschool Grinder

Ok gehen wir es mal durch:
Zuerst schreib Dir mal ne Testklasse mit der Main-Methode. Damit Du auch siehst das sich etwas tut und Du es ausprobieren kannst.

Klasse Bank:

Schreib Dir einen zweiten Konstruktor, z.B.:

public Bank(String name, int blz){
this.name = name;
this.blz = blz;
}

Dann hast Du es beim Test leichter, da Du nicht die 5 Konten und Kunden anlegen mußt - dafür hast Du ja die Methoden.
Dann ist die BLZ kein INT :) Die Bankleitzahl in Deutschland hat immer 8 Stellen - also lieber als String. Nur am Rande.

Set Name und BLZ fehlen noch.

Klasse Konto:
Auch hier einen kleineren Konstruktor anlegen - es gibt auch Konten die neu angelegt werden und die haben noch keine Transaktionen.#

Die Zeile funktioniert so nicht:
transaktionen[0] = Transaktion(einzahlung.wert, einzahlung.datum);
Was ist bei Dir Transaktion? Ich gehe mal davon aus das Du die Klasse Einzahlungen meinst - dann müßte das so aussehen:
transaktionen[0] = new Einzahlung(einzahlung.wert, einzahlung.datum);

allerdings hast Du dann das Problem das der Konstruktor nicht automatisch von Transaktionen genommen wird dafür mußt Du noch folgendes in Einzahlung rein schreiben (neuer Konstruktor)

public Einzahlung(double wert, String datum){
super(wert, datum);
}

Selbiges gilt natürlich auch für die Auszahlung.

Und dann ist die [0] natürlich fehl am Platz - sonst überschreibst Du jedes Mal den ersten Eintrag - auch hier bitte eine Klassenvariable benutzen und hochzählen

Wenn Du das mal so weit hast - dann melde Dich einfach noch mal mit den neuen Dateien. Hab gerade leider keine Zeit mehr :)


Original von sortho
Dann ist die BLZ kein INT :) Die Bankleitzahl in Deutschland hat immer 8 Stellen - also lieber als String. Nur am Rande.

der Wertebereich ist kein Problem weil 8 Stellen = 99.999.999 << 2^31

Führende 0en sind eher das Problem


Teilen: