Menu
CoddyTech

LINQ untuk Pencarian

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C# di Coddy. Pelajaran 65 dari 70.

challenge icon

Tantangan

Mudah

Mari tambahkan kemampuan pencarian yang canggih ke Sistem Perpustakaanmu menggunakan LINQ! Kamu akan mengimplementasikan method yang memungkinkan pengguna menemukan buku dengan berbagai kriteria: mencari berdasarkan judul, memfilter berdasarkan penulis, dan menemukan buku yang tersedia. LINQ membuat query ini elegan dan mudah dibaca.

Kamu akan melanjutkan pengembangan dengan struktur proyek yang sudah ada:

  • Book.cs: Pertahankan class Book dengan property Id, Title, Author, dan IsAvailable, serta method Borrow() dan Return().
  • User.cs: Pertahankan class User dengan fungsionalitas pelacakan peminjaman, termasuk MaxBooks, CanBorrow(), dan method untuk mengelola buku yang dipinjam.
  • Library.cs: Di sinilah kamu akan menambahkan method pencarian yang didukung LINQ. Selain logika peminjaman yang sudah ada, implementasikan kemampuan pencarian berikut:
    • SearchByTitle(string keyword): Mengembalikan semua buku yang judulnya memuat kata kunci (tanpa membedakan huruf besar dan kecil)
    • GetBooksByAuthor(string author): Mengembalikan semua buku karya penulis tertentu (cocok persis, tanpa membedakan huruf besar dan kecil)
    • GetAvailableBooks(): Mengembalikan semua buku yang saat ini tersedia
    • GetBorrowedBooks(): Mengembalikan semua buku yang saat ini dipinjam
    Setiap method pencarian harus mengembalikan kumpulan buku yang bisa diiterasi.
  • Program.cs: Proses query pencarian dan tampilkan hasilnya.

Kamu akan menerima input berikut:

  • Nama perpustakaan
  • Jumlah buku, lalu setiap buku dalam format id|title|author
  • Jumlah operasi peminjaman untuk menyiapkan kondisi awal, lalu setiap operasi dalam format bookId
  • Perintah pencarian dalam salah satu format berikut:
    • title|keyword: cari buku berdasarkan kata kunci pada judul
    • author|name: dapatkan buku berdasarkan penulis
    • available: dapatkan semua buku yang tersedia
    • borrowed: dapatkan semua buku yang dipinjam

Untuk hasil pencarian, cetak setiap buku yang cocok pada barisnya sendiri dengan format {Title} by {Author}. Jika tidak ada buku yang cocok, cetak No books found. Hasil harus dicetak sesuai urutannya dalam koleksi perpustakaan.

Contohnya, jika inputnya adalah:

City Library
5
B001|The Hobbit|Tolkien
B002|The Lord of the Rings|Tolkien
B003|1984|George Orwell
B004|Animal Farm|George Orwell
B005|The Silmarillion|Tolkien
2
B001
B003
author|Tolkien

Outputnya adalah:

The Hobbit by Tolkien
The Lord of the Rings by Tolkien
The Silmarillion by Tolkien

Contoh lain dengan pengaturan perpustakaan yang sama, tetapi mencari buku yang tersedia:

City Library
5
B001|The Hobbit|Tolkien
B002|The Lord of the Rings|Tolkien
B003|1984|George Orwell
B004|Animal Farm|George Orwell
B005|The Silmarillion|Tolkien
2
B001
B003
available

Outputnya adalah:

The Lord of the Rings by Tolkien
Animal Farm by George Orwell
The Silmarillion by Tolkien

LINQ mengubah perulangan yang rumit menjadi query yang ekspresif dan mudah dibaca. Method seperti Where() untuk memfilter dan ToList() untuk membentuk hasil menjadi list akan membuat implementasi pencarianmu rapi dan mudah dipelihara!

Coba sendiri

using System;
using System.Collections.Generic;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Baca nama library
            string libraryName = Console.ReadLine();
            
            // Buat instance Library dengan nama library
            Library library = new Library(libraryName);
            
            // Baca jumlah buku
            int numBooks = Convert.ToInt32(Console.ReadLine());
            
            // Baca dan tambahkan buku
            for (int i = 0; i < numBooks; i++)
            {
                string bookInput = Console.ReadLine();
                string[] bookParts = bookInput.Split('|');
                string bookId = bookParts[0];
                string bookTitle = bookParts[1];
                string bookAuthor = bookParts[2];
                
                Book book = new Book(bookId, bookTitle, bookAuthor);
                library.AddBook(book);
            }
            
            // Baca jumlah operasi peminjaman untuk menyiapkan kondisi awal
            int numBorrows = Convert.ToInt32(Console.ReadLine());
            
            // Proses operasi peminjaman (hanya ID buku)
            for (int i = 0; i < numBorrows; i++)
            {
                string bookId = Console.ReadLine();
                Book book = library.GetBookById(bookId);
                if (book != null)
                {
                    book.IsAvailable = false;
                }
            }
            
            // Baca perintah pencarian
            string searchCommand = Console.ReadLine();
            
            // Proses perintah pencarian
            List<Book> results = new List<Book>();
            
            if (searchCommand == "available")
            {
                results = library.GetAvailableBooks();
            }
            else if (searchCommand == "borrowed")
            {
                results = library.GetBorrowedBooks();
            }
            else if (searchCommand.Contains("|"))
            {
                string[] parts = searchCommand.Split('|');
                string searchType = parts[0];
                string searchValue = parts[1];
                
                if (searchType == "title")
                {
                    results = library.SearchByTitle(searchValue);
                }
                else if (searchType == "author")
                {
                    results = library.GetBooksByAuthor(searchValue);
                }
            }
            
            // Cetak hasil
            if (results.Count == 0)
            {
                Console.WriteLine("No books found");
            }
            else
            {
                foreach (Book book in results)
                {
                    Console.WriteLine($"{book.Title} by {book.Author}");
                }
            }
        }
    }
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler C# online