Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Konsolenanwendung: Lagerbestand

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
14.01.2009, 00:25 Uhr
~Verzweifelt
Gast


(... nur Vorhandene Lösung modifizieren)

brauche hilfe bei der lösung der genannten aufgabe
im anhang befindet sich ein vorgegebens gerüst und es sollen die grünen kommentare ergänzt werden, sodass das programm funktionsfähig wird.
es handelt sich um :
-öffnen einer txt datei ( hier als "dat" ) mit lese und schreibzugriff
-anwendung von sortierverfahren

außerdem exisitert eine lösung für ein ähnliches programm, sodass eben das problem besteht die alte lösung mit der neuen zu verschmelzen
wenn jemand mit ahnung von c++ ne halbe stunde zeit investieren könnte mir zu helfen, wär ich natürlich sehr dankbar :/



anhang: http://uploaded.to/?id=0bmdag
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.01.2009, 00:59 Uhr
0xdeadbeef
Gott
(Operator)


Wir sind kein Hausaufgabenservice. Zeig nen Ansatz, oder ich mach den Thread dicht.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.01.2009, 12:21 Uhr
~Verzweifelt
Gast


ansatz:

C++:
#include "stdafx.h"
#include <stdio.h>
#include <string.h>

struct Teil {
    char Bezeichnung[81];
    int Teilenummer;
    int Anzahl;
};
typedef Teil *Lagerliste;

int LeseTeil(FILE *f, Teil &t) {
    char buffer[256];
    if(!fgets(buffer,255,f))
        return EOF;
    for(char *d = t.Bezeichnung, *s = buffer;(*d = *s)&&(*d != '\n');d++,s++);
    if(*d == '\n')
        *d = '\0';
    if(!fscanf(f,"%d\n",&t.Teilenummer))
        return EOF;
    if(!fscanf(f,"%d\n",&t.Anzahl))
        return EOF;
    return 1;
}

void SchreibeTeil(FILE *f, const Teil &t) {
    fprintf(f,"%s\n",t.Bezeichnung);
    fprintf(f,"%d\n",t.Teilenummer);
    fprintf(f,"%d\n",t.Anzahl);
}
void SchreibeTeilFormatiert(const Teil &t) {
    printf("| %-30s | %8d | %4d |\n",t.Bezeichnung,t.Teilenummer,t.Anzahl);
}
void LeseListe(FILE *f,Lagerliste &Liste, int &n) {
    fscanf(f,"%d\n",&n);
    Liste = new Teil[n];
    for(int i = 0; i < n; i++) {
        LeseTeil(f,Liste[i]);
    }
}
void SchreibeListe(FILE *f, Lagerliste Liste, int n) {
    fprintf(f,"%d\n",n);
    for(int i = 0; i < n; i++) {
        SchreibeTeil(f,Liste[i]);
    }
}
void SchreibeListeFormatiert(Lagerliste Liste, int n) {
    system("CLS");
    printf("| Bezeichnung                    | TeileNr. | Anz. |\n");
    printf("+--------------------------------+----------+------+\n");
    for(int i = 0; i < n; i++) {
        SchreibeTeilFormatiert(Liste[i]);
    }
    printf("+--------------------------------+----------+------+\n");
}

// Unterprogramme zum Sortieren

int _tmain(int argc, _TCHAR* argv[])
{
    FILE *Bestand;
    Lagerliste liste;
    int AnzTeile;

    // Code zum Oeffnen der Datei "Lager.dat" mit Lesezugriff und Dateivariable Bestand
    LeseListe(Bestand,liste,AnzTeile);
    SchreibeListeFormatiert(liste,AnzTeile);
    system("PAUSE");
    char ende;
    do {
        int ausw;
        do {
            system("CLS");
            printf("Aktionsauswahl:\n");
            printf("\t1\tSortieren nach Bezeichnung\n");
            printf("\t2\tSortieren nach Teilenummer\n");
            printf("\t3\tSortieren nach Anzahl\n");
            printf("\t4\tNeuer Eintrag\n");
            printf("\t5\tSpeichern\n");
            printf("Bitte Auswahl eingeben: ");
            scanf("%d",&ausw);
            fflush(stdin);
        } while (ausw > 5 || ausw < 1);
        switch(ausw) {
/*            case 1 :
                // Sortieren nach Bezeichnung
                break;
            case 2 :
                // Sortieren nach Teilenummer
                break;
            case 3 :
                // Sortieren nach Anzahl
                break;
            case 4 : {
                    // Neuen Eintrag anlegen
                }
                break; */

            case 5: {
                    // Speichern
                    fclose(Bestand); // Schließen der Datei
                    system("CLS");
                    SchreibeListeFormatiert(liste,AnzTeile);
                    char s;
                    printf("Bestand speichern:[j/n]");
                    s = getchar();
                    if (s == 'j' || s == 'J') {
                        // Code zum Oeffnen der Datei "Lager.dat" mit Schreibzugriff und Dateivariable Bestand
                        SchreibeListe(Bestand,liste,AnzTeile);
                        printf("Bestand gespeichert...\n");
                        system("PAUSE");
                    }
                    fflush(stdin);
                }
                break;
            default :
                printf("Noch nicht implmentiert");
        }
        system("CLS");
        SchreibeListeFormatiert(liste,AnzTeile);
        system("PAUSE");
        printf("Neue Aktion? [j/n] : ");
        ende = getchar();
    } while (ende != 'n' && ende != 'N');

    return 0;
}


