Fahrzeugvermietung
Teil des Abschnitts Object Oriented Programming der Python-Journey von Coddy — Lektion 64 von 64.
Aufgabe
MittelIn dieser Challenge implementieren Sie ein Fahrzeugvermietungssystem. Das System modelliert Fahrzeuge, Vermietungen und eine Mietwagenagentur mit korrekter Vererbung und Kapselung.
vehicle.py- Implementieren Sie die Basisklasse Vehiclecar.py- Implementieren Sie die Unterklasse Carmotorcycle.py- Implementieren Sie die Unterklasse Motorcyclerental.py- Implementieren Sie die Klasse Rentalrentalagency.py- Implementieren Sie die Klasse RentalAgency
Jede Datei enthält detaillierte TODO-Kommentare, die Sie bei der Implementierung unterstützen. Befolgen Sie diese Kommentare, um sicherzustellen, dass Ihr Code alle Anforderungen erfüllt.
Spickzettel
Diese Herausforderung konzentriert sich auf die Implementierung eines Fahrzeugvermietungssystems unter Verwendung objektorientierter Programmierprinzipien, einschließlich Vererbung und Kapselung. Das System besteht aus mehreren Klassen, die zusammenarbeiten, um ein vollständiges Vermietungsgeschäft zu modellieren.
Die Implementierung umfasst die Erstellung von:
- Eine Basisklasse
Vehiclemit gemeinsamen Eigenschaften und Methoden - Unterklassen
CarundMotorcycle, die von Vehicle erben - Eine Klasse
Rentalzur Verwaltung einzelner Miettransaktionen - Eine Klasse
RentalAgencyzur Koordination des gesamten Vermietungssystems
Probier es selbst
from vehicle import Vehicle
from car import Car
from motorcycle import Motorcycle
from rental import Rental
from rentalagency import RentalAgency
# Umfassender Testfall-Handler
test_case = input()
if test_case == "create_vehicles":
# Teste Fahrzeugerstellung
car = Car("C123", "Toyota", "Camry", 50, 5)
bike = Motorcycle("M456", "Honda", "CBR", 35, 600)
print(car)
print(bike)
elif test_case == "rental_workflow":
# Teste Miet-Workflow
agency = RentalAgency("Quick Rentals")
# Fahrzeuge hinzufügen
car = Car("C123", "Toyota", "Camry", 50, 5)
bike = Motorcycle("M456", "Honda", "CBR", 35, 600)
agency.add_vehicle(car)
agency.add_vehicle(bike)
# Verfügbare Fahrzeuge prüfen
print(f"Available before rental: {len(agency.available_vehicles())}")
# Ein Fahrzeug mieten
rental_id = agency.rent_vehicle("C123", "John Doe", 3)
print(f"Rental created: {rental_id}")
# Verfügbare Fahrzeuge nach der Vermietung prüfen
print(f"Available after rental: {len(agency.available_vehicles())}")
# Fahrzeug zurückgeben
agency.return_vehicle(rental_id)
# Verfügbare Fahrzeuge nach der Rückgabe prüfen
print(f"Available after return: {len(agency.available_vehicles())}")
elif test_case == "rental_cost":
# Teste Berechnung der Mietkosten
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":
# Teste Fahrzeug-Methoden
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":
# Teste Vererbungsbeziehungen
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":
# Teste polymorphes Verhalten
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":
# Teste Miet-Grenzfälle
agency = RentalAgency("Edge Rentals")
# Versuche, ein nicht existierendes Fahrzeug zu mieten
print(f"Rent non-existent: {agency.rent_vehicle('X999', 'John Doe', 3)}")
# Ein Auto hinzufügen und mieten
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}")
# Versuche, dasselbe Auto erneut zu mieten
print(f"Rent unavailable car: {agency.rent_vehicle('C123', 'Jane Smith', 2)}")
# Versuche, eine nicht existierende Vermietung zurückzugeben
print(f"Return non-existent rental: {agency.return_vehicle('R999')}")
# Die gültige Vermietung zurückgeben
print(f"Return valid rental: {agency.return_vehicle(rental_id)}")
# Versuche, dieselbe Vermietung erneut zurückzugeben
print(f"Return completed rental: {agency.return_vehicle(rental_id)}")
elif test_case == "agency_operations":
# Teste umfassende Agentur-Operationen
agency = RentalAgency("Full Service Rentals")
# 5 Fahrzeuge hinzufügen
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())}")
# 3 Fahrzeuge mieten
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())}")
# 2 Fahrzeuge zurückgeben
agency.return_vehicle(rental_ids[0])
agency.return_vehicle(rental_ids[1])
print(f"Available after returns: {len(agency.available_vehicles())}")
# Verfügbare Fahrzeuge ausgeben
print("Available vehicles:")
for v in agency.available_vehicles():
print(f" {v}")
elif test_case == "stress_test":
# Stresstest mit vielen Fahrzeugen
agency = RentalAgency("Stress Test Rentals")
# 100 Fahrzeuge hinzufügen
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)
# 50 Fahrzeuge mieten
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())}")
# Alle Vermietungen zurückgeben
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":
# Teste mit ungültigen Eingaben
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()}")Alle Lektionen in Object Oriented Programming
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDer self-ParameterMethodenAttributeKonstruktor-Methode (__init__)Zusammenfassung – Einfacher Taschenrechner4Vererbung
Grundlagen der VererbungDie super()-FunktionMethoden überschreibenMehrfachvererbungMethod Resolution OrderZusammenfassung - Mitarbeiter-Hierarchie7Spezielle Methoden
Einführung in Magic MethodsOperator-ÜberladungMagic Methods für ContainerRückblick - Eigene Liste10Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster13Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung2Dekoratoren
Einführung in DekoratorenProperty-DekoratorStatischer Methoden-DekoratorKlassenmethoden-Dekorator5Polymorphismus
Methoden-Überschreiben vertieftDuck TypingAbstrakte Klassen und MethodenInterface-DesignZusammenfassung – Formen-Rechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungMixinsStatische und KlassenmethodenKlassendekoratorenContext Manager3Klasseneigenschaften
Instanz- vs. KlassenvariablenProperty-DekoratorenPrivate AttributeZusammenfassung – Bankkonto-Manager6Kapselung
Public, Protected, Private MemberZugriffsmodifikatorenInformation HidingProperty-Decorators für FortgeschritteneZusammenfassung - Studentenverwaltungssystem12Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen