Spezielle Operation

  • Themenstarter Themenstarter LeSmou
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
L

LeSmou

Gast
Hallihallo,

ich hatte die Aufgabe eine kleine Bibliotheksverwaltung zu programmieren:

Sie sollen eine Bibliotheksverwaltung programmieren. Die Anforderungen an das Programm sind in folgendem Pflichtenheft zusammengestellt:

Buch
1. ISBN, Titel, Erscheinungsjahr und Anzahl der Exemplare sollen gespeichert werden.
2. alle Daten müssen einzeln gelesen werden können.
3. Ein neues Buch kann nur angelegt werden, wenn die ISBN bekannt ist. Die Anzahl der Exemplare wird mit 1 voreingestellt.
4. Titel und Erscheinungsjahr müssen einzeln gespeichert bzw. geändert werden können.
5. Die Anzahl der Exemplare kann um einen beliebigen Wert erhöht werden.
6. zu jedem Buch kann es höchstens einen Herausgeber geben. Stellen Sie entsprechende Operationen bereit, um diese Assoziation zu verwalten
7. Es soll eine Operation bereitgestellt werden, um alle Angabe zu einem Buch auszugeben. Falls kein Herausgeber existiert, soll die Meldung „kein Herausgeber“ erscheinen.

Herausgeber
1. Besteht aus einem Namen und einem Kürzel für das Geschlecht (m/w)
2. zum Anlegen eines Herausgebers müssen Namen und Kürzel bekannt sein.
3. alle Daten müssen einzeln gelesen werden können.

Zur Aufgabe gehören:
• Erstellen von zwei Java-Fachkonzeptklassen, die den obigen Anforderungen genügen.
• Ergänzen der Fachkonzeptklassen um eine Start-Klasse, die einen Herausgeber und zwei Bücher anlegt und diese dann anzeigt. Dabei sollen alle Attribute belegt und angezeigt werden. Nur einem Buch soll tatsächlich einem Herausgeber zugeordnet werden.
• Erstellen Sie den Quellcode unter Beachtung der beschriebenen Konventionen und Emp-fehlungen.


Hat auch alles wunderbar funktioniert, bloß beim fett markierten Teil habe ich noch Probleme, denn ich bekomme es einfach nicht hin, dass kein Herausgeber angezeigt wird, wenn ich das Buch keinem Herausgeber zuordne, denn sobald ich, dass mache kommt ne Fehlermeldung! Hat jemand ne Lösung für mein Problem?

Hier mal meine drei Klassen:

Code:
public class Buch {

  private int isbn;
  private String titel;
  private int erscheinungsJahr;
  private int anzahlExemplare = 1;
  private Herausgeber herausGeber;

  public Buch(int isbn) {
    this.isbn = isbn;
  }
  public int getAnzahlExemplare() {
    return anzahlExemplare;
  }
  public int getErscheinungsJahr() {
    return erscheinungsJahr;
  }
  public int getIsbn() {
    return isbn;
  }
  public String getTitel() {
    return titel;
  }
  public void setErscheinungsJahr(int erscheinungsJahr) {
    this.erscheinungsJahr = erscheinungsJahr;
  }
  public void setTitel(String titel) {
    this.titel = titel;
  }
  public void erhoeheAnzahlExemplareUm(int neueAnzahlExemplare){
    this.anzahlExemplare = anzahlExemplare + neueAnzahlExemplare;
  }
  public void setHerausGeber(Herausgeber hg) {
   herausGeber = hg;
  }
  public String toString(){
    String info = "ISBN: " +isbn+ "\nTitel: "+titel+ "\nErscheinungsjahr: "+erscheinungsJahr
        + "\nAnzahl der Exemplare: "+anzahlExemplare+ "\nHerausgeber: " +herausGeber.getName()+" "
        +herausGeber.getGeschlecht();
        return info;
  }


}

Code:
public class Herausgeber {

  private String name;
  private char geschlecht;

  public Herausgeber(String name, char geschlecht) {
    this.name = name;
    this.geschlecht = geschlecht;
  }
  public char getGeschlecht() {
    return geschlecht;
  }
  public String getName() {
    return name;
  }

}

