1.5 Projekt Büchersammlung

Synopsis: Zeichensoftware: umlet.com Anleitung: UMLet_Kurzanleitung_eck-2017.pdf

Für eine Büchersammlung soll eine Software erstellt werden. Hier ein (unvollständiger) Entwurf eines Klassendiagramms und ein wenig Java-Code.

Klassendiagramm Vorgabe
Klassendiagramm Vorgabe
OperationBeschreibung
einfuegenGenre(name:Text):GenreSucht im Feld dasGenre[] nach einem Genre-Objekt mit dem Namen name. Falls es existiert wird eine neues Objekt erzeugt und eingefügt. Rückgabe ist die ID des Genre-Objekts.
einfuegenBuch(titel:Text,preis:FKZ,seiten:GZ,genre:Text)Erzeugt ein neues Buch und fügt es in das Feld ein.
getAnzahlBuecher():GZGibt die Anzahl der gespeicherten Bücher in der Sammlung zurück.
getAnzahlGenre():GZGibt die Anzahl der Genres zurück.
ausgebenGenre()Gibt eine Liste aller Genres auf der Konsole aus
ausgebenSammlung()Gibt eine Liste aller Bücher auf der Konsole aus
Klasse Buechersammlung Operationen
OperationBeschreibung
Genre(name:Text)Erzeugt ein neues Genre-Objekt
getName():TextGibt den Namen des Genres zurück
Klasse Genre Operationen
OperationBeschreibung
Buch(titel:Text,preis:FKZ,seiten:GZ,genre:Genre)Erzeugt ein neues Buch-Objekt
ausgebenInfo()Gibt die Buchinfos formatiert auf der Konsole aus
Klasse Buch Operationen

Codevorgaben

public class Test{
  private static Buechersammlung dieBuechersammlung = new Buechersammlung();
  public static void testen(){
    System.out.print("\f"); // Konsole löschen
    // Buch testen
    //Buch testBuch = new Buch(null,-12.3,-33,null);
    //testBuch.ausgebenInfo();
    dieBuechersammlung.einfuegenGenre("Herzschmerz");
    dieBuechersammlung.einfuegenGenre("");
    dieBuechersammlung.einfuegenGenre("Thriller");
    dieBuechersammlung.ausgebenGenre();
    dieBuechersammlung.einfuegenBuch("Wunderbare Welt",10,66,"Schwurbel");
    dieBuechersammlung.einfuegenBuch("Nasen",2,100,"");
    dieBuechersammlung.einfuegenBuch("Die Leiden des jungen Werthers",2,100,"Sturm und Drang");
    dieBuechersammlung.ausgebenGenre();
    dieBuechersammlung.ausgebenSammlung();
  }
}
public class Buechersammlung{
  public static final int MAX_ANZAHL=10;
  private int anzahlBuecher;
  private int anzahlGenre;
  private Genre dasGenre[] = new Genre[MAX_ANZAHL];
  private Buch dasBuch[] = new Buch[MAX_ANZAHL];
  public Genre einfuegenGenre(String name){ // gibt ID des Genre-Objekts zurück
    if(name==null || name.equals("")){
      System.out.println("Buechersammlung.einfuegenGenre(): Genre leer");
      return null;
    }
    for(int i=0;i<anzahlGenre;i++){      // schon vorhanden?
      if(name.equals(dasGenre[i].getName())){
        return dasGenre[i]; 
      }
    }
    if(anzahlGenre>=MAX_ANZAHL){  // ist noch Platz?
      System.out.println("Buechersammlung.einfuegenGenre(): Kein Platz für neues Genre");
      return null;
    }
    Genre g=new Genre(name);
    dasGenre[anzahlGenre++]=g; // g einfügen und anzahl erhöhen
    return g;
  }
  public void einfuegenBuch(String titel,double preis,int seiten,String genre){
    if (titel==null || titel.equals("")){
      System.out.println("Buechersammlung.einfuegenBuch(): Kein Titel");
      return;
    }  
    if (preis<0.0){
      System.out.println("Buechersammlung.einfuegenBuch(): Preis negativ");
      return;
    }
    if (seiten<0){
      System.out.println("Buechersammlung.einfuegenBuch(): Seitenanzahl negativ");
      return;
    }
    if (genre==null || genre.equals("")){
      System.out.println("Buechersammlung.einfuegenBuch(): Kein Genre");
      return;
    }
    if(anzahlBuecher>=MAX_ANZAHL){
      System.out.println("Buechersammlung.einfuegenBuch(): Kein Platz für neue Bücher");
      return;
    }
    Genre g = einfuegenGenre(genre);
    if(g==null){
      System.out.println("Buechersammlung.einfuegenBuch(): Kein Platz für weiteres Genre");
      return;
    }
    dasBuch[anzahlBuecher++] = new Buch(titel,preis,seiten,g); // neues Buch einfügen
  }
  public int getAnzahlBuecher(){
    return anzahlBuecher;
  }
  public void ausgebenGenre(){
    System.out.println("Buechersammlung.ausgebenGenre():");
    for(int i=0;i<anzahlGenre;i++){
      System.out.printf("%2d. %s\n",i,dasGenre[i].getName());
    }
  }
  public void ausgebenSammlung(){
    System.out.println("Buechersammlung.ausgebenSammlung():");
    for(int i=0;i<anzahlBuecher;i++){
      dasBuch[i].ausgebenInfo();
    }
  }
}
public class Genre{
  private String name; // {nicht leer}
  public Genre(String name){
    if (name==null || name.equals("")){
      System.out.println("Genre: Name leer");
      this.name = "Name leer";
    } else {
      this.name=name; 
    }   
  }
  public String getName(){
    return name;
  }
}
public class Buch{
  private String titel;   // {nicht leer}
  private double preis;   // {>=0.0}
  private int seiten;     // {>=0}
  private Genre dasGenre; // {nicht null}
  public Buch(String titel,double preis,int seiten,Genre genre){
    if (titel==null || titel.equals("")){
      this.titel = "Kein Titel";
      System.out.println("Buch: Kein Titel");    
    } else {
      this.titel = titel; 
    }
    if (preis<0.0){
      System.out.println("Buch: Preis negativ");  
    } else {
      this.preis = preis;
    }
    if (seiten<0){
      System.out.println("Buch: Seitenanzahl negativ");  
    } else {
      this.seiten = seiten; 
    }
    if (genre==null){
      System.out.println("Buch: Genre null");
    }
    dasGenre = genre;
  }
  public void ausgebenInfo(){
    System.out.printf("Titel: %-30s \tPreis:%7.2f€ \tSeiten:%5d \tGenre: %s\n",titel,preis,seiten,dasGenre.getName());
  }
}