lager.dat:

Zitat:

11
Stradivari Geige
102367
27
Gibson LesPaul
451045
1
Tama Bassdrum
678934
2
Korg Polysix
894567
3
Fender Jazzbass
462300
5
Paiste Highhat
689055
3
Marshal Verstaerker
907855
4
Steinway Fluegel
138756
2
Yamaha Piano
896789
4
Klarinette
207612
5
Harpsi
567890
9


Dieser Post wurde am 14.01.2009 um 15:23 Uhr von Guybrush Threepwood editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.01.2009, 13:38 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


und womit genau hast du nun Probleme?
Einfach nur eine Aufgabenstellung und etwas Code hinzuklatschen ist ziemlich unhöflich und da du ja der jenige bist der Hilfe von anderen möchte solltest du nicht erwarten das dir andere nachlaufen und die Informationen aus der Nase ziehen

Dieser Post wurde am 14.01.2009 um 13:39 Uhr von Guybrush Threepwood editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
14.01.2009, 14:44 Uhr
~der selbe
Gast


mein problem ist primär der einbau der lager.dat (lese und schreibzugriff ist ja nur "r" und "w")
die sortierschleifen etc krieg ich hin, sekundäres problem sind zeilen wie "void name(parameter...)" weil ich scheinbar nich begriffen habe was für parameter reinkommen, bzw wie ich sie anhand des quelltextes ablesen kann ... nehme ich "teil" als parameter oder eben "teilname" oder "bezeichung" etc...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
14.01.2009, 17:01 Uhr
0xdeadbeef
Gott
(Operator)


Also, wenn du die Datei schließt, bevor du sie benutzen willst (und sogar, ohne sie überhaupt zu öffnen!), dann wirst du damit nicht arbeiten können. Du musst sie schon öffnen, bevor du sie benutzen kannst, und nach Benutzung schließen. Also:

C++:
Bestand = fopen("lager.dat", "w");

/* In Datei schreiben */

fclose(Bestand);


bzw.

C++:
Bestand = fopen("lager.dat", "r");

/* Aus Datei lesen */

fclose(Bestand);


Übrigens,

C++:
fflush(stdin);


ist schlicht falsch. Du kannst Eingabeströme nicht flushen, dass das mit dem Microsoft-Compiler "funktioniert," ist mehr oder weniger Zufall. Natürlich kriegst du da immer noch arge Probleme, wenn dir jemand stdin umleitet. Du kannst eine Toilette spülen, aber keinen Wasserhahn.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 14.01.2009 um 17:01 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
14.01.2009, 17:39 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von 0xdeadbeef:
Du kannst eine Toilette spülen, aber keinen Wasserhahn.


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
14.01.2009, 19:52 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)



Zitat von 0xdeadbeef:
dass das mit dem Microsoft-Compiler "funktioniert," ist mehr oder weniger Zufall.

Ne, das ist definiertes Verhalten unter Windows und zumindest dort absolut ok
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
14.01.2009, 22:41 Uhr
~wenigerVerzweifelt
Gast


also haben jetzt halben tag inverstiert und unten ist das ergebnis soweit... die ??? sind die kleinigkeiten die wir leider noch nich hinkriegen, aber es ist immer das selbe problem, wie ich sicherlich sehen könnt... wäre traumhaft wenn ihr helfen könnten die fragezeichen erstma nur zu entschlüsseln.... den rest des programms schreiben wir dann morgen weiter
vielen dank im voraus!


