1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Problem mit C-Programm!!!

  • monkey06
  • 20. Januar 2014 um 12:28
  • Unerledigt
  • monkey06
    3
    monkey06
    Mitglied
    Punkte
    60
    Beiträge
    9
    • 20. Januar 2014 um 12:28
    • #1

    Hallo Leute,

    ich arbeite momentan an einem Warenwirtschafts- und Verwaltungssystem, dass ich für die UNI in einem Projekt erstellen muss. Ich komme an einer Teilaufgabe nicht weiter und würde gerne um Hilfe bitten. Das Programm schreibe ich auf einem Unix System in der Konsole. Das Programm hänge ich in den Anhang. Ich bin offen für weitere Anmerkungen bzw. Verbesserungen.

    Ich muss mein Hauptprogramm um zwei neue Menüpunkte erweitern "Kunden suchen" und "Produkt suchen". Dafür brauche ich vier neue Funktionen für den Umgang mit Strings.

    Die Funktion int equal (char x[], char y[]); soll zwei Zeichenketten solange vergleichen, bis eine Zeichenkette zuende ist oder bis eine Ungleichheit auftritt.

    Die Funktion int einlesen (char[x], int laenge); soll in einer Schleife solange Buchstaben von der Tastatur in ein char Array schreiben, bis ein"\n" eingegeben wird oder die Länge "laenge" erreicht wird. Dafür soll man mit "getc()" gearbeitet werden. Diese Funktion soll dann alle scanf()-Aufrufe für Strings ersetzen.

    Die Funktion int suche_kunde(Kunde* k, int akt_anz); soll in meiner Kundendatenbank nach einem einzugebenden Namen oder Vornamen suchen. Mit einlesen() und eqaul() soll nach dem Kunden gesucht werden und akt_anz soll den Wert mit der aktuellen Anzahl von Einträgen in der Datenbank übergeben.

    Die Funktion suche_produkt(Produkt* p, int akt_anz); soll entsprechend das gleiche wie die vorherige Funtkion für meine Produkte erledigen.

    Ich bin leider nach mehreren versuchen dies in mein Programm einzubauen gescheitert und bitte daher um Hilfe.

    Danke schonmal :winking_face:

    wwsmain.c :

    C
    #include <stdio.h>
    #include "wwsdek.h“
    
    
    int main() {
    
    
    menue:
            printf( "\n**************************\n"
                    "* Warenwirtschaftssystem *"
                    "**************************");
    
    
    
            printf( "\nOptionen:\n\n"
                    "1: Neues Produkt eingeben\n"
                    "2: Neuen Kunden eingeben\n"
                    "3: Produkt ausgeben\n"
                    "4: Kunden ausgeben\n"
                    "5: Produktliste\n"
                    "6: Kundenliste\n"
                    "7: Produkt suchen\n"
                    "8: Kunden suchen\n\n"
                    "Auswahl: ");
    
            scanf("%i", &auswahl);
    
            switch (auswahl) {
    
                    case 1 :
                            printf( "\n**********************\n"
                                    "* WWS Produkteingabe *"
                                    "**********************");
    
                            printf("\nWie viele Produkte moechten Sie hinzufuegen: ");
                            scanf("%i", &m);
    
                            m = m + 1;
    
    
                            produkteingabe();
    
    
                            goto menue; break;
                    case 2 :    
                            printf( "\n*********************\n"
                                      "* WWS Kundeneingabe *\n"
                                      "*********************\n");
    
                            printf("\nWie viele Kunden moechten Sie hinzufuegen: ");
                            scanf("%i", &n);
    
                            n = n + 1;
    
                            kundeneingabe();
    
    
                            goto menue; break;
                    case 3 :
                            printf( "\n**********************\n"
                                      "* WWS Produkteingabe *"
                                      "**********************");
    
                            printf("\nBitte geben Sie die Produkt-ID ein: ");
                            scanf("%i", &o);
    
                            produktausgabe();
    
                            goto menue; break;
                    case 4 :
                            printf(    printf( "\n*********************\n"
                                                   "* WWS Kundenausgabe *\n"
                                                   "*********************\n");
    
                            printf( "\nBitte geben Sie die Kunden-ID ein: ");
                            scanf("%i", &i);
    
                            kundenausgabe();
    
                            goto menue; break;
                    case 5 :
                            printf(    "\n********************\n"
                                         "* WWS Produktliste *\n"
                                         "********************\n");
    
                            produktliste();
    
                            goto menue; break;
                    case 6 :
                            printf( "\n*******************\n"
                                      "* WWS Kundenliste *\n"
                                      "*******************\n");
    
                            kundenliste();
    
                            goto menue; break;
                    case 7 :
    
                            goto menue; break;
    
                    case 8 :
    
                            goto menue; break;
                    case 0 :
                            exit(0); break;
    
                    default : return -1;
            }
            return 0;
    }
    Alles anzeigen

    wwsdek.c :

    Code
    #include "wwsdek.h"
    
    
    void produkteingabe() {        
            for (o=1; o<m; o++) {
                        printf("\nBitte geben Sie die Produkt-ID fuer das %d Produkt ein: ", o);
                        scanf("%d", &meineProdukte[o].produktid);
                        printf("Produktname: ");
                        scanf("%s", meineProdukte[o].produktname);
                        printf("Preis: ");
                        scanf("%i", &meineProdukte[o].preis);
                        printf("Anzahl: ");
                        scanf("%i", meineProdukte[o].anzahl);
                        meineProdukte[o].gesamtpreis = meineProdukte[o].preis * meineProdukte[o].anzahl
            }
    }
    
    
    void kundeneingabe() {
                for (i=1; i<n; i++) {
                        printf("\nBitte geben Sie die Kunden-ID fuer den %d Kunden ein: ", i);
                        scanf("%d", &meineKunden[i].kundenid);
                        printf("\nNachname eingeben: ");
                        scanf("%s", meineKunden[i].name);
                        printf("Vorname eingeben: ");
                        scanf("%s", meineKunden[i],vorname);
                }
    }
    
    
    void produktausgabe() {
                if (meineProdukte[o].produktid == o) {
                        printf(    "\n\n==============================\n"
                                "|                        %i        |\n"
                                "| Produktname:            %s        |\n"
                                "| Einzelpreis:            %6.2lf    |\n"
                                "| Gesamtpreis:            %6.2lf  |\n"
                                "| Anzahl:                %i        |\n"
                                "================================\n"
                                ,meineProdukte[o].produktid, meineProdukte[o].produktname, meineProdukte[o].preis, meineProdukte[o].gesamtpreis, meineProdukte[o].anzahl);
                }
    
                else {
                        printf("\nDiese Produkt-ID exestiert nicht!\n");
                }            
    }
    
    
    
    
    void kundenausgabe() {
                if (meineKunden[i].kundenid == i) {
                            printf( "\n================================\n"
                                    "| Kunden-ID:        %i            |\n"
                                    "| Name:            %s            |\n"
                                    "| Vorname:            %s            |\n"
                                    "================================\n"
                                    , meineKunden[i].kundenid, meineKunden[i].name, meineKunden[i].vorname);
                }
    
                else {
                        printf("\nDiese Kunden-ID exestiert nicht!\n");
                }
    }
    
    
    void produktliste() {
                for (o=1; o<m; o++) {
                        printf(    "\nProdukt-ID:            %i\n"
                                "Produktname:            %s\n"
                                "Einzelpreis:            %6.2lf\n"
                                "Gesamtpreis:            %6.2lf\n"
                                "Anzahl:                %i\n"
                                , meineProdukte[o].produktid, meineProdukte[o].produktname, meineProdukte[o].preis, meineProdukte[o].gesamtpreis, meineProdukte[o].anzahl
                        )
                }
    
    }
    
    
    void kundenliste() {        
            for (i=1; i<n; i++) {
                    printf( "\nKunden-ID:    %i\n"
                            "Name:            %s\n"
                            "Vorname:        %s\n"
                            , meineKunden[i].kundenid, meineKunden[i].name, meineKunden[i].vorname);
            }
    
    
    }
    /*
    int equal(char x[] char y[]) {
    
    
    }
    
    
    int einlesen(char x[], int laenge) {
    
    
    }
    
    
    int suche_kunde(Kunde* k, int akt_anz) {
    
    
    }
    
    
    int suche_produkt(Produkt* p, int akt_anz) {
    
    
    }
    */
    Alles anzeigen

    wwsdek.h :

    Code
    int auswahl, o, m, i, n;
    
    
    void produkteingabe();
    void kundeneingabe();
    void produktausgabe();
    void kundenausgabe();
    void produktliste();
    void kundenliste();
    
    
    typedef struct Einprodukt {
            int produktid;
            char produktname[26];
            double preis;
            int anzahl;
            double gesamtpreis;
    } Produkt;
    
    
    Produkt meineProdukte[20]
    
    
    typedef struct Einkunde {
            int kundenid;
            char name[28];
            char vorname[28];
    } Kunde;
    
    
    Kunde meineKunden[20];
    Alles anzeigen

    wwsmakefile.c :

    Code
    wws: wwsdek.o wwsmain.o
            cc -o wws wwsdek.o wwsmain.o
    
    wwsdek.o: wwsdek.h wwsdek.c
            cc -c wwsdek.c
    
    wwsmain.o wwsdek.h wwsmain.c
            cc -c wwsmain.c

    5 Mal editiert, zuletzt von monkey06 (20. Januar 2014 um 13:26)

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 20. Januar 2014 um 13:40
    • #2
    Zitat von monkey06

    Ich bin leider nach mehreren versuchen dies in mein Programm einzubauen gescheitert und bitte daher um Hilfe.


    Beginne mit der Funktion einlesen. Zeig uns deine Versuche. Wir machen deine Hausübung nicht für dich. (So spannend ist sie nicht.)

    *plantsch*

  • monkey06
    3
    monkey06
    Mitglied
    Punkte
    60
    Beiträge
    9
    • 27. Januar 2014 um 10:23
    • #3
    Zitat von Plantschkuh!

    Beginne mit der Funktion einlesen. Zeig uns deine Versuche. Wir machen deine Hausübung nicht für dich. (So spannend ist sie nicht.)


    Hey,

    also das ist mein neuster Versuch, beim kompilieren sagt er mir dass EOF und stdin undeclared identifier sind. Ich verstehe nicht wieso, stdin ist doch die Standarteingabe und EOF ist End Of File ???


    Code
    int einlesen(char x[], int laenge) {
            int charLaenge = 0, c;
    
            laenge--;
    
            fflush(stdin);
    
            while((c = fgetc(stdin)) != EOF) {
                    if ( c == '\n') {
                            break;
                    }
            }
    
            if (c == EOF && charLaenge == 0) {
                    return EOF;
            }
            x[charLaenge] = '\0';
            return charLaenge;
    }
    
    
    int equal (char x[], char y[]) {
    
    
            if (strlen(x) != strlen(y)) {
                    if (x[i] != y[i]) {
                            return 0;
                    }
            }
            return 1;
    }
    
    
    void produktsuche() {
            int i;
            char sucheP[26];
            char gefundenP[26];
    
            printf("Bitte geben Sie einen Produktnamen ein: ");
            einlesen(sucheP, 26);
    
            for (i= 0; i < m; i++) {
                    if (equal (meineProdukte[o].produktname, sucheP)){
                            printf("An Stelle %i gefunden!", i);
                            printf(gefundenP);        
                    }    
            }        
    }
    
    
    void kundensuche() {
            int i;
            char sucheK[26];
            printf("Bitte geben Sie einen Kundennamen ein: ");
            einlesen(sucheK, 26);
    
            for (i = 0; i < n; i++) {
                    if (equal (meineKunden[i].name, sucheK) || equal (meineKunden[i].vorname, sucheK)) {
                            printf("An Stelle %i gefunden!", i);
                            printf(gefundenK);
                    }
            }
    }
    Alles anzeigen
  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 27. Januar 2014 um 21:45
    • #4
    Zitat von monkey06

    also das ist mein neuster Versuch, beim kompilieren sagt er mir dass EOF und stdin undeclared identifier sind. Ich verstehe nicht wieso, stdin ist doch die Standarteingabe und EOF ist End Of File ???


    Ja. Das sind Namen aus der Standardbibliothek, aber sie sind nicht automatisch sichtbar. Du musst zuerst dafür sorgen, daß die entsprechenden Header, in denen diese Namen deklariert werden, eingebunden werden:

    C
    #include <stdio.h>
    #include <string.h>


    (letzteres für strlen)

    *plantsch*

  • monkey06
    3
    monkey06
    Mitglied
    Punkte
    60
    Beiträge
    9
    • 28. Januar 2014 um 10:50
    • #5

    Ach okay, stimmt hatte ich vergessen. Naja mein Code funktioniert trotzdem nicht so wie ich mir das gedacht habe. Wenn ich ein Produkt einspeichere und dann auf die Produktsuche gehe, fragt er mich welches Produkt ich suche, ich gebe das zuvor eingespeicherte Produkt ein aber es sucht nicht sondern springt sofort zurück ins Menü.

  • Bradon
    7
    Bradon
    Mitglied
    Reaktionen
    13
    Punkte
    518
    Beiträge
    100
    • 28. Januar 2014 um 11:57
    • #6

    Das ist doch genau, was du angegeben hast

    Code
    case 7 :
    
                            goto menue; break;

    Ex-PP-Tutor und genereller [strike]Besser[/strike]Schlechterwisser

  • monkey06
    3
    monkey06
    Mitglied
    Punkte
    60
    Beiträge
    9
    • 28. Januar 2014 um 13:55
    • #7

    Ja da hab ich schon hinzugefügt also produktsuche(); bei case 7 und bei case 8 durch kundensuche();. Sonst würde er mich garnicht nach dem Produkt fragen.

    Einmal editiert, zuletzt von monkey06 (28. Januar 2014 um 13:58)

  • Punkrocker
    7
    Punkrocker
    Mitglied
    Reaktionen
    1
    Punkte
    456
    Beiträge
    85
    • 28. Januar 2014 um 14:28
    • #8

    Kleiner Tipp: Lern die tools die dir dein System bietet.

    Dein Programm macht nicht das was du willst? Dann schmeiß den debugger an. Ich bin sicher wenn du da durchsteppst hast du das Problem schnell gefunden.

    Die Zeit die du jetzt investieren musst um gdb zu lernen hast du in ein paar Tagen locker wieder herinnen :winking_face:

    Und eine Stimme aus dem Chaos sprach zu mir:
    lächle und sei froh, es könnte schlimmer kommen.
    Und ich lächelte und war froh, und es kam schlimmer!

  • monkey06
    3
    monkey06
    Mitglied
    Punkte
    60
    Beiträge
    9
    • 28. Januar 2014 um 17:12
    • #9

    Ich habs hinbekommen ohne debugger. Hab mir den Code komplett nochmal Stück für Stück angesehen, paar kleine Änderungen vorgenommen und es hat geklappt. Danke

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung