Lagerverwaltung


sjsf

Grünschnabel
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:

Code:
import java.util.Arrays;

import javax.swing.*;

public class Test
{



       
    //EINGABE EINE NEUEN KISTE
      
    static void eingabe(int[][]argEingabe){

          int nummer;
          int breite, laenge, hoehe;
        
          //Kistennummer eingeben
          do {
              nummer=Integer.parseInt(JOptionPane.showInputDialog("Geben Sie bitte eine Kistennummer ein (1 -75)"));
            
              //Wenn Kistennummer gültig und noch nicht vergeben
              if(nummer>0 && nummer<=argEingabe.length)
                  if(argEingabe[nummer-1][0]==0){
                    
                      //Nummer der Kiste 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);
  
        
    }
    //LÖSCHEN EINER KISTE
    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 die eingegebene Kistnnummer einer bereits gespeicherten Kiste entspricht
          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); 
          }
        
    
    
    //ÄNDERN EINER KISTE
    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)"));
            
              //Wenn 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);
    
  }
  //ANZEIGEN EINER KISTE
   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);

   

    }
  
  
   
   

}
Irgendwie ist die Aufgabe nicht komplett gelöst... Ich weiss auch nicht wirklich weiter...
Ich müsste doch irgendwie nach Eingabe der Werte zurück zum Anfang gelangen?!

Kann mir bitte jemand helfen?
 

Bratkartoffel

gebratene Kartoffel
Premium-User
Hi,

bitte formatiere die Aufgabe mal anständig anstatt sie einfach lieblos hier ins Forum zu stellen.
Falls du nur an einer Lösung interessiert bist, dann solltest du eher hier einen Post erstellen

Ansonsten:
- Was passiert / was sollte passieren?
- Wo in deinem Code denkst du, dass der Fehler steckt?
- Wie kann man deinen Fehler reproduzieren?

Grüsse,
BK
 

sjsf

Grünschnabel
Moin BK,

sorry wenn das lieblos rüberkam... Ich bin nur gerade mit meinen Nerven am Ende :)

Nach Eingabe der Werte, wie hoch, breit, lang und welchen Langerplatz die Kiste haben soll, müsste ich irgendwie wieder zum Anfang kommen. Es sollte ja die Möglichkeit bestehen, dass man die Kiste ändert. Wie soll das geschehen, wenn niergens etwas gespeichert wird?
Ich bin gerade etwas überfordert oder stehe einfach nur auf dem Schlauch, ich weiss es nicht so genau :)

Ich bin nicht nur an der Lösung interessiert, ich möchte verstehen, was ich in meinem Code falsch gemacht habe.
Am besten in einfachen Worten erklärt, da ich noch nicht sehr lange Programmiere und das auch eigentlich nur für den Hausgebrauch können möchte :) Hab mir hierfür Studienhefte über das Internet besorgt und Arbeite diese durch.
 

melmager

Erfahrenes Mitglied
Fangen wir beim Menu an. Da brauchste noch eine Option und zwar "Programmende"
dann bauste um deine Switch und Menu Ausgabe herum eine "do - while" schleife die beendet wird wenn die Option "Programmende" ausgewählt wird.
Dann irritert mich etwas die Mischung swischen Swing und println - entweder alles mit swing oder reine Textversion.
Und gespeichert werden soll doch in kisteArray.
Dann solltest du die Functionen so ändern, das die nur mit einem übergeben Wert arbeiten und zwar mit der Kisten Nummer.

Code:
// anzeige einer Kiste
static void anzeigen(int kistenr) {
if (kisteArray[kistenr][0] == null) {
System.out.println("\nDie Kistennummer " + kistenr + " ist leer");
} else {
System.out.println("\nDie Kiste " + kistenr + " ist " + kisteArray[kistenr][0] + " breit " + kisteArray[kistenr][1] + " hoch " + kisteArray[kistenr][2]  + " tief");
}
}
so kann man die Function auch weiterverwenden zb in der Function "kisteaendern" , erst anzeigen dann alle Werte abfragen und entsprechend in KisteArray speichern.

Code:
static void aendern(int kistenr) {
anzeigen(kistenr);
// werte abfragen und in kiste Array eintragen
}
und die Frage die ich habe ist: worin soll der Unterschied zwischen ändern und neu anlegen sein ?
ich würde beides in einer Function machen - wenn ne Kiste da ist ändern - sprich die Werte eintragen
und wenn keine da ist auch Werte eintragen.
 
Zuletzt bearbeitet:

Mergrimi

Grünschnabel
Hallo,
in dem Code fehlt noch der komplette Ablauf zu "D" -

Hier hänge ich zum Beispiel komplett fest.
Kann ich dafür enum verwenden oder lieber folgendes:

public void alleKistenAnzeigen()
{
for (Kiste k : kistenArray)
{
System.out.println(k.toString());
}
}