# Cd regal



## Felipe (12. Dez 2008)

Hallo!

Ich habe diese Woche eine Aufgabe meiner Professor (er ist sehr schlecht) gekriegt, kann aber nichts anfangen! Wie können wir programmieren, ohne am Rechner zu sein? Ok, ist es nicht so schwer, wie der letzte Aufgabe die ich gebracht habe... Wir sollten mit Datenabstraktion und Klassenkonzept verwenden...

Entwickeln Sie eine Java-Klasse, mit deren Hilfe Sie Ihre CD-Sammlung verwalten können.

Dabei sind im Detail folgende Anforderungen gegeben:
/1/ Zu jeder CD sollen Interpret und Titel gespeichert werden.
/2/ CD's sollen zur Sammlung hinzugefügt werden können.
/3/ Nicht mehr benötigte CDs müssen entfernt werden können.
/4/ Die vorhandenen CDs müssen über einen geeigneten Methodenaufruf ermittelt werden können.

mit freundlichen Grüßen


----------



## L-ectron-X (13. Dez 2008)

Du hast keinerlei Zuarbeit geliefert, deshalb verschiebe ich das nach Hausaufgaben.


----------



## foobar (13. Dez 2008)

EINE Klasse zur Verwaltung von Cds? Das ist ja mal eine durchdachte Aufgabe. Am besten steckt man den gesamten Code in die Mainmethode *gg*


----------



## AmunRa (14. Dez 2008)

Schön das ihr so eine Aufgabe bekommen habt.
Und nett von dir, dass du uns das auch noch mitteilst.
Viel Spaß beim programmieren


----------



## Landei (14. Dez 2008)

