Sistem Peminjaman
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 58 dari 65.
Tantangan
SedangPindahkan proses peminjaman ke dalam library. Pertahankan semua yang kamu tulis pada langkah sebelumnya, hanya library.gd yang berubah.
Tambahkan tiga method ke Library:
find_book(isbn: String) -> Bookmengembalikan buku dengan ISBN tersebut, ataunulljika tidak ada.find_user(user_id: String) -> Usermengembalikan pengguna dengan id tersebut, ataunull.borrow_book(isbn: String, user_id: String) -> Stringmeminjamkan buku dan mengembalikan pesan. Periksa dengan urutan berikut:- tidak ada buku dengan ISBN tersebut: kembalikan
Book not found - tidak ada pengguna dengan id tersebut: kembalikan
User not found - buku tidak tersedia: kembalikan
Book is not available - jika tidak, atur
availablebuku menjadifalsedanborrower_id-nya menjadi id pengguna, tambahkan ISBN keborrowed_isbnspengguna, lalu kembalikanBook borrowed successfully
- tidak ada buku dengan ISBN tersebut: kembalikan
Kode yang disediakan mengganti lend dengan borrow ISBN|ID, yang mencetak pesan, dan menambahkan loans ID (judul buku yang dipinjam pengguna) serta holder ISBN (siapa yang memegang buku). Keduanya menggunakan find_book() dan find_user() milikmu. Untuk input berikut:
Community
book Dune|Frank Herbert|111
user U001|Alice
user U002|Bob
borrow 999|U001
borrow 111|U999
borrow 111|U001
borrow 111|U002
holder 111
loans U001output-nya adalah:
Book not found
User not found
Book borrowed successfully
Book is not available
Dune is borrowed by Alice
Alice has borrowed:
- DuneKodemu ditulis di book.gd, user.gd, dan library.gd. main.gd berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
extends Node
func _ready():
# Kode input/output yang disediakan: biarkan tetap seperti ini
var library := Library.new(OS.read_string_from_stdin())
var line := OS.read_string_from_stdin()
while line != "":
var parts := line.split(" ", true, 1)
var fields: PackedStringArray = parts[1].split("|") if parts.size() > 1 else PackedStringArray()
match parts[0]:
"book":
library.add_book(Book.new(fields[0], fields[1], fields[2]))
"user":
library.add_user(User.new(fields[0], fields[1]))
"borrow":
print(library.borrow_book(fields[0], fields[1]))
"loans":
var reader: User = library.find_user(fields[0])
print(reader.user_name, " has borrowed:")
for isbn in reader.borrowed_isbns:
print("- ", library.find_book(isbn).title)
"holder":
var book: Book = library.find_book(fields[0])
if book.available:
print(book.title, " is on the shelf")
else:
print(book.title, " is borrowed by ", library.find_user(book.borrower_id).user_name)
"books":
for book in library.books:
print(book)
"users":
for user in library.users:
print(user)
"show":
print(library)
line = OS.read_string_from_stdin()
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPclass dan objectKata Kunci selfmethodpropertyKonstruktor (_init)Ringkasan: Kalkulator Sederhana4Polimorfisme
Method Overriding Sekali LagiDuck TypingKelas Abstrak dan MethodDesain InterfaceRingkasan: Kalkulator Bentuk7Sinyal
Apa itu Sinyal?Mendeklarasikan dan MemancarkanMenghubungkan ke SinyalSinyal dengan ArgumenRangkuman, Sistem Kesehatan10Pola Desain Bagian 2
Pola CommandPola AdapterPola DecoratorPola Template MethodPola StatePola Composite2Property class
Variabel instance vs. variabel statisFungsi statisSetter propertyGetter propertyPrivat berdasarkan konvensiRangkuman: Pengelola Rekening Bank5Enkapsulasi
Member Publik dan PrivatValidasi dengan SetterPenyembunyian InformasiProperty Hanya-BacaRingkasan: Sistem Catatan Siswa8Konsep OOP Lanjutan
Komposisi vs PewarisanInner ClassNode sebagai KomponenRefCounted vs NodeEnum dalam Class11Proyek: Manajemen Perpustakaan
Gambaran Umum Proyekclass Buku dan PenggunaLatihan sendiri: Compiler GDScript online