Arama İşlevselliği
Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 80 / 87.
Görev
KolayKü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,titleveauthoriç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 birArrayList<Book>döndürür. Karşılaştırma için hem başlık hem de anahtar kelime üzerindetoLowerCase()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 birArrayList<Book>döndürür.getAvailableBooks()- yalnızca şu anda ödünç alınabilir durumda olan kitapları barındıran birArrayList<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:isbnformatı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 foundyazdırınAuthor 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 foundyazdırınAvailable 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 FourArama 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
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarAlanlar (Öznitelikler)Yapıcı MetotYapıcı Metot Aşırı YüklemeÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (extends)super Anahtar KelimesiMetot Geçersiz Kılma (@Override)Yapıcı Metot ZincirlemeObject SınıfıTekli ve Çok Seviyeli KalıtımNeden Çoklu Sınıf Kalıtımı Yok?Özet - Çalışan Hiyerarşisi7Özel Metotlar ve Object Sınıfı
toString() Metoduequals() ve hashCode()clone() MetoducompareTo() ve ComparableComparator ArayüzüÖzet - Özel Sıralama10OOP'de İstisna Yönetimi
İstisna Sınıfı HiyerarşisiÖzel İstisnalarDenetimli ve Denetimsiz HatalarTry-With-Resources YapısıÖzet - Doğrulanmış Kullanıcı13Proje: Kütüphane Yönetimi
Proje Genel Bakış ve UML TasarımıKitap ve Kullanıcı Sınıfları2Erişim Belirleyiciler ve Kapsülleme
Erişim Seviyelerine Genel BakışGetter ve Setter MetotlarıBilgi Gizlemefinal Anahtar KelimesiÖzet - Banka Hesabı Yöneticisi5Polimorfizm
Metot Aşırı Yükleme TemelleriMetot Geçersiz Kılma (Çalışma Zamanı)Upcasting ve Downcastinginstanceof OperatörüSoyut Sınıflar ve MetotlarÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımAgregasyon vs KompozisyonDahili, Yuvalanmış ve Anonim SınıflarEnum'lar ve Enum MetotlarıRecords (Java 16+)Sealed Classes (Java 17+)11Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıBuilder KalıbıObserver KalıbıStrategy Kalıbı14Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi3Sınıf Özellikleri ve Statik Üyeler
Instance ve Statik DeğişkenlerStatik MetotlarStatik BloklarSabitler (static final)Özet - Sayaç ve Utility6Arayüzler ve Soyut Sınıflar
Arayüzlere GirişArayüzleri UygulamaÇoklu Arayüz UygulamaArayüzlerde Default ve StaticSoyut Sınıflar ve ArayüzlerFonksiyonel ArayüzlerÖzet - Ödeme Sistemi9Generics
Generics'e GirişGeneric SınıflarGeneric MetotlarSınırlandırılmış Tip ParametreleriWildcard'lar (?, extends, super)Özet - Generic Container12Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıYineleyici Kalıbı