Menu
CoddyTech

Lớp sách và người dùng

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 57 trên 65.

challenge icon

Thử thách

Dễ

Thêm các lớp Book và User, mỗi lớp nằm trong một tệp riêng, rồi để thư viện lưu trữ chúng. Giữ lại mọi thứ bạn đã viết ở bước trước.

Book trong book.gd:

  • Hàm khởi tạo nhận title, author và isbn (đều có kiểu String) rồi lưu chúng vào các thuộc tính có cùng tên.
  • available bắt đầu bằng true và borrower_id bắt đầu bằng "".
  • _to_string() trả về TITLE by AUTHOR (ISBN: ISBN) - Available, với Not Available ở cuối khi available là false.

User trong user.gd:

  • Hàm khởi tạo nhận user_id và user_name rồi lưu chúng.
  • borrowed_isbns là một Array[String] bắt đầu rỗng.
  • _to_string() trả về User: NAME (ID: ID) - Books borrowed: N, trong đó N là kích thước của borrowed_isbns.

Trong library.gd, đổi books thành Array[Book] và users thành Array[User], rồi thêm các phương thức add_book(book: Book) và add_user(user: User) để thêm phần tử vào các mảng đó.

Sách ghi nhớ người mượn bằng mã định danh của người dùng, còn người dùng ghi nhớ sách bằng ISBN. Nếu sách lưu đối tượng User và người dùng lưu đối tượng Book, hai đối tượng sẽ giữ nhau tồn tại và Godot sẽ báo rò rỉ khi chương trình kết thúc.

Code được cung cấp trong main.gd đã thay đổi: các trường hiện được phân tách bằng |. Các lệnh gồm book TITLE|AUTHOR|ISBN, user ID|NAME, lend ISBN|ID (lệnh này đặt trực tiếp các thuộc tính của sách và người dùng), books và users (in ra từng sách hoặc người dùng), cùng với show. Với đầu vào này:

Riverside
book Dune|Frank Herbert|111
user U001|Alice
user U002|Bob
lend 111|U002
books
users
show

đầu ra là:

Dune by Frank Herbert (ISBN: 111) - Not Available
User: Alice (ID: U001) - Books borrowed: 0
User: Bob (ID: U002) - Books borrowed: 1
Riverside Library (books: 1, users: 2)

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à bạn không thể chỉnh sửa tệp này.

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]))
			"lend":
				for book in library.books:
					if book.isbn == fields[0]:
						book.available = false
						book.borrower_id = fields[1]
				for user in library.users:
					if user.user_id == fields[1]:
						user.borrowed_isbns.append(fields[0])
			"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