needHelp86 Geschrieben 12. Januar 2010 Geschrieben 12. Januar 2010 Hallo Leute. Ich habe ein GROßES Problem..... Ich habe eine Aufgabe bekommen die ich nicht gelöst bekomme. Habe den ersten Punkt der Aufgabe gelöst aber die anderen zwei bekomme ich einfach nicht hin. Das Problem ist, ich muss das Programm bis Donnerstag abgeben. Könnt ihr mir vieleicht weiter helfen??? BITTE!!!! Aufgabe: Entwickeln Sie ein interaktives C-Programm zur Kontrolle der Vertragstreue von Lieferanten Unter Nutzung der vorhandenen Datei VERTRAG.DAT sind wahlweise anzuzeigen: 1. die Namen aller Hauptlieferanten (Vertragsmenge im Bsp. > 500) 2. alle Angaben zu Verträgen mit einem Lieferanten, vom Nutzer aus einer alphabetisch sortierten Liste aller Lieferanten zu wählen, geordnet nach Artikeln und unter Auflistung der Gesamtvertragsmenge bei Mehrfachlieferung eines Artikels, 3. die Namen aller Lieferanten bei denen bis zu einem, vom Nutzer einzugebenden Termin keine Abweichungen zwischen Vertrags- und Liefermenge auftraten. Hinweis: Die Datei VERTRAG.DAT befindet sich auf dem Server (Unterverzeichnis Aufgaben/Daten). Lesen Sie dazu auch die Datei Hinweise.doc / .pdf! Die Datei hat dabei folgende Struktur: struct Satz { char Vertragsnummer[7]; char Artikel[21]; char Lieferant[21]; short Vertragsmenge; short Liefertermin[3]; short Liefermenge; }; Und soweit bin ich bis jetzt. Und komme einfach mit Punkt 2 und 3 nicht zurecht. #include <stdio.h> struct vertrag //Einlesen der Struktur { char vertrnr[7]; char art[21]; char liiferant[21]; unsigned short vertagsmenge; unsigned short liefertermin[3]; unsigned short liefermenge; }__attribute__((packed))vertrag; int main(int argc, char *argv[]) { char Auswahl; int i; i=0; FILE*Dateiptr; char *datei_auswahl= "vertrag.dat"; printf("\n\t============\n"); printf("\t=== Aufgabe ===\n"); printf("\t=============\n\n"); if (!(Dateiptr = fopen(datei_auswahl,"rb"))) { printf("Beim oeffnen der Datei %s ist ein Fehler aufgetreten.\n", datei_auswahl); getch(); } else { printf("Menue:\n"); printf("\tNamen aller Hauptlieferanten: (1)\n"); printf("\tBeenden: (4)\n"); printf("\tAuswahl:"); } putch(Auswahl = getch()); switch (atoi(&Auswahl)) { case 1:printf("\n\n\n\tName aller Hauptlieferanten:\n\n"); while (fread(&vertrag, sizeof(vertrag),1, Dateiptr) == 1) { if (vertrag.vertagsmenge>500) { i++; printf("\t\t- %s\n",vertrag.liiferant); } } break; case 4:printf("\n\n\n\tBeliebige Taste druecken zum beenden!"); break; } getch(); return(0); }; Zitieren
Klotzkopp Geschrieben 12. Januar 2010 Geschrieben 12. Januar 2010 Aufgabe 2 und 3 wirst du nicht "im Vorbeigehen", also während du die Datei durchgehst, erledigen können. Du musst dir eine geeignete Datenstruktur überlegen, die du im Arbeitsspeicher vorhältst. Für Aufgabe 2 wäre das natürlich zunächst mal eine Liste der Lieferanten, die du dann alphabetisch sortierst. Damit solltest du anfangen. Und nebenbei: "Brauche dringend HILFE!!!!" ist ein ausgesprochen schlechter Threadtitel. Hilfe braucht so ziemlich jeder, der hier einen Thread aufmacht, und die GROSSSCHREIBUNG und Satzzeicheninflation hat auch keinen Mehrwert, sondern schreckt nur potenzielle Helfer ab. Zitieren
needHelp86 Geschrieben 12. Januar 2010 Autor Geschrieben 12. Januar 2010 Danke @klotzkopp Naja die Großschreibung drückt nur aus wie Aussichtslos meine Lage ist. Mein Problem ist ich weiß nicht wie ich das in einen Quellcode bringe. Irgendwie fehlt mir da das KnowHow... Ich muss die Aufgabe aber bis Donnerstag abgeben sonst darf ich keine Prüfung mitschreiben. Ehrlich gesagt bin ich sehr verzweifelt . Hab hier mal einen Link dort ist beispielsweise die VERTRAG.DAT enthalten. Weiß nicht ob es euch was hilft. Aber ich bin am sterben hier......... RapidShare: 1-CLICK Web hosting - Easy Filehosting Zitieren
Klotzkopp Geschrieben 12. Januar 2010 Geschrieben 12. Januar 2010 Du hast doch von mir einen Hinweis zur weiteren Vorgehensweise bekommen. Setz das bitte mal um. Zitieren
needHelp86 Geschrieben 12. Januar 2010 Autor Geschrieben 12. Januar 2010 Hi Klotzkopp. Ich würde das ja sehr gerne Umsetzten aber ich hab keine Ahnung wie.... Das ist mein Problem. Mir fehlt da irgendwie das wissen für. Zitieren
Klotzkopp Geschrieben 12. Januar 2010 Geschrieben 12. Januar 2010 Hi Klotzkopp. Ich würde das ja sehr gerne Umsetzten aber ich hab keine Ahnung wie.... Das ist mein Problem. Mir fehlt da irgendwie das wissen für. Und warum fehlt irgendwie das Wissen? Dein Auftritt hier als völlig Ahnungsloser passt so gar nicht zum Schwierigkeitsgrad der Aufgabe, schon gar nicht, wenn das Voraussetzung für eine Prüfung sein soll. Und was möchtest du jetzt von uns? Die Aufgabe erfordert Kenntnisse in dynamischen Datenstrukturen, Dateioperationen, Sortieren und dem Umgang mit Datumsangaben. Das ist nichts, was man dir hier bis Donnerstag beibringen könnte, zumal wir offenbar bei Adam und Eva anfangen müssten. Wenn du so ahnungslos bist, wie du hier vorgibst, ist diese Lösung für Teil 1 (die übrigens fehlerhaft ist) vermutlich auch nicht von dir selbst geschrieben. Wir können dir bei konkreten Einzelproblemen helfen, aber wenn du dich stur stellst und einfach sagst: "Ich kann das nicht", können wir auch nichts machen. Du erwartest hoffentlich nicht, dass hier jemand deine Hausaufgaben macht. Zitieren
konsti4u Geschrieben 12. Januar 2010 Geschrieben 12. Januar 2010 (bearbeitet) Zur 1: If an error occurs, or the end-of- file is reached, the return value is a short object count (or zero). The function fread() does not distinguish between end-of-file and error; callers must use feof(3) and ferror(3) to determine which occurred. The function fwrite() returns a value less than nitems only if a write error has occurred. Ich würds so machen: case 1:printf("\n\n\n\tName aller Hauptlieferanten:\n\n"); while (fread(&vertrag, sizeof(vertrag),1, Dateiptr) != 0) { printf("\t\t- %s\n",vertrag.liiferant); } if (feof(Dateiptr) .... break; Zur 2: Ich verstehe ehrlichgesagt die Aufgabenstellung nicht ganz, aber um eine Liste zu sortieren speicherst du alle Strings in einem String-Array (char **) und übergibst dieses an die Methode qsort. Dann haste es sortiert und kannst damit weiterarbeiten Zur 3: Termin einlesen, durch alle Aufträge durchgehen (wie 1) und bei allen Objekten, bei denen das Datum passt, schauen ob Vertrags- und Liefermenge übereinstimmen, wenn nein, ausgeben, das sollte recht einfach im Gegensatz zur 2 sein //Ach ja, es heißt übrigens Lieferant, nicht Liiferant Bearbeitet 12. Januar 2010 von konsti4u Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.