C++:
// Lagerneu.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include "stdafx.h"
#include <stdio.h>
#include <string.h>
int n;
struct Teil {
    char Bezeichnung[81];
    int Teilenummer;
    int Anzahl;
};
typedef Teil *Lagerliste;

int LeseTeil(FILE *f, Teil &t) {
    char buffer[256];
    if(!fgets(buffer,255,f))
        return EOF;
    for(char *d = t.Bezeichnung, *s = buffer;(*d = *s)&&(*d != '\n');d++,s++);
    if(*d == '\n')
        *d = '\0';
    if(!fscanf(f,"%d\n",&t.Teilenummer))
        return EOF;
    if(!fscanf(f,"%d\n",&t.Anzahl))
        return EOF;
    return 1;
}

void SchreibeTeil(FILE *f, const Teil &t) {
    fprintf(f,"%s\n",t.Bezeichnung);
    fprintf(f,"%d\n",t.Teilenummer);
    fprintf(f,"%d\n",t.Anzahl);
}
void SchreibeTeilFormatiert(const Teil &t) {
    printf("| %-30s | %8d | %4d |\n",t.Bezeichnung,t.Teilenummer,t.Anzahl);
}
void LeseListe(FILE *f,Lagerliste &Liste, int &n) {
    fscanf(f,"%d\n",&n);
    Liste = new Teil[n];
    for(int i = 0; i < n; i++) {
        LeseTeil(f,Liste[i]);
    }
}
void SchreibeListe(FILE *f, Lagerliste Liste, int n) {
    fprintf(f,"%d\n",n);
    for(int i = 0; i < n; i++) {
        SchreibeTeil(f,Liste[i]);
    }
}
void SchreibeListeFormatiert(Lagerliste Liste, int n) {
    system("CLS");
    printf("| Bezeichnung                    | TeileNr. | Anz. |\n");
    printf("+--------------------------------+----------+------+\n");
    for(int i = 0; i < n; i++) {
        SchreibeTeilFormatiert(Liste[i]);
    }
    printf("+--------------------------------+----------+------+\n");
}

// Unterprogramme zum Sortieren


#define nachBezeichnung 1
#define nachTeilenummer 2
#define nachAnzahl 3

void sortieren( ???????) {
     switch(???) {
                  
                  case nachBezeichnung:
                      
                       for(int i=0; i<n-1; i++) {
                               int min = i;
                               for (int k=i+1; k<n; k++) {
                                   if (strcmp(??? .Bezeichnung, ??? .Bezeichnung) < 0) {
                                      min = k;
                                   };
                               };
                               Artikel speicher = ???[i];
                               ???[i] = ???[min];
                               ???[min] = speicher;
                       };
                      
                       break;

                       case nachTeilenummer:
                      
                       for(int i=0; i<n-1; i++) {
                               int min = i;
                               for (int k=i+1; k<n; k++) {
                                   if (???[k].Teilenummer < ???[min].Teilenummer) {
                                      min = k;
                                   };
                               };
                               ??? speicher = ???[i];
                               ???[i] = ???[min];
                               ???[min] = speicher;
                       };
                      
                       break;
                      
                      
                  case nachAnzahl:
                      
                       for(int i=0; i<n-1; i++) {
                               int min = i;
                               for (int k=i+1; k<n; k++) {
                                   if (???[k].Anzahl < ???[min].Anzahl) {
                                      min = k;
                                   };
                               };
                               Artikel speicher = ???[i];
                               ???[i] = ???[min];
                               ???[min] = speicher;
                       };
                      
                       break;
     };
}                    
int _tmain(int argc, _TCHAR* argv[])
{
    FILE *Bestand;
    Lagerliste liste;
    int AnzTeile;

    // Code zum Oeffnen der Datei "Lager.dat" mit Lesezugriff und Dateivariable Bestand
    Bestand = fopen("lager.dat", "r");
    LeseListe(Bestand,liste,AnzTeile);
    SchreibeListeFormatiert(liste,AnzTeile);
    system("PAUSE");
    char ende;
    do {
        int ausw;
        do {
            system("CLS");
            printf("Aktionsauswahl:\n");
            printf("\t1\tSortieren nach Bezeichnung\n");
            printf("\t2\tSortieren nach Teilenummer\n");
            printf("\t3\tSortieren nach Anzahl\n");
            printf("\t4\tNeuer Eintrag\n");
            printf("\t5\tSpeichern\n");
            printf("Bitte Auswahl eingeben: ");
            scanf("%d",&ausw);
            fflush(stdin);
        } while (ausw > 5 || ausw < 1);
        

          
          switch(ausw) {
                              case '1':
                                  
                                   sortieren(nachBezeichnung);
                                   break;
                                  
                              case '2':
                                   sortieren(nachTeilenummer);
                                   break;
                                  
                              case '3':
                                   sortieren(nachAnzahl);
                                   break;
                                  
                              case '4':
                                   sortList(Posten, byAnzahl);
                                   printList(Posten);
                                   break;
                                  
                              case 'x':
                                   wiederhole = false;
                                   break;
                                  
                              default: break;
          };
    };

    printf("\n");
    
        
        
        switch(ausw) {
                              case 1:
                                  
                                   sortieren(nachBezeichnung);
                                   break;
                                  
                              case :
                                   sortieren(nachTeilenummer);
                                   break;
                                  
                              case 3:
                                   sortieren(nachAnzahl);
                                   break;


/*            case 4 : {
                    // Neuen Eintrag anlegen
                }
                break;
            case 5: {
                    // Speichern */



                    fclose(Bestand); // Schließen der Datei
                    system("CLS");
                    SchreibeListeFormatiert(liste,AnzTeile);
                    char s;
                    printf("Bestand speichern:[j/n]");
                    s = getchar();
                    if (s == 'j' || s == 'J') {

                        // Code zum Oeffnen der Datei "Lager.dat" mit Schreibzugriff und Dateivariable Bestand

                        Bestand = fopen("lager.dat", "w");
                        SchreibeListe(Bestand,liste,AnzTeile);
                        printf("Bestand gespeichert...\n");
                        fclose(Bestand);
                        system("PAUSE");
                    }
                    fflush(stdin);
                }
                break;
            default :
                printf("Noch nicht implementiert");
        }
        system("CLS");
        SchreibeListeFormatiert(liste,AnzTeile);
        system("PAUSE");
        printf("Neue Aktion? [j/n] : ");
        ende = getchar();
    } while (ende != 'n' && ende != 'N');

    return 0;
}


Dieser Post wurde am 15.01.2009 um 08:40 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
14.01.2009, 22:47 Uhr
~wenigerVerzweifelt
Gast


edit: kleiner fehler unterlaufen... unten die wirklich aktuellste version
p.s.: ich brauch mich nicht anzumelden im forum, weil das meine letzte informatikaufgabe in meinem ganzen leben ist... ich werd nie wieder etwas mit programmierung zu tun haben, wenn das hier vorbei ist


C++:
// Lagerneu.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include "stdafx.h"
#include <stdio.h>
#include <string.h>
int n;
struct Teil {
    char Bezeichnung[81];
    int Teilenummer;
    int Anzahl;
};
typedef Teil *Lagerliste;

int LeseTeil(FILE *f, Teil &t) {
    char buffer[256];
    if(!fgets(buffer,255,f))
        return EOF;
    for(char *d = t.Bezeichnung, *s = buffer;(*d = *s)&&(*d != '\n');d++,s++);
    if(*d == '\n')
        *d = '\0';
    if(!fscanf(f,"%d\n",&t.Teilenummer))
        return EOF;
    if(!fscanf(f,"%d\n",&t.Anzahl))
        return EOF;
    return 1;
}

void SchreibeTeil(FILE *f, const Teil &t) {
    fprintf(f,"%s\n",t.Bezeichnung);
    fprintf(f,"%d\n",t.Teilenummer);
    fprintf(f,"%d\n",t.Anzahl);
}
void SchreibeTeilFormatiert(const Teil &t) {
    printf("| %-30s | %8d | %4d |\n",t.Bezeichnung,t.Teilenummer,t.Anzahl);
}
void LeseListe(FILE *f,Lagerliste &Liste, int &n) {
    fscanf(f,"%d\n",&n);
    Liste = new Teil[n];
    for(int i = 0; i < n; i++) {
        LeseTeil(f,Liste[i]);
    }
}
void SchreibeListe(FILE *f, Lagerliste Liste, int n) {
    fprintf(f,"%d\n",n);
    for(int i = 0; i < n; i++) {
        SchreibeTeil(f,Liste[i]);
    }
}
void SchreibeListeFormatiert(Lagerliste Liste, int n) {
    system("CLS");
    printf("| Bezeichnung                    | TeileNr. | Anz. |\n");
    printf("+--------------------------------+----------+------+\n");
    for(int i = 0; i < n; i++) {
        SchreibeTeilFormatiert(Liste[i]);
    }
    printf("+--------------------------------+----------+------+\n");
}

