Problem mit Bibliothek-Software

chillazz

Mitglied
Ich möchte eine kleine Bibliotheksoftware implementieren.
Ich habe ein Klasse die als Oberklasse die ArrayList besitzt. Ich habe eine Methode "BookListItem" bei der ich bei jedem Aufruf 1 int und 3 Strings mitgeben möchte die dann in eine Psydodatenbank gespeichert werden sollen. Ich dachte mir es in eine ArrayList zu speichern. Im nachhinein will ich noch Methoden implementieren die auf die ArrayList zugreifen um dort Bücher zu hinzufügen, löschen oder auch zu suchen. Ich hab jetzt das Problem dass ich nicht weiß wie ich der Methode BookListItem die Inter und Strings erwartet die dann in die ArrayList reinschreibe weil mir Eclipse sagt ich soll ein Object e eintragen. Die Liste muss ja auch so konfiguriert sein dass ich mit anderen Methoden auf die zugreifen kann um dort dann noch Bücher hinzufügen oder zu löschen.
Könnte mir jemand einen Ansatz in meinen Code reinschreiben, ich habe irgendwie einen Denkfehler und komme nicht weiter.

Code:
public class BookList extends ArrayList {

	private int ISBN;
	private String Name;
	private String Author;
	private String Verlag;


	public BookList() {
		super();
	}
	
	public void BookListItem(int ISBN, Collection Name, String Author, String Verlag){
		
	
	}

	public int getISBN() {
		return ISBN;
	}

	public void setISBN(int iSBN) {
		ISBN = iSBN;
	}

	public String getName() {
		return Name;
	}

	public void setName(String name) {
		Name = name;
	}

	public String getAuthor() {
		return Author;
	}

	public void setAuthor(String author) {
		Author = author;
	}

	public String getVerlag() {
		return Verlag;
	}

	public void setVerlag(String verlag) {
		Verlag = verlag;
	}

}
 
Hallo!

Ich bin gerade ein wenig verwirrt - ich verstehe dein Problem nicht genau...

Ich denke, eigentlich brauchst du 2 Klassen: Die eine repräsentiert lediglich die Daten eines Buchs - also interne Variablen für ISBN, Titel usw. und getter() Methoden, um dranzukommen. Setter-Methoden brauchst du nicht - oder hast du schon mal ein Buch gesehen, dass seinen Autor ändern konnte, wenn der ihm nicht mehr gefällt? ;)

Dann brauchst du eine Klasse Bibliothek oder so ähnlich. Diese beinhaltet die Sammlung von Büchern und stellt Funktionen zum Suchen usw. zur Verfügung. Allerdings würde ich diese Sammlung nicht als Liste implementieren, sondern als HashMap<String, Book>: Diese Map bekommt als key jeweils die IDBN des betreffenden Books. Somit kannst du ohne jedes Mal durch die Liste zu laufen nach der ISBN suchen.

Wenn das klappt, kannst du weitere Suchanfragen einbauen. Dazu müsstest du dann eine Liste aller Bücher aus der Map holen und diese durchsuchen, wie du das ursprünglich vorhattest...

Wenn dabei noch fragen sind, musst du sie noch genauer erklären...

Gruß,

RoCMe
 
Zuletzt bearbeitet:
Hallo,

danke für deine Hilfe. Ich hab nur eine Frage. Wie kannich in die HashMap z.b. HashMap<String, Book> dann eben mit Daten füllen.
Also ich hab jetzt die Klasse wie du geschrieben hast:
Code:
Daten für Bücher:
package book;

public class BookList {

	private int ISBN;
	private String Name;
	private String Author;
	private String Verlag;

	public int getISBN() {
		return ISBN;
	}

	public String getName() {
		return Name;
	}

	public String getAuthor() {
		return Author;
	}

	public String getVerlag() {
		return Verlag;
	}
}

kannst du mir jetzt erklären wie ich in der anderen Klasse die Bücher eintrage in die HashMap. z.b.
00001, "Advanced Programming Techniques", "Dr. Java Programm", "JDK"
ISBN Name Author Verlag
 
Hallo!

Zunächst mal sollte deine Klasse "Book" heißen, nicht "BookList". Außerdem fehlt noch ein Konstruktor Book(int ISBN, String name, String author, String Verlag), der mit den gegebenen Daten eine neue Book-Instanz erzeugt.

ich habe gerade gesehen, dass deine ISBNs keine Strings sind, sondern durch "ints" dargestellt werden. Deswegen ist der Schlüssel in deiner HashMap nun kein String mehr, sondern ein Integer.

Füttern kannst du die HashMap dann mit der Methode put(), z.B. so:

Java:
public class Library {
private HashMap<Integer, Book> books = new HashMap<Integer, Book>();
...

private void fuegeRoCMesDiplomarbeitHinzu() {
  Book diplom = new Book(12345, "Atlas-basierte Segmentierung", "RoCMe", "LUH")
  books.put(diplom.getISBN(), diplom);
}
...


}

Gruß,

RoCMe
 
okay.. soweit läuft alles. danke..
hab noch ein kleines Problem diese habe ich in Kommentaren in den Quellcode geschrieben. Könntest du mir dabei noch helfen.
Code:
public class Library implements MyBookInterface {

	private HashMap<Integer, Book> books = new HashMap<Integer, Book>();

	@Override
	public void addBook(int ISBN, String Name, String Author, String Verlag) {
		Book book1 = new Book(ISBN, Name, Author, Verlag);
		books.put(book1.getISBN(), book1);
	}

