Layanan Penyewaan Kendaraan
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Python di Coddy. Pelajaran 64 dari 64.
Tantangan
SedangDalam tantangan ini, kamu akan menerapkan sistem penyewaan kendaraan. Sistem ini memodelkan kendaraan, penyewaan, dan agen penyewaan dengan pewarisan dan enkapsulasi yang tepat.
vehicle.py- Terapkan class dasar Vehiclecar.py- Terapkan subclass Carmotorcycle.py- Terapkan subclass Motorcyclerental.py- Terapkan class Rentalrentalagency.py- Terapkan class RentalAgency
Setiap file berisi komentar TODO terperinci yang memandu penerapanmu. Ikuti komentar ini agar kodemu memenuhi semua persyaratan.
Coba sendiri
from vehicle import Vehicle
from car import Car
from motorcycle import Motorcycle
from rental import Rental
from rentalagency import RentalAgency
# Penangan kasus uji menyeluruh
test_case = input()
if test_case == "create_vehicles":
# Uji pembuatan kendaraan
car = Car("C123", "Toyota", "Camry", 50, 5)
bike = Motorcycle("M456", "Honda", "CBR", 35, 600)
print(car)
print(bike)
elif test_case == "rental_workflow":
# Uji alur penyewaan
agency = RentalAgency("Quick Rentals")
# Tambahkan kendaraan
car = Car("C123", "Toyota", "Camry", 50, 5)
bike = Motorcycle("M456", "Honda", "CBR", 35, 600)
agency.add_vehicle(car)
agency.add_vehicle(bike)
# Periksa kendaraan yang tersedia
print(f"Available before rental: {len(agency.available_vehicles())}")
# Sewakan kendaraan
rental_id = agency.rent_vehicle("C123", "John Doe", 3)
print(f"Rental created: {rental_id}")
# Periksa kendaraan yang tersedia setelah penyewaan
print(f"Available after rental: {len(agency.available_vehicles())}")
# Terima pengembalian kendaraan
agency.return_vehicle(rental_id)
# Periksa kendaraan yang tersedia setelah pengembalian
print(f"Available after return: {len(agency.available_vehicles())}")
elif test_case == "rental_cost":
# Uji perhitungan biaya sewa
car = Car("C123", "Toyota", "Camry", 50, 5)
rental = Rental("R1", car, "John Doe", 3)
print(f"Rental cost for 3 days: ${rental.calculate_cost()}")
elif test_case == "vehicle_methods":
# Uji method Vehicle
vehicle = Vehicle("V789", "Generic", "Vehicle", 25)
print(vehicle)
print(f"Start rental: {vehicle.start_rental()}")
print(f"Start rental again: {vehicle.start_rental()}")
print(f"End rental: {vehicle.end_rental()}")
print(f"Start rental after end: {vehicle.start_rental()}")
elif test_case == "inheritance_check":
# Uji hubungan pewarisan
car = Car("C123", "Toyota", "Camry", 50, 5)
bike = Motorcycle("M456", "Honda", "CBR", 35, 600)
print(f"Car is a Vehicle: {isinstance(car, Vehicle)}")
print(f"Motorcycle is a Vehicle: {isinstance(bike, Vehicle)}")
print(f"Car is a Motorcycle: {isinstance(car, Motorcycle)}")
elif test_case == "polymorphism":
# Uji perilaku polimorfik
vehicles = [
Vehicle("V789", "Generic", "Vehicle", 25),
Car("C123", "Toyota", "Camry", 50, 5),
Motorcycle("M456", "Honda", "CBR", 35, 600)
]
for i, v in enumerate(vehicles):
print(f"Vehicle {i+1}: {v}")
elif test_case == "rental_edge_cases":
# Uji kasus khusus penyewaan
agency = RentalAgency("Edge Rentals")
# Coba sewa kendaraan yang tidak ada
print(f"Rent non-existent: {agency.rent_vehicle('X999', 'John Doe', 3)}")
# Tambahkan mobil lalu sewakan
car = Car("C123", "Toyota", "Camry", 50, 5)
agency.add_vehicle(car)
rental_id = agency.rent_vehicle("C123", "John Doe", 3)
print(f"Valid rental: {rental_id}")
# Coba sewa mobil yang sama lagi
print(f"Rent unavailable car: {agency.rent_vehicle('C123', 'Jane Smith', 2)}")
# Coba kembalikan penyewaan yang tidak ada
print(f"Return non-existent rental: {agency.return_vehicle('R999')}")
# Kembalikan kendaraan dari penyewaan yang valid
print(f"Return valid rental: {agency.return_vehicle(rental_id)}")
# Coba kembalikan kendaraan dari penyewaan yang sama lagi
print(f"Return completed rental: {agency.return_vehicle(rental_id)}")
elif test_case == "agency_operations":
# Uji seluruh operasi agen penyewaan
agency = RentalAgency("Full Service Rentals")
# Tambahkan 5 kendaraan
vehicles = [
Car("C1", "Toyota", "Camry", 50, 5),
Car("C2", "Honda", "Accord", 55, 5),
Car("C3", "Ford", "Focus", 45, 5),
Motorcycle("M1", "Honda", "CBR", 35, 600),
Motorcycle("M2", "Yamaha", "R1", 40, 1000)
]
for v in vehicles:
agency.add_vehicle(v)
print(f"Available vehicles: {len(agency.available_vehicles())}")
# Sewakan 3 kendaraan
rental_ids = [
agency.rent_vehicle("C1", "Customer 1", 3),
agency.rent_vehicle("C2", "Customer 2", 5),
agency.rent_vehicle("M1", "Customer 3", 2)
]
print(f"Available after rentals: {len(agency.available_vehicles())}")
# Terima kembali 2 kendaraan
agency.return_vehicle(rental_ids[0])
agency.return_vehicle(rental_ids[1])
print(f"Available after returns: {len(agency.available_vehicles())}")
# Tampilkan kendaraan yang tersedia
print("Available vehicles:")
for v in agency.available_vehicles():
print(f" {v}")
elif test_case == "stress_test":
# Uji ketahanan dengan banyak kendaraan
agency = RentalAgency("Stress Test Rentals")
# Tambahkan 100 kendaraan
for i in range(100):
if i % 2 == 0:
vehicle = Car(f"C{i}", "Make{i}", f"Model{i}", 50, 5)
else:
vehicle = Motorcycle(f"M{i}", "Make{i}", f"Model{i}", 35, 600)
agency.add_vehicle(vehicle)
# Sewa 50 kendaraan
rental_ids = []
for i in range(50):
vin = f"C{i*2}" if i % 2 == 0 else f"M{i*2-1}"
rental_id = agency.rent_vehicle(vin, f"Customer{i}", 3)
rental_ids.append(rental_id)
print(f"Available after 50 rentals: {len(agency.available_vehicles())}")
# Kembalikan semua kendaraan yang disewa
for rental_id in rental_ids:
agency.return_vehicle(rental_id)
print(f"Available after all returns: {len(agency.available_vehicles())}")
elif test_case == "invalid_inputs":
# Uji dengan input yang tidak valid
car = Car("C123", "Toyota", "Camry", -50, 5)
print(f"Car with negative rate: {car}")
bike = Motorcycle("M456", "Honda", "CBR", 35, 0)
print(f"Motorcycle with zero engine: {bike}")
rental_zero = Rental("R1", car, "John Doe", 0)
print(f"Rental with zero days cost: ${rental_zero.calculate_cost()}")
rental_neg = Rental("R2", car, "Jane Smith", -3)
print(f"Rental with negative days cost: ${rental_neg.calculate_cost()}")Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPclass vs objectParameter selfmethodAtributMethod Konstruktor (__init__)Rangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan DasarFungsi super()Penimpaan MethodPewarisan BergandaUrutan Resolusi MethodRingkasan: Hierarki Karyawan7Special method
Pengantar Magic methodOverloading OperatorMagic method untuk wadahUlasan: list khusus13Tantangan Akhir
Platform E-learningSistem PerbankanPengembangan Karakter GameLayanan Penyewaan Kendaraan5Polimorfisme
Meninjau Ulang Method OverridingDuck Typingclass dan method AbstrakDesain InterfaceRingkasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanMixinsMetode Statis dan Metode ClassDecorator ClassPengelola Konteks11Pola Desain Bagian 2
Pola PerintahPola AdapterPola DecoratorPola Template MethodPola StatePola Composite3Property class
Variabel instance vs variabel classDekorator propertyAtribut privatRangkuman: Pengelola Rekening Bank6Enkapsulasi
Anggota Public, Protected, PrivateModifier AksesPenyembunyian InformasiDecorator Property Tingkat LanjutUlasan: Sistem Catatan Siswa12Proyek: Manajemen Perpustakaan
Ikhtisar Proyekclass Buku dan PenggunaSistem PeminjamanFitur PencarianAntarmuka AdminPengujian dan IntegrasiLatihan sendiri: Compiler Python online