Brauche dringend HILFE!!!
-
Und du kommst jetzt erst auf die Idee, was zu machen (bzw. es andere machen zu lassen)? Und hast vermutlich noch keinen Ansatz produziert?
-
Naja tut mir ja leid aber ich finde einfach keinen richtigen Ansatz. Ich will nicht das es jemand für mich macht. Aber ich brauch einen Ansatz.
-
SlotRacer schrieb:
Aber ich brauch einen Ansatz.
dann lies schieb erstmal die datei in die structs rein (mit fopen, fread, fscanf, usw.) schau hier: http://www.cppreference.com/wiki/c/io/fopen
-
Ich muss bis Freitag eine Aufgabe abgeben
Die du uns noch nicht verraten hast. Nein, ich lade die rar-Datei nicht herunter und entpacke sie. Ist mir einfach zu aufwendig.
-
Ich muss bis Freitag eine Aufgabe abgeben und ich habe keine Idee wie ich das realisieren soll.
eine woche sollte doch locker reichen
EAN: 512621
entweder stimmt die bezeichnung nicht oder die nummer? du solltest mal abklären was das soll...
ich würd dir ja dabei helfen, nur schauts dann bei der prüfung nicht rosig aus...
also zeig mal was du schon hast dann können wir ja mal schauen wie weit wir kommen;)btw. ich kann die datei nicht runterladen bin kein premium member und es sind wie so häufig keine free slots frei...
also ich rate einfach mal du hast eine *.DAT datei die du in ein prog. mit der structur vertrag einlesen sollst, kann das sein?
lg lolo
-
also ich bin ja kein unmensch, daher hab ich das mal runtergeladen und poste mal was hier zu machen ist
Aufgabe.txt schrieb:
VERTRAG.C
Entwickeln Sie ein interaktives C-Programm zur
Kontrolle der Vertragstreue von Lieferanten
Unter Nutzung der vorhandenen Datei VERTRAG.DAT sind wahlweise anzuzeigen:
- die Namen aller Hauptlieferanten (Vertragsmenge im Bsp. > 500)
- 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 einesArtikels,
- 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;
};axo ja also in der datei sind einfach die plain structs reingeschrieben...
-
^^irgendwann klickt noch einer aus versehen auf die .exe. das will er doch nur *fg*
-
@noobLolo
Ja genau so is es... Bin grad dabei ich poste dann mal was ich hab. Also ich bin in C eigendlich immer ganz gut mitgekommen, aber das die Aufgabe so (für mich) kompliziert ist hab ich nicht gedacht.
Ich dank euch schonmal das ihr euch überhaupt damnit beschäftigt.
-
@fricky;
^^ ja ich habs auch schon probiert, aber leider mag mein system keine *.exe daher bin ich immun gegen solche art von angriffen
-
@;fricky
nein das will ich nicht...Muss ja auch keiner machen. Und ich hab alles andere im Sinn als irgendwelche bösen absichten. Wie ich oben schon mal gepostet hab ist diese exe nur zum öffnen der .dat. aber da ich den Inhalt oben schon gepostet hab, brauch auch niemand die exe öffnen....
Sry dafür
-
@SlotRacer
den inhalt der VERTRAGS.DAT welchen du gepostet hast stimmt nicht...
so schauts bei mir aus, natürlich mir vi el fantasie...512621@Schokorosinen@BÜO<9e> @@Waldbaur@<8c>@P0L^^L@@@@0,AS@D@[@È@512622@Ritter-Rum@en@BÜ^O<9e> @@Ritter@r@<8c>@P0L^L@@@@0XAC@E@[@"A512623@Ritter-Sport@@BÜO<9e>
....
-
Versteh ich nicht! Was stimmt da nicht? Hab die VERTRAG.DAT so bekommen und ich soll sie so benutzen. Hab keine Ahnung was du genau meinst.
-
SlotRacer schrieb:
Inhalt der VERTRAG.DAT
Inhalt:
EAN: 512621
Beteichnung: Schokorosinen
Lieferant: Waldbaur
Bestand: 300
Liefermenge: 200EAN: 512622
Beteichnung: Ritter-Rum
Lieferant: Ritter
Bestand: 280
Liefermenge: 290...
es schaut aber so aus wie in meinem letzten post, ich war schon drauf und dran das teil zeilenweise inzulesen...
hab das gerade gefunden, das hatte nwp2 mal in nem anderen post gepostet
nwp2 schrieb:
char *readFile(const char *filename){ //code heavily changed from http://www.cplusplus.com/reference/clibrary/cstdio/fread/ FILE *file = fopen(filename, "rb"); if (!file) return 0; //get file size fseek(file, 0, SEEK_END); size_t filesize = ftell(file); //files >4GB? rewind(file); //get memory to contain the whole file char *buffer = (char*)malloc(filesize+1); if (!buffer) return 0; //read file if (fread(buffer, 1, filesize+1, file)!=filesize){ free(buffer); fclose(file); return 0; } //clean up fclose(file); buffer[filesize] = '\0'; return buffer; }
evtl. kannst das ja brauchen
-
Also bin jetzt bis hierhin gekommen:
#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=1; FILE*Dateiptr; char *datei_auswahl= "vertrag.dat"; if (!(Dateiptr = fopen(datei_auswahl,"rb"))) { printf("Beim oeffnen der Datei %s ist ein Fehler aufgetreten.\n", datei_auswahl); getch(); } else while (fread(&vertrag, sizeof(vertrag),1, Dateiptr) == 1) { printf("Dateinummer: %d\n",i++); printf("\nEAN: \t\t%s",vertrag.vertrnr); printf("\nBezeichnung: \t%s",vertrag.art); printf("\nLieferant: \t%s",vertrag.liiferant); printf("\nBestand: \t%d",vertrag.vertagsmenge); printf("\nLiefermenge: \t%d\n\n",vertrag.liefermenge); getch(); } getch(); return(0); };
Jetzt muss ich die folgenden Aufgaben lösen:
- die Namen aller Hauptlieferanten (Vertragsmenge im Bsp. > 500)
- 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,
- die Namen aller Lieferanten bei denen bis zu einem, vom Nutzer einzugebenden
Termin keine Abweichungen zwischen Vertrags- und Liefermenge auftraten.
-
was soll denn das denke das muß raus?
__attribute__((packed))
int main(void){ ... i=1; //statt i=0; ... struct vertrag dataCache[1024] = {}; ... while (fread(&dataCache[i], sizeof(vertrag),1, Dateiptr) == 1) { printf("Dateinummer: %d\n",i); printf("\nEAN: \t\t%s",dataCache[i].vertrnr); printf("\nBezeichnung: \t%s",dataCache[i].art); printf("\nLieferant: \t%s",dataCache[i].liiferant); printf("\nBestand: \t%d",dataCache[i].vertagsmenge); printf("\nLiefermenge: \t%d\n\n",dataCache[i].liefermenge); getch();//hm wieso machst am besten alles raus?? i++; } ... }
dann ist alles schon mal im array
-
Das packed attribut sorgt IIRC dafür, dass keine leeren füllbytes in dem Struct eingefügt werden.
-
grundsätzlich haste 2 möglichkeiten: (1) alle structs in den speicher einlesen. (2) direkt mit der datei arbeiten. ich würde 2. nehmen, aber da musste beim sortieren mehr tricksen (eine liste von offsets für fseek müsste sortiert werden). für'n anfänger ist 1. wohl einfacher zu machen. lade dir erstmal die ganze datei in ein array (du weisst ja wie gross sie ist, malloc brauchste also nicht *fg*) und dann versuch mal darin zu navigieren.
etwa so:struct vertrag alles[...]; struct vetrag *der_vertrag; ... FILE *f = fopen (filename, "rb"); if (f) { fread (alles, 1, dateigroesse, f); } ... der_vertrag = alles; // zeigt auf 1. vertrag ... der_vertrag++; // vertrag 2 ... der_vertrag++; // vertrag 3 ... // usw.
^^wichtig ist noch, dass du das structs-array mit den gleichen settings einliest, mit denen es gespeichert wurde (packed oder nicht usw, am besten mit dem gleichen compiler)
-
Hallöchen. Ich habs jetzt so gemacht.
#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=1; FILE*Dateiptr; char *datei_auswahl= "vertrag.dat"; printf("\n\t===============================\n"); printf("\t=== Weihnachtsaufgabe Nr.44 ===\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) { printf("\tName: %s\n\t",vertrag.liiferant); } } break; } getch(); return(0); };
Wie kann ich das am besten machen das der Lieferant nur einmal austaucht auch wenn er mehrere Artikel mit einer menge >500 hat??? Jetzt taucht ein Lieferant mehrfach auf.
Desweiteren hab ich jetzt Probleme mit den anderern beiden aufgabenstellungen. Da hab gar keine idee wie ich das machen soll.
-
2 möglichkeiten entweder du merkst dir welchen du schon hattest oder du sortierst nach namen und menge und dann schaust ob der name = nächster name ist oder so...
-
Okay danke ich gaub das ist das kleinste übel. Mir fällt allerdings keine Lösung für die beiden anderen Aufgabenstellungen ein. Kann mir jemand helfen?
BITTE!!!