Menu
Coddy logo textTech

שירות השכרת כלי רכב

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Python של Coddy. שיעור 64 מתוך 64.

challenge icon

אתגר

בינוני

באתגר הזה תממשו מערכת להשכרת כלי רכב. המערכת מדגמנת כלי רכב, השכרות וסוכנות להשכרת כלי רכב, תוך שימוש נכון בירושה ובהכמסה.

  • vehicle.py - מימוש מחלקת הבסיס Vehicle
  • car.py - מימוש מחלקת המשנה Car
  • motorcycle.py - מימוש מחלקת המשנה Motorcycle
  • rental.py - מימוש המחלקה Rental
  • rentalagency.py - מימוש המחלקה RentalAgency

כל קובץ מכיל הערות TODO מפורטות שמנחות אתכם במימוש. פעלו לפי ההערות האלה כדי לוודא שהקוד שלכם עומד בכל הדרישות.

נסו בעצמכם

from vehicle import Vehicle
from car import Car
from motorcycle import Motorcycle
from rental import Rental
from rentalagency import RentalAgency

# טיפול מקיף במקרי בדיקה
test_case = input()

if test_case == "create_vehicles":
    # בדיקת יצירת כלי רכב
    car = Car("C123", "Toyota", "Camry", 50, 5)
    bike = Motorcycle("M456", "Honda", "CBR", 35, 600)
    
    print(car)
    print(bike)

elif test_case == "rental_workflow":
    # בדיקת תהליך ההשכרה
    agency = RentalAgency("Quick Rentals")
    
    # הוספת כלי רכב
    car = Car("C123", "Toyota", "Camry", 50, 5)
    bike = Motorcycle("M456", "Honda", "CBR", 35, 600)
    agency.add_vehicle(car)
    agency.add_vehicle(bike)
    
    # בדיקת כלי הרכב הזמינים
    print(f"Available before rental: {len(agency.available_vehicles())}")
    
    # השכרת כלי רכב
    rental_id = agency.rent_vehicle("C123", "John Doe", 3)
    print(f"Rental created: {rental_id}")
    
    # בדיקת כלי הרכב הזמינים לאחר ההשכרה
    print(f"Available after rental: {len(agency.available_vehicles())}")
    
    # החזרת כלי רכב
    agency.return_vehicle(rental_id)
    
    # בדיקת כלי הרכב הזמינים לאחר ההחזרה
    print(f"Available after return: {len(agency.available_vehicles())}")

elif test_case == "rental_cost":
    # בדיקת חישוב עלות ההשכרה
    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":
    # בדיקת המתודות של 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":
    # בדיקת יחסי הירושה
    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":
    # בדיקת התנהגות פולימורפית
    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":
    # בדיקת מקרי קצה בהשכרה
    agency = RentalAgency("Edge Rentals")
    
    # ניסיון לשכור רכב שאינו קיים
    print(f"Rent non-existent: {agency.rent_vehicle('X999', 'John Doe', 3)}")
    
    # הוספת מכונית והשכרתה
    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}")
    
    # ניסיון לשכור שוב את אותה מכונית
    print(f"Rent unavailable car: {agency.rent_vehicle('C123', 'Jane Smith', 2)}")
    
    # ניסיון להחזיר רכב מהשכרה שאינה קיימת
    print(f"Return non-existent rental: {agency.return_vehicle('R999')}")
    
    # החזרת הרכב מההשכרה התקפה
    print(f"Return valid rental: {agency.return_vehicle(rental_id)}")
    
    # ניסיון להחזיר שוב את הרכב מאותה השכרה
    print(f"Return completed rental: {agency.return_vehicle(rental_id)}")

elif test_case == "agency_operations":
    # בדיקה מקיפה של פעולות סוכנות ההשכרה
    agency = RentalAgency("Full Service Rentals")
    
    # הוספת 5 כלי רכב
    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 כלי רכב
    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 כלי רכב
    agency.return_vehicle(rental_ids[0])
    agency.return_vehicle(rental_ids[1])
    
    print(f"Available after returns: {len(agency.available_vehicles())}")
    
    # הדפס את כלי הרכב הזמינים
    print("Available vehicles:")
    for v in agency.available_vehicles():
        print(f"  {v}")

elif test_case == "stress_test":
    # בדיקת עומס עם כלי רכב רבים
    agency = RentalAgency("Stress Test Rentals")
    
    # הוסף 100 כלי רכב
    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 כלי רכב
    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())}")
    
    # החזר את כל כלי הרכב שהושכרו
    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":
    # בדיקה עם קלטים לא תקינים
    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()}")

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Python אונליין