# Lagerverwaltung



## SJSF (29. Jul 2016)

Hallo zusammen,

folgende Aufgabe:

Erstellen Sie eine „Lagerverwaltung“, die folgende Daten für Kisten speichern kann:
• eine eindeutige Nummer zur Identifikation jeder einzelnen Kiste,
• die Breite, Länge und Höhe jeder Kiste.
Die Nummer zur Identifikation der Kiste können Sie nach einem beliebigen Schema selbst vergeben. Stellen Sie aber durch geeignete Verfahren sicher, dass bei der Eingabe einer neuen Kiste nicht eine bereits vergebene Nummer benutzt wird.
Das Programm soll die Daten der Kisten lediglich zur Laufzeit speichern – also nur so lange, wie das Programm arbeitet. Es sollen maximal Daten von 75 Kisten verwaltet werden können.
Das Programm soll folgende Funktionen anbieten:
• Eingabe einer neuen Kiste,
• Löschen der Daten einer vorhandenen Kiste,
• Ändern der Daten einer vorhandenen Kiste,
• Anzeigen der Daten einer vorhandenen Kiste und
• eine Listenfunktion, die die Daten aller vorhandenen Kisten anzeigt.
Beim Löschen, Ändern und Anzeigen soll der Zugriff auf die Daten der Kiste über die Nummer der Kiste erfolgen.
Für die Umsetzung gelten folgende Vorgaben:
• Speichern Sie die Daten in einem mehrdimensionalen Array. Erstellen Sie dieses Array lokal in der Methode main(). Verwenden Sie bitte keine Klassenvariable für das Array.
• Stellen Sie sicher, dass beim Zugriff auf die Daten der Kisten die Grenzen des Arrays nicht verlassen werden.
• Erstellen Sie für das Eingeben, Löschen, Ändern, Anzeigen und Auflisten jeweils eigene Methoden.

Sorgen Sie dafür, dass beim Löschen, Ändern, Anzeigen und Auflisten nur auf Einträge zugegriffen werden kann, für die bereits Daten erfasst wurden. Dazu können Sie zum Beispiel überprüfen, ob die Nummer der Kiste noch den Wert 0 hat, der beim Anlegen des Arrays automatisch zugewiesen wird. Um eine Kiste zu löschen, reicht es dann, die Nummer der Kiste wieder auf den Wert 0 zu setzen.
• Erstellen Sie in der Methode main() ein Auswahlmenü für den Zugriff auf die einzelnen Funktionen der Lagerverwaltung.
• Kommentieren Sie sowohl die verwendeten Variablen als auch die Methoden. Geben Sie bei den Methoden bitte eine kurze Beschreibung der Funktionsweise, der verwendeten Argumente und eines eventuellen Rückgabewerts an.

Mein Code:


