OOP Verwaltung einer CD-Sammlung

tiyuti

Mitglied
Hallo,
ich brauche Hilfe.
Aufgabenstellung:Sie erhalten den Auftrag ein Java-Programm zur Verwaltung einer CD-Sammlung zu entwickeln.
Mit dem Auftraggeber wird folgendes Pflichtenheft erarbeitet:

1. Zu jeder CD wird ihr Titel und ihr Erscheinungsjahr erfasst.
2. Auf jeder CD befinden sich mehrere Musikstücke.
3. Ein Musikstück kann auf mehreren CDs erscheinen.
4. Zu jedem Musikstück wird der Titel, das Erscheinungsjahr und der zugehörige Künstler gespeichert.
5. Ein Künstler wird durch seinen Namen charakterisiert und kann für mehrere Musikstücke verantwortlich sein.
6. Das Java-Programm soll die CD-Sammlung auf der Konsole ausgeben.
7. In dem Java-Programm soll genau eine CD Sammlung erfasst werden können.
Wird die UI-Klasse gestartet, werden die Daten (Titel, Erscheinungsjahr, Musikstücke etc.) aller CDs der CD Sammlung auf der Konsole ausgegeben.
Java:
import java.util.*;

public class Kunstler
{
    private String name;
    private ArrayList musikStueckListe = new ArrayList();
    
    public Kunstler(String name)
    {
       this.name = name;
    }
   //Get-Methoden
    public String getName()
    {
       return name;
    }
    //Musikstücke der er geschrieben hat einfügen
    public void einfuegeMusikstueck (Musikstueck track)
    {
        musikStueckListe.add(track);
    }
}
Java:
public class Musikstueck
{
   //Attributte
   
   public String titel = "";;

   public int erscheinungsJahr = 0;
   
   public Musikstueck (String titel, int erscheinungsJahr)
   {
       this.titel = titel;
       this.erscheinungsJahr = erscheinungsJahr;
   }
    public String getTitel()
    {
        return titel;
    }
    public int getErscheinungsJahr()
    {
        return erscheinungsJahr;
    }
}
Java:
import java.util.*;

public class CD
{
   private String titel;
   private int jahr;
   private ArrayList sammlung = new ArrayList();
   
   public CD( String titel, int jahr)
   {
       this.titel = titel;
       this.jahr = jahr;
    }
    public String getTitel()
    {
        return titel;
    }
    public int getJahr()
    {
        return jahr;
    }
    //Musik einfügen
    public void einfuegeMusik(Musikstueck track)
    {
        sammlung.add(track);
    }
    public ArrayList ausgeben()
    {
        return sammlung;
    }
}
Java:
import java.util.*;

public class CDSammlung
{
    private ArrayList cdSammlung = new ArrayList();
    
    private static CDSammlung eineSammlung = null;
    
    private CDSammlung()
    {
    }
     public static CDSammlung getObjectreferenz()
     {
         if (eineSammlung == null)
         eineSammlung = new CDSammlung();
         
         return eineSammlung;
     }
     public void einfuegeCD(CD eineCD)
     {
         cdSammlung.add(eineCD);
     }
     public ArrayList alleCDs()
     {
         return cdSammlung;
     }
         
}
Java:
import java.util.*;

