Dịch vụ cho thuê phương tiện
Thuộc phần Lập trình hướng đối tượng trong hành trình GDScript của Coddy. Bài học 65 trên 65.
Thử thách
Trung bìnhXây dựng dịch vụ cho thuê phương tiện: các phương tiện thuộc hai loại, các lượt thuê và đại lý quản lý cả hai. Giá tính bằng đô la nguyên (int).
Vehicle trong vehicle.gd:
- Hàm khởi tạo nhận
vin,make,modelvàdaily_rate;availablebắt đầu bằngtrue. start_rental() -> bool: trả vềfalsenếu phương tiện không sẵn có; nếu không, đánh dấu phương tiện là không sẵn có và trả vềtrue.end_rental()làm cho phương tiện sẵn có trở lại._to_string()trả vềMAKE MODEL (VIN: VIN) - Available, hoặc kết thúc bằng- Rented.
Car trong car.gd và Motorcycle trong motorcycle.gd kế thừa Vehicle. Hàm khởi tạo của chúng nhận bốn giá trị của phương tiện cùng với seats (ô tô) hoặc engine_size (xe máy). Hàm _to_string() của chúng nối thêm vào văn bản của lớp cha: Car: + văn bản phương tiện + - 5 seats, và Motorcycle: + văn bản phương tiện + - 600cc.
Rental trong rental.gd:
- Hàm khởi tạo nhận
rental_id, đối tượngvehicle,customer_namevàdays;is_activebắt đầu bằngtrue. calculate_cost() -> int: đơn giá mỗi ngày nhân với số ngày.end_rental() -> bool: trả vềfalsenếu lượt thuê đã kết thúc; nếu không, kết thúc lượt thuê, kết thúc lượt thuê phương tiện và trả vềtrue._to_string():Rental ID: MAKE MODEL for CUSTOMER, D days, $COST - Active, hoặc kết thúc bằng- Completed.
RentalAgency trong rental_agency.gd:
- Hàm khởi tạo nhận
agency_name.vehicleslà một từ điển ánh xạ VIN sang phương tiện,rentalslà một từ điển ánh xạ mã lượt thuê sang lượt thuê, vànext_rental_idbắt đầu từ1. add_vehicle(vehicle)lưu phương tiện theo VIN của nó.rent_vehicle(vin, customer_name, days) -> String: trả về""nếu VIN không tồn tại, số ngày ít hơn1hoặc phương tiện không sẵn có. Nếu không, bắt đầu lượt thuê phương tiện, tạo mộtRentalvới mãR1,R2... (bộ đếm chỉ tăng khi lượt thuê thành công), lưu lượt thuê và trả về mã đó.return_vehicle(rental_id) -> bool: trả vềfalsenếu mã không tồn tại; nếu không, trả về kết quả củaend_rental()thuộc lượt thuê đó.available_vehicles() -> Array[Vehicle]: các phương tiện sẵn có, theo thứ tự được thêm vào.total_revenue() -> int: tổng chi phí của tất cả lượt thuê, dù đang hoạt động hay đã hoàn tất.
Một lượt thuê lưu phương tiện của nó, nhưng phương tiện không lưu lượt thuê, vì vậy không có hai đối tượng nào trỏ đến nhau. Với đầu vào này:
Speedy Rentals
car C1|Toyota|Camry|50|5
moto M1|Honda|CBR|40|600
rent C1|Ana|3
rent C1|Ben|2
available
kind M1
rentals
revenueđầu ra là:
Rented C1 as R1: $150
Cannot rent C1
Available at Speedy Rentals:
- Motorcycle: Honda CBR (VIN: M1) - Available - 600cc
M1: Vehicle true, Car false, Motorcycle true
Rental R1: Toyota Camry for Ana, 3 days, $150 - Active
Revenue: $150Đặt code của bạn trong vehicle.gd, car.gd, motorcycle.gd, rental.gd và rental_agency.gd. main.gd chứa code đầu vào/đầu ra có sẵn và bạn không thể chỉnh sửa.
Tự làm thử
extends Node
func _ready():
# Đoạn code đầu vào/đầu ra đã có sẵn: giữ nguyên
var agency := RentalAgency.new(OS.read_string_from_stdin())
var line := OS.read_string_from_stdin()
while line != "":
var parts := line.split(" ", true, 1)
var f: PackedStringArray = parts[1].split("|") if parts.size() > 1 else PackedStringArray()
match parts[0]:
"vehicle":
agency.add_vehicle(Vehicle.new(f[0], f[1], f[2], int(f[3])))
"car":
agency.add_vehicle(Car.new(f[0], f[1], f[2], int(f[3]), int(f[4])))
"moto":
agency.add_vehicle(Motorcycle.new(f[0], f[1], f[2], int(f[3]), int(f[4])))
"rent":
var rental_id: String = agency.rent_vehicle(f[0], f[1], int(f[2]))
if rental_id == "":
print("Cannot rent ", f[0])
else:
var rental: Rental = agency.rentals[rental_id]
print("Rented %s as %s: $%d" % [f[0], rental_id, rental.calculate_cost()])
"return":
print("Return ", f[0], ": ", agency.return_vehicle(f[0]))
"available":
print("Available at ", agency.agency_name, ":")
for vehicle in agency.available_vehicles():
print("- ", vehicle)
"fleet":
for vin in agency.vehicles:
print(agency.vehicles[vin])
"kind":
var vehicle: Vehicle = agency.vehicles[f[0]]
print("%s: Vehicle %s, Car %s, Motorcycle %s" % [f[0], vehicle is Vehicle, vehicle is Car, vehicle is Motorcycle])
"rentals":
for rental_id in agency.rentals:
print(agency.rentals[rental_id])
"revenue":
print("Revenue: $", agency.total_revenue())
line = OS.read_string_from_stdin()
Tất cả bài học trong Lập trình hướng đối tượng
1Nền tảng về OOP
Tệp bên ngoàiGiới thiệu về OOPLớp và đối tượngTừ khóa selfPhương thứcThuộc tínhHàm khởi tạo (_init)Ôn tập: máy tính đơn giản4Tính đa hình
Xem lại cách ghi đè phương thứcĐịnh kiểu vịtLớp và phương thức trừu tượngThiết kế interfaceÔn tập: máy tính hình học7Tín hiệu
Tín hiệu là gì?Khai báo và phát tín hiệuKết nối với tín hiệuTín hiệu có đối sốÔn tập: hệ thống sức khỏe10Các mẫu thiết kế phần 2
Mẫu lệnhMẫu bộ chuyển đổiMẫu trang tríMẫu phương thức khuôn mẫuMẫu trạng tháiMẫu tổng hợp2Thuộc tính của lớp
Biến instance và biến staticHàm staticPhương thức thiết lập thuộc tínhPhương thức lấy thuộc tínhQuy ước về tính riêng tưÔn tập: trình quản lý tài khoản ngân hàng5Tính đóng gói
Thành viên công khai và riêng tưXác thực bằng phương thức setterẨn thông tinThuộc tính chỉ đọcÔn tập: hệ thống hồ sơ học sinh8Khái niệm OOP nâng cao
Kết hợp và kế thừaLớp bên trongNode dưới dạng thành phầnRefCounted và NodeEnum trong lớp3Kế thừa
Kế thừa cơ bảnTừ khóa superGhi đè phương thứcChuỗi kế thừaKiểm tra kiểu bằng isTổng kết: phân cấp nhân viên6Phương thức đặc biệt
Giới thiệu về phương thức ảoPhương thức _to_stringTrình lặp tùy chỉnhÔn tập: danh sách tùy chỉnh12Thử thách cuối cùng
Nền tảng học trực tuyếnHệ thống ngân hàngPhát triển nhân vật trò chơiDịch vụ cho thuê phương tiệnTự luyện tập: Trình biên dịch GDScript online