Hilfe ich suche Jemanden der mir einige Programme programmiert. Dringend! Jeder der Ahnung hat und einer Verzweifelten Frau helfen will und kann bitte melden. ???
Kat Gast |
Kat Gast |
Hilfe ich suche Jemanden der mir einige Programme programmiert. Dringend! Jeder der Ahnung hat und einer Verzweifelten Frau helfen will und kann bitte melden. ???
Also es geht um alles Mögliche. Ich muss ne Prüfung schreiben will aber er einmal Grundlagen haben um überhaupt einen Durchblick zu bekommen und brauch dringend Hilfe.
Ich habe schon einiges Selbst gemacht komme aber irgendwie nicht weiter und weiß auch nicht ob das stimmt was ich da gemacht habe.
Wenn du mir helfen willst schicke ich dir mal eine Beispielsaufgabe zu.
Japp, die Sprachen würden mich auch interessieren.
Also wenn's nur Einsteigeraufgaben sind (die demzufolge nicht lange dauern - denn Zeit is bei mir grad Mangelware) und ich die Sprache(n) kann, dann kann man schon drüber reden
greez
JoSsiF
Thema: - has_a-Relation (Komposition, Aggregation)
====== - geschachtelte Klassen
- Forward Declaration von Klassen
Aufgabe:
========
Realisieren Sie ein objektorientiertes System, das ein Tankstellennetz,
bestehend aus Zentrale und Filialen, simuliert.
1. Ein Filialenobjekt besitzt folgende Attribute: Anschrift, Name,
Literpreis, Umsatz, Tankvolumen, Tankfüllstand und Kundenanzahl;
Das Attribut Anschrift ist vom Typ Adresse, der als geschachtelte Klasse
zu realisieren ist.
Folgende Methoden stellt eine Filiale bereit:
- tanken von x Litern Kraftstoff mit Rückgabe des Preises
- Filialdaten liefern (Anschrift, Umsatz ,Kundenanzahl ...)
als Rückgabewert;
- betanken der Filiale durch Tankwagen der Zentrale (Tank auffüllen)
- Literpreis festlegen
Filialdaten ist ebenfalls als geschachtelte Klasse zu realisieren.
2. Ein Tankstellennetz besteht aus maximal 20 Filialobjekten und einer
Zentrale. Eine Zentrale hat als Attribute die aktuelle Anzahl der
Filialobjekte und deren Referenzen sowie den Literpreis.
Folgende Methoden stellt die Zentrale bereit:
// neue Filiale erzeugen
Filiale* baue_Filiale(Filiale::Adresse anschrift, string name);
// Tankwagen betankt eine Filiale; diese Methode wird von einer
// Filiale aktiviert, wenn ihr Tank leer ist
void tankwagen(Filiale *f, int liter);
// diese Methode holt die Daten aller Filialen ein und gibt dann
// eine Statistik über den gesamten Umsatz, verkaufte Liter ... aus.
void statistik();
// Diese Methode wird für eine Zentrale aktiviert und setzt einen
// marktkonformer Preis dann in all ihren Filialen
void setzePreis(float preis);
Weitere Zustände oder Methoden (Konstruktoren..!) sind gegebenenfalls zu
ergänzen.
3. Es sind folgende Anwendungsfälle zu verwirklichen:
- Einrichten von einer Zentrale mit 5 Tankstellen
- tanken bei den Filialen mit Anzeige der getankten Liter und des
Preises
- neuen Literpreis festsetzen
- Umsatzstatistik erstellen
- Filiale fordert den Tankwagen von der Zentrale an, um den
Tank aufzufüllen.
4. Hinweis :
- Die Eingabedaten sind selbst zu wählen.
- Beachten und modellieren Sie die zwischen Zentrale und
Arbeitsschritte
1. Deklarieren Sie die Klassen Filiale und Zentrale.
Eine Filiale enthält einen Zeiger auf die Zentrale, der im Konstruktor
der Filiale initialisiert wird.
Die Zentrale enthält als Attribut einen Zeiger auf eine Filiale.
Um eine Filiale zu erzeugen, stellt die Klasse Zentrale eine Methode
baue_Filiale zur Verfügung. Diese Methode erzeugt ein Filial-Objekt,
speichert den Zeiger auf das Objekt in der Zeigervariable und liefert
den Zeiger als Rückgabetyp: Filiale* baue_Filiale()
2. Implementieren Sie einen Testrahmen (main-Methode), in dem zunächst
eine Zentrale erzeugt wird. Aktivieren Sie die Methode baue_Filiale,
um ein Filialobjekt zu erzeugen.
3. Erweitern Sie den Zustand von Filiale um folgende Attribute:
Tankvolumen und Tankfüllstand. Beide sind im Konstruktor auf den Wert
1000 (Liter) zu initialisieren.
Ergänzen Sie in der Filiale eine Methode tanken. Beim Aktivieren dieser
Methode wird als Parameter die gewünschte Literzahl übergeben. Als
Rückgabe liefert diese Methode den zu bezahlenden Preis (Gehen Sie von
einem Literpreis von 1.08 € aus). Die getankte Anzahl an Litern wird
vom Tankfüllstand abgezogen.
4. Erweitern Sie den Testrahmen dahingehend, dass bei der Filiale 10mal
100 Liter getankt werden.
5. Ergänzen Sie in der Klasse Zentrale die Methode Tankwagen.
Diese Methode erfordert folgende Argumente bei ihrer Aktivierung:
void Tankwagen(Filiale* f, int Tankvolumen);
Der Zeiger auf eine Filiale spezifiziert die Filiale, welche den
Tankwagen angefordert hat. Tankvolumen gibt an, wie viel Kraftstoff die
Filiale fassen kann.
Eine Filiale soll nun die zusätzliche Methode betanken bereitstellen
(Tankwagen versorgt Filiale). Diese Methode ermöglicht das Auffüllen des
Tanks bei einer Filiale. Die Menge Kraftstoff die aufgefüllt wird, ist
ein Parameter der Methode.
6. Erweitern Sie in der Klasse Filiale die Funktionalität der Methode
float tanken(int liter) dahingehend, dass bei einem Tankfüllstand
von 0 (Litern) der Tankwagen bei einer Zentrale für diese Filiale
angefordert wird.
7. Erweitern Sie die Zentrale dahingehend, das mehrere Filialen erzeugt
werden können.
8. Ergänzen Sie in der Zentrale die Methode void neuerPreis(float Preis).
Wird diese Methode aktiviert, soll für alle Filialen dieser Preis als
neuer Literpreis beim Tanken festgelegt werden (Filiale muss um das
Attribut Literpreis erweitert werden).
Alles was ich bis jetzt habe:
Main:
#include "filiale.h"
#include "zentrale.h"
#include "iostream.h"
#include "stdio.h"
int main(int argc, char* argv[]) {
Zentrale zentrale;
Filiale *f = zentrale.baue_Filiale();
float kosten = f->tanken(1000);
zentrale.setzePreis(2);
return 0;
}
//---------------------------------------------------------------------------
Filiale.cpp:
#include "filiale.h"
#include "zentrale.h"
Filiale::Filiale(Zentrale *a) {
z = a;
tankvolumen = 1000;
tankinhalt = 1000;
}
float Filiale::tanken(int liter) {
tankinhalt = tankinhalt - liter;
if (tankinhalt<=0) {
z->tankwagen(this,tankvolumen);
}
return liter*literpreis;
}
void Filiale::betanken(int menge) {
tankinhalt = tankinhalt + menge;
}
void Filiale::setzeLiterPreis(float lp) {
literpreis = lp;
}
Zentrale.cpp:
#include "filiale.h"
#include "zentrale.h"
Zentrale::Zentrale() {
anzahl = 0;
}
Filiale* Zentrale::baue_Filiale() {
Filiale *fobj = new Filiale(this);
f[anzahl] = fobj;
anzahl++;
return fobj;
}
void Zentrale::tankwagen(Filiale *fi,int menge) {
fi->betanken(menge);
}
void Zentrale::setzePreis(float lp) {
for (int i=0; i<anzahl; i++) {
Filiale *fi = f;
fi->setzeLiterPreis(lp);
}
}
#ifndef _FILIALE_H
#define _FILIALE_H
#include "zentrale.h"
class Zentrale;
class Filiale {
public:
Filiale(Zentrale *a);
float tanken(int liter);
void betanken(int menge);
void setzeLiterPreis(float lp);
private:
Zentrale *z;
int tankvolumen, tankinhalt;
float literpreis;
};
#endif
Header:
#ifndef _ZENTRALE_H
#define _ZENTRALE_H
#include "filiale.h"
class Filiale;
class Zentrale {
public:
Zentrale();
Filiale* baue_Filiale();
void tankwagen(Filiale *fi,int menge);
void setzePreis(float lp);
private:
Filiale *f[20];
int anzahl;
};
#endif
Also was mir so auffällt ist z.B., dass deine Filialen weder Namen noch Adressen haben, obwohl das oben erwähnt wird.
Ausserdem scheinst du die Thematik "Forward Deklaration von Klassen" noch nicht ganz durchschaut zu haben, denn
#include "Filiale.h"
class Filiale;
ist in der Beziehung irgendwie doppelt gemoppelt - entweder du #include'st den Text der gesamten Klasse oder du machst eine Fwd-Deklaration, aber beides ist unnötig.« Ergebniss von C++ | C/C++ Lernen » | ||