Menu
Coddy logo textTech

Araç Kiralama Hizmeti

Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 110 / 110.

challenge icon

Görev

Kolay

OOP kursunun son meydan okumasına ulaştığın için tebrikler! Öğrendiğin her şeyi — soyut sınıflar, kalıtım, kapsülleme, State deseni, Factory deseni ve generic'ler — bir araya getiren kapsamlı bir Vehicle Rental Service oluşturalım.

Kiralama hizmetin farklı araç türlerini yönetecek, kullanılabilirlik durumlarını takip edecek, kiralamaları işleyecek ve müşteri kayıtlarını tutacak. Bunu yedi dosyaya ayıracaksın:

  • vehicle_state.dart: Araçların farklı durumlarda nasıl davranacağını tanımlayan soyut bir VehicleState sınıfı oluştur. Soyut bir String getStatus() metodu ve bool canRent() metodu ekle. Ardından üç somut durum oluştur:
    • AvailableStateAvailable döndürür ve kiralamaya izin verir
    • RentedStateRented döndürür ve kiralamaya izin vermez
    • MaintenanceStateIn Maintenance döndürür ve kiralamaya izin vermez
  • vehicle.dart: Vehicle id (String), final model (String), getter'a sahip private final (double) ve _dailyRate olarak başlatılan private _state (VehicleState) alanlarına sahip soyut bir AvailableState sınıfı oluştur. Şunları ekle:
    • Durumun durum bilgisini döndüren bir status getter'ı
    • bool isAvailable() — mevcut durumun kiralamaya izin verip vermediğini kontrol eder
    • void setState(VehicleState state) — aracın durumunu değiştirir
    • Soyut bir double calculateRentalCost(int days) metodu
    • Özel gereksinimleri döndüren soyut bir String getRequirements() metodu
    toString() metodunu, Type çalışma zamanı türü olacak şekilde [Type] model (id) - status döndürecek biçimde geçersiz kıl.
  • vehicles.dart: Vehicle sınıfını genişleten üç araç türü oluştur:
    • Car — standart kiralama maliyeti günlük ücret çarpı gün sayısıdır. Gereksinimler: Valid driver's license
    • Motorcycle — kiralama maliyeti, %10 indirim uygulanmış şekilde günlük ücret çarpı gün sayısıdır. Gereksinimler: Motorcycle license, Age 21+
    • Truck — kiralama maliyeti günlük ücret çarpı gün sayısına sabit 50 $ ücret eklenerek hesaplanır. Gereksinimler: Commercial license, Deposit required
  • vehicle_factory.dart: VehicleFactory, Vehicle create(String type, String id, String model, double dailyRate) veya car türüne göre uygun aracı döndüren statik motorcycle metoduna sahip bir truck sınıfı oluştur. Bilinmeyen türlerde varsayılan olarak bir Car oluştur.
  • customer.dart: id (String), name (String) ve kiralama kayıtlarından oluşan private bir listeye (String listesi) sahip bir Customer sınıfı oluştur. Şunları ekle:
    • addRental(String vehicleInfo) — bir kiralama kaydı ekler
    • getRentalCount() — kiralama sayısını döndürür
    • bool isEligible() — müşterinin 3'ten az aktif kiralaması varsa true döndürür
    toString() metodunu Customer: name (id) - X rentals döndürecek biçimde geçersiz kıl.
  • rental_service.dart: Filo için RentalService ve müşteriler için List<Vehicle> kullanan, generic'lerle bir List<Customer> sınıfı oluştur. Şunları ekle:
    • addVehicle(Vehicle vehicle) — filoya ekler, Added: vehicle.toString() yazdırır
    • registerCustomer(Customer customer) — müşteriyi ekler
    • rentVehicle(String customerId, String vehicleId, int days) — müşteri mevcutsa, kiralamaya uygunsa ve araç kullanılabilirse aracın durumunu Rented olarak değiştirir, müşteriye kiralamayı ekler ve customerId rented vehicleId for X days. Cost: $Y yazdırır (Y, 2 ondalık basamakla biçimlendirilir). Aksi takdirde uygun mesajı yazdırır: Customer not found, Customer not eligible, Vehicle not found veya Vehicle not available
    • returnVehicle(String vehicleId) — aracın durumunu Available olarak ayarlar ve vehicleId returned yazdırır
    • sendToMaintenance(String vehicleId) — aracın durumunu Maintenance olarak ayarlar ve vehicleId sent to maintenance yazdırır
    • getAvailableVehicles() — kullanılabilir araçların bir listesini döndürür
  • main.dart: Kiralama hizmetini göster. Bir RentalService oluştur ve fabrikayı kullanarak üç araç ekle:
    • Bir araba: V001, Toyota Camry, günlük 45 $
    • Bir motosiklet: V002, Honda CBR, günlük 35 $
    • Bir kamyon: V003, Ford F-150, günlük 75 $
    Bir müşteri (C001, Alice Johnson) kaydet ve müşteriyi yazdır. Kamyonun gereksinimlerini yazdır. Arabayı Alice'e 3 günlüğüne kirala. Arabayı tekrar kiralamayı dene (başarısız olmalı). Motosikleti bakıma gönder. Kullanılabilir araç sayısını Available vehicles: X olarak yazdır. Arabayı iade et. Son kullanılabilir araç sayısını yazdır.

Beklenen çıktı:

Added: [Car] Toyota Camry (V001) - Available
Added: [Motorcycle] Honda CBR (V002) - Available
Added: [Truck] Ford F-150 (V003) - Available
Customer: Alice Johnson (C001) - 0 rentals
Commercial license, Deposit required
C001 rented V001 for 3 days. Cost: $135.00
Vehicle not available
V002 sent to maintenance
Available vehicles: 1
V001 returned
Available vehicles: 2

Kendin dene

import 'rental_service.dart';
import 'vehicle_factory.dart';
import 'customer.dart';

void main() {
  // TODO: Bir RentalService örneği oluşturun
  
  // TODO: Üç araç oluşturmak ve eklemek için VehicleFactory kullanın:
  // - Car: V001, Toyota Camry, $45/gün
  // - Motorcycle: V002, Honda CBR, $35/gün
  // - Truck: V003, Ford F-150, $75/gün
  
  // TODO: Bir müşteri kaydedin (C001, Alice Johnson)
  
  // TODO: Müşteriyi yazdırın
  
  // TODO: Kamyonun gereksinimlerini yazdırın (kamyonu bulun ve getRequirements() metodunu çağırın)
  
  // TODO: Arabayı (V001) Alice'e (C001) 3 günlüğüne kiralayın
  
  // TODO: Arabayı tekrar kiralamayı deneyin (başarısız olmalı - müsait değil)
  
  // TODO: Motosikleti (V002) bakıma gönderin
  
  // TODO: Mevcut araç sayısını 'Available vehicles: X' olarak yazdırın
  
  // TODO: Arabayı (V001) iade edin
  
  // TODO: Nihai mevcut araç sayısını yazdırın
}

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Dart derleyicisi