Araç Kiralama Hizmeti
Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 65 / 65.
Görev
OrtaBir araç kiralama hizmeti oluştur: iki tür araç, kiralamalar ve her ikisini de yöneten acente. Fiyatlar tam dolar cinsindendir (int).
Vehicle, vehicle.gd içinde:
- Kurucu
vin,make,modelvedaily_ratedeğerlerini alır;availablebaşlangıçtatrueolur. start_rental() -> bool: araç müsait değilsefalsedöndürür; aksi takdirde aracı müsait değil olarak işaretler vetruedöndürür.end_rental()aracı yeniden müsait hale getirir._to_string()MAKE MODEL (VIN: VIN) - Availableveya sonunda- Rentedolacak şekilde döndürür.
car.gd içindeki Car ve motorcycle.gd içindeki Motorcycle, Vehicle sınıfını genişletir. Kurucuları dört araç değerini ve ayrıca seats (otomobil) ya da engine_size (motosiklet) değerini alır. Bunların _to_string() yöntemleri, üst sınıfın metnini temel alarak şu metni oluşturur: Car: + araç metni + - 5 seats ve Motorcycle: + araç metni + - 600cc.
Rental, rental.gd içinde:
- Kurucu
rental_id,vehiclenesnesi,customer_namevedaysdeğerlerini alır;is_activebaşlangıçtatrueolur. calculate_cost() -> int: günlük ücret ile gün sayısının çarpımı.end_rental() -> bool: zaten sona ermiş bir kiralama içinfalsedöndürür; aksi takdirde kiralamayı sona erdirir, aracın kiralamasını bitirir vetruedöndürür._to_string():Rental ID: MAKE MODEL for CUSTOMER, D days, $COST - Activeveya- Completed.
RentalAgency, rental_agency.gd içinde:
- Kurucu
agency_namedeğerini alır.vehicles, VIN'den araca eşleyen bir sözlüktür;rentals, kiralama kimliğinden kiralamaya eşleyen bir sözlüktür venext_rental_idbaşlangıçta1olur. add_vehicle(vehicle)aracı VIN'iyle eşleşen anahtar altında saklar.rent_vehicle(vin, customer_name, days) -> String: VIN bilinmiyorsa, gün sayısı1'den azsa veya araç müsait değilse""döndürür. Aksi takdirde aracın kiralamasını başlatır,R1,R2... kimlikli birRentaloluşturur (sayaç yalnızca başarılı bir kiralamada artar), kiralamayı saklar ve kimliği döndürür.return_vehicle(rental_id) -> bool: kimlik bilinmiyorsafalsedöndürür; aksi takdirde kiralamanınend_rental()yönteminin döndürdüğü değeri döndürür.available_vehicles() -> Array[Vehicle]: eklenme sırasına göre müsait araçları döndürür.total_revenue() -> int: etkin veya tamamlanmış tüm kiralamaların maliyetlerinin toplamı.
Bir kiralama aracını saklar, ancak araç kiralamasını saklamaz; dolayısıyla hiçbir iki nesne birbirini göstermez. Bu girdi için:
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çıktı şöyledir:
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: $150Kodunu vehicle.gd, car.gd, motorcycle.gd, rental.gd ve rental_agency.gd dosyalarına yaz. main.gd, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
extends Node
func _ready():
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakı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()
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Nesne Yönelimli Programlamanın Temelleri
Harici DosyalarNesne Yönelimli Programlamaya GirişSınıflar ve Nesnelerself Anahtar KelimesiMetotlarÖzelliklerKurucu (_init)Tekrar - Basit Hesap Makinesi4Çok Biçimlilik
Metot Ezme Konusuna Yeniden BakışÖrdek TiplemesiSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı7Sinyaller
Sinyal Nedir?Tanımlama ve Sinyal GöndermeSinyallere BağlanmaArgümanlı SinyallerTekrar - Sağlık Sistemi10Tasarım Kalıpları 2. Bölüm
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıBileşik Kalıp2Sınıf Özellikleri
Örnek ve Statik DeğişkenlerStatik FonksiyonlarÖzellik AyarlayıcılarıÖzellik AlıcılarıGeleneksel Olarak ÖzelTekrar - Banka Hesabı Yöneticisi5Kapsülleme
Public ve Private ÜyelerSetter'larla DoğrulamaBilgi GizlemeSalt Okunur ÖzelliklerTekrar - Öğrenci Kayıt SistemiKendi başına pratik yap: Online GDScript derleyicisi