Fitur Pencarian
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 80 dari 87.
Tantangan
MudahMari tingkatkan Library Management System-mu dengan kemampuan pencarian yang andal! Library tidak terlalu berguna jika pengguna tidak bisa menemukan buku yang mereka cari. Kamu akan menambahkan method untuk mencari berdasarkan judul dan penulis, sehingga library-mu benar-benar berfungsi.
Kamu akan melanjutkan pengembangan kodemu yang sudah ada di empat file:
Book.java: Pertahankan class Book-mu dengan semua fungsionalitas yang sudah ada: isbn, title, author, isAvailable, borrowedBy, getDetails(), serta getter/setter yang sesuai. Pastikan kamu sudah memiliki method getter untuktitledanauthorjika belum menambahkannya.User.java: Pertahankan class User-mu tanpa perubahan, dengan id, name, ArrayList borrowedBooks, borrowBook(), returnBook(), getBorrowedCount(), dan toString().Library.java: Perluas class Library-mu dengan fungsionalitas pencarian. Pertahankan semua method yang sudah ada (addBook, registerUser, findBookByIsbn, findUserById, borrowBook, returnBook) dan tambahkan method pencarian baru berikut:searchByTitle(String keyword)- mengembalikanArrayList<Book>yang berisi semua buku dengan judul yang memuat kata kunci tersebut (tanpa membedakan huruf besar dan kecil). GunakantoLowerCase()pada judul dan kata kunci untuk membandingkannya.searchByAuthor(String keyword)- mengembalikanArrayList<Book>yang berisi semua buku dengan nama penulis yang memuat kata kunci tersebut (tanpa membedakan huruf besar dan kecil).getAvailableBooks()- mengembalikanArrayList<Book>yang hanya berisi buku yang saat ini tersedia untuk dipinjam.Main.java: Tunjukkan cara kerja sistem pencarianmu! Kamu akan menerima input untuk tiga buku (ISBN, judul, penulis untuk setiap buku), lalu seorang pengguna (ID, nama), diikuti operasi peminjaman dan dua kueri pencarian.Buat Library, tambahkan ketiga buku, lalu daftarkan pengguna. Proses operasi peminjaman (dengan format
userId:isbn). Lalu lakukan dua pencarian: input pertama adalah kata kunci judul, input kedua adalah kata kunci penulis.Cetak hasil dalam urutan berikut:
- Setelah peminjaman, cetak konfirmasi peminjaman
- Cetak
Title search '[keyword]':diikuti detail setiap buku yang cocok pada baris terpisah (menggunakan getDetails()). Jika tidak ada yang cocok, cetakNo books found - Cetak
Author search '[keyword]':diikuti detail setiap buku yang cocok. Jika tidak ada yang cocok, cetakNo books found - Cetak
Available books:diikuti detail setiap buku yang tersedia
Kamu akan menerima input dengan urutan berikut: ISBN book1, judul book1, penulis book1, ISBN book2, judul book2, penulis book2, ISBN book3, judul book3, penulis book3, ID pengguna, nama pengguna, operasi peminjaman, kata kunci pencarian judul, kata kunci pencarian penulis.
Misalnya, dengan input 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, outputmu akan seperti berikut:
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 FourPerhatikan bahwa method pencarian menggunakan pencocokan tanpa membedakan huruf besar dan kecil: pencarian untuk "clean" menemukan "Clean Code" dan "The Clean Coder". Daftar buku yang tersedia dengan benar tidak menyertakan buku yang sedang dipinjam. Kemampuan pencarian ini mengubah library-mu dari koleksi sederhana menjadi sistem yang benar-benar berguna!
Coba sendiri
import java.util.Scanner;
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Baca informasi buku 1
String isbn1 = scanner.nextLine();
String title1 = scanner.nextLine();
String author1 = scanner.nextLine();
// Baca informasi buku 2
String isbn2 = scanner.nextLine();
String title2 = scanner.nextLine();
String author2 = scanner.nextLine();
// Baca informasi buku 3
String isbn3 = scanner.nextLine();
String title3 = scanner.nextLine();
String author3 = scanner.nextLine();
// Baca informasi pengguna
String userId = scanner.nextLine();
String userName = scanner.nextLine();
// Baca operasi peminjaman
String borrowOp = scanner.nextLine();
// Baca kata kunci pencarian
String titleKeyword = scanner.nextLine();
String authorKeyword = scanner.nextLine();
// Buat object Book
Book book1 = new Book(isbn1, title1, author1);
Book book2 = new Book(isbn2, title2, author2);
Book book3 = new Book(isbn3, title3, author3);
// Buat object User
User user = new User(userId, userName);
// Buat Library lalu tambahkan buku dan pengguna
Library library = new Library();
library.addBook(book1);
library.addBook(book2);
library.addBook(book3);
library.registerUser(user);
// Proses operasi peminjaman
String[] parts = borrowOp.split(":");
String opUserId = parts[0];
String opIsbn = parts[1];
library.borrowBook(opUserId, opIsbn);
// TODO: Pencarian judul
// Cetak "Title search '[titleKeyword]':"
// Gunakan library.searchByTitle(titleKeyword)
// Cetak getDetails() setiap buku, atau "No books found" jika kosong
// TODO: Cari berdasarkan penulis
// Cetak "Author search '[authorKeyword]':"
// Gunakan library.searchByAuthor(authorKeyword)
// Cetak getDetails() setiap buku, atau "No books found" jika kosong
// TODO: Buku yang tersedia
// Cetak "Available books:"
// Gunakan library.getAvailableBooks()
// Cetak getDetails() setiap buku
}
}Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPClass dan ObjectKata Kunci thisMethodField (Atribut)Method KonstruktorOverloading KonstruktorRangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan Dasar (extends)Kata Kunci superMethod Overriding (@Override)Rantai KonstruktorKelas ObjectPewarisan Tunggal dan BertingkatMengapa Tidak Ada Pewarisan Multi-KelasRangkuman: Hierarki Karyawan7method Khusus & class Object
method toString()equals() dan hashCode()method clone()compareTo() dan ComparableAntarmuka ComparatorUlasan: Pengurutan Kustom10Penanganan Exception dalam OOP
Hierarki class ExceptionException KustomError Checked vs UncheckedPola Try-with-ResourcesRekap: Pengguna Tervalidasi13Proyek: Manajemen Perpustakaan
Gambaran Umum Proyek dan Desain UMLclass Buku dan PenggunaSistem PeminjamanFitur PencarianAntarmuka AdminIntegrasi Penanganan PengecualianPengujian dan Integrasi2Modifier Akses & Enkapsulasi
Ikhtisar Tingkat AksesMethod Getter dan SetterPenyembunyian InformasiKata Kunci finalUlasan: Pengelola Rekening Bank5Polimorfisme
Dasar method overloadingMethod overriding (Saat program berjalan)Upcasting dan downcastingOperator instanceofclass dan method abstrakUlasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanAgregasi vs Komposisiinner, nested, dan anonymous classEnum dan method Enumrecord (Java 16+)sealed class (Java 17+)11Pola Desain Bagian 1
Pengantar Pola DesainPola SingletonPola FactoryPola BuilderPola ObserverPola Strategy3property class dan Anggota Statis
Variabel Instance vs Statismethod StatisBlok StatisKonstanta (static final)Rangkuman: Penghitung dan Utilitas6Antarmuka & Kelas Abstrak
Pengantar AntarmukaMengimplementasikan AntarmukaImplementasi Beberapa AntarmukaDefault & Static pada AntarmukaKelas Abstrak vs AntarmukaAntarmuka FungsionalRekap: Sistem PembayaranLatihan sendiri: Compiler Java online