public class CdUI
{
    public static void main (String args[])
    {

        //eine CD erzeugen
        CD eineCD = new CD("Klassisch Modern", 2006);
        Kunstler beethoven = new Kunstler("Beethoven");
        Musikstueck elise = new Musikstueck("Für Elise", 1801);
        Musikstueck mond = new Musikstueck("Mondscheinsonate", 1798);
        Musikstueck adagio = new Musikstueck("Adagio sostenuto", 1812);
        beethoven.einfuegeMusikstueck(elise);
        beethoven.einfuegeMusikstueck(mond);
        beethoven.einfuegeMusikstueck(adagio);
        Kunstler schumann = new Kunstler("Schumann");
        Musikstueck traum = new Musikstueck("Träumerei", 1850);
        Musikstueck kamin = new Musikstueck("Am Kamin", 1848);
        schumann.einfuegeMusikstueck(traum);
        schumann.einfuegeMusikstueck(kamin);
        Kunstler mozart = new Kunstler ("Mozart");
        Musikstueck fantasie = new Musikstueck("Fantasie d-moll - Andante", 1777);
        mozart.einfuegeMusikstueck(fantasie);
        //CD basteln
        eineCD.einfuegeMusik(elise);
        eineCD.einfuegeMusik(traum);
        eineCD.einfuegeMusik(mond);
        eineCD.einfuegeMusik(fantasie);
        eineCD.einfuegeMusik(kamin);
        eineCD.einfuegeMusik(adagio);
        // noch eine CD erstellen
        CD nocheineCD = new CD ("Märchen", 2010);
        Musikstueck erste = new Musikstueck("Märchen 1", 2010);
        Musikstueck zweite = new Musikstueck("Märchen 2", 2010);
        Kunstler pisatel = new Kunstler("Bruder Grimm");
        pisatel.einfuegeMusikstueck(erste);
        pisatel.einfuegeMusikstueck(zweite);
        nocheineCD.einfuegeMusik(erste);
        nocheineCD.einfuegeMusik(zweite);
        //CDSammlung erzeugen
        CDSammlung meineSammlung = CDSammlung.getObjectreferenz();
        //CDs in Sammlung einfuegen
        meineSammlung.einfuegeCD(eineCD);
        meineSammlung.einfuegeCD(nocheineCD);
        
        drueckeS(meineSammlung);
    }
    static void drueckeS(CDSammlung eineSammlung)
    {
        CD eineCD;
        ArrayList a = eineSammlung.alleCDs();
       
        int i = 1;
        
        for (Object o: a)
        {
            eineCD = (CD)o;
            System.out.println(i + " " + eineCD.getTitel()+ ", " + eineCD.getJahr());
            drueckeC(eineCD);
            i++;
        }
    }
    static void drueckeC(CD cd)
    {
        Musikstueck track;
        
        ArrayList a = cd.ausgeben();
        int i = 1;
        
        for (Object o: a)
        {
            track = (Musikstueck)o;
            
            System.out.println("\t" + i + ") "+track.getTitel()+ ", " + track.getErscheinungsJahr());
            i++;
        }
    }

}

Das ist meine Lösung... Aber wie kann ich den Künstler zu jedem track ausgeben?? Vielleicht ist die Aufgabe gar nicht rational gelöst... Ich werde mich für jeden Antwort freuen
 
Zuletzt bearbeitet von einem Moderator:

tiyuti

Mitglied
ich habe die Klassen Kunstler und Musikstueck verändert. Und es funktioniert jetzt!!!
Java:
import java.util.*;

public class Kunstler
{
    private String name;
    private ArrayList musikStueckListe = new ArrayList();
    
    public Kunstler(String name)
    {
       this.name = name;
    }
   //Get-Methoden
    public String getName()
    {
       return name;
    }
    //Musikstücke der er geschrieben hat einfügen
    //verbindung zu Kunstler herstellen
    public void einfuegeMusikstueck (Musikstueck track)
    {
        if (!musikStueckListe.contains(track))
        {
            musikStueckListe.add(track);
            track.setLinkMusikstueck(this);
        }
    }
        
}
Java:
public class Musikstueck
{
   //Attributte
   
   private String titel = "";
   private int erscheinungsJahr = 0;
   private Kunstler kerl;
   
   
   public Musikstueck (String titel, int erscheinungsJahr)
   {
       this.titel = titel;
       this.erscheinungsJahr = erscheinungsJahr;
   }
   
    public String getTitel()
    {
        return titel;
    }
    public int getErscheinungsJahr()
    {
        return erscheinungsJahr;
    }
    public void setLinkMusikstueck(Kunstler einKunstler)
    {
        if (kerl != einKunstler)
        {
            kerl = einKunstler;
            einKunstler.einfuegeMusikstueck(this);
        }
    }
    public Kunstler getLinkMusikstueck()
    {
        return kerl;
    }
}
Java:
import java.util.*;

public class CdUI
{
    public static void main (String args[])
    {

        //eine CD erzeugen
        CD eineCD = new CD("Klassisch Modern", 2006);
        Kunstler beethoven = new Kunstler("Beethoven");
        Musikstueck elise = new Musikstueck("Für Elise", 1801);
        Musikstueck mond = new Musikstueck("Mondscheinsonate", 1798);
        Musikstueck adagio = new Musikstueck("Adagio sostenuto", 1812);
        beethoven.einfuegeMusikstueck(elise);
        beethoven.einfuegeMusikstueck(mond);
        beethoven.einfuegeMusikstueck(adagio);
        Kunstler schumann = new Kunstler("Schumann");
        Musikstueck traum = new Musikstueck("Träumerei", 1850);
        Musikstueck kamin = new Musikstueck("Am Kamin", 1848);
        schumann.einfuegeMusikstueck(traum);
        schumann.einfuegeMusikstueck(kamin);
        Kunstler mozart = new Kunstler ("Mozart");
        Musikstueck fantasie = new Musikstueck("Fantasie d-moll - Andante", 1777);
        mozart.einfuegeMusikstueck(fantasie);
        //CD basteln
        eineCD.einfuegeMusik(elise);
        eineCD.einfuegeMusik(traum);
        eineCD.einfuegeMusik(mond);
        eineCD.einfuegeMusik(fantasie);
        eineCD.einfuegeMusik(kamin);
        eineCD.einfuegeMusik(adagio);
        // noch eine CD erstellen
        CD nocheineCD = new CD ("Märchen", 2010);
        Musikstueck erste = new Musikstueck("Märchen 1", 2010);
        Musikstueck zweite = new Musikstueck("Märchen 2", 2010);
        Kunstler pisatel = new Kunstler("Bruder Grimm");
        pisatel.einfuegeMusikstueck(erste);
        pisatel.einfuegeMusikstueck(zweite);
        nocheineCD.einfuegeMusik(erste);
        nocheineCD.einfuegeMusik(zweite);
        //CDSammlung erzeugen
        CDSammlung meineSammlung = CDSammlung.getObjectreferenz();
        //CDs in Sammlung einfuegen
        meineSammlung.einfuegeCD(eineCD);
        meineSammlung.einfuegeCD(nocheineCD);
        
        drueckeS(meineSammlung);
    }
    static void drueckeS(CDSammlung eineSammlung)
    {
        CD eineCD;
        ArrayList a = eineSammlung.alleCDs();
       
        int i = 1;
        
        for (Object o: a)
        {
            eineCD = (CD)o;
            System.out.println(i + " " + eineCD.getTitel()+ ", " + eineCD.getJahr());
            drueckeC(eineCD);
            i++;
        }
    }
    static void drueckeC(CD cd)
    {
        Musikstueck track;
        
        ArrayList a = cd.ausgeben();
        int i = 1;
        
        for (Object o: a)
        {
            track = (Musikstueck)o;
            
            System.out.println("\t" + i + ") "+track.getTitel()+ ", " + track.getErscheinungsJahr()+", "
            + track.getLinkMusikstueck().getName());

            i++;
        }
    }

}
Ist es so richtig???
 
S

SlaterB

Gast
Benennungen wie 'kerl' oder 'setLinkMusikstueck' sind gewöhnungsbedürftig, an sich dürfte aber alles korrekt sein,

dass sich die Methoden einfuegeMusikstueck() + setLinkMusikstueck() gegenseitig aufrufen ist ziemlich geschickt,
sieht man nicht oft auf so einfachem Niveau ;)
 

Oben