Hilfe bin Anfänger !
-
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
-
Ich danke die erstmal
Melde mich heute abend noch mal ,ich versuche es mal fertig zu schreiben.
MFG David