Hilfe bin Anfänger !
-
ich möchte gern in ein Programm entwicklen was die Daten: Name,Nummer, Preis ,Bestand
abfragt und in eine Datei abspeichert.Ich habe mal etwas versucht aber es kommen Fehler Meldungen und ich weis nicht was ich machen soll.
Programm:
#include<stdio.h> #include<process.h> #include<string.h> struct lagerverwaltung { char Name [50]; int Nummer; double Preis; int Bestand; }; void main() { char Name [50]; int Nummer; double Preis; int Bestand; struct lagerverwaltung Artikel [100]; printf("Name des Artikels? : "); scanf("%d",&Artikeldatei[x].Name); getchar(); printf("Indifikazonsummer eingeben : "); scanf("%c",&Artikeldatei[x].Nummer); getchar(); printf("Wieviel Euro ?: "); scanf("%f",&Artikeldatei[x].Preis); getchar(); printf("Bitte Menge eingen: "); scanf("%i",&Artikeldatei[x].Bestand); getchar(); } FILE*temp; temp = foben ("C:Daten.txt","w"); fwrite (%Artikeldatei,sizeof (lagerverwaltung) ,4,temp); fclose (temp); system("pause"); }
Fehlermeldung:
error C2065: 'Artikeldatei': nichtdeklarierter Bezeichner
error C2065: 'x': nichtdeklarierter Bezeichner
error C2228: Links von ".Name" muss sich eine Klasse/Struktur/Union befinden.
error C2228: Links von ".Nummer" muss sich eine Klasse/Struktur/Union befinden.
error C2228: Links von ".Preis" muss sich eine Klasse/Struktur/Union befinden.
error C2228: Links von ".Bestand" muss sich eine Klasse/Struktur/Union befinden.
error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
error C2040: 'temp': 'int' unterscheidet sich von 'FILE *' in Bezug auf die Anzahl vorgenommener Dereferenzierungen
error C3861: "foben": Bezeichner wurde nicht gefunden.
error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
error C2365: "fwrite": Erneute Definition; vorherige Definition war "Funktion".
error C2078: Zu viele Initialisierungen
error C2440: 'Initialisierung': 'FILE *' kann nicht in 'int' konvertiert werden
error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
error C2365: "fclose": Erneute Definition; vorherige Definition war "Funktion"
error C2440: 'Initialisierung': 'FILE *' kann nicht in 'int' konvertiert werden
error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
error C2365: "system": Erneute Definition; vorherige Definition war "Funktion".
error C2440: 'Initialisierung': 'const char [6]' kann nicht in 'int' konvertiert werden
error C2059: Syntaxfehler: '}'
error C2143: Syntaxfehler: Es fehlt ';' vor '}'
error C2059: Syntaxfehler: '}'
-
Hab's mal korrigiert und auch dann und wann etwas so rumgebogen, dass es mir etwas besser gefällt:
(Hoffe es hilft dir)
#include <stdio.h> struct lagerartikel{ char name[50]; unsigned int nummer; double preis; unsigned int bestand; }; int main(void){ FILE *f; const char *dateiname="C:\\Daten.txt"; struct lagerartikel artikel; printf("NEUER ARTIKEL:\n"); printf("Name: "); scanf("%s",&artikel.name); fflush(stdin); printf("Nummer: "); scanf("%ui",&artikel.nummer); fflush(stdin); printf("Preis: "); scanf("%d",&artikel.preis); fflush(stdin); printf("Bestand: "); scanf("%ui",&artikel.bestand); fflush(stdin); if(f=fopen(dateiname,"w")){ fwrite(&artikel,sizeof(lagerartikel),4,f); fclose(f); } printf("\nDruecken Sie die Entertaste um das Programm zu beenden..."); getchar(); return 0; }
-
Danke erstmalNur wenn es nicht zu viel ist ?
Wie kann ich die Datei wieder abrufen und anzeigen lassen.?
-
Ich habe mich noch mit den Formatbezeichnern getäuscht und die Preis zu einem float geändert.
#include <stdio.h> struct lagerartikel{ char name[50]; unsigned int nummer; float preis; unsigned int bestand; }; int main(void){ FILE *f; const char *dateiname="C:\\Daten.txt"; struct lagerartikel artikel; printf("NEUER ARTIKEL:\n"); printf("Name: "); scanf("%s",&artikel.name); fflush(stdin); printf("Nummer: "); scanf("%u",&artikel.nummer); fflush(stdin); printf("Preis: "); scanf("%f",&artikel.preis); fflush(stdin); printf("Bestand: "); scanf("%u",&artikel.bestand); fflush(stdin); //Speichern if(f=fopen(dateiname,"w")){ fwrite(&artikel,sizeof(lagerartikel),1,f); fclose(f); } //Lesen if(f=fopen(dateiname,"r")){ fread(&artikel,sizeof(lagerartikel),1,f); fclose(f); } printf("_______________________\n"); printf("HINZUGEFUEGTER ARTIKEL:\n"); printf("NAME: %s\n",artikel.name); printf("NUMMER: %u\n",artikel.nummer); printf("PREIS: %.2f\n",artikel.preis); printf("BESTAND: %u\n",artikel.bestand); printf("\nDruecken Sie die Entertaste um das Programm zu beenden..."); getchar(); return 0; }
-
*Übrigens:*Dein Code sieht wahnsinnig ähnlich aus wie der von Jürgen Wolf in C-Programmierung (ISBN 978-3-8272-4064-4). Wenn du tatsächlich dieses Buch besitzt, dann wäre es sicherlich keine dumme Idee, wenn du erstmal ein paar Seiten zurück gehst und die Grundlagen erlernst.-Die beginnen ja bekanntlich nicht bei Dateioperationen und Strukturen...
-
Das Alles und Jeder schrieb:
*Übrigens:*Dein Code sieht wahnsinnig ähnlich aus wie der von Jürgen Wolf in C-Programmierung (ISBN 978-3-8272-4064-4). Wenn du tatsächlich dieses Buch besitzt, dann wäre es sicherlich keine dumme Idee, wenn du...
...es umgehend in den nächsten mülleimer wirfst.
-
Danke nochmal.
Die Aufgabe ist ein Hausaufgabe. "Verwaltung von Artikeln"
Programm soll Menü gesteuert sein
1. Neuaufnahme von Artikeln
2. Laden der Artikeln aus einer Datei
3. Speichern der Artikeldaten in eine Datei
4. Löschen von Artikeldaten
5. Suchen von Artikeln
6. Sortieren nach allen vier KriterienEins habe ich schon finde ich aber nicht so gut „C Programmieren von Anfang an“
-
c-freak schrieb:
Das Alles und Jeder schrieb:
*Übrigens:*Dein Code sieht wahnsinnig ähnlich aus wie der von Jürgen Wolf in C-Programmierung (ISBN 978-3-8272-4064-4). Wenn du tatsächlich dieses Buch besitzt, dann wäre es sicherlich keine dumme Idee, wenn du...
...es umgehend in den nächsten mülleimer wirfst.
Naja...-Ich weiss schon, dass man gewisse Funktionen nicht verwenden sollte, aber es ist mir halt ziemlich egal.
Damit auch dein Leben weiter geht:
#include <stdio.h> struct lagerartikel{ char name[50]; unsigned int nummer; float preis; unsigned int bestand; }; void myfflush(void){ while(getchar()!='\n'); } int main(void){ FILE *f; const char *dateiname="C:\\daten.txt"; struct lagerartikel artikel; printf("NEUER ARTIKEL:\n"); printf("Name: "); scanf_s("%s",&artikel.name,49); myfflush(); printf("Nummer: "); scanf_s("%u",&artikel.nummer,1); myfflush(); printf("Preis: "); scanf_s("%f",&artikel.preis,1); myfflush(); printf("Bestand: "); scanf_s("%u",&artikel.bestand,1); myfflush(); //Speichern if(!fopen_s(&f,dateiname,"w")){ fwrite(&artikel,sizeof(lagerartikel),1,f); fclose(f); } //Lesen if(!fopen_s(&f,dateiname,"r")){ fread(&artikel,sizeof(lagerartikel),1,f); fclose(f); } printf("_______________________\n"); printf("HINZUGEFUEGTER ARTIKEL:\n"); printf("Name: %s\n",artikel.name); printf("Nummer: %u\n",artikel.nummer); printf("Preis: %.2f\n",artikel.preis); printf("Bestand: %u\n",artikel.bestand); printf("\nDruecken Sie die Entertaste um das Programm zu beenden..."); getchar(); return 0; }
-
das erste Programm von dir finde ich besser weil ich es auch etwas nach vollziehen kann.
das zweite ist fast das selbe außer:
void myfflush(void){
while(getchar()!='\n');da ist bei mir im Kopf ERROR
PS (Weist du wie ich eine Waage und senkrecht Line anzeigen lassen kann. wollte das Programm in ein Tabelle ausgeben lassen )
-
Lass dir alle möglichen Zeichen ausgeben, so wirst du fündig:
#include <stdio.h> int main(void){ unsigned char zeichen=0x00; printf("VERFUEGBARE ZEICHEN:\n"); zeichen=0x00; do{ printf("\n(0x%02x): %c",zeichen,zeichen); zeichen++; }while(zeichen!=0); getchar(); return 0; }
Folgende Codes haben deine Zeichen also:
const unsigned char SENKRECHT = 186; const unsigned char WAAGERECHT = 205 const unsigned char KREUZ = 206; const unsigned char TRECHTS = 185; const unsigned char TLINKS = 204; const unsigned char TOBEN = 203; const unsigned char TUNTEN = 202; const unsigned char ECKEOBENLINKS = 201; const unsigned char ECKEOBENRECHTS = 187; const unsigned char ECKEUNTENLINKS = 200; const unsigned char ECKEUNTENRECHTS = 188;
-
davidhase83 schrieb:
das erste Programm von dir finde ich besser weil ich es auch etwas nach vollziehen kann.
das zweite ist fast das selbe außer:
void myfflush(void){
while(getchar()!='\n');da ist bei mir im Kopf ERROR
PS (Weist du wie ich eine Waage und senkrecht Line anzeigen lassen kann. wollte das Programm in ein Tabelle ausgeben lassen )
Das verhalten von fflush(stdin) ist nicht so wirklich definiert. Deshalb sollte man das eigentlich nicht verwenden.
Die While-Schlaufe liest einfach solange Zeichen ein, bis sie ein '\n' liest.
Dieser Zeilenumbruch, in diesem Falle ist es nur genau einer (Ein simples getchar() würde also auch reichen.), der hier gelöscht werden soll, rührt von scanf() her, welches diesen jeweils zurück lässt.
-
Könnte mir jemand helfen bei case 4,5,6
und ich bekommen noch ein fehlermeldung:
Fehler 8 fatal error C1075: Dateiende erreicht, bevor das zugehörige Element für das linke Element Klammer "{" in ".\Produkt.cpp(35)"
#include <stdio.h> #include <string.h> #include <process.h> struct lagerverwaltung { int Nummer[50]; char Name [50]; float Preis; int Bestand; }; void main(){ FILE *f; const char *dateiname="C:\\Daten.txt"; struct lagerverwaltung artikel; int Nummer[50]; char Name [50]; float Preis; int Bestand; int menuepunkt; printf("1: Neuaufnahme von Artikeldaten"); printf("\n2: Laden der Artikeldaten"); printf("\n3: Speichern der Artikeldaten"); printf("\n4: Loeschen von Artikeldaten"); printf("\n5: Suchen von Artikel"); printf("\n6: Sortieren nach allen vier Kriterien"); printf("\n7: Exit"); printf("\n\nBitte waehlen Sie einen Menuepunkt: "); scanf("%i", &menuepunkt); switch (menuepunkt) { /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 1: printf("Neuaufnahme von Artikeldaten"); { printf("Bitte geben sie Platznummer ein\n"); scanf("%i",&artikel.Nummer); fflush(stdin); printf("Bitte geben sie den Name ein\n"); scanf("%i",&artikel.Name); fflush(stdin); printf("Bitte geben sie den Preis ein\n"); scanf("%i",&artikel.Preis); fflush(stdin); printf("Bitte geben sie den Bestand ein\n"); scanf("%i",&artikel.Bestand); fflush(stdin); break; } /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 2: printf("Laden der Artikeldaten"); { if(f=fopen(dateiname,"r")) { fread(&artikel,sizeof(lagerverwaltung),1,f); fclose(f); } printf("Name: %s\n",artikel.Name); printf("Name: %u\n",artikel.Nummer); printf("Name: %.2f\n",artikel.Preis); printf("Name: %u\n",artikel.Bestand); break; /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 3: printf("Speichern der Artikeldaten"); { if(f=fopen(dateiname,"w")) { fread(&artikel,sizeof(lagerverwaltung),1,f); fclose(f); } break; /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 4: printf("Loeschen von Artikeldaten"); break; /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 5: printf("Suchen von Artikel"); break; /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 6: printf("Sortieren nach allen vier Kriterien"); break; /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 7: printf("Druecken sie die Entertaste um das Progamm zu beenden...."); { system("Exit"); break; } default: printf("einen ungueltigen Punkt"); } system("Pause"); }
-
Am Ende von case 2 und case 3 fehlen jeweils ein }.
Gruß mcr
-
noch keine Hilfe für case 4,5,6
-
Wenn ich das Programm starte und den Menüpunkt 1 nehme
Und mit enter bestätige . kommt Folgendes Problem ,der zeigt immer Neuaufnahme von ArtikeldatenBitte geben sie Platznummer ein.zusammen an.
-
Funktionieren bei dir denn case 1, 2 und 3?
Ich habe mir mal erlaubt, deinen Code etwas abzuändern und zu
korrigieren.Ich habe mir nur den Case 1 vorgenommen.
Dir fehlt definitiv noch das Speichern der Datensätze in einem Array oder
einer Liste.Gruß mcr
#include <stdio.h> #include <string.h> struct lagerverwaltung { int Nummer; char Name[50]; float Preis; int Bestand; }; static void myflush(){ int c; while ((c=getchar())!='\n' && c!=EOF); } static void print_artikel(struct lagerverwaltung artikel) { printf("Platznummer: %d\n", artikel.Nummer); printf("Name: %s\n", artikel.Name); printf("Preis: %.2f\n", artikel.Preis); printf("Bestand: %d\n", artikel.Bestand); } static void entferne_nextline(char *s) { for (; s && *s != '\n'; ++s); if (s) *s='\0'; } static struct lagerverwaltung eingabe_artikel() { struct lagerverwaltung artikel; printf("Bitte geben sie Platznummer ein\n"); scanf("%i",&artikel.Nummer); myflush(); printf("Bitte geben sie den Name ein\n"); fgets(artikel.Name, 50, stdin); entferne_nextline(artikel.Name); printf("Bitte geben sie den Preis ein\n"); scanf("%f",&artikel.Preis); myflush(); printf("Bitte geben sie den Bestand ein\n"); scanf("%i",&artikel.Bestand); myflush(); return artikel; } static int menu() { int ret; printf("1: Neuaufnahme von Artikeldaten"); printf("\n2: Laden der Artikeldaten"); printf("\n3: Speichern der Artikeldaten"); printf("\n4: Loeschen von Artikeldaten"); printf("\n5: Suchen von Artikel"); printf("\n6: Sortieren nach allen vier Kriterien"); printf("\n7: Exit"); printf("\n\nBitte waehlen Sie einen Menuepunkt: "); scanf("%i", &ret); myflush(); return ret; } int main(){ while (1) { int menuepunkt = menu(); switch (menuepunkt) { /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 1: printf("Neuaufnahme von Artikeldaten\n"); { struct lagerverwaltung artikel = eingabe_artikel(); print_artikel(artikel); } break; /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 2: printf("Laden der Artikeldaten\n"); break; /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 3: printf("Speichern der Artikeldaten\n"); break; /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 4: printf("Loeschen von Artikeldaten\n"); break; break; /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 5: printf("Suchen von Artikel\n"); break; break; /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 6: printf("Sortieren nach allen vier Kriterien\n"); break; break; /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 7: printf("Druecken sie die Entertaste um das Progamm zu beenden....\n"); { return 0; break; } default: printf("einen ungueltigen Punkt\n"); } } return 0; }
-
davidhase83 schrieb:
Wenn ich das Programm starte und den Menüpunkt 1 nehme
Und mit enter bestätige . kommt Folgendes Problem ,der zeigt immer Neuaufnahme von ArtikeldatenBitte geben sie Platznummer ein.zusammen an.
Da hast du ein \n hinter "Neuaufnahme von Artikeldaten" vergessen.
-
ich habe case 2,3,4 geschieben und wieder mal mit fehler
kann einer bitte mal nach schauen vielleicht auch ändern ?
#include <stdio.h> #include <string.h> #include <stdlib.h> struct lagerverwaltung { int Nummer; char Name[50]; float Preis; int Bestand; }; static void myflush(){ int c; while ((c=getchar())!='\n' && c!=EOF); } static void print_artikel(struct lagerverwaltung artikel) { printf("Platznummer: %d\n", artikel.Nummer); printf("Name: %s\n", artikel.Name); printf("Preis: %.2f\n", artikel.Preis); printf("Bestand: %d\n", artikel.Bestand); } static void entferne_nextline(char *s) { for (; s && *s != '\n'; ++s); if (s) *s='\0'; } static struct lagerverwaltung eingabe_artikel() { struct lagerverwaltung artikel; printf("Bitte geben sie Platznummer ein\n"); scanf("%i",&artikel.Nummer); myflush(); printf("Bitte geben sie den Name ein\n"); fgets(artikel.Name, 50, stdin); entferne_nextline(artikel.Name); printf("Bitte geben sie den Preis ein\n"); scanf("%f",&artikel.Preis); myflush(); printf("Bitte geben sie den Bestand ein\n"); scanf("%i",&artikel.Bestand); myflush(); return artikel; } static int menu() { int ret; printf("1: Neuaufnahme von Artikeldaten"); printf("\n2: Laden der Artikeldaten"); printf("\n3: Speichern der Artikeldaten"); printf("\n4: Loeschen von Artikeldaten"); printf("\n5: Suchen von Artikel"); printf("\n6: Sortieren nach allen vier Kriterien"); printf("\n7: Exit"); printf("\n\nBitte waehlen Sie einen Menuepunkt: "); scanf("%i", &ret); myflush(); return ret; } int main(){ while (1) { int menuepunkt = menu(); switch (menuepunkt) { /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 1: printf("Neuaufnahme von Artikeldaten\n"); { struct lagerverwaltung artikel = eingabe_artikel(); print_artikel(artikel); } break; /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 2: printf("Laden der Artikeldaten\n"); { FILE *datei; char dateiname[50]; int dn printf("\nName der zu oeffenden Datei "); gets(dateiname); if((stream = fopen(dateiname,"r")) == NULL) { printf("\n Datei laesst sich nicht oeffnen !\n"); exit(1); } dn=fgetc(stream); while(!feof(stream)) { putchar(ch); dn=fgetc(stream); } fclose(stream); } break; /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 3: printf("Speichern der Artikeldaten"); { if(f=fopen(dateiname,"r")) { fread(&artikel,sizeof(lagerverwaltung),1,f); fclose(f); } } break; /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 4: printf("Loeschen von Artikeldaten\n"); break; break; /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 5: printf("Suchen von Artikel"); { printf("Welchen Artikel suchen Sie: "); fgets(search,sizeof(lagerverwaltung),stdin); search_lagerverwaltung(search); } break; /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 6: printf("Sortieren nach allen vier Kriterien\n"); break; break; /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 7: printf("Druecken sie die Entertaste um das Progamm zu beenden....\n"); { return 0; break; } default: printf("einen ungueltigen Punkt\n"); } } return 0; }
-
Deine Versuch sind ja total schief gelaufen.
Vielleicht solltest du dir erst einmal Gedanken machen,
wie du denn die Datensätze im Speicher halten möchtest.Bisher kannst du einen Artikel eingeben lassen. Aber dieser
wird lediglich einmal ausgegeben und dann wieder "vergessen".Hier empfehle ich dir eine Liste, Baum oder ein Array.
Versuch erstmal dies zu realisieren, bevor du dich an die
ürbigen cases machst. Dann könntest du dir ja auch eine
Ausgabe aller gespeicherten Datensätze noch schreiben.Welchen Compiler verwendest du?
Gibt dir dein Compiler keine Hinweise, in welcher Zeile etwas schief
läuft?Dann hättest du z.B. sehen können, dass in Zeile 86 das Semikolon
fehlt, dass dort ch nicht bekannt ist .. etc...Gruß mcr
-
Weiß nicht mal, wie ich richtig anfangen soll .Ich habe schon ein Vorstellung wie es funktionieren soll, aber ich bekomme es einfach nicht in die tat umgesetzt
Seid 6 tage versuch ich das Programm zusammen zubekommen.
kannst du mir bitte ein Beispiel geben wie ich das mit einem Array realisieren kann.
PS: ich benutze Visual Studio 2005
-
davidhase83 schrieb:
Weiß nicht mal, wie ich richtig anfangen soll .Ich habe schon ein Vorstellung wie es funktionieren soll, aber ich bekomme es einfach nicht in die tat umgesetzt
Seid 6 tage versuch ich das Programm zusammen zubekommen.
kannst du mir bitte ein Beispiel geben wie ich das mit einem Array realisieren kann.
PS: ich benutze Visual Studio 2005
Hier hast du mal das grobe Gerüst. Läuft auch soweit schon.
#include <stdio.h> #include <stdlib.h> #include <string.h> /* --------------------------------------------------------- */ /* hilfsfunktionen */ /* --------------------------------------------------------- */ static void myflush(){ while (getchar()!='\n'); } static void entferne_nextline(char *s) { for (; s && *s != '\n'; ++s); if (s) *s='\0'; } /* --------------------------------------------------------- */ /* artikel */ /* --------------------------------------------------------- */ typedef struct { int Nummer; char Name[50]; float Preis; int Bestand; } artikel_t; static artikel_t eingabe_artikel() { artikel_t a; printf("Bitte geben sie Platznummer ein: "); scanf("%i",&a.Nummer); myflush(); printf("Bitte geben sie den Name ein: "); fgets(a.Name, 50, stdin); entferne_nextline(a.Name); printf("Bitte geben sie den Preis ein: "); scanf("%f",&a.Preis); myflush(); printf("Bitte geben sie den Bestand ein: "); scanf("%i",&a.Bestand); myflush(); return a; } static void print_artikel(artikel_t a) { printf(" Platznummer: %d\n", a.Nummer); printf(" Name: %s\n", a.Name); printf(" Preis: %.2f\n", a.Preis); printf(" Bestand: %d\n", a.Bestand); } /* --------------------------------------------------------- */ /* lager */ /* --------------------------------------------------------- */ typedef struct { int size, maxsize; artikel_t *artikel; } lager_t; static lager_t *neues_lager(int maxsize) { lager_t *l = malloc(sizeof(*l)); l->maxsize = maxsize; l->size = 0; l->artikel = malloc(maxsize * sizeof(artikel_t)); memset(l->artikel, 0x0, maxsize * sizeof(artikel_t)); return l; } static void add_artikel(lager_t *l, artikel_t a) { /* hier könntest du noch überprüfen, ob das element schon im lager ist */ if (l->size == l->maxsize) { printf("(E) Lager ist voll!\n"); return; /* anstelle einer fehlermeldung kannst du das array l->artikel */ /* dynamisch vergrößern. tip: malloc/free, realloc, memcpy */ } l->artikel[l->size] = a; l->size++; printf("Element: %d hinzugefuegt\n", l->size); } static void print_lager(lager_t *lager) { int i; printf("---------------------------------------------------------\n"); printf("Lagerinhalt: size: %d maxsize: %d\n", lager->size, lager->maxsize); for (i=0; i<lager->size; ++i) { printf(" Artikel: %d\n", i); print_artikel(lager->artikel[i]); } } static void del_lager(lager_t *lager) { if (!lager) return; free(lager->artikel); free(lager); } /* --------------------------------------------------------- */ /* hauptroutinen */ /* --------------------------------------------------------- */ static int menu() { int ret; printf("1: Neuaufnahme von Artikeldaten\n"); printf("2: Laden der Artikeldaten\n"); printf("3: Speichern der Artikeldaten\n"); printf("4: Loeschen von Artikeldaten\n"); printf("5: Suchen von Artikel\n"); printf("6: Sortieren nach allen vier Kriterien\n"); printf("7: Exit\n"); printf("8: Lager ausgeben\n"); printf("\nBitte waehlen Sie einen Menuepunkt: "); scanf("%i", &ret); myflush(); return ret; } int main(){ lager_t *lager = neues_lager(20); while (1) { int menuepunkt = menu(); switch (menuepunkt) { /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 1: printf("Neuaufnahme von Artikeldaten\n"); { artikel_t a = eingabe_artikel(); add_artikel(lager, a); } break; /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 2: printf("Laden der Artikeldaten\n"); break; /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 3: printf("Speichern der Artikeldaten\n"); break; /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 4: printf("Loeschen von Artikeldaten\n"); break; break; /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 5: printf("Suchen von Artikel\n"); break; break; /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 6: printf("Sortieren nach allen vier Kriterien\n"); break; break; /*------------------------------------------------------------------------------------------------------------------------------------------------*/ case 7: printf("Druecken sie die Entertaste um das Progamm zu beenden....\n"); { return 0; break; } case 8: print_lager(lager); break; default: printf("einen ungueltigen Punkt\n"); } } del_lager(lager); lager = NULL; return 0; }
Den Rest schaffst du dann aber alleine, oder?
Du lernst übrigens nichts, wenn ich dir das gesamte Programm schreibe.
Wenn du willst, schreibe ich dir das gesamte Programm. Da bleibt dann
nur zu klären, was du bezahlst!Ich weiß noch nicht, was deine Platznummer für einen Sinn macht.
Vielleicht musst du die add_artikel() Funtkion noch anpassen, damit
du direkt an dieser Nummer dein Element speicherst. Wenn du das dann
so machst, brauchst du auch die Variable size in lager_t nicht mehr.
Naja, es ändert sich halt ein wenig... aber das ist ja immer so.Ich hoffe, du kommst damit nun voran.
Gruß mcr