Menu
Coddy logo textTech

Arama İşlevselliği

Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 80 / 87.

challenge icon

Görev

Kolay

Kütüphane Yönetim Sisteminizi güçlü arama özellikleriyle geliştirelim! Kullanıcılar aradıkları kitapları bulamıyorsa bir kütüphane pek kullanışlı değildir. Başlığa ve yazara göre arama yapmak için metotlar ekleyerek kütüphanenizi gerçekten işlevsel hâle getireceksiniz.

Dört dosyadaki mevcut kodunuzu geliştirmeye devam edeceksiniz:

  • Book.java: Mevcut tüm işlevleriyle Book sınıfınızı koruyun: isbn, title, author, isAvailable, borrowedBy, getDetails() ve uygun getter/setter metotları. Henüz eklemediyseniz title ve author için getter metotlarına sahip olduğunuzdan emin olun.
  • User.java: id, name, borrowedBooks ArrayList'i, borrowBook(), returnBook(), getBorrowedCount() ve toString() ile User sınıfınızı değiştirmeden koruyun.
  • Library.java: Library sınıfınızı arama işleviyle genişletin. Mevcut tüm metotları (addBook, registerUser, findBookByIsbn, findUserById, borrowBook, returnBook) koruyun ve aşağıdaki yeni arama metotlarını ekleyin:

    searchByTitle(String keyword) - başlığı anahtar kelimeyi içeren tüm kitapları içeren bir ArrayList<Book> döndürür (büyük/küçük harfe duyarsız). Karşılaştırma için hem başlık hem de anahtar kelime üzerinde toLowerCase() kullanın.

    searchByAuthor(String keyword) - yazar adı anahtar kelimeyi içeren tüm kitapları içeren bir ArrayList<Book> döndürür (büyük/küçük harfe duyarsız).

    getAvailableBooks() - yalnızca şu anda ödünç alınabilir durumda olan kitapları içeren bir ArrayList<Book> döndürür.

  • Main.java: Arama sisteminizi gösterin! Üç kitap için (her biri için ISBN, başlık, yazar), ardından bir kullanıcı için (ID, ad) girdileri alacak, bunları bir ödünç alma işlemi ve iki arama sorgusu izleyecektir.

    Bir Library oluşturun, üç kitabın tümünü ekleyin ve kullanıcıyı kaydedin. Ödünç alma işlemini (userId:isbn biçiminde) gerçekleştirin. Ardından iki arama yapın: ilk girdi bir başlık anahtar kelimesi, ikinci girdi ise bir yazar anahtar kelimesidir.

    Sonuçları şu sırayla yazdırın:

    • Ödünç alma işleminden sonra ödünç alma onayını yazdırın
    • Title search '[keyword]': ifadesini ve ardından eşleşen her kitabın ayrıntılarını ayrı satırlarda yazdırın (getDetails() kullanarak). Eşleşme yoksa No books found yazdırın
    • Author search '[keyword]': ifadesini ve ardından eşleşen her kitabın ayrıntılarını yazdırın. Eşleşme yoksa No books found yazdırın
    • Available books: ifadesini ve ardından mevcut her kitabın ayrıntılarını yazdırın

Girdileri şu sırayla alacaksınız: book1 ISBN, book1 title, book1 author, book2 ISBN, book2 title, book2 author, book3 ISBN, book3 title, book3 author, user ID, user name, borrow operation, title search keyword, author search keyword.

Örneğin ISBN-001, Clean Code, Robert Martin, ISBN-002, The Clean Coder, Robert Martin, ISBN-003, Design Patterns, Gang of Four, U001, Alice, U001:ISBN-001, clean, martin girdileriyle çıktınız şöyle olur:

Alice borrowed Clean Code
Title search 'clean':
[ISBN-001] Clean Code by Robert Martin
[ISBN-002] The Clean Coder by Robert Martin
Author search 'martin':
[ISBN-001] Clean Code by Robert Martin
[ISBN-002] The Clean Coder by Robert Martin
Available books:
[ISBN-002] The Clean Coder by Robert Martin
[ISBN-003] Design Patterns by Gang of Four

Arama metotlarının büyük/küçük harfe duyarsız eşleştirme kullandığına dikkat edin: "clean" araması hem "Clean Code" hem de "The Clean Coder" kitaplarını bulur. Mevcut kitaplar listesi, ödünç alınan kitabı doğru şekilde hariç tutar. Bu arama özellikleri, kütüphanenizi basit bir koleksiyondan gerçekten kullanılabilir bir sisteme dönüştürür!

Kendin dene

import java.util.Scanner;
import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Kitap 1 bilgilerini oku
        String isbn1 = scanner.nextLine();
        String title1 = scanner.nextLine();
        String author1 = scanner.nextLine();
        
        // Kitap 2 bilgilerini oku
        String isbn2 = scanner.nextLine();
        String title2 = scanner.nextLine();
        String author2 = scanner.nextLine();
        
        // Kitap 3 bilgilerini oku
        String isbn3 = scanner.nextLine();
        String title3 = scanner.nextLine();
        String author3 = scanner.nextLine();
        
        // Kullanıcı bilgilerini oku
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // Ödünç alma işlemini oku
        String borrowOp = scanner.nextLine();
        
        // Arama anahtar kelimelerini oku
        String titleKeyword = scanner.nextLine();
        String authorKeyword = scanner.nextLine();
        
        // Book nesnelerini oluştur
        Book book1 = new Book(isbn1, title1, author1);
        Book book2 = new Book(isbn2, title2, author2);
        Book book3 = new Book(isbn3, title3, author3);
        
        // User nesnesini oluştur
        User user = new User(userId, userName);
        
        // Library oluştur ve kitapları ve kullanıcıyı ekle
        Library library = new Library();
        library.addBook(book1);
        library.addBook(book2);
        library.addBook(book3);
        library.registerUser(user);
        
        // Ödünç alma işlemini işle
        String[] parts = borrowOp.split(":");
        String opUserId = parts[0];
        String opIsbn = parts[1];
        library.borrowBook(opUserId, opIsbn);
        
        // TODO: Başlık araması
        // Print "Title search '[titleKeyword]':"
        // library.searchByTitle(titleKeyword) kullan
        // Print each book's getDetails(), or "No books found" if empty
        
        // TODO: Author search
        // Print "Author search '[authorKeyword]':"
        // Kullan library.searchByAuthor(authorKeyword)
        // Print each book's getDetails(), or "No books found" if empty
        
        // TODO: Available books
        // Print "Available books:"
        // Use library.getAvailableBooks()
        // Her kitabın getDetails() metodunu yazdır
    }
}

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Java derleyicisi