	public void createBookItems() {
		Book book1 = new Book(00001, "aaaa",
				"aaaa", "aaaa");
		books.put(book1.getISBN(), book1);
		Book book2 = new Book(00002, "bbbbb", "bbbb",
				"bbbb");
		books.put(book2.getISBN(), book2);
		Book book3 = new Book(00003, "cccccc", "cccccc",
				"cccc");
		books.put(book3.getISBN(), book3);
		Book book4 = new Book(00004, "ddddd",
				"ddddd", "dddd");
		books.put(book4.getISBN(), book4);
	}

	@Override
	public void deleteBookbyISBN(int ISBN) {
		if (books.containsKey(ISBN) == true) {
			//vergleich ob übergebene ISBN gleich mit ISBN in HaspMap ist
			books.remove(); //löschen des Objektes
		} else {
			System.out
					.println("Die ISBN wurde in der Datenbank nicht gefunden");
		}
	}

	@Override
	public void findBookByISBN() {
		if (books.containsKey(ISBN) == true) {
			//vergleich ob übergebene ISBN gleich mit ISBN in HaspMap ist
			System.out.println(books.get()); //anzeige des Objektes
		} else {
			System.out
					.println("Die ISBN wurde in der Datenbank nicht gefunden");
		}

	}

	@Override
	public List showBooksSortedByISBN() {
		// TODO Auto-generated method stub
		return null;
	}
}
die Methode createBookItems() ist einfach nur dafür da dass ich am Anfang einige Daten in meiner PsydoDatenbank habe
und hier noch die zweite Klasse:
Code:
public class Book {

	private int ISBN;
	private String Name;
	private String Author;
	private String Verlag;
	
	public Book(int ISBN, String Name, String Author, String Verlag){
		this.ISBN = ISBN;
		this.Name = Name;
		this.Author = Author;
		this.Verlag = Verlag;
	}

	public int getISBN() {
		return ISBN;
	}

	public String getName() {
		return Name;
	}

	public String getAuthor() {
		return Author;
	}

	public String getVerlag() {
		return Verlag;
	}
}
 
Zuletzt bearbeitet:
Hi!

Benutze bitte in Zukunft die [_java_] Tags statt den Code Tags, das ergibt ein lesbares Syntax Highlighting :)

Ich verstehe jetzt das Problem nicht ganz - die remove() und die get() Methode müssen natürlich noch einen Key mitbekommen, in deinem Fall also die ISBN des Buchs, das du löschen / bekommen möchtest...

Gruß,

RoCMe
 
hallo,

wo finde ich die JavaTags?
Mir geht es darum, kann aber auch gut sein dass ich einfach was falsche verstehe.
if (books.containsKey(ISBN) == true) {
//vergleich ob übergebene ISBN gleich mit ISBN in HaspMap ist
books.remove(); //löschen des Objektes

Ich gehe in die Methode und schaue erstmal ob die übergebene ISBN in meiner HashMap vorhanden ist, wenn ja gehe ich in die IF Anweisung, dann müsste ich aber noch eine suche implementieren die mir das objekt raussucht in der die übergebene ISBN gleich der ISBN ist die für das Objekt gespeichert wurde. Mein Problem ist jetzt aber dass ich ja einige Datensätze schon in die HashMap eingetragen habe mit verschiedenen Objekten (book1, book2....). Und jedes Objekt hat bei mir ja jetzt einen eigenen Speicherplatz.
WIe komme ich denn jetzt zu denen um eine spezielle zu löschen, quasi diese die mit der übergebenen ISBN gleich ist.
Hoffe du verstehst mein Problem, bin sehr neu im Programmieren und verstehe manche zusammensetzungen mit Objekten, Speicherbereich etc noch nicht so gut.
 
Hi!

Du siehst gerade den Wald vor lauter Bäumen nicht :)

Eine HashMap ist eine Datenstruktur, bei der zu jedem gespeicherten Objekt ein Schlüssel mitgespeichert wird. Über diesen Schlüssel kann man das Objekt später wiederfinden.

Wenn du in deinem Beispiel ein Buch hinzufügst, machst du das ja schon mit der Methode put(). Diese Methode nimmt als erstes Argument den Schlüssel entgegen. Bei dir ist das die ISBN, die sollte ja für jedes Buch eindeutig sein. Wir nehmen zumindest mal an, dass in deiner Bücherei jeweils nur ein Exemplar eines Buchs existiert.

Das 2. Argument ist das eigentliche Objekt, dass du speichern möchtest.

Das Buch myBook kannst du also mit
Java:
booklist.put(book.getISBN(), book);

Wenn du jetzt ein Buch suchst, machst du das mit der Funktion get(). get() erwartet einen Schlüssel, in deinem Fall also eine ISBN Nummer.

Mit

Java:
books.get(diplom.getISBN());

//äquivalent:
books.get(12345);

würdest du also meine Arbeit bekommen, sofern sie denn in deiner Liste steht. Ansonsten liefert die Methode übrigens null zurück!

Bei remove das gleiche Spiel - wieder übergibst du die ISBN als Schlüssel zum Objekt, dass du Löschen möchtest!


Hoffe, ich konnte deine Fragen klären :)

Gruß,

RoCMe

Ach ja: Die Java Tags bekommst du durch selbst tippen ;-p Einfach das "CODE" in deinen Tags durch "Java" ersetzen und fertig :)
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück