Logika Sistem Peminjaman
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C# di Coddy. Pelajaran 64 dari 70.
Tantangan
MudahMari wujudkan Library System-mu dengan menerapkan logika inti peminjaman! Kamu akan membuat sistem terpusat yang mengoordinasikan buku dan pengguna, menerapkan aturan perpustakaan seperti batas peminjaman, serta memastikan buku hanya bisa dipinjam saat tersedia.
Kamu akan melanjutkan struktur empat file yang sudah ada:
Book.cs: Pertahankan class Book dengan propertyId,Title,Author, danIsAvailable, serta methodBorrow()danReturn()dari pelajaran sebelumnya.User.cs: Pertahankan class User denganName,MemberId,BorrowedCount, dan method untuk mengelola buku yang dipinjam. Tambahkan konstantaMaxBooksdengan nilai 3 yang menunjukkan jumlah maksimum buku yang bisa dipinjam pengguna sekaligus. Tambahkan methodCanBorrow()yang hanya mengembalikan true jika pengguna meminjam kurang dariMaxBooks.Library.cs: Di sinilah logika sistem peminjamanmu disatukan. Class Library-mu harus memiliki kumpulan buku dan pengguna, serta method untuk menambahkannya. Terapkan dua method utama:BorrowBook(string bookId, int memberId)- Mengoordinasikan proses peminjaman. Method ini harus memeriksa apakah buku tersedia, apakah pengguna tersedia, apakah buku bisa dipinjam, dan apakah pengguna bisa meminjam lebih banyak buku. Kembalikan pesan yang sesuai untuk setiap kasus gagal atau berhasil.ReturnBook(string bookId, int memberId)- Menangani pengembalian dengan memastikan pengguna memang memiliki buku tersebut sebelum memproses pengembaliannya.
Program.cs: Proses operasi perpustakaan dan tampilkan hasilnya.
Method BorrowBook-mu harus mengembalikan pesan berikut berdasarkan situasinya:
Book not found- saat ID buku tidak adaUser not found- saat ID anggota tidak ada{Title} is not available- saat buku sudah dipinjam{Name} has reached the borrowing limit- saat pengguna sudah memiliki 3 buku{Name} borrowed {Title}- saat peminjaman berhasil
Method ReturnBook-mu harus mengembalikan:
Book not foundatauUser not found- untuk ID yang tidak valid{Name} did not borrow {Title}- saat pengguna mencoba mengembalikan buku yang tidak dimilikinya{Name} returned {Title}- saat pengembalian berhasil
Kamu akan menerima input berikut:
- Nama perpustakaan
- Jumlah buku, lalu setiap buku dalam format
id|title|author - Jumlah pengguna, lalu setiap pengguna dalam format
name|memberId - Jumlah operasi, lalu setiap operasi dalam format
action|bookId|memberId
Cetak hasil setiap operasi pada barisnya sendiri.
Contohnya, jika inputnya adalah:
Central Library
4
B001|The Hobbit|Tolkien
B002|1984|Orwell
B003|Dune|Herbert
B004|Foundation|Asimov
2
Alice|101
Bob|102
6
borrow|B001|101
borrow|B002|101
borrow|B003|101
borrow|B004|101
borrow|B001|102
return|B002|101Outputnya harus berupa:
Alice borrowed The Hobbit
Alice borrowed 1984
Alice borrowed Dune
Alice has reached the borrowing limit
The Hobbit is not available
Alice returned 1984Perhatikan bagaimana class Library bertindak sebagai koordinator: class ini memvalidasi semua kondisi sebelum mengizinkan operasi, sehingga class Book dan User tetap berfokus pada tanggung jawab masing-masing. Pemisahan ini membuat kodemu lebih mudah dipelihara dan diuji!
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
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);
}
// 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]);
if (action == "borrow")
{
string result = library.BorrowBook(bookId, memberId);
Console.WriteLine(result);
}
else if (action == "return")
{
string result = library.ReturnBook(bookId, memberId);
Console.WriteLine(result);
}
}
}
}
}
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