Menu
CoddyTech

Pengujian dan Integrasi

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 61 dari 65.

challenge icon

Tantangan

Sedang

Selesaikan sistem dengan fitur pengembalian, lalu biarkan pengujian menjalankan semua bagiannya secara bersamaan. Pertahankan semua yang kamu tulis pada langkah sebelumnya; library.gd dan user.gd berubah.

Di Library, tulis return_book(isbn: String, user_id: String) -> String. 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 tersedia, atau borrower_id-nya adalah pengguna lain: kembalikan This book was not borrowed by this user
  • jika tidak, buat buku tersedia kembali, atur borrower_id-nya menjadi "", hapus ISBN dari borrowed_isbns pengguna, lalu kembalikan Book returned successfully

Di User, tulis return_all_books(library: Library) -> int. Fungsi ini mengembalikan setiap buku yang dipinjam pengguna melalui library.return_book() dan mengembalikan jumlah buku yang telah dikembalikan. Pengguna menerima library sebagai argumen dan tidak menyimpannya, sehingga kedua object tidak saling menunjuk.

Kode yang disediakan menambahkan perintah return ISBN|ID dan return_all ID. Untuk input ini:

Community
book The Great Gatsby|F. Scott Fitzgerald|123456
book 1984|George Orwell|345678
user U001|Alice
user U002|Bob
borrow 123456|U001
borrow 345678|U001
return 123456|U002
return_all U001
users
stats

output-nya adalah:

Book borrowed successfully
Book borrowed successfully
This book was not borrowed by this user
Books returned by Alice: 2
User: Alice (ID: U001) - Books borrowed: 0
User: Bob (ID: U002) - Books borrowed: 0
Total Books: 2
Available Books: 2
Borrowed Books: 0
Total Users: 2
Users with Books: 0

Kodemu 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 apa adanya
	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]))
			"return":
				print(library.return_book(fields[0], fields[1]))
			"return_all":
				var reader: User = library.find_user(fields[0])
				var count: int = reader.return_all_books(library)
				print("Books returned by ", reader.user_name, ": ", count)
			"search":
				var term: String = parts[1] if parts.size() > 1 else ""
				var found: Array = library.search_by_title(term)
				print("Results for '%s': %d" % [term, found.size()])
				for book in found:
					print("- ", book.title, " by ", book.author)
			"stats":
				var stats: Dictionary = library.get_statistics()
				print("Total Books: ", stats["total_books"])
				print("Available Books: ", stats["available_books"])
				print("Borrowed Books: ", stats["borrowed_books"])
				print("Total Users: ", stats["total_users"])
				print("Users with Books: ", stats["users_with_books"])
			"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

Latihan sendiri: Compiler GDScript online