Funktion, die die Nummer automatisch erhöhen soll
-
Hallo,
ich soll ein Lagerverwaltungsprogramm schreiben. Das Programm funktioniert soweit gut.
Nun möchte ich eine Funktion schreiben, mit der den aufgenommenen Artikel automatisch eine Artikelnummer(Kistennummer) zugewiesen wird.
Das klappt allerdings nur im CASE Bereich. Alle anderen Funktionen laufen dann einwandfrei.// Funktionsproblem.cpp: Hauptprojektdatei. #include "stdafx.h" using namespace System; struct kiste { Int32 kistenNummer; Int32 hoehe; Int32 breite; Int32 laenge; Int32 volumen; }; // die Funktion zum Einlesen der Kistendaten, die beim Aufruf nicht funktioniert void einlesen(kiste k[]) { int i; k[i].kistenNummer=i; Console::Write("Länge des Artikels : "); k[i].laenge=Convert::ToInt32(Console::ReadLine()); Console::Write("Höhe des Artikels : "); k[i].hoehe=Convert::ToInt32(Console::ReadLine()); Console::Write("Breite des Artikels : "); k[i].breite=Convert::ToInt32(Console::ReadLine()); Console::WriteLine(); Console::WriteLine("Art.nr. lautet {0}",i); Console::WriteLine("Volumen = {0}",k[i].breite*k[i].hoehe*k[i].laenge); Console::WriteLine(); i++; } int main(array<System::String ^> ^args) { kiste k[100]; Int32 funktionen; int i=1 ; for(Int32 i = 0; i < 100; i++){ k[i].kistenNummer = 0; k[i].hoehe = 0; k[i].laenge = 0; k[i].breite = 0; k[i].volumen = 0; } do { Console::WriteLine(); Console::WriteLine(" Auswahl der Funktionen"); Console::WriteLine(" 1 Eingabe der Daten für die Kisten"); Console::WriteLine(" 2 Loeschen einer Kiste"); Console::WriteLine(" 3 Alle Kisten anzeigen"); Console::WriteLine(" 4 Eine Kiste anzeigen"); Console::WriteLine(" 5 Kistedaten ändern"); Console::WriteLine(" 6 Programmende"); Console::WriteLine(); Console::Write(" Bitte eine Nummer eingeben = "); funktionen = Convert::ToInt32(Console::ReadLine()); Console::WriteLine(); switch (funktionen){ case 1: //einlesen(k); GEBE ICH DIE FUNKION AN,FUNKTIONIERTS NICHT k[i].kistenNummer=i; Console::Write("Länge des Artikels : "); k[i].laenge=Convert::ToInt32(Console::ReadLine()); Console::Write("Höhe des Artikels : "); k[i].hoehe=Convert::ToInt32(Console::ReadLine()); Console::Write("Breite des Artikels : "); k[i].breite=Convert::ToInt32(Console::ReadLine()); Console::WriteLine(); Console::WriteLine("Art.nr. lautet {0}",i); Console::WriteLine("Volumen = {0}",k[i].breite*k[i].hoehe*k[i].laenge); Console::WriteLine(); i++; break; case 2: //loeschen(k); break; case 3: //anzeigen(k); break; case 4: //einartikel(k); break; case 5: //aendern(k); break; default: Console::WriteLine(" Falsche Eingabe"); break; } }while(funktionen != 6); return 0; }
-
hi ursk,
schon wieder Kisten?
Wie viele gibt es denn davon?
Ist da ein Nest?
Hört das nie auf?
Never ending Story!Naja, Du kannst ja auch nix dafür, deswegen ein wenig Code.
Aber vorweg noch.
Das verstehe ich nicht ganz...
void einlesen(kiste k[])
Was versuchst Du damit?
Deswegen der zweite Code-Abschnitt, nur so als Beispiel..
for (Byte counter=0;counter<100;counter++) //Diese Schleife überprüft ob die ID der Kiste noch Frei ist. { if (kiste[counter].kistenNummer == 0) //Wenn die ID der Kiste gleich 0 ist, ist diese Kiste noch Frei { Console::WriteLine("\nBitte geben Sie die Daten für die {0}. Kiste ein.",counter+1); kiste[counter] = neueKisteAufnehmen(counter); break;//Die Schleife verlassen } else { if (counter==99) //Nun sind alle 100 Felder von "kiste" voll 0-99 = 100; { Console::WriteLine("\nSie müssen min. eine Kiste löschen, da die Stückzahl von 100 erreicht ist."); } } }
Und die Funktion für die "Kisten-Aufnahme" sollte in etwa so aussehen...
kistenBestand neueKisteAufnehmen(Byte kistenNummer)//Neue Kiste aufnehmen { kistenBestand aKiste; Boolean EingabeOKnewBox = true; //Die Variable für die while-Schleife while(EingabeOKnewBox ==true) { try { aKiste.kistenID = kistenNummer+1; //Die Kisten ID wird um 1 erhöht, sonst hätten wir eine Kiste 0 Console::Write("\nBitte geben Sie die Länge der Kiste ein: "); aKiste.laenge = Convert::ToDouble(Console::ReadLine()); Console::Write("\nBitte geben Sie die Breite der Kiste ein: "); aKiste.breite = Convert::ToDouble(Console::ReadLine()); Console::Write("\nBitte geben Sie die Höhe der Kiste ein: "); aKiste.hoehe = Convert::ToDouble(Console::ReadLine()); aKiste.volumen = (aKiste.laenge * aKiste.breite * aKiste.hoehe); Console::Clear(); Console::WriteLine("\nDie Eingabe wurde als {0}. Kiste erfolgreich gespeichert.\n",kistenNummer+1);//IDKistenzaehler EingabeOKnewBox=false; //Die Variable für die while-Schleife auf 'false' setzen, weil die Eingabe Ok war. } catch (...) { Console::Clear(); Console::WriteLine("\nDie Eingabe ist nicht gültig. Bitte geben Sie die Daten für die {0}. Kiste ein.",kistenNummer+1); } } return aKiste; }
Gruß, Doug_HH
-
Hallo Doug_HH,
dank deiner Hilfe habe ich die Funktion hinbekommen und das Programm läuft jetzt so, wie ich es mir vorstelle.
Das mit den Kisten scheint eine beliebte Aufgabenstellung einiger Fernlehrgänge zu sein und wird in den nächsten Jahren wahrscheinlich des öfteren hier auftauchen, sofern man nicht auf Dosen umstellt.
Mit
void einlesen(kiste k[])
habe ich folgendes gemeint, weiß aber nicht ob's richtig ist:
void NameDerFunktion (double [] );
Durch die leere eckige Klammer erkennt der Compiler, dass hier ein double – Feld mit einer unbestimmen Anzahl Positionen übergeben wird.Nochmals vielen Dank für deine umfangreiche Mühe
Gruß
ursk