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ı bulamazlarsa bir kütüphane pek de kullanışlı sayılmaz. Başlık ve yazara göre arama yapma yöntemleri ekleyerek kütüphanenizi gerçekten işlevsel hale getireceksiniz.

Dört dosya üzerindeki mevcut kodunuzu geliştirmeye devam edeceksiniz:

  • Book.java: Book sınıfınızı tüm mevcut işlevleriyle (isbn, title, author, isAvailable, borrowedBy, getDetails() ve uygun getter/setter metotları) koruyun. Eğer henüz eklemediyseniz, title ve author için getter metotlarınızın olduğundan emin olun.
  • User.java: User sınıfınızı id, name, borrowedBooks ArrayList'i, borrowBook(), returnBook(), getBorrowedCount() ve toString() metotlarıyla değiştirmeden koruyun.
  • Library.java: Library sınıfınızı arama işlevselliği ile genişletin. Tüm mevcut metotları (addBook, registerUser, findBookByIsbn, findUserById, borrowBook, returnBook) koruyun ve şu yeni arama metotlarını ekleyin:

    searchByTitle(String keyword) - başlığı anahtar kelimeyi (büyük/küçük harf duyarsız) içeren tüm kitapları barındıran bir ArrayList<Book> döndürür. 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 (büyük/küçük harf duyarsız) içeren tüm kitapları barındıran bir ArrayList<Book> döndürür.

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

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

    Bir Library oluşturun, üç kitabı da ekleyin ve kullanıcıyı kaydedin. Ödünç alma işlemini (userId:isbn formatında) gerçekleştirin. Ardından iki aramayı yapın; ilk giriş bir başlık anahtar kelimesi, ikincisi 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]': yazdırın ve ardından eşleşen her kitabın detaylarını ayrı satırlarda (getDetails() kullanarak) yazdırın. Eşleşme yoksa, No books found yazdırın
    • Author search '[keyword]': yazdırın ve ardından eşleşen her kitabın detaylarını yazdırın. Eşleşme yoksa, No books found yazdırın
    • Available books: yazdırın ve ardından mevcut her kitabın detaylarını yazdırın

Girişleri şu sırayla alacaksınız: kitap1 ISBN, kitap1 başlığı, kitap1 yazarı, kitap2 ISBN, kitap2 başlığı, kitap2 yazarı, kitap3 ISBN, kitap3 başlığı, kitap3 yazarı, kullanıcı ID, kullanıcı adı, ödünç alma işlemi, başlık arama anahtar kelimesi, yazar arama anahtar kelimesi.

Ö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 girişleri ile çıktınız şöyle olacaktır:

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 harf duyarsız eşleştirmeyi nasıl kullandığına dikkat edin; "clean" araması hem "Clean Code" hem de "The Clean Coder" sonuçlarını bulur. Mevcut kitaplar listesi, ödünç alınan kitabı doğru bir şekilde hariç tutar. Bu arama yetenekleri, 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);
        
        // 1. kitap bilgilerini oku
        String isbn1 = scanner.nextLine();
        String title1 = scanner.nextLine();
        String author1 = scanner.nextLine();
        
        // 2. kitap bilgilerini oku
        String isbn2 = scanner.nextLine();
        String title2 = scanner.nextLine();
        String author2 = scanner.nextLine();
        
        // 3. kitap 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();
        
        // Kitap nesnelerini oluştur
        Book book1 = new Book(isbn1, title1, author1);
        Book book2 = new Book(isbn2, title2, author2);
        Book book3 = new Book(isbn3, title3, author3);
        
        // Kullanıcı nesnesini oluştur
        User user = new User(userId, userName);
        
        // Kütüphane oluştur, 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 gerçekleştir
        String[] parts = borrowOp.split(":");
        String opUserId = parts[0];
        String opIsbn = parts[1];
        library.borrowBook(opUserId, opIsbn);
        
        // TODO: Başlık araması
        // "Title search '[titleKeyword]':" yazdır
        // library.searchByTitle(titleKeyword) kullan
        // Her kitabın getDetails() bilgisini yazdır veya boşsa "No books found" yazdır
        
        // TODO: Yazar araması
        // "Author search '[authorKeyword]':" yazdır
        // library.searchByAuthor(authorKeyword) kullan
        // Her kitabın getDetails() bilgisini yazdır veya boşsa "No books found" yazdır
        
        // TODO: Mevcut kitaplar
        // "Available books:" yazdır
        // library.getAvailableBooks() kullan
        // Her kitabın getDetails() bilgisini yazdır
    }
}

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