Code:
public class Start {
  public static void main(String[] args) {

    Herausgeber h1 = new Herausgeber("Heinz Müller", 'm');
    Buch b1 = new Buch(46546465);
    Buch b2 = new Buch(78979878);

    b1.setHerausGeber(h1);
    b1.setErscheinungsJahr(2001);
    b1.setTitel("Java für Anfänger");
    b1.erhoeheAnzahlExemplareUm(1);

    System.out.println("\n"+b1.toString());

    
    b2.setErscheinungsJahr(2003);
    b2.setTitel("SQL für Profis");
    b2.erhoeheAnzahlExemplareUm(10);

    System.out.println("\n"+b2.toString());

  }
}
 
1. du musst ein sammlung von diesen elementen erstellen (vector, lineare liste, hashtabel)
2. zum fettgedruckten:
jenachdem wie du die sammlung machst erflogt eine unterschiedliche abfrage:
array:
durchlaufe und vergleiche die isbn aller elemente bis zum letzen nicht gefüllten element
vorteil: einfacher zugriff
nachteil: begrenzte anzahl von elementen
vector:
funktioniert prinzipiel wie das array
vorteil: unebgrenzt viele elemente, einfacher zugriff
nachteil: braucht mehr speicher als die anderen varianten
lineare liste:
durchlaufe das ganze solange bis kein nächstest vorhanden ist (ein element zeigt auf ein anderes)
vorteil: unbegrenzt viele elemente, schneller als vector

hashtabel:
einsortieren in eine liste über einen hash wert
vorteil: isbn kann als zugriffswert genommen und macht das überwachen ganz einfach, da nicht 2mal der gleiche wert genommen werden kann
 
@nobody

Darum geht es doch gar nicht!

@LeSmou

Du greifst in toString von Buch direkt auf eine Funktion von Herausgeber zu, das geht natürlich nur wenn Herausgeber auch existiert.

Lösung:
Den Herausgeber toString part in die Herausgeber Klasse packen und in Buch toString von Herausgeber nur aufrufen wenn herausgeber != null ist.

Gruß Paul
 
Anonymous hat gesagt.:
@nobody

Darum geht es doch gar nicht!

@LeSmou

Du greifst in toString von Buch direkt auf eine Funktion von Herausgeber zu, das geht natürlich nur wenn Herausgeber auch existiert.

Lösung:
Den Herausgeber toString part in die Herausgeber Klasse packen und in Buch toString von Herausgeber nur aufrufen wenn herausgeber != null ist.

Gruß Paul

Kanst du das noch ein bisschen genauer erklären, habs noch nicht ganz gerafft! 😳
 
lesmou, war nur ne lösung für deine frage 🙄

schau die mal hashtabel an dann siehst, das es damit wunderbar geht.

Nur einem Buch soll tatsächlich einem Herausgeber zugeordnet werden.

wir sollen dir dazu helfen und ich hab dir ne möglichkeit dazu aufgezeigt.

also nochmal allgemein:
frage ob die isbn nr (ist einem buch ja eindeutig zuordnugnsbar) schon vorhanden ist, wenn ja unterbindest du das einlesen.
jetzt klar?
 
Wenn du keinen Herausgeber dem Buch zuweist ist das Okjekt herausgeber null
Wenn du nun in buch.toString() auf das Objekt zugreifst mit "herausGeber.getName()" kommt es zu einer NullpointerException.

Die kannst du nur umgehen, wenn du vor dem Zugriff prüfst ob herausgeber!=null ist.

Gruß Paul

PS: Wenn du das nächste mal die entsprechende Fehlermeldung mitpostest, kann man dir auch schneller helfen.
 
alternative: alle nicht belegten werte erhalten: bei strings den wert ("") bei zahlen (0) bei boolean (false) char (' ')

ist einfacher und schneller, da eine abfrage zeit kostet
 
Nobody hat gesagt.:
alternative: alle nicht belegten werte erhalten: bei strings den wert ("") bei zahlen (0) bei boolean (false) char (' ')

ist einfacher und schneller, da eine abfrage zeit kostet

Die Abfrage pb ein Object null ist, kostet so gut wie keine Zeit.
Ein Object das nicht genutzt wird anzulegen ist um ein vielfaches aufwendiger.

Und da der Herausgeber nicht existiert, bringt auch das vorbelegen nichts.

Gruß Paul
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben