Strukturen in C
-
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 CentHier habe ich bis jetzt sowas gemacht:
#include <stdio.h>
int main(){
struct bestellung{
int auftragsnummer;
int kundennummer;
int kundenkennung[40];
char verkaeufername[12];struct datum {
int jahr;
int monat;
int tag;
} bestelldatum;struct datum
{
int tag;} lieferdatum;
struct bestellposition{
int liste[100];
int weinsorte[30];
int jahrgang;
int anzahlflaschen;
int preis[];};
};}
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
kommen meine Probleme, bin nicht sehr sicher wie ich das genau machen soll, habe bis jetzt das gemacht, ist aber nicht sehr vollständig
int neudef(struct bestellung*ptr_bestellung){
int kundenkennung;
struct lieferdatum;
int ptr_kundenkennung =&kundenkennung;
lieferdatumptr_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:
struct bestellung* newBestellposition = malloc(sizeof(struct bestellung));[code="c"][code]
-
Zu A) Da die
struct
datum zweimal benötigt wird, solltest du sie vorher deklarieren und dann in derstruct
bestellung einfach nur einfügen.
Dasselbe gilt fürstruct
bestellposition, die 100 Zeiger auf bestellung enthalten soll.Zu
Ich komme nach der Beschreibung auf drei Paramter, die der Funktion übergeben werden. Du hast nur einen.
WEnn du den Funktionskopf richtig hast, kommt der Rest auch.Du hast zwar Code-Tags probiert, Leider nicht erfolgreich. Dafür gibt es aber die Vorschau (gleich neben dem Absenden-Button)
Du kannst den Code mit der Maus markieren und dann auf den C-Button unter demklicken,
oder den Cursor an den Codeanfang positionieren, einmal auf den C-Button klicken (der bekommt dann einenund das ganze nochmal am Ende vom Code.
Den Namen newBestellposition finde ich hässlich. Bleib innherhalb eines Namens bei einer Sprache.
Das kann ruhig deutsch sein (obwohl manche nur englische Bezeichner als die wahren betrachten).
-
Okay, danke. Aber kann ich mich noch nicht richtig orientieren bei B), wie komme ich richtig auf die Lösung
int neudef(struct bestellung * ptr_bestellung, int * kundenkennung, int * lieferdatum){
int neue_kundenkennung;
kundenkennung = &neue_kundenkennung;int neue_lieferdatum;
lieferdatum = &neue_lieferdatum;}
-
Welchen Datentyp haben Datum und Kundenkennung?
Geben Sie die C-Funktion neudef() an, welche die Kundenkennung und das
Lieferdatum einer Bestellung neu definieren.Ich verstehe das so, dass du in einer bestehenden Bestellung die Werte für Lieferdatum und Kundenkennung neu setzt (überschreibst).
kika1116 schrieb:
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.Da du alle Werte als Paramter bekommst, brauchst du auch keine weiteren lokalen Variablen.
Das sind zwei Zeilen. Je eine für Datum und Kundenkennung.
-
Ist es so besser?
int neudef(struct bestellung * ptr_bestellung, bestellung * kundenkennung, datum * lieferdatum){
ptr_bestellung[40];
lieferdatum;}
-
Nein.
Wie ist denn kundenkennung in deiner
struct
deklariert?
-
Hallo kika1116,
packe deinen Code in Code-Tags, damit deine Beiträge besser lesbar sind.