Menu
CoddyTech

בדיקות ואינטגרציה

חלק מהיחידה תכנות מונחה עצמים במסלול ה-GDScript של Coddy. שיעור 61 מתוך 65.

challenge icon

אתגר

בינוני

השלם את המערכת באמצעות החזרות, ואז תן לבדיקות להריץ את כל החלקים יחד. שמור את כל מה שכתבת בשלבים הקודמים; library.gd ו־user.gd משתנים.

ב־Library, כתוב return_book(isbn: String, user_id: String) -> String. בדוק לפי הסדר הבא:

  • אין ספר עם מספר ה־ISBN הזה: החזר Book not found
  • אין משתמש עם המזהה הזה: החזר User not found
  • הספר זמין, או שה־borrower_id שלו הוא של משתמש אחר: החזר This book was not borrowed by this user
  • אחרת, הפוך את הספר לזמין שוב, הגדר את borrower_id שלו ל־"", הסר את ה־ISBN מתוך borrowed_isbns של המשתמש והחזר Book returned successfully

ב־User, כתוב return_all_books(library: Library) -> int. הפונקציה מחזירה כל ספר שהמשתמש שאל באמצעות library.return_book(), ומחזירה את מספר הספרים שהוחזרו. המשתמש מקבל את הספרייה כארגומנט ואינו שומר אותה, כך ששני אובייקטים אינם מצביעים זה על זה.

הקוד שסופק מוסיף את הפקודות return ISBN|ID ו־return_all ID. עבור הקלט הזה:

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

הפלט הוא:

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

הקוד שלך ייכתב בקבצים book.gd, user.gd ו־library.gd. הקובץ main.gd מכיל את קוד הקלט/פלט שסופק, ואי אפשר לערוך אותו.

נסו בעצמכם

extends Node

func _ready():
	# קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
	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()

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר GDScript אונליין