Ich bin mal nicht so und gebe mal einen Tip: OO Analyse heißt, dass wir die wichtigen "Substantive" in unserer Modellwelt finden. Hier gibt es zwei, nämlich "CD" und "CD-Manager". Ich fange mal einfach an mit der CD (aus'm Kopp & ohne Gewähr):

```
public class CD {
   private final String interpret;
   private final String title;
   public CD(String interpret, String title) {
      this.interpret = interpret;
      this.title = title;
   }

   public String getTitle() { return title; }
   public String getInterpret() { return interpret; }
   public String toString() {
      return String.format("Titel: %s, Interpret: %s", title, interpret);
   }
   public boolean equals(Object o) {
       if (o instanceof CD) {
          CD that = (CD) o;
          return this.title.equals(that.title) && this.interpret.equals(that.interpret);
       }
       return false;
   }
}
```

Hat doch gar nicht wehgetan, oder?
Und jetzt den Manager - aber keine Angst, ich lass dir schon ein wenig Arbeit übrig:

```
import java.util.*;
public class CDManager {
   private List<CD> cdList = new ArrayList<CD>();

   public void addCD(String title, String interpret) {
      CD cd = new CD(title, interpret);
      if (! cdList.contains(cd)) {  //vielleicht haben wir sie ja schon
         cdList.add(cd);
      } 
   }

   public int count() {
       return cdList.size();
   }

   public CD getCD(int index) {
      //selbst ist der Mensch!
   }

   public void remove(String title) {
         //selbst ist der Mensch!
   }

}
```


----------



## foobar (14. Dez 2008)

Wenn man equals überschreibt sollte man auch immer hashcode überschreiben. Eclipse kann das auch für dich erledigen.


----------



## Freddii (23. Dez 2008)

NICE!

W3L sag ich nur 

Hab da zwei Lösungen für. Beide nicht von mir selbst geschrieben  Aber die Frist ist eh schon abgelaufen, und das ganze war im Thema strukturiert&prozedural, also nicht OO:



```
/*************************************************/
/** Sammlung                                     */
/**                                              */
/** Ein CD-Sammlung Verwaltungstool!             */
/** Es ist mˆglich neue CDs einzutragen, alte zu */
/** lˆschen und sich den Bestand ausgeben zu     */
/** lassen.                                      */
/*************************************************/
/** Author: ***********              */
/** Version: 1.0                                 */
/** Date: 10.12.2008                             */
/*************************************************/
/**
 * Importierte Librarys
 */
package inout;
//import inout.Console;               // Auslesen von Konsoleneingaben

class sammlung
{
    /**
     * Globale Variablen
     */
    final static int LAENGE = 100;                                  // Konstante fuer Array       
    static String[][] sammlung = new String[LAENGE][2];             // Stringarray zur Datenerfassung
    static int pos = 0;                                             // aktuelle Position im Array
       
    /**
     * add(String titel, String artist)
     * 
     * Die Methode f¸gt der Sammlung einen weiteren Datensatz
     * hinzu.
     * 
     * 'titel' ist der CD-Name
     * 'artist' ist der Interpret
     */
    public static void add(String titel, String artist)
    {
        // Pruefe, ob Array leer ist
        if(pos < LAENGE)
        {
            // Datensatz wird eingetragen
            sammlung[pos][0] = titel;
            sammlung[pos][1] = artist;
        
            // Zeiger wird weitergesetzt
            pos++;
            
            // Hinweis an Benutzer
            System.out.println("CD wurde hinzugefuegt!\n");
        }
        else
        {
            // Hinweis an Benutzer
            System.out.println("Sammlung ist voll, es kann nichts mehr eingetragen werden!");
        }
    }
    
    /**
     * remove(String titel)
     * 
     * Die Methode entfernt eine CD aus der Sammlung anhand
     * des CD Titels.
     * 
     * 'titel' ist der CD-Name
     */    
    public static void remove(String titel)
    {
        boolean raus = false;               // Uebereinstimmung gefunden
        
        // Pruefe, ob Array befuellt
        if(pos != 0)
        {
            // Suche Eintrag in Array
            for(int i=0;i<pos;i++)
            {
                if(sammlung[i][0].equals(titel))
                {
                    // Entferne Eintrag
                    sammlung[i][0] = "-";
                    sammlung[i][1] = "-";
                    raus = true;
                }
            }
        }
        else
        {
            // Hinweis an Benutzer
            System.out.println("Die Sammlung ist leer, Sie koennen nichts loeschen!");
        }
        
        // Falls Datensatz entfernt wurde
        if(raus == true)
        {
            // Hinweis an Benutzer
            System.out.println("\"" + titel + "\" wurde geloescht!");
        }
        else
        {
            // Hinweis an Benutzer
            System.out.println("\"" + titel + "\" konnte nicht gefunden werden!");
        }
    }
    
    /**
     * ausgabe()
     * 
     * Gibt die Sammlung auf der Konsole aus.
     * Gelˆschte Zeilen werden hierbei ¸bersprungen.
     */
    public static void ausgabe()
    {
        // Pruefe ob Array leer
        if(pos != 0)
        {
            // Drucke Spaltennamen
            System.out.println("CD-Titel\tInterpret");
            System.out.println("--------\t---------");
            
            // Pruefe, ob Zeile leer
            for(int i=0;i<sammlung.length;i++)
            {
                if(sammlung[i][0] != "-")
                {
                    // Gebe befuellte Zeilen aus
                    System.out.println(sammlung[i][0] + "\t\t" + sammlung[i][1]);
                }
            }
        }
        else
        {
            // Hinweis an Benutzer
            System.out.println("Sammlung ist leer, Sie koennen nichts ausgeben!");
        }
    }
    
    /**
     * main(String args[])
     * 
     * Dies ist das Hauptprogramm, ¸ber welches die Verwaltung der Sammlung
     * abl‰uft.
     */
    public static void main(String args[])
    {
        int eingabe = 0;                // Benutzereingabe
        String cd;                      // CD Name
        String name;                    // Interpret
        boolean end = false;            // Ende der Schleife
        
        // Leere Array
        for(int i=0;i<sammlung.length;i++)
        {
            for(int j=0;j<sammlung[i].length;j++)
            {
                sammlung[i][j] = "-";
            }
        }
               
        // Richte Endlosschleife ein
        while(true)
        {
            System.out.println("Ihre Optionen:");
            System.out.println("(1)Eintragen\n(2)Entfernen\n(3)Ausgeben\n(4)Beenden");
            eingabe = Console.readInt();
            
            // Ueberpruefe Eingabe
            switch(eingabe)
            {
                case 1:
                {
                    // Abfrage der CD Daten
                    System.out.println("\nGeben Sie den Titel der CD ein:");
                    cd = Console.readString();
                    System.out.println("Geben Sie den Interpreten ein:");
                    name = Console.readString();
                    
                    // Aufruf von add
                    add(cd, name);
                    break;
                }
                case 2:
                {
                    // Abfrage des Titels
                    System.out.println("\nGeben Sie den zu loeschenden Titel ein:");
                    cd = Console.readString();
                    
                    // Aufruf von remove
                    remove(cd);
                    break;
                }
                case 3:
                {
                    // Abstandszeile
                    System.out.println();
                    
                    // Aufruf von ausgabe
                    ausgabe();
                    break;
                }
                case 4:
                {
                    // Hinweis an Benutzer
                    System.out.println("\nProgramm wird beendet!\n");
                    
                    end = true;
                    break;
                }
                default :
                {
                    // Hinweis an Benutzer
                    System.out.println("\nBitte nur Zahlen von 1 bis 4 eingeben!\n");
                }
            }
            
            // Pruefe Beenden der Endlosschleife
            if(end == true)
            {
                break;
            }
            
            // Passe Layout an
            System.out.println("\n------------------------------\n");
        }
    }
}
```


----------

