LINQ untuk Pencarian
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C# di Coddy. Pelajaran 65 dari 70.
Tantangan
MudahMari 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 propertyId,Title,Author, danIsAvailable, serta methodBorrow()danReturn().User.cs: Pertahankan class User dengan fungsionalitas pelacakan peminjaman, termasukMaxBooks,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 tersediaGetBorrowedBooks(): Mengembalikan semua buku yang saat ini dipinjam
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 judulauthor|name: dapatkan buku berdasarkan penulisavailable: dapatkan semua buku yang tersediaborrowed: 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|TolkienOutputnya adalah:
The Hobbit by Tolkien
The Lord of the Rings by Tolkien
The Silmarillion by TolkienContoh 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
availableOutputnya adalah:
The Lord of the Rings by Tolkien
Animal Farm by George Orwell
The Silmarillion by TolkienLINQ 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
1Dasar-Dasar OOP
File EksternalNamespace & DirektifPengantar class & objectKata Kunci 'this'Method dan ParameterField vs PropertyKonstruktorInisialisasi objectRingkasan: Kalkulator Sederhana4Pewarisan
Sintaks Dasar Pewarisan (:)Kata Kunci 'base'Kata Kunci Virtual & OverrideClass SealedBase Class 'object'Rangkuman: Hierarki Karyawan7Fitur Lanjutan
Overloading OperatorIndexer (this[])Penimpaan ToString()Extension methodRingkasan: Custom list2Property & Anggota Statis
Property yang Diimplementasikan OtomatisProperty Hanya Baca dan Hanya TulisField dan method StatisClass StatisAnggota Berbentuk Ekspresi5Polimorfisme & Antarmuka
Polimorfisme saat kompilasi vs runtimeAntarmuka vs kelas abstrakBeberapa antarmukaAntarmuka eksplisitUpcasting & DowncastingRingkasan, Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi daripada PewarisanGenerics (class dan method)Delegate dan EventAtribut dan ReflectionIDisposable dan Pernyataan usingDasar-Dasar Dependency Injection11Pola Desain Bagian 2
Pola PerintahPola AdapterPola DecoratorPola Template MethodPola StatePola Composite3Arsitektur class
Data Instance vs StaticKata Kunci 'readonly' & 'const'Field PendukungRingkasan: Pengelola Rekening Bank6Enkapsulasi
Pengubah AksesProperti untuk EnkapsulasiImplementasi Penyembunyian DataPola ImutabilitasUlasan: Data Siswa12Proyek: Sistem Perpustakaan
Struktur ProyekModel Buku dan PenggunaLogika Sistem PeminjamanLINQ untuk PencarianUI Konsol / Antarmuka AdminPengujian Unit (NUnit/xUnit)Latihan sendiri: Compiler C# online