```
import java.util.Arrays;

import javax.swing.*;

public class Lagerverwaltung
{
      
    //Neue Kiste eingeben
     
    static void eingabe(int[][]argEingabe){

          int nummer;
          int breite, laenge, hoehe;
       
          //Kistennummer vergeben
          do {
              nummer=Integer.parseInt(JOptionPane.showInputDialog("Geben Sie bitte eine Kistennummer ein (1 -75)"));
           
              //Kistennummer gültig und nicht vergeben
              if(nummer>0 && nummer<=argEingabe.length)
                  if(argEingabe[nummer-1][0]==0){
                   
                      //Kistennummer zuweisen
                      argEingabe[nummer-1][0]=nummer;
                   
                      //Werte Einlesen
                      breite=Integer.parseInt(JOptionPane.showInputDialog("Kistenbreite"));
                      argEingabe[nummer-1][1]=breite;
                   
                      laenge=Integer.parseInt(JOptionPane.showInputDialog("Kistenlaenge"));
                      argEingabe[nummer-1][2]=laenge;
                   
                      hoehe=Integer.parseInt(JOptionPane.showInputDialog("Kistenhoehe"));
                      argEingabe[nummer-1][3]=hoehe;                  
                   
                     }
               
                  else {
                      System.out.println("\nDie Kistennummer ist ungültig oder schon vergeben");
                  }
          }
          while(nummer<=0 || nummer>argEingabe.length);
 
       
    }
    //Eine Kiste löschen
    static void loeschen(int[][] argLoeschen) {
   
          int nummer;
   
      //Kistennummer eingeben
      do {
          nummer=Integer.parseInt(JOptionPane.showInputDialog("Geben Sie bitte die zu löschende Kistennummer ein"));
   
          //Kontrolle ob Kistennummer schon vergeben ist
          if(nummer>0 && nummer<=argLoeschen.length)

              if(argLoeschen[nummer-1][0]==nummer){
           
              argLoeschen[0][0]=nummer;
           
              }
       
              else {
                  System.out.println("\nDie Kistennummer " +nummer + " ist nicht bekannt");
              }
      }
          while(nummer<=0 || nummer>argLoeschen.length);
          }
       
   
   
    //Kiste ändern
    static void aendern(int[][] argAendern) {
          int nummer;
          int breite, laenge, hoehe;
       
           //Kistennummer eingeben
          do {
              nummer=Integer.parseInt(JOptionPane.showInputDialog("Geben Sie bitte eine Kistennummer ein (1 -75)"));
           
              //Kistennummer gültig und noch nicht vergeben
              if(nummer>0 && nummer<=argAendern.length)
                  if(argAendern[nummer-1][0]!=0){
   
                      //Werte Einlesen
                      breite=Integer.parseInt(JOptionPane.showInputDialog("Kistenbreite"));
                      argAendern[nummer-1][1]=breite;
                   
                      laenge=Integer.parseInt(JOptionPane.showInputDialog("Kistenlaenge"));
                      argAendern[nummer-1][2]=laenge;
                   
                      hoehe=Integer.parseInt(JOptionPane.showInputDialog("Kistenhoehe"));
                      argAendern[nummer-1][3]=hoehe;
                   
                  }
                   
                      else {
                          System.out.println("\nDie Kistennummer ist ungültig oder noch nicht vergeben");
                      }
              }
              while(nummer<=0 || nummer>argAendern.length);
   
  }
  //Kiste Anzeigen
   static void anzeigen(int[][] argAnzeigen){
          int nummer;
          nummer=Integer.parseInt(JOptionPane.showInputDialog("Geben Sie eine vorhandene Kistennummer ein"));
          for(int i=0; i<argAnzeigen.length; i++){
              if(nummer>0 && nummer<=argAnzeigen.length && argAnzeigen[i][0] == nummer){
                  System.out.println("\nDie Daten der Kiste sind t:\t"+Arrays.toString(argAnzeigen[i]));
                  return;
              }
          }
          System.out.println("\nDie Kistennummer " +nummer + " ist nicht bekannt");
           
      }
  public static void main(String[] args) {
   
      //Vereinbarung des Arrays
      int[][] kistenArray = new int[75][4];
   
      //Auswahl der Funktion
   
      String funktionEinlesen;
   
      char funktion;
   
      System.out.println("Folgende Funktionen stehen Ihnen zur Auswahl: \n");
      System.out.println("A \t Eingabe einer neuen Kiste");
      System.out.println("B \t Löschen einer Kiste");
      System.out.println("C \t Ändern einer Kiste");
      System.out.println("D \t Daten einer Kiste anzeigen");
      System.out.println("E \t Daten aller Kisten anzeigen");
   
      funktionEinlesen=JOptionPane.showInputDialog("Wählen Sie eine Funktion");
      funktion = funktionEinlesen.charAt(0);
   
      //Auswahl auswerten

    
      switch(funktion) {
   
      case 'a':
      case 'A':
          System.out.println("\nSie haben Eingabe einer neuen Kiste gewählt");
          eingabe(kistenArray);
          break;
       
      case 'b':
      case 'B':
          System.out.println("\nSie haben Löschen einer Kiste gewählt");
          loeschen(kistenArray);
          break;
   
      case 'c':
      case 'C':
          System.out.println("\nSie haben Ändern einer Kiste gewählt");
          aendern(kistenArray);
          break;
   
      case 'd':
      case 'D':
          System.out.println("\nSie haben Daten einer Kiste anzeigen gewählt");
          anzeigen(kistenArray);
          break;

      }
   
   
      System.exit(0);

  

   }
}
```


Meine Frage, wieso kann ich die Kisten nach der Eingabe nicht wieder finden, ändern, löschen...?
Und die Kiste ist nach Eingabe auch nicht hinterlegt?
Wo habe ich denn hier meinen Fehler?


----------



## Nuiton (29. Jul 2016)

Weil deine do-while Schleife auch nicht abfragt, ob der Nutzer weitere Angaben hat, damit dein Programm weiterlaeuft. Sobald du eine Kiste eingetragen hast, ist dein Programm auch schon beendet, weshalb auch nichts passiert, wenn du es nochmal laufen laesst.

Deine Main-Methode sollte dann etwa so aussehen:

