Menu
Coddy logo textTech

Fahrzeugvermietungsservice

Teil des Abschnitts Objektorientierte Programmierung der Python-Journey von Coddy. Lektion 64 von 64.

challenge icon

Aufgabe

Mittel

In dieser Herausforderung implementierst du ein Fahrzeugverleihsystem. Das System modelliert Fahrzeuge, Vermietungen und eine Vermietungsagentur mit ordnungsgemäßer Vererbung und Kapselung.

  • vehicle.py – Implementiere die Basisklasse Vehicle
  • car.py – Implementiere die Unterklasse Car
  • motorcycle.py – Implementiere die Unterklasse Motorcycle
  • rental.py – Implementiere die Klasse Rental
  • rentalagency.py – Implementiere die Klasse RentalAgency

Jede Datei enthält detaillierte TODO-Kommentare, die dich bei der Implementierung anleiten. Befolge diese Kommentare, um sicherzustellen, dass dein Code alle Anforderungen erfüllt.

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 Objektorientierte Programmierung

Übe selbstständig: Online-Python-Compiler