Menu
Coddy logo textTech

Bücher und Mitglieder

Teil des Abschnitts Objektorientierte Programmierung der Swift-Journey von Coddy. Lektion 50 von 57.

In diesem Projekt baust du den Kern eines Bibliothekssystems. Eine Library-Klasse empfängt Befehle, einen pro Zeile, und antwortet auf jeden einzelnen. In fünf Schritten lernt sie, Bücher und Mitglieder hinzuzufügen, Bücher auszuleihen und zurückzugeben, den Katalog zu durchsuchen und einen Bericht auszugeben.

ADD_BOOK 1 Dune
JOIN ada
BORROW ada 1
RETURN ada 1
SEARCH dune
REPORT

Das Datenmodell verwendet die Werkzeuge dieses Abschnitts. Book ist eine Struktur: ein Wert, dessen borrower sich ändert. Member ist eine Klasse, weil die Bibliothek und die Liste der Ausleihen eines Mitglieds auf dieselbe Person verweisen. Die Bibliothek bewahrt beide in privaten Wörterbüchern auf, sodass nur ihre Methoden sie ändern können:

struct Book {
    let id: Int
    let title: String
    var borrower: String? = nil
    var isAvailable: Bool { borrower == nil }
}

var books: [Int: Book] = [:]
books[1] = Book(id: 1, title: "Dune")
books[1]!.borrower = "ada"
print(books[1]!.isAvailable)

Ausgabe:

false

handle(_:) teilt den Befehl auf und verwendet sein erstes Wort für eine Fallunterscheidung. Jeder Zweig gibt seine Antworten als Array zurück, sodass ein Befehl wie REPORT mit mehreren Zeilen antworten kann. Der Titel eines Buches kann Leerzeichen enthalten, daher umfasst er alles nach der ID:

let p = "ADD_BOOK 7 The Hobbit".split(separator: " ").map(String.init)
let id = Int(p[1])!
let title = p.dropFirst(2).joined(separator: " ")
print("\(id): \(title)")

Ausgabe:

7: The Hobbit
challenge icon

Aufgabe

Einfach

Vervollständige Library.handle(_:) für die ersten beiden Befehle:

  • ADD_BOOK <id> <title>: Speichere ein neues verfügbares Buch und antworte mit added book 1: Dune; wenn die ID bereits vergeben ist, antworte mit book 1 exists.
  • JOIN <name>: Füge ein Mitglied hinzu und antworte mit welcome ada; wenn der Name bereits existiert, antworte mit ada is already a member.

Der bereitgestellte Code übergibt jede Eingabezeile an library.handle(_:) und gibt jede zurückgegebene Antwort in einer eigenen Zeile aus. Mitgliedernamen bestehen aus einzelnen Kleinbuchstabenwörtern, Buch-IDs sind ganze Zahlen, und die Eingabe enthält nur die bisher beschriebenen Befehle. Bei jedem anderen Befehl lautet die Antwort unknown command.

Dein Code gehört in Book.swift, Member.swift und Library.swift. main.swift enthält den bereitgestellten Eingabe-/Ausgabecode und kann nicht bearbeitet werden.

Probier es selbst

// Gelieferter Ein-/Ausgabe-Code: belasse ihn wie er ist
var input: [String] = []
while let line = readLine() { input.append(line) }
let library = Library()
for line in input {
    for reply in library.handle(line) { print(reply) }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Swift-Playground