```
public static void main(String[] args) {
  
      //Vereinbarung des Arrays
      int[][] kistenArray = new int[75][4];
  
      //Auswahl der Funktion
  
      String funktionEinlesen;
  
      /* -- Aenderungen! -- */
      String input;
      Scanner scanner;
    
    
      char funktion;
  
    
      do
      {
      System.out.println("Folgende Funktionen stehen Ihnen zur Auswahl: \n");
      System.out.println("A \t Eingabe einer neuen Kiste");
      System.out.println("B \t Löschen einer Kiste");
      System.out.println("C \t Ändern einer Kiste");
      System.out.println("D \t Daten einer Kiste anzeigen");
      System.out.println("E \t Daten aller Kisten anzeigen");
  
      funktionEinlesen=JOptionPane.showInputDialog("Wählen Sie eine Funktion");
      funktion = funktionEinlesen.charAt(0);
    
  
      //Auswahl auswerten

    
      switch(funktion)
      {
  
      case 'a':
      case 'A':
          System.out.println("\nSie haben Eingabe einer neuen Kiste gewählt");
          eingabe(kistenArray);
          break;
      
      case 'b':
      case 'B':
          System.out.println("\nSie haben Löschen einer Kiste gewählt");
          loeschen(kistenArray);
          break;
  
      case 'c':
      case 'C':
          System.out.println("\nSie haben Ändern einer Kiste gewählt");
          aendern(kistenArray);
          break;
  
      case 'd':
      case 'D':
          System.out.println("\nSie haben Daten einer Kiste anzeigen gewählt");
          anzeigen(kistenArray);
          break;

      }
      System.out.println("Weitere Angaben (Ja/Nein)?");
      scanner = new Scanner(System.in);
      input = scanner.next().toLowerCase();
      } while(input.contains("ja"));
  

    }
```


----------



## SJSF (29. Jul 2016)

Vielen Dank erstmal dafür. 
Ich habe das jetzt geändert wie beschrieben.
Jetzt hab ich das Problem, dass nach meinen Eingaben zwar kommt, dass ich ne Kiste eingegeben habe und ob ich eine weitere Kiste eingeben möchte. (Weitere Angaben (Ja/Nein)?)
Da ist aber dann auch leider schon schluss?!


----------



## Dompteur (29. Jul 2016)

Arbeitest du in Eclipse ?
Dann musst du den Cursor ins Consolefenster setzen und "ja"<enter> eingeben.

Zu deinem bisherigen Programm würde es aber ohnehin besser passen, wenn du einen weiteren Menüpunkt hinzufügst: "X .. Ende"
Dann fügst du einen weiteren case-Fall hinzu. Dort kannst du mit exit dein Programm beenden.

Die Schleife beendes du dann mit folgender Zeile: "} while(true);"


----------



## SJSF (29. Jul 2016)

Ja, ich arbeite mit Eclipse. Danke für die Info, hatte ich jetzt so noch nicht gehabt!
Vielen Dank für Eure Hilfe


----------



## SJSF (29. Jul 2016)

Muss leider nochmal fragen...
Ich habe jetzt lange probiert, aber funktion "E - Daten aller Kisten anzeigen" funktioniert irgendwie nicht.


----------



## Nuiton (29. Jul 2016)

Wenn es dir besser passt, kannst du auch natuerlich anstatt einen Scanner ein JOptionPane benutzen. In diesem Fall kannst du dann anstatt das..
Main-Methode:

```
System.out.println("Weitere Angaben (Ja/Nein)?");
scanner =new Scanner(System.in);
input = scanner.next().toLowerCase();
```
..dann das schreiben:

```
input = JOptionPane.showInputDialog("Weitere Angaben(Ja/Nein)?").toLowerCase();
```
Die do-while Schleife bleibt dann auch gleich.

Was dein Problem angeht: Du brauchst einen weiteren switch-case, naehmlich

```
switch(funktion)
{
...
  case 'e':
  case 'E':
      System.out.println("\nDaten aller Kisten:");
       // Funktion zum anzeigen aller Kisten kommt hier
       break;
}
```

In deinem Fall ist es einfacher deine anzeigen-Methode zu erweitern, indem man einen boolean-Wert als Parameter benutzt, wie z.B.

```
static void anzeigen(int[][] argAnzeigen, boolean all)
{
          int nummer;
          if (all)
          {
            for(int i=0; i<argAnzeigen.length; i++)
            {
                System.out.println("\nKiste #"+(i+1)+":"+Arrays.toString(argAnzeigen[i]));

            }
          }
          else
          {
            nummer=Integer.parseInt(JOptionPane.showInputDialog("Geben Sie eine vorhandene Kistennummer ein"));
            for(int i=0; i<argAnzeigen.length; i++){
              if(nummer>0 && nummer<=argAnzeigen.length && argAnzeigen[i][0] == nummer){
                  System.out.println("\nDie Daten der Kiste sind t:\t"+Arrays.toString(argAnzeigen[i]));
                  return;
              }
            }
            System.out.println("\nDie Kistennummer " +nummer + " ist nicht bekannt");
          }
}
```

Den Rest schaffst du bestimmt alleine.


----------



## SJSF (30. Jul 2016)

Vielen, vielen Dank!!!!


----------



## Nuiton (30. Jul 2016)

Immer gerne!


----------

