Menu
CoddyTech

Hệ thống mượn sách

Thuộc phần Lập trình hướng đối tượng trong hành trình GDScript của Coddy. Bài học 58 trên 65.

challenge icon

Thử thách

Trung bình

Chuyển việc cho mượn vào thư viện. Giữ lại mọi thứ bạn đã viết ở các bước trước; chỉ thay đổi library.gd.

Thêm ba phương thức vào Library:

  1. find_book(isbn: String) -> Book trả về cuốn sách có ISBN đó, hoặc null nếu không có.
  2. find_user(user_id: String) -> User trả về người dùng có ID đó, hoặc null.
  3. borrow_book(isbn: String, user_id: String) -> String cho mượn một cuốn sách và trả về một thông báo. Kiểm tra theo thứ tự này:
    • không có cuốn sách nào có ISBN đó: trả về Book not found
    • không có người dùng nào có ID đó: trả về User not found
    • cuốn sách không có sẵn: trả về Book is not available
    • nếu không, đặt available của cuốn sách thành false và đặt borrower_id thành ID người dùng, thêm ISBN vào borrowed_isbns của người dùng rồi trả về Book borrowed successfully

Code được cung cấp thay lend bằng borrow ISBN|ID, lệnh này in ra thông báo, đồng thời thêm loans ID (các nhan đề người dùng đã mượn) và holder ISBN (ai đang giữ cuốn sách). Cả hai đều dùng find_book() và find_user() của bạn. Với đầu vào này:

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 U001

đầu ra là:

Book not found
User not found
Book borrowed successfully
Book is not available
Dune is borrowed by Alice
Alice has borrowed:
- Dune

Code của bạn nằm trong book.gd, user.gd và library.gd. main.gd chứa code đầu vào/đầu ra được cung cấp và không thể chỉnh sửa.

Tự làm thử

extends Node

func _ready():
	# Đoạn code đầu vào/đầu ra đã có sẵn: giữ nguyên
	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()

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch GDScript online