Система выдачи книг
Часть раздела Объектно-ориентированное программирование путешествия по GDScript на Coddy. Урок 58 из 65.
Задание
СреднеПеренесите выдачу книг в библиотеку. Сохраните всё, что вы написали на предыдущих шагах; меняется только library.gd.
Добавьте три метода в Library:
find_book(isbn: String) -> Bookвозвращает книгу с таким ISBN илиnull, если её нет.find_user(user_id: String) -> Userвозвращает пользователя с таким идентификатором илиnull.borrow_book(isbn: String, user_id: String) -> Stringвыдаёт книгу и возвращает сообщение. Проверяйте в следующем порядке:- нет книги с таким ISBN: верните
Book not found - нет пользователя с таким идентификатором: верните
User not found - книга недоступна: верните
Book is not available - иначе установите для
availableкниги значениеfalse, а для еёborrower_id— идентификатор пользователя, добавьте ISBN вborrowed_isbnsпользователя и вернитеBook borrowed successfully
- нет книги с таким ISBN: верните
В предоставленном коде lend заменяется на borrow ISBN|ID, которая выводит сообщение, а также добавляются команды loans ID (названия книг, взятых пользователем) и holder ISBN (у кого находится книга). Обе используют ваши методы find_book() и find_user(). Для этого ввода:
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вывод будет таким:
Book not found
User not found
Book borrowed successfully
Book is not available
Dune is borrowed by Alice
Alice has borrowed:
- DuneВаш код нужно написать в файлах 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]))
"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()
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово selfМетодыСвойстваКонструктор (_init)Повторение: простой калькулятор4Полиморфизм
Переопределение методов: повторениеУтиная типизацияАбстрактные классы и методыПроектирование интерфейсовПовторение — калькулятор фигур7Сигналы
Что такое сигнал?Объявление и отправкаПодключение к сигналамСигналы с аргументамиПовторение — система здоровья10Паттерны проектирования. Часть 2
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»2Свойства классов
Переменные экземпляра и классаСтатические функцииСеттеры свойствГеттеры свойствПриватность по соглашениюПовторение — менеджер банковского счёта5Инкапсуляция
Открытые и закрытые членыПроверка данных с помощью сеттеровСокрытие информацииСвойства только для чтенияПовторение — система учета студентов8Продвинутые концепции ООП
Композиция и наследованиеВнутренние классыУзлы как компонентыRefCounted и NodeПеречисления в классах11Проект: Управление библиотекой
Обзор проектаКлассы книг и пользователей3Наследование
Основы наследованияКлючевое слово superПереопределение методовЦепочки наследованияПроверка типов с помощью isПовторение — иерархия сотрудников6Специальные методы
Введение в виртуальные методыМетод _to_stringПользовательские итераторыПовторение: пользовательский список9Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн «Одиночка»Паттерн «Фабрика»Паттерн «Наблюдатель»Паттерн «Стратегия»Потренируйтесь самостоятельно: Онлайн-компилятор GDScript