Menu
CoddyTech

Bãi đỗ xe

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 55 trên 57.

challenge icon

Thử thách

Khó

Hãy xây dựng một nhà để xe. Vehicle lưu plate; các lớp con của nó định nghĩa size và hourly_rate: Motorbike có kích thước 1 (nhỏ), giá 1 mỗi giờ, Car có kích thước 2 (vừa), giá 3, còn Van có kích thước 3 (lớn), giá 5. Hằng số SIZES của nhà để xe là %w[small medium large]. Garage.new(small, medium, large) nhận số chỗ đỗ xe cho mỗi kích thước. park(vehicle) đưa xe vào một chỗ trống có kích thước phù hợp, hoặc nếu không còn chỗ trống, vào chỗ có kích thước lớn hơn tiếp theo, rồi trả về parked AB12 in medium hoặc full for AB12. leave(plate, hours) giải phóng chỗ đỗ xe và trả về AB12 paid 9 (giá theo giờ nhân với số giờ, tối thiểu 1 giờ), hoặc no vehicle AB12. status trả về free: small 1, medium 0, large 2.

Code được cung cấp đọc số chỗ theo thứ tự small,medium,large, sau đó đọc các lệnh park car AB12, leave AB12 3 hoặc status, rồi in ra từng phản hồi.

Code của bạn sẽ nằm trong các tệp vehicle.rb, motorbike.rb, car.rb, van.rb và garage.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 'vehicle'
require_relative 'motorbike'
require_relative 'car'
require_relative 'van'
require_relative 'garage'

# Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
input = []
while (line = gets)
  input << line.chomp
end
small, medium, large = input[0].split(",").map(&:to_i)
garage = Garage.new(small, medium, large)
kinds = { "bike" => Motorbike, "car" => Car, "van" => Van }
input.drop(1).each do |cmd|
  parts = cmd.split
  case parts[0]
  when "park" then puts garage.park(kinds[parts[1]].new(parts[2]))
  when "leave" then puts garage.leave(parts[1], parts[2].to_i)
  else puts garage.status
  end
end

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