Model Buku dan Pengguna
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C# di Coddy. Pelajaran 63 dari 70.
Tantangan
MudahMari kembangkan Library System-mu dengan melengkapi model Book dan User dengan fungsionalitas yang lebih kaya. Kamu akan menambahkan pelacakan status buku, kemampuan meminjam bagi pengguna, dan enkapsulasi yang tepat untuk menjaga keamanan datamu.
Kamu akan terus menggunakan struktur empat file:
Book.cs: Tingkatkan class Book-mu dengan pengenal unik dan pelacakan status. Setiap buku harus memilikiId(string),Title(string),Author(string), danIsAvailable(bool, nilai awalnya true). Tambahkan methodBorrow()danReturn()yang mengubah status ketersediaan dan mengembalikan pesan yang menunjukkan keberhasilan atau kegagalan. Jika seseorang mencoba meminjam buku yang tidak tersedia, kembalikan"{Title} is not available". Jika mereka mencoba mengembalikan buku yang sudah tersedia, kembalikan"{Title} was not borrowed". Operasi yang berhasil harus mengembalikan"{Title} has been borrowed"atau"{Title} has been returned".User.cs: Kembangkan class User-mu untuk melacak buku yang dipinjam. SertakanName(string),MemberId(int), dan list privat untuk menyimpan ID buku yang dipinjam. Tambahkan property hanya-bacaBorrowedCountyang mengembalikan jumlah buku yang sedang dimiliki pengguna. Sertakan methodAddBorrowedBook(string bookId)danRemoveBorrowedBook(string bookId)untuk mengelola buku yang dipinjam pengguna. Tambahkan juga methodHasBook(string bookId)yang mengembalikan true jika pengguna telah meminjam buku tersebut.Library.cs: Class Library-mu harus menyimpan kumpulan buku dan pengguna. Sertakan methodAddBook(Book book)danRegisterUser(User user)untuk mengisi library. Tambahkan methodGetBookById(string id)yang mengembalikan buku dengan ID tersebut (atau null jika tidak ditemukan), danGetUserById(int memberId)yang bekerja dengan cara serupa untuk pengguna.Program.cs: Satukan semuanya dengan memproses operasi library berdasarkan input.
Kamu akan menerima input berikut:
- Nama library
- Jumlah buku yang akan ditambahkan
- Untuk setiap buku:
id|title|author - Jumlah pengguna yang akan didaftarkan
- Untuk setiap pengguna:
name|memberId - Jumlah operasi yang akan dilakukan
- Untuk setiap operasi:
action|bookId|memberIddengan action berupaborrowataureturn
Untuk setiap operasi, cetak hasil tindakan peminjaman atau pengembalian. Setelah semua operasi selesai, cetak ringkasan untuk setiap pengguna yang menampilkan nama mereka dan jumlah buku yang sedang mereka pinjam dalam format {Name}: {BorrowedCount} book(s).
Contohnya, jika inputnya adalah:
Downtown Library
2
B001|Clean Code|Robert Martin
B002|Design Patterns|Gang of Four
2
Alice|101
Bob|102
4
borrow|B001|101
borrow|B002|101
borrow|B001|102
return|B001|101Output-nya adalah:
Clean Code has been borrowed
Design Patterns has been borrowed
Clean Code is not available
Clean Code has been returned
Alice: 1 book(s)
Bob: 0 book(s)Perhatikan bahwa Alice berhasil meminjam dua buku, tetapi saat Bob mencoba meminjam Clean Code (yang sudah dipinjam Alice), operasi tersebut gagal. Setelah Alice mengembalikan Clean Code, jumlah bukunya turun menjadi 1. Ini menunjukkan bagaimana model-modelmu bekerja bersama untuk menerapkan aturan library!
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 pengguna
int numUsers = Convert.ToInt32(Console.ReadLine());
// Baca dan daftarkan pengguna
List<User> usersList = new List<User>();
for (int i = 0; i < numUsers; i++)
{
string userInput = Console.ReadLine();
string[] userParts = userInput.Split('|');
string userName = userParts[0];
int memberId = Convert.ToInt32(userParts[1]);
User user = new User(userName, memberId);
library.RegisterUser(user);
usersList.Add(user);
}
// Baca jumlah operasi
int numOperations = Convert.ToInt32(Console.ReadLine());
// Proses operasi
for (int i = 0; i < numOperations; i++)
{
string operationInput = Console.ReadLine();
string[] opParts = operationInput.Split('|');
string action = opParts[0];
string bookId = opParts[1];
int memberId = Convert.ToInt32(opParts[2]);
Book book = library.GetBookById(bookId);
User user = library.GetUserById(memberId);
if (action == "borrow")
{
string result = book.Borrow();
Console.WriteLine(result);
if (result.Contains("has been borrowed"))
{
user.AddBorrowedBook(bookId);
}
}
else if (action == "return")
{
string result = book.Return();
Console.WriteLine(result);
if (result.Contains("has been returned"))
{
user.RemoveBorrowedBook(bookId);
}
}
}
// Tampilkan ringkasan untuk setiap pengguna
foreach (User user in usersList)
{
Console.WriteLine($"{user.Name}: {user.BorrowedCount} book(s)");
}
}
}
}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