struct-Konstrukt in Array einlesen und an Methode übergeben
-
Hallo Gemeinde,
ich absolviere grad ein Studium (ILS) und habe zur Aufgabe, mit C# ein Lagerverwaltungsprogramm zu schreiben. Dazu soll eine struct gebaut werden, welches in ein Array eingelesen und über Methoden bearbeitet werden soll.
Leider sehe ich nix, außer dem Brett vor´m Kopf. Ich finde weder im Netz, noch in meiner Literatur eine Lösung für meinen Fehler.
Mein Code bisher :
namespace CSHP04C___EA { class Program { //die Struktur struct Kiste { public string id_kiste; public double breite; public double laenge; public double hoehe; public double volumen; } //die Methode zum Einlesen static Kiste Einlesen(int kistenNr) { Kiste akiste; Console.WriteLine("\nBitte Namen fuer Kiste {0} eingeben : ",kistenNr); akiste.id_kiste = Convert.ToString(Console.ReadLine()); Console.WriteLine("\n\nDie Breite von Kiste {0} : ",kistenNr); akiste.breite = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Die Laenge von Kiste {0} : ",kistenNr); akiste.laenge = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Die Hoehe von Kiste {0} : ",kistenNr); akiste.hoehe = Convert.ToDouble(Console.ReadLine()); akiste.volumen = akiste.breite * akiste.laenge * akiste.hoehe; Console.WriteLine("\n\n\nDas Volumen von Kiste {0} : {1} Liter. ",kistenNr, akiste.volumen); Console.WriteLine(); return akiste; } //die Methode zum Auflisten static void Auflisten(Kiste[] liste) { foreach(Kiste element in liste) { Console.WriteLine("\nKiste {0} ", liste); Console.WriteLine("\nBeliebige Taste fuer Hauptmenue !!"); Console.ReadKey(); } } static void Main(string[] args) { int maximum = 2; Kiste[] kleineKiste = new Kiste[maximum]; int anzahl = 0; char auswahl; bool repeat = true; //do -Schleife fuer Hauptmenue do { //das Auswahl-Menue Console.Clear(); Console.WriteLine(); Console.WriteLine("\n\t\t\t\t\t\t\t LAGERVERWALTUNG "); Console.WriteLine(); Console.WriteLine(" 1 - Kiste anlegen "); Console.WriteLine(" 2 - Kiste auflisten "); Console.WriteLine(" 3 - Kiste suchen "); Console.WriteLine(" 4 - Kiste aendern "); Console.WriteLine(" 5 - Kiste loeschen \n"); Console.WriteLine(" 0 - Programm beenden "); Console.WriteLine("\n\n Ihre Auswahl : "); auswahl = Convert.ToChar(Console.ReadLine()); //der switch-Case switch (auswahl) { //1 - Neuen Eintrag anlegen case '1': Console.Clear(); if (anzahl < kleineKiste.Length) { Einlesen(anzahl+1); anzahl++; } else Console.WriteLine("\nAlle Arrays belegt !!"); Console.WriteLine("\n\nBeliebige Taste fuer Hauptmenue !!"); Console.ReadKey(); break; //2 - Eintraege auflisten case '2': Console.Clear(); if (anzahl == 0) { Console.WriteLine("\nEs sind noch keine Eintraege gespeichert !!"); Console.WriteLine("\n\nBeliebige Taste fuer Hauptmenue !! "); Console.ReadKey(); } else { Auflisten(kleineKiste); Console.Write("\n\nBeliebige Taste fuer Menue !!"); Console.ReadKey(); } break;
Die Ausgabe dazu :
Kiste CSHP04C___EA.Program+Kiste[]
Lege ich mehr Platzhalter an, kriege ich auch eine Fehlermedlung :
Unbehandelte Ausnahme: System.FormatException: Der Index, basierend auf 0 (null), muss größer als oder gleich Null sein, und kleiner als die Größe der Argumentenliste.
bei System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args)
bei System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args)
bei System.IO.TextWriter.WriteLine(String format, Object arg0)
bei System.IO.TextWriter.SyncTextWriter.WriteLine(String format, Object arg0)
bei System.Console.WriteLine(String format, Object arg0)
bei CSHP04C___EA.Program.Auflisten(Kiste[] liste) in C:\Users\kiske\Documents\Visual Studio 2015\Projects\CSHP04C - EA\CSHP04C - EA\Program.cs:Zeile 47.
bei CSHP04C___EA.Program.Main(String[] args) in C:\Users\kiske\Documents\Visual Studio 2015\Projects\CSHP04C - EA\CSHP04C - EA\Program.cs:Zeile 107.Kann mir jemand sagen, wo ich den Denkfehler habe?
Ich bedanke mich vielmals.
Mit bestem Gruß
shrotty