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ı 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 eklemediyseniztitleveauthoriç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 birArrayList<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 üzerindetoLowerCase()kullanın.searchByAuthor(String keyword)- yazar adı anahtar kelimeyi içeren tüm kitapları içeren birArrayList<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 birArrayList<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:isbnbiç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 yoksaNo books foundyazdırınAuthor search '[keyword]':ifadesini ve ardından eşleşen her kitabın ayrıntılarını yazdırın. Eşleşme yoksaNo books foundyazdırınAvailable 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 FourArama 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
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ıÖdünç Alma SistemiArama İşlevselliğiYönetici ArayüzüException Handling EntegrasyonuTest ve Entegrasyon2Eriş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ıKendi başına pratik yap: Online Java derleyicisi