Menu
CoddyTech

Sách và thành viên

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

Trong dự án này, bạn xây dựng phần cốt lõi của một hệ thống thư viện. Lớp Library nhận các lệnh, mỗi dòng một lệnh, rồi phản hồi từng lệnh. Qua năm bước, hệ thống sẽ học cách thêm sách và thành viên, cho mượn và nhận lại sách, tìm kiếm danh mục và in báo cáo.

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

Mô hình dữ liệu sử dụng các công cụ trong phần này. Book là một cấu trúc: một giá trị có borrower thay đổi. Member là một lớp, vì thư viện và danh sách khoản mượn của một thành viên cùng tham chiếu đến một người. Thư viện lưu cả hai trong các từ điển riêng tư, vì vậy chỉ các phương thức của thư viện mới có thể thay đổi chúng:

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)

Đầu ra:

false

handle(_:) tách lệnh và xét từ đầu tiên. Mỗi nhánh trả về các phản hồi dưới dạng một mảng, vì vậy một lệnh như REPORT có thể phản hồi bằng nhiều dòng. Tên sách có thể chứa dấu cách, vì vậy tên sách là toàn bộ phần sau 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)")

Đầu ra:

7: The Hobbit
challenge icon

Thử thách

Dễ

Hoàn thiện Library.handle(_:) cho hai lệnh đầu tiên:

  • ADD_BOOK <id> <title>: lưu một cuốn sách mới đang có sẵn và trả lời added book 1: Dune; nếu id đã được dùng, hãy trả lời book 1 exists.
  • JOIN <name>: thêm một thành viên và trả lời welcome ada; nếu tên đã tồn tại, hãy trả lời ada is already a member.

Code được cung cấp chuyển từng dòng đầu vào cho library.handle(_:) và in mỗi câu trả lời trả về trên một dòng riêng. Tên thành viên là các từ đơn viết thường, id sách là số nguyên và đầu vào chỉ chứa các lệnh đã mô tả đến thời điểm này. Với mọi lệnh khác, hãy trả lời unknown command.

Code của bạn nằm trong Book.swift, Member.swift và Library.swift. main.swift 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ử

// Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
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 iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

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

Tự luyện tập: Playground Swift