Menu
CoddyTech

Araç Kiralama Hizmeti

Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 65 / 65.

challenge icon

Görev

Orta

Bir 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, model ve daily_rate değerlerini alır; available başlangıçta true olur.
  • start_rental() -> bool: araç müsait değilse false döndürür; aksi takdirde aracı müsait değil olarak işaretler ve true döndürür.
  • end_rental() aracı yeniden müsait hale getirir.
  • _to_string() MAKE MODEL (VIN: VIN) - Available veya sonunda - Rented olacak ş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, vehicle nesnesi, customer_name ve days değerlerini alır; is_active başlangıçta true olur.
  • 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çin false döndürür; aksi takdirde kiralamayı sona erdirir, aracın kiralamasını bitirir ve true döndürür.
  • _to_string(): Rental ID: MAKE MODEL for CUSTOMER, D days, $COST - Active veya - Completed.

RentalAgency, rental_agency.gd içinde:

  • Kurucu agency_name değ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 ve next_rental_id başlangıçta 1 olur.
  • 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 bir Rental oluş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 bilinmiyorsa false döndürür; aksi takdirde kiralamanın end_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: $150

Kodunu 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

Kendi başına pratik yap: Online GDScript derleyicisi