Lagerverwaltung in C#
-
Das hast du doch momentan. Wenn du jetzt Löschen(lager) aufrufst, löschst du nicht das ganze Lager, sondern musst eine Kisten ID eingeben. Fälschlicherweise könnte man aber annehmen, dass du das ganze Lager löschst.
-
freaky schrieb:
Das hast du doch momentan. Wenn du jetzt Löschen(lager) aufrufst, löschst du nicht das ganze Lager, sondern musst eine Kisten ID eingeben. Fälschlicherweise könnte man aber annehmen, dass du das ganze Lager löschst.
Leider tut das Program jetzt was er will. Weder speichert er die Kisten, noch kann er Sie Anzeigen
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Lagerverwaltung { 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(List<Kiste> lager) { int ID; Console.WriteLine("Geben Sie Nummer der zu löschenden Kiste ein (1-{0}):\t", lager.Count); ID = Convert.ToInt32(Console.ReadLine()) - 1; if (ID >= 0 && ID < lager.Count) { lager.RemoveAt(ID); } else Console.WriteLine("Sie haben eine nicht vorhandene Kistenummer eingegeben!"); } static void Main(string[] args) { Console.BackgroundColor = ConsoleColor.Blue; Kiste[] Lager = new Kiste[2]; int Auswahl = 0; while (Auswahl != 6) { Console.WriteLine("\nFolgende Auswahl steht Ihnen zur Verfügung: \n"); 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) übersicht über alle angelegten Kisten"); Console.Write("Bitte wählen Sie:\t"); Auswahl = Convert.ToInt32(Console.ReadLine()); List<Kiste> lager = new List<Kiste>(); switch(Auswahl) { case 1: lager.Add(Neu(lager.Count + 1)); break; case 2: Löschen(lager); break; case 3: // Problem Nr. 2.. break; case 4: // Problem Nr. 3.. break; case 5: foreach (Kiste k in Lager) { Console.WriteLine("Kiste:" + k.Nummer + ", Breite:" + k.Breite + ", Hoehe: " + k.Hoehe + ", Laenge: " + k.Laenge + ", Volumen: " + k.Volumen); } break; default: Console.WriteLine("\n!!!Sie haben eine falsch Auswahl getroffen!!!\n\n"); break; } } } } }
-
Du legst ja auch in jedem Schleifendurchgang eine neue List an und überschreibst die alte:
List<Kiste> lager = new List<Kiste>();So eine Kistenverwaltung wurde schonmal durchgekaut hier im Forum.
-
µ schrieb:
Du legst ja auch in jedem Schleifendurchgang eine neue List an und überschreibst die alte:
List<Kiste> lager = new List<Kiste>();So eine Kistenverwaltung wurde schonmal durchgekaut hier im Forum.
Ja einmal habe ich die gesehen in C++ aber leider nicht in C# - da war bis jetzt nichts zu finden hier..
-
Doch auch in C#.
-
µ schrieb:
Doch auch in C#.
Hallo µ,
bin dann entweder Blind oder diese Thema ist Archiviert.
Ich bekomme unter Begriffen wie Lagerverwaltung oder Kistenverwaltung meldung:
**
Keine Beiträge entsprechen Ihren Kriterien.**
-
:p
http://www.c-plusplus.net/forum/303648-full
Musst mal schauen ob das brauchbar ist. Der OP damals war null mit OOP vertraut und entsprechend unschön wurde es.
-
µ schrieb:
:p
http://www.c-plusplus.net/forum/303648-full
Musst mal schauen ob das brauchbar ist. Der OP damals war null mit OOP vertraut und entsprechend unschön wurde es.
Hallo µ, ich schäme mich dafür ... haha ..
Ich habe doch noch eine Frage ( für Profi bestimmt nach 10 sekunden zu sehen). Ich kann die Methoden "Alle Anzeigen", "Anzeigen" und "Ändern" nicht ansprechen obwoh Sie definiert sind. Dafür "Eingeben" und "Löschen" schon.
any idea?
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Lagerverwaltung { class Program { const int MaxKisten = 50; //Kiste / Lager Struktur struct Kiste { public int Hoehe; public int Breite; public int Laenge; public int Aktiv; public int Volumen; public int kistenID; } static void einlesen(Kiste[] aKiste) { for (int index = 0; index < 50; index++) { if (aKiste[index].Aktiv == 0) { Console.Write("Geben Sie die Höhe der {0}. Kiste ein: ", aKiste[index].kistenID); aKiste[index].Hoehe = Convert.ToInt32(Console.ReadLine()); Console.Write("Geben Sie die Breite der {0}. Kiste ein: ", aKiste[index].kistenID); aKiste[index].Breite = Convert.ToInt32(Console.ReadLine()); Console.Write("Geben Sie die Länge der {0}. Kiste ein: ", aKiste[index].kistenID); aKiste[index].Laenge = Convert.ToInt32(Console.ReadLine()); aKiste[index].Aktiv = 1; aKiste[index].Volumen = aKiste[index].Hoehe * aKiste[index].Laenge * aKiste[index].Breite; break; } else { Console.WriteLine("Die Kiste {0} ist belegt.", aKiste[index].kistenID); } } } // Methode zum Anzeigen static void anzeigen(Kiste aKiste) { int Nummer; Console.WriteLine("Welche Kiste wollen Sie anzeigen lassen? Geben Sie eine Nummer von 1 - 50 ein:"); Nummer = Convert.ToInt32(Console.ReadLine()) - 1; if (Nummer <= 50 && Nummer >= 1) { if (aKiste.Aktiv == 1) { Console.WriteLine("Kisten Nummer: {0}, Höhe {1}, Breite: {2}, Länge: {3}, Volumen: {4}", aKiste.kistenID, aKiste.Hoehe, aKiste.Breite, aKiste.Laenge, aKiste.Volumen); } else { Console.WriteLine("Kisten Nummer: {0} ist nicht belegt.", aKiste.kistenID); } } } // Methode zum Löschen static void loeschen(Kiste[] aKiste) { int Nummer; Console.WriteLine("Welche Kiste wollen Sie löschen? Geben Sie eine Nummer von 1 - 50 ein."); Nummer = Convert.ToInt32(Console.ReadLine()) - 1; if (Nummer <= 50 && Nummer >= 0) { if (aKiste[Nummer].Aktiv == 0) { Console.WriteLine("Die Kiste ist bereits gelöscht."); } if (aKiste[Nummer].Aktiv == 1) { aKiste[Nummer].Aktiv = 0; aKiste[Nummer].Hoehe = 0; aKiste[Nummer].Laenge = 0; aKiste[Nummer].Breite = 0; aKiste[Nummer].Volumen = 0; Console.WriteLine("kistenID: {0} gelöscht.", aKiste[Nummer].kistenID); } } } // Methode zum Ändern static void aendern(Kiste aKiste) { int Nummer; Console.WriteLine("Welche Kiste wollen sie ändern? Geben sie eine Nummer von 1-50 ein."); Nummer = Convert.ToInt32(Console.ReadLine()) - 1; if (Nummer <= 50 && Nummer >= 0) { if (aKiste.Aktiv == 1) { Console.WriteLine("Geben sie bitte die Höhe der Kiste ein:"); aKiste.Hoehe = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Geben sie bitte die Breite der Kiste ein:"); aKiste.Breite = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Geben sie bitte die Länge der Kiste ein:"); aKiste.Laenge = Convert.ToInt32(Console.ReadLine()); aKiste.Volumen = aKiste.Hoehe * aKiste.Breite * aKiste.Laenge; } } else Console.WriteLine("Die Kiste gibt es nicht."); } // Methode zum Anzeigen von allen Kisten static void alle(Kiste aKiste) { for (int index = 0; index < MaxKisten; index++) { if (aKiste.Aktiv == 1) { Console.WriteLine("kistenID: {0}, Höhe {1}, Breite: {2}, Länge: {3}, Volumen: {4}", aKiste.kistenID, aKiste.Hoehe, aKiste.Breite, aKiste.Laenge, aKiste.Volumen); } else Console.WriteLine("Die Kiste gibt es nicht"); } } static void Main(string[] args) { int eingabe = 0; //ein lokales Array aKiste für die Struktur Kiste Kiste[] lagerraum = new Kiste[50]; //Alle kistenID auf 1-50 setzen, damit die erste Kiste nicht mit 0 angesprochen wird //Status Aktiv auf 0 setzen um die Existenz der Kisten zu verwalten for (int index = 0; index < 50; index++) { lagerraum[index].kistenID = index + 1; lagerraum[index].Aktiv = 0; } //Auswahlmenü Schleife while (eingabe != 6) { Console.WriteLine("Bitte wählen Sie mit den Zahlen aus was Sie tun möchten.\n"); Console.WriteLine("[1] Kiste anlegen"); Console.WriteLine("[2] Alle Kisten auflisten"); Console.WriteLine("[3] Eine bestimmte Kiste auflisten"); Console.WriteLine("[4] Kiste löschen"); Console.WriteLine("[5] Kiste ändern"); Console.WriteLine("[6] Programm beenden\n"); eingabe = Convert.ToInt32(Console.ReadLine()); switch (eingabe) { case 1: einlesen(lagerraum); break; case 2: //und hier kann ich die nicht ausgeben //alle(lagerraum); break; case 3: //hier auch nicht //anzeigen(lagerraum); break; case 4: loeschen(lagerraum); break; case 5: //und ändern funktioniert auch nicht //aendern(lagerraum); break; case 6: break; } } } } }
-
Was verstehst du unter ansprechen? Wenn du damit meinst, dass die Methoden nicht funktionieren, hast du Recht. Aufrufen kann man sie aber. Schau dir mal deine Methoden an. Du nimmst nur eine Kiste entgegen, wie willst du dann alle ausgeben?
-
freaky schrieb:
Was verstehst du unter ansprechen? Wenn du damit meinst, dass die Methoden nicht funktionieren, hast du Recht. Aufrufen kann man sie aber. Schau dir mal deine Methoden an. Du nimmst nur eine Kiste entgegen, wie willst du dann alle ausgeben?
Achhhhhhh...!
Danke! Thema hat sich erledigt. Programm Funktioniert jetzt