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


Anmelden zum Antworten