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 Ruby của Coddy. Bài học 50 trên 57.

Trong dự án này, bạn sẽ xây dựng phần cốt lõi của một hệ thống thư viện. Đối tượng Library nhận 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, bạn 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 những gì phần này đã dạy. Book cung cấp quyền chỉ đọc cho id và title, còn borrower thì truy cập thông qua một bộ truy cập, cùng với vị từ available?. Member lưu các ID của những lượt mượn trong một mảng. Mỗi lớp nằm trong tệp riêng, book.rb, member.rb và library.rb, còn thư viện lưu cả hai loại đối tượng trong các hash mà chỉ những phương thức của chính nó mới truy cập:

class Book
  attr_reader :id, :title
  attr_accessor :borrower

  def initialize(id, title)
    @id = id
    @title = title
    @borrower = nil
  end

  def available?
    borrower.nil?
  end
end

books = { 1 => Book.new(1, "Dune") }
books[1].borrower = "ada"
puts books[1].available?

Đầu ra:

false

handle(line) tách lệnh rồi phân nhánh theo từ đầu tiên bằng case. 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, còn return kết thúc sớm và trả về một phản hồi lỗi. Tên sách có thể chứa khoảng trắng, vì vậy tên sách là tất cả nội dung sau id:

parts = "ADD_BOOK 7 The Hobbit".split
id = parts[1].to_i
title = parts[2..].join(" ")
puts "#{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 truyền từng dòng đầu vào cho library.handle(line) và in mỗi câu trả lời được trả về trên một dòng riêng. Tên thành viên là các từ viết thường đơn lẻ, 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 lệnh khác, hãy trả lời unknown command.

Code của bạn nằm trong book.rb, member.rb và library.rb. main.rb 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ử

require_relative 'book'
require_relative 'member'
require_relative 'library'

# Đoạn code đầu vào/đầu ra đã cho: giữ nguyên
input = []
while (line = gets)
  input << line.chomp
end
library = Library.new
input.each do |line|
  library.handle(line).each { |reply| puts reply }
end
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: Trình biên dịch Ruby online