Strukturen in C Aufgabe

kika1116

Grünschnabel
Hallo, können sie mir bitte bei folgenden Aufgaben helfen:
A) Für die Realisierung eines Workflow-Management-Tools soll eine Datenstruktur für
die eingehenden Aufträge (Bestellungen) einer Weinhandlung in der Programmiersprache
C entworfen werden. Eine Bestellung muss die folgenden Daten
beinhalten:
- Auftragsnummer
- Bestelldatum mit Jahr, Monat, Tag (definieren Sie dazu einen neuen
Strukturtyp Datum)
- Lieferdatum (gleicher Typ wie Bestelldatum)
- Kundennummer
- Kundenkennung (max. 40 Zeichen)
- Verkaeufername (maximal 12 Zeichen)
- Liste für maximal 100 Zeiger auf Bestellposition
Eine Bestellposition soll folgende Komponenten besitzen:
- Weinsorte (maximal 30 Zeichen)
- Jahrgang
- Anzahl der Flaschen
- Preis einer Flasche in € und Cent


Bis jetzt habe ich sowas gemacht:

C:
struct datum {
    int jahr;
    int monat;
    int tag;
};
struct bestellung{
    int auftragsnummer;
    int kundennummer;
    int kundenkennung[40];
    char verkaeufername[12];
};
struct bestellposition{
    int liste[100];
    int weinsorte[30];
    int jahrgang;
    int anzahlflaschen;
    float preis;
    struct datum bestelldatum,lieferdatum;
};

B) Geben Sie die C-Funktion neudef() an, welche die Kundenkennung und das
Lieferdatum einer Bestellung neu definieren. Als Parameter erhält diese Funktion
einen Zeiger auf die Bestellung, die zu ändern ist. Weiterhin einen Zeiger auf die
neue Kundenkennung und einen Zeiger auf das neue Lieferdatum.


Bei Punkt B) kommen meine Probleme, bin nicht sehr sicher wie ich das genau machen soll, habe bis jetzt das gemacht, ist aber nicht sehr vollständig und richtig wahrscheinlich.

C:
int neudef(struct bestellung * ptr_bestellung, bestellung * kundenkennung, datum * lieferdatum){
ptr_bestellung[40]; 
lieferdatum; 
}
c) Geben Sie die C-Funktion addbest() an, welche eine weitere Bestellposition in
eine Bestellung einträgt.
(Hinweis für die Position, an die die neue Bestellungposition einzutragen ist: Die Liste
enthält nach der letzten Bestellposition einen NULL-Pointer.)
Die Funktion erhält einen Zeiger auf die Bestellung und einen Zeiger auf die neue
Bestellposition als Parameter.
Nach dem Eintrag der Bestellposition wird die Bestellung wieder "ordnungsgemäß"
abgeschlossen.



Bei Punkt C) habe ich nicht sehr viele Ideen. Ich gehe in diese Richtung etwas solches in meinem Funktion zu schreiben:
C:
struct bestellung* neue_bestellposition = malloc(sizeof(struct bestellung));

Werde mich sehr freuen auf jede Hilfe, lerne im Moment für eine Prüfung und versuche es möglicherweise alles zu klären.
 
Zuletzt bearbeitet:

cwriter

Erfahrenes Mitglied
können sie mir bitte bei folgenden Aufgaben helfen
Wer stellt solche Aufgaben? Stichwort Normalisierung.
Aber dafür kannst du ja nichts.
- Liste für maximal 100 Zeiger auf Bestellposition
Fehlt hier. Was aber eine Liste für maximal 100 Elemente sein soll, weiss ich auch nicht. (Es könnte ein Array gemeint sein, aber das macht auch wenig Sinn).
habe bis jetzt das gemacht, ist aber nicht sehr vollständig und richtig wahrscheinlich.
Naja, der 2. Parameter ist falsch, wenn es eine Kundenkennung sein soll, die dazu in der Struktur eher char[40] als int[40] sein sollte.
Beim 3. Parameter fehlt der struct-Spezifizierer.

Bei Punkt C) habe ich nicht sehr viele Ideen. Ich gehe in diese Richtung etwas solches in meinem Funktion zu schreiben:
Das ist ein guter Ansatz. Im Prinzip sollte es eine (einfach verkettete) Liste werden. Wie diese aussieht, sollte eigentlich klar sein, aber zur Vollständigkeit:
C:
struct listel
{
    struct bestellposition* val;
    struct listel* next;
};
Durch die Verkettung von listel-Objekten kann eine Liste gebaut werden. Wenn next == NULL gilt, ist die Liste zu Ende. Mehr dazu findet sich leicht durch Google.

Es stellt sich mir die Frage, was dir denn unklar ist. Weisst du nicht, wie man an solche Probleme herangeht oder ist etwas an der Nomenklatur unklar? Oder ist es etwas ganz anderes?
Je stärker du deine Fragen eingrenzt, desto einfacher ist es für uns, die Verständnisprobleme zu finden. Denn wenn wir einfach die Aufgabe lösen, statt spezifisch auf deine Probleme einzugehen, ist das alles nicht besser als eine Musterlösung.
Nutze dieses Forum effizient. Selbst viele komplexe Fragen sind oft einfacher zu beantworten als eine vage Frage. Und je weniger Zeit wir mit dem Verständnis der Frage zubringen müssen, desto mehr Zeit können wir mit der Beantwortung verbringen,

Gruss
cwriter
 

kika1116

Grünschnabel
Danke für die Hilfe. Ich weiss nicht, wie ich besser meine Frage formulieren soll. Es war mir nicht sehr klar, ob ich bei Punkt B) und C) auf den richtigen Weg war. Bei Punkt C) habe ich es jetzt verstanden. Aber bei Punkt B) ist mir noch nicht sehr klar was hier gemeint ist:

Beim 3. Parameter fehlt der struct-Spezifizierer.

Bedeutet das ich einen typedef-Spezifizierer benutzen soll oder ist was anderes gemeint?
 

sheel

I love Asm
Hi

cwriter meint, dass "datum * lieferdatum" eigentlich "struct datum * lieferdatum" sein sollte - je nach Compiler und Einstellungen wird es zwar auch ohne akzeptiert, aber wirklich "echtes" C ist es derzeit nicht.