Layanan Penyewaan Kendaraan
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 65 dari 65.
Tantangan
SedangBuat layanan penyewaan kendaraan: kendaraan dalam dua jenis, penyewaan, dan agensi yang mengelola keduanya. Harga dalam dolar bulat (int).
Vehicle di vehicle.gd:
- Konstruktor menerima
vin,make,model, dandaily_rate;availabledimulai dengan nilaitrue. start_rental() -> bool: mengembalikanfalsejika kendaraan tidak tersedia; jika tidak, tandai kendaraan sebagai tidak tersedia dan kembalikantrue.end_rental()membuat kendaraan tersedia kembali._to_string()mengembalikanMAKE MODEL (VIN: VIN) - Available, atau- Renteddi bagian akhir.
Car di car.gd dan Motorcycle di motorcycle.gd mewarisi Vehicle. Konstruktor keduanya menerima empat nilai kendaraan ditambah seats (mobil) atau engine_size (sepeda motor). _to_string() keduanya menggunakan teks dari induknya: Car: + teks kendaraan + - 5 seats, dan Motorcycle: + teks kendaraan + - 600cc.
Rental di rental.gd:
- Konstruktor menerima
rental_id, objectvehicle,customer_name, dandays;is_activedimulai dengan nilaitrue. calculate_cost() -> int: tarif harian dikalikan jumlah hari.end_rental() -> bool: mengembalikanfalseuntuk penyewaan yang sudah berakhir; jika belum, akhiri penyewaan, akhiri penyewaan kendaraan, lalu kembalikantrue._to_string():Rental ID: MAKE MODEL for CUSTOMER, D days, $COST - Active, atau- Completed.
RentalAgency di rental_agency.gd:
- Konstruktor menerima
agency_name.vehiclesadalah dictionary dari VIN ke kendaraan,rentalsadalah dictionary dari id penyewaan ke penyewaan, dannext_rental_iddimulai dari1. add_vehicle(vehicle)menyimpan kendaraan menggunakan VIN-nya sebagai kunci.rent_vehicle(vin, customer_name, days) -> String: mengembalikan""jika VIN tidak dikenal, jumlah hari kurang dari1, atau kendaraan tidak tersedia. Jika tidak, mulai penyewaan kendaraan, buatRentaldengan idR1,R2... (penghitung hanya bertambah jika penyewaan berhasil), simpan, lalu kembalikan id tersebut.return_vehicle(rental_id) -> bool: mengembalikanfalsejika id tidak dikenal; jika tidak, kembalikan hasil dariend_rental()milik penyewaan tersebut.available_vehicles() -> Array[Vehicle]: kendaraan yang tersedia, sesuai urutan penambahannya.total_revenue() -> int: jumlah biaya semua penyewaan, yang masih aktif maupun yang sudah selesai.
Penyewaan menyimpan kendaraannya, tetapi kendaraan tidak menyimpan penyewaannya, sehingga tidak ada dua object yang saling menunjuk. Untuk input ini:
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
revenueoutput-nya adalah:
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: $150Tulis kodemu di vehicle.gd, car.gd, motorcycle.gd, rental.gd, dan rental_agency.gd. main.gd berisi kode input/output yang disediakan dan tidak dapat diedit.
Coba sendiri
extends Node
func _ready():
# Kode input/output yang disediakan: biarkan apa adanya
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()
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPclass dan objectKata Kunci selfmethodpropertyKonstruktor (_init)Ringkasan: Kalkulator Sederhana4Polimorfisme
Method Overriding Sekali LagiDuck TypingKelas Abstrak dan MethodDesain InterfaceRingkasan: Kalkulator Bentuk7Sinyal
Apa itu Sinyal?Mendeklarasikan dan MemancarkanMenghubungkan ke SinyalSinyal dengan ArgumenRangkuman, Sistem Kesehatan10Pola Desain Bagian 2
Pola CommandPola AdapterPola DecoratorPola Template MethodPola StatePola Composite2Property class
Variabel instance vs. variabel statisFungsi statisSetter propertyGetter propertyPrivat berdasarkan konvensiRangkuman: Pengelola Rekening Bank5Enkapsulasi
Member Publik dan PrivatValidasi dengan SetterPenyembunyian InformasiProperty Hanya-BacaRingkasan: Sistem Catatan Siswa8Konsep OOP Lanjutan
Komposisi vs PewarisanInner ClassNode sebagai KomponenRefCounted vs NodeEnum dalam Class11Proyek: Manajemen Perpustakaan
Gambaran Umum Proyekclass Buku dan Pengguna3Pewarisan
Pewarisan DasarKata Kunci superPenimpaan MethodRantai PewarisanPemeriksaan Tipe dengan isUlasan: Hierarki Karyawan12Tantangan Akhir
Platform E-learningSistem PerbankanPengembangan Karakter GameLayanan Penyewaan KendaraanLatihan sendiri: Compiler GDScript online