// Unterprogramme zum Sortieren


#define nachBezeichnung 1
#define nachTeilenummer 2
#define nachAnzahl 3

void sortieren( ???????) {
     switch(???) {
                  
                  case nachBezeichnung:
                      
                       for(int i=0; i<n-1; i++) {
                               int min = i;
                               for (int k=i+1; k<n; k++) {
                                   if (strcmp(??? .Bezeichnung, ??? .Bezeichnung) < 0) {
                                      min = k;
                                   };
                               };
                               Artikel speicher = ???[i];
                               ???[i] = ???[min];
                               ???[min] = speicher;
                       };
                      
                       break;

                       case nachTeilenummer:
                      
                       for(int i=0; i<n-1; i++) {
                               int min = i;
                               for (int k=i+1; k<n; k++) {
                                   if (???[k].Teilenummer < ???[min].Teilenummer) {
                                      min = k;
                                   };
                               };
                               ??? speicher = ???[i];
                               ???[i] = ???[min];
                               ???[min] = speicher;
                       };
                      
                       break;
                      
                      
                  case nachAnzahl:
                      
                       for(int i=0; i<n-1; i++) {
                               int min = i;
                               for (int k=i+1; k<n; k++) {
                                   if (???[k].Anzahl < ???[min].Anzahl) {
                                      min = k;
                                   };
                               };
                               Artikel speicher = ???[i];
                               ???[i] = ???[min];
                               ???[min] = speicher;
                       };
                      
                       break;
     };
}                    
int _tmain(int argc, _TCHAR* argv[])
{
    FILE *Bestand;
    Lagerliste liste;
    int AnzTeile;

    // Code zum Oeffnen der Datei "Lager.dat" mit Lesezugriff und Dateivariable Bestand
    Bestand = fopen("lager.dat", "r");
    LeseListe(Bestand,liste,AnzTeile);
    SchreibeListeFormatiert(liste,AnzTeile);
    system("PAUSE");
    char ende;
    do {
        int ausw;
        do {
            system("CLS");
            printf("Aktionsauswahl:\n");
            printf("\t1\tSortieren nach Bezeichnung\n");
            printf("\t2\tSortieren nach Teilenummer\n");
            printf("\t3\tSortieren nach Anzahl\n");
            printf("\t4\tNeuer Eintrag\n");
            printf("\t5\tSpeichern\n");
            printf("Bitte Auswahl eingeben: ");
            scanf("%d",&ausw);
            fflush(stdin);
        } while (ausw > 5 || ausw < 1);
        

        
        switch(ausw) {
                              case 1:
                                  
                                   sortieren(nachBezeichnung);
                                   break;
                                  
                              case 2:
                                   sortieren(nachTeilenummer);
                                   break;
                                  
                              case 3:
                                   sortieren(nachAnzahl);
                                   break;


/*            case 4 : {
                    // Neuen Eintrag anlegen
                }
                break;
            case 5: {
                    // Speichern */



                    fclose(Bestand); // Schließen der Datei
                    system("CLS");
                    SchreibeListeFormatiert(liste,AnzTeile);
                    char s;
                    printf("Bestand speichern:[j/n]");
                    s = getchar();
                    if (s == 'j' || s == 'J') {

                        // Code zum Oeffnen der Datei "Lager.dat" mit Schreibzugriff und Dateivariable Bestand

                        Bestand = fopen("lager.dat", "w");
                        SchreibeListe(Bestand,liste,AnzTeile);
                        printf("Bestand gespeichert...\n");
                        fclose(Bestand);
                        system("PAUSE");
                    }
                
                }
                break;
            default :
                printf("Noch nicht implementiert");
        }
        system("CLS");
        SchreibeListeFormatiert(liste,AnzTeile);
        system("PAUSE");
        printf("Neue Aktion? [j/n] : ");
        ende = getchar();
    } while (ende != 'n' && ende != 'N');

    return 0;
}




Bearbeitung:

Bitte Codetags verwenden, danke


Dieser Post wurde am 15.01.2009 um 08:40 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: