Struktur mit Feld (Zugriff/Löschen/Ändern von per User gewähltem bestimmten Wert,



  • Hallo zusammen,

    ich muss für mein Studium eine Aufgabe abschließen und komme einfach nicht mehr weiter..

    Ziel:
    Das Ziel ist es ein simples Lagerverwaltungsprogramm zu erstellen, welches x-Kisten abspeichern kann und deren Abmessungen speichert
    Folgendes soll als Funktion definiert werden:
    Einlesen/Ändern/Löschen/Anzeigen/Liste Details

    Was muss vom User gemacht werden:

    • Über ein Hauptmenü ändert der User den Zugriff auf die Strukturvariable (Einlesen/Löschen/Ändern/Anzeigen/Liste Details)
    • Der Enduser gibt für Kiste (x) die jeweilige Länge/Höhe/Breite an
    • Der Enduser kann sich eine Kiste der Strukturvariable auswählen, diese löschen, Daten ändern oder einfach anzeigen lassen.

    Mein Problem:
    Ich komme einfach nicht drauf, wie ich in meinem Code die Kiste (x) per cin >> auswählen kann, um Werte anzuzeigen, zu löschen oder zu ändern.
    Die Struktur ist Kiste, Strukturvariable Lagerraum[50]. Wie kann ich über eine Funktion den Index abfragen und dann entsprechend verweisen? Ich sehe grad den Wald vor lauter Bäumen nicht...

    CODE BEI PASTEBIN zur einfacheren Veranschaulichung:
    https://pastebin.com/8XMPJiQG

    
    using namespace std;
    
    struct kiste
    {
    int laenge;
    int breite;
    int hoehe;
    int nummer;
    };
    
    kiste einlesen(int Kiste)
    {
        kiste aKiste;
        cout << "Bitte gib die Hoehe der Kiste Nummer "<< Kiste << " ein:" << endl;
        cin >> aKiste.hoehe;
        cout << "Bitte gib die Laenge der Kiste Nummer "<< Kiste << " ein:" << endl;
        cin >> aKiste.laenge;
        cout << "Bitte gib die Breite der Kiste Nummer "<< Kiste << " ein:" << endl;
        cin >> aKiste.breite;
        cout << '\n';
    
        return aKiste;
    }
    
    int Volumen(kiste aKiste)
    {
        int Volumenwert;
        Volumenwert = aKiste.hoehe * aKiste.laenge * aKiste.breite;
    
        return Volumenwert;
    }
    /*
    kiste aendern(int Kiste)
    {
        kiste aKiste;
        cout << "Bitte gib die neue Hoehe der Kiste Nummer "<< Kiste << " ein:" << endl;
        cin >> aKiste.hoehe;
        cout << "Bitte gib die neue Laenge der Kiste Nummer "<< Kiste << " ein:" << endl;
        cin >> aKiste.laenge;
        cout << "Bitte gib die neue Breite der Kiste Nummer "<< Kiste << " ein:" << endl;
        cin >> aKiste.breite;
        cout << '\n';
    
        return aKiste;
    }
    
    int Ansicht(kiste aKiste)
    {
        for (int i = 0; i < 50; ++i) {
            cout << aKiste.nummer[i] << "  ";
        cout << "Bitte wählen Sie die zu ändernde Kiste aus:\n";
        cin >> aKiste.nummer[i-1];
    
        return aKiste;
    }
    
    kiste Ansicht(int Kiste)
    {
        kiste aKiste;
        cout << "Bitte gib die neue Hoehe der Kiste Nummer "<< Kiste << " ein:" << endl;
        cin >> aKiste.hoehe;
        cout << "Bitte gib die neue Laenge der Kiste Nummer "<< Kiste << " ein:" << endl;
        cin >> aKiste.laenge;
        cout << "Bitte gib die neue Breite der Kiste Nummer "<< Kiste << " ein:" << endl;
        cin >> aKiste.breite;
        cout << '\n';
    
        return aKiste;
    }
    */
    int main()
    {
    
        char Auswahl;
        cout << "Waehlen Sie bitte den gewuenschten Menuepunkt:\n";
        cout << '\n';
        cout << "a) Datensatz einlesen\n";
        cout << "b) Datensatz loeschen\n";
        cout << "c) Datensatz aendern\n";
        cout << "d) Datensatz Ansicht\n";
        cout << "e) Datensatz als Liste einsehen\n";
        cout << '\n';
        cin >> Auswahl;
        switch(Auswahl)
    {
        case 'a':
        case 'A':
            cout << "Sie haben DATEN EINLESEN gewaehlt: \n";
            einlesen(Auswahl);
            break;
        case 'b':
        case 'B':
            cout << "Sie haben DATEN LOESCHEN gewaehlt: \n";
            loeschen(Auswahl);
            break;
        case 'c':
        case 'C':
            cout << "Sie haben DATEN AENDERN gewaehlt: \n";
            aendern(Auswahl);
            break;
        case 'd':
        case 'D':
            cout << "Sie haben DATEN ANSICHT gewaehlt: \n";
            Aendern(Auswahl);
            break;
        case 'e':
        case 'E':
            cout << "Sie haben DATEN AUFLISTUNG gewaehlt: \n";
            break;
        default:
        cout << "Sie haben keine gültige Auswahl getroffen!:\n";
    }
    
        kiste Lagerraum[50];
        for (int schleife = 0; schleife <= 49; schleife++)      // Abmessungen einlesen
            Lagerraum[schleife] = einlesen(schleife+1);
    
        for (int schleife =0; schleife <= 49; schleife++)       // Volumen der Kisten berechnen
            cout << "Das Volumen von Kiste " << schleife+1 << " ist:" << Volumen (Lagerraum[schleife]) << '\n';
    
    
        return 0;
    }
    
    

    Ich hoffe der Code ist nicht allzu wirr und ihr könnt mir den Stups in die richtige Richtung geben 🙂

    Danke vorab!



  • int platz;
    
    cin>> platz;
    


  • @manni66
    Hallo manni66,
    Danke dir! Das sind ja die generellen Befehle eine Variable zu deklarieren und einzulesen.
    Aber wie mache ich das mit einer Struktur bzw. der Strukturvariablen als array?



  • So kannst du doch dann mittels Lagerraum[platz] auf eine einzelne Kiste zugreifen und z.B. per

    Lagerraum[platz] = aendern(platz);
    

    die geänderten Daten zuweisen.
    Besser wäre hier zwar mit Referenzen als Übergabeparameter zu arbeiten (kiste& aKiste), aber ich weiß nicht, ob du das schon gelernt hast.

    Außerdem ist die Reihenfolge in deiner main-Funktion bisher noch falsch. Du zeigst erst das Menü an und erst danach legst du die Lagerraum-Variable an, d.h. bisher kannst du im Menü gar nicht darauf zugreifen.
    Außerdem solltest du das Menü solange anzeigen lassen, bis der Anwender explizit das Programm schließen möchte (mit z.B. 'x'oder 'q').

    PS: Dein Thema ist im falschen Unterforum (sollte nach Standard C++).