Lagerverwaltung /Struktur
-
Nee drei
Aber es ist nicht C++. Dieses C++/CLI scheint doch sehr wenig von C++ zu haben. Im Visual C++ 2010 Framework? kann man aber C++ schreiben.
Bin übrigens bei der selben Aufgabe
champman
-
Hallo habe die Beiträge gelesen doch ich habe noch ein anderes Problem. Bei mir klappt der Aufruf der Methode aus dem Main() Programm nicht.
Habe die Stelle mit ?????? gekennzeichnet, weiß nicht wie ich die Methode Lösche() aufrufen kann.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { struct Kiste { public int Nummer; public int Hoehe; public int Breite; public int Laenge; public int Volumen; } static Kiste Neu(int KisteNeu) { Kiste Verwaltung; Console.Write("Geben Sie die Höhe der {0}. Kiste ein: ", KisteNeu); Verwaltung.Hoehe = Convert.ToInt32(Console.ReadLine()); Console.Write("Geben Sie die Breite der {0}. Kiste ein: ", KisteNeu); Verwaltung.Breite = Convert.ToInt32(Console.ReadLine()); Console.Write("Geben Sie die Länge der {0}. Kiste ein: ", KisteNeu); Verwaltung.Laenge = Convert.ToInt32(Console.ReadLine()); Verwaltung.Volumen = Verwaltung.Hoehe * Verwaltung.Breite * Verwaltung.Laenge; Console.WriteLine("Das Volumen dieser Kiste beträgt:\t{0}", Verwaltung.Volumen); Console.WriteLine(); Verwaltung.Nummer = 1; return Verwaltung; } static void Löschen(Kiste Verwaltung) { int ID; Console.WriteLine("Geben Sie Nummer der zu löschenden Kiste ein (1-100):\t"); ID = Convert.ToInt32(Console.ReadLine()) - 1; if (ID >= 0 && ID < 100) { if (Verwaltung.Nummer == 0) { Console.WriteLine("Die Kiste ist bereits gelöscht"); } if (Verwaltung.Nummer == 1) { Verwaltung.Nummer = 0; Verwaltung.Hoehe = 0; Verwaltung.Breite = 0; Verwaltung.Laenge = 0; Console.WriteLine("Kistennummer: {0} GELÖSCHT", ID); } } else Console.WriteLine("Sie haben eine nicht vorhandene Kistenummer eingegeben!"); } static void Main(string[] args) { Kiste[] Lager = new Kiste[2]; int Auswahl = 0; while (Auswahl != 6) { Console.WriteLine("\nSie haben nun folgende Auswahl zur Verfügung: \n"); Console.WriteLine("1) neue Kiste anlegen"); Console.WriteLine("2) Datensatz löschen"); Console.WriteLine("3) Datensatz ändern"); Console.WriteLine("4) Datensatz anzeigen"); Console.WriteLine("5) Übersicht über alle angelegten Datensätze"); Console.WriteLine("6) Programm beenden\n\n"); Console.Write("Bitte wählen Sie:\t"); Auswahl = Convert.ToInt32(Console.ReadLine()); switch (Auswahl) { case 1: for (int index = 0; index < Lager.Length; index++) Lager[index] = Neu(index + 1); break; case 2: Löschen(????????); break; case 3: Console.WriteLine("\n\n"); break; case 4: Console.WriteLine("\n\n"); break; case 5: Console.WriteLine("\n\n"); break; default: Console.WriteLine("\n!!!Sie haben eine falsch Auswahl getroffen!!!\n\n"); break; } } } } }
Danke
-
Schau Dir mal das an:
http://www.c-plusplus.net/forum/291527
-
Das ist ja recht und gut aber ich versteh das dennoch gerade nicht. Will ja kein fertiges sondern eher eine Erklärung was ich in den Klammern von Löschen() schreiben muss um die Methode aufzurufen.
Dort steh ich auf dem Schlauch und komme nicht weiter, wäre echt super wenn mir einer helfen könnte.
-
Schau Dir doch die Lösung an, dann siehst Du es doch...
-
Sorry klar das hab ich auch aber mit den vielen verschiedenen Begriffen und Zuweisungen komm ich noch nicht ganz klar. Bin recht neu beim programmieren, daher wäre ich wirklich dankbar wenn es einer versucht mir Schritt für Schritt zu erklären warum ich was in die Klammer von Löschen schreiben muss.
Denn bei der Lösung kann ich nicht nachvollziehen warum da grossekiste drin steht.Bitte
-
Hallo,
habe das Programm auch als Aufgabe bearbeitet, und es über extra definierte Methoden geschrieben so dass ich alle Quelltexte klein gehalten habe.
Hast du denn jetzt eine Lösung ?
Arbeite zur zeit am verständnis der tracking handles
Gruss
Aleana
-
Hallo
Die Aufgabe gibts immer noch.... aber bei mir etwas abgeändert...Soweit funktioniert alles.
Nur kann ich das Programm nicht beenden. kann die auswahl zwar eingeben, programm stürzt dann aber ab. wenn ich die schleife in main vor dem while rausnehme gehts aber die brauch ich ja damit die kisten alle auf 0 gesetzt werden...
Außerdem suche ich nach einer möglichkeit dass wenn beim ausgeben der funktion alle der untere bildschirmrand erreicht ist die ausgabe anhält und durch tastendruck weiterläuft...Für tips wäre ich sehr dankbar!
#include "stdafx.h"
using namespace System;
const Int32 Maxzahl=1000;
struct Kiste {
Int32 kistenNummer;
Int32 höhe;
Int32 breite;
Int32 länge;
Int32 volumen;
};void anlegen (Kiste feld[Maxzahl]) {
Int32 i;
Console::WriteLine("Welche Kiste soll neu angelegt werden?");
Console::Write("Bitte geben Sie eine Nummer für die Kiste ein: ");
i=Convert::ToInt32(Console::ReadLine())-1;if (i <= Maxzahl && i >= 0){
if (feld[i].kistenNummer ==0){
Console::WriteLine("\nBitte geben sie die Kistendaten ein: ");
Console::Write("\nBreite:\t");
feld[i].breite=Convert::ToInt32(Console::ReadLine());
Console::Write("\nHöhe:\t");
feld[i].höhe=Convert::ToInt32(Console::ReadLine());
Console::Write("\nLänge:\t");
feld[i].länge=Convert::ToInt32(Console::ReadLine());feld[i].volumen=feld[i].breite*feld[i].höhe*feld[i].länge;
Console::WriteLine("\n--> Volumen = {0}", feld[i].volumen);
feld[i].kistenNummer=i+1;
}
else
Console::WriteLine("\nDiese Kiste ist schon vergeben. Bitte wählen Sie eine andere.");
}
else
Console::WriteLine("\nIhre Eingabe war ungültig. Bitte versuchen Sie es erneut.");
}void löschen (Kiste feld[Maxzahl]){
Int32 i;
Console::WriteLine("Welche Kiste soll gelöscht werden?");
Console::Write("Bitte geben Sie eine Nummer für die Kiste ein: ");
i=Convert::ToInt32(Console::ReadLine())-1;if (i <= Maxzahl && i >= 0){
if (feld[i].kistenNummer >0){
feld[i].kistenNummer=0;
}
else
Console::WriteLine("\nDiese Kiste existiert noch nicht. Bitte wählen sie eine andere.");
}
else
Console::WriteLine("\nIhre Eingabe war ungültig. Bitte versuchen Sie es erneut.");
}void ändern (Kiste feld[Maxzahl]){
Int32 i;
Console::WriteLine("Welche Kiste soll geändert werden?");
Console::Write("Bitte geben Sie eine Nummer für die Kiste ein: ");
i=Convert::ToInt32(Console::ReadLine())-1;if (i <= Maxzahl && i >= 0){
if (feld[i].kistenNummer >0){
Console::WriteLine("\nBitte geben sie die Kistendaten ein:");
Console::Write("\nBreite:\t");
feld[i].breite=Convert::ToInt32(Console::ReadLine());
Console::Write("\nHöhe:\t");
feld[i].höhe=Convert::ToInt32(Console::ReadLine());
Console::Write("\nLänge:\t");
feld[i].länge=Convert::ToInt32(Console::ReadLine());feld[i].volumen=feld[i].breite*feld[i].höhe*feld[i].länge;
Console::WriteLine("\n--> Volumen = {0}", feld[i].volumen);
feld[i].kistenNummer =i+1;
}
else
Console::WriteLine("\nDiese Kiste existiert noch nicht. Bitte wählen sie eine andere.");
}
else
Console::WriteLine("\nIhre Eingabe war ungültig. Bitte versuchen Sie es erneut.");
}void anzeigen(Kiste feld[Maxzahl]){
Int32 i;
Console::WriteLine("Welche Kiste soll angezeigt werden?");
Console::Write("Bitte geben Sie eine Nummer für die Kiste ein: ");
i=Convert::ToInt32(Console::ReadLine())-1;if (i <= Maxzahl && i >= 0){
if (feld[i].kistenNummer >0){
Console::WriteLine("\nNummer:\t{0}", feld[i].kistenNummer);
Console::WriteLine("Breite:\t{0}", feld[i].breite);
Console::WriteLine("Höhe:\t{0}", feld[i].höhe);
Console::WriteLine("Länge:\t{0}", feld[i].länge);
Console::WriteLine("Volumen:\t{0}", feld[i].volumen);
}
else
Console::WriteLine("\nDiese Kiste existiert noch nicht. Bitte wählen sie eine andere.");
}
else
Console::WriteLine("\nIhre Eingabe war ungültig. Bitte versuchen Sie es erneut.");
}void alle (Kiste feld[Maxzahl]){
Console::WriteLine("\nNummer\tBreite\tHöhe\tLänge\tVolumen");
for (Int32 i=0;i<=Maxzahl;i++){
if (feld[i].kistenNummer >0)
Console::WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", feld[i].kistenNummer,feld[i].breite,feld[i].höhe,feld[i].länge,feld[i].volumen);
}
}int main(array<System::String ^> ^args)
{
Kiste feld[Maxzahl];
Int32 auswahl =0;for (Int32 i=0; i <= Maxzahl; i++){
feld[i].kistenNummer=0;
}while (auswahl != 9){
Console::WriteLine("\nBitte wählen Sie eine Funktion aus");
Console::WriteLine("1 - Neue Kiste anlegen");
Console::WriteLine("2 - Kiste löschen");
Console::WriteLine("3 - Kiste ändern");
Console::WriteLine("4 - Kiste anzeigen");
Console::WriteLine("5 - Liste aller Kisten ausgeben");
Console::WriteLine("9 - Programm beenden");
Console::Write("\nIhre Auswahl: ");
auswahl=Convert::ToInt32(Console::ReadLine());switch (auswahl){
case 1:
anlegen(feld);
break;case 2:
löschen(feld);
break;case 3:
ändern (feld);
break;case 4:
anzeigen (feld);
break;case 5:
alle (feld);
break;case 9:
break;default:
Console::WriteLine("Ihre Eingabe war ungültig. Bitte versuchen Sie es erneut.");
}}
Console::Read();
return 0;
}
-
Wenn das Programm abstürzt, dann musst Du einfach Debuggen, dann siesht Du sofort was Du falsch gemacht hast...
-
Danke für die schnelle Antwort aber...
sry aber das mit dem debuggen ist mir neu. Bekomme da folgende meldung:
STATUS_STACK_BUFFER_OVERRUN encountered
Der Thread 'Win32-Thread' (0x1198) hat mit Code -1073740791 (0xc0000409) geendet.
Der Thread 'Win32-Thread' (0xef8) hat mit Code -1073740791 (0xc0000409) geendet.
Der Thread 'Win32-Thread' (0x10c8) hat mit Code -1073740791 (0xc0000409) geendet.
Das Programm "[3948] c4.exe: Systemeigen" wurde mit Code -1073740791 (0xc0000409) beendet.
Das Programm "[3948] c4.exe: Verwaltet (v4.0.30319)" wurde mit Code -1073740791 (0xc0000409) beendet.was heißt das denn im einzelnen? Wo finde ich die erklärung zu dem code?
Und hast du villeicht ne Idee wegen der Sache mit dem Anhalten bei der Auflistung?
-
Du initialisierst hier ein Array mit einem Element zu viel!
Kiste feld[Maxzahl]; for (Int32 i=0; i <= Maxzahl; i++){ feld[i].kistenNummer=0; }
Und dies wird beim Verlassen der "main" Methode festgestellt...
=>Kiste feld[Maxzahl]; for (Int32 i=0; i < Maxzahl; i++){ feld[i].kistenNummer=0; }
-
ahhh...
hoffe liege jetzt nicht voll daneben... Wenn ich dem Array Maxzahl 3 Elemente gebe und ihm dann beim initialisieren aber sage <= Maxzahl hat er wegen der 0 eins zu viel und beschwert sich...???
Hab den Code dementsprechend überall geändert. Alles einwandfrei.
Vielen Vielen Dank. Hat mich heute kirre gemacht.
-
Einfach mitzählen:
<=
0, 1, 2, 3 => 4 Einträge...
-
oh man wohl so ein richtiger Anfängerfehler...Dann geh ich mal weiter üben...
Danke
-
Hänge auch bei dieser Aufgabe.
Habe mir hier schon alles durchgelesen, auch diese Komplette C++ Bauweise.Aber es geht schon los, solle es in C# programmieren.
wenn ich auch z.b. einen punkt anwähle, in der switch case bauweise, macht er den Punkt und dann hört er mit dem Programm auf.
while (Auswahl != 6)
kommt zwar dann wieder das menü, aber er hat irgendwie nix gespeichert.
Meinen Programmcode brauche ich garnicht hier posten, der ist einfach nur SCHROTT
hat vll jemand irgendwie das Programm oder so, würde mich auch sehr erkenntlich zeigen