Menu
CoddyTech

Layanan Penyewaan Kendaraan

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 110 dari 110.

challenge icon

Tantangan

Mudah

Selamat telah mencapai tantangan terakhir kursus OOP! Mari bangun Layanan Penyewaan Kendaraan komprehensif yang menggabungkan semua yang telah kamu pelajari, yaitu abstract class, inheritance, encapsulation, pola State, pola Factory, dan generics.

Layanan penyewaanmu akan mengelola berbagai jenis kendaraan, melacak status ketersediaannya, menangani penyewaan, dan menyimpan catatan pelanggan. Kamu akan mengaturnya dalam tujuh file:

  • vehicle_state.dart: Buat abstract class VehicleState yang menentukan perilaku kendaraan dalam berbagai status. Sertakan method abstract String getStatus() dan bool canRent(). Lalu buat tiga status konkret:
    • AvailableState - mengembalikan Available dan mengizinkan penyewaan
    • RentedState - mengembalikan Rented dan tidak mengizinkan penyewaan
    • MaintenanceState - mengembalikan In Maintenance dan tidak mengizinkan penyewaan
  • vehicle.dart: Buat abstract class Vehicle dengan id final (String), model final (String), _dailyRate private (double) dengan getter, dan _state private (VehicleState) yang diinisialisasi ke AvailableState. Sertakan:
    • Getter status yang mengembalikan status kendaraan
    • bool isAvailable() - memeriksa apakah status saat ini mengizinkan penyewaan
    • void setState(VehicleState state) - mengubah status kendaraan
    • Method abstract double calculateRentalCost(int days)
    • Method abstract String getRequirements() - mengembalikan persyaratan khusus
    Override toString() agar mengembalikan [Type] model (id) - status, dengan Type sebagai tipe runtime.
  • vehicles.dart: Buat tiga jenis kendaraan yang merupakan turunan dari Vehicle:
    • Car - biaya penyewaan standar adalah tarif harian dikalikan jumlah hari. Persyaratan: Valid driver's license
    • Motorcycle - biaya penyewaan adalah tarif harian dikalikan jumlah hari, dengan diskon 10%. Persyaratan: Motorcycle license, Age 21+
    • Truck - biaya penyewaan adalah tarif harian dikalikan jumlah hari, ditambah biaya tetap $50. Persyaratan: Commercial license, Deposit required
  • vehicle_factory.dart: Buat class VehicleFactory dengan method static Vehicle create(String type, String id, String model, double dailyRate) yang mengembalikan kendaraan yang sesuai berdasarkan tipe (car, motorcycle, atau truck). Untuk tipe yang tidak dikenal, secara default buat Car.
  • customer.dart: Buat class Customer dengan id (String), name (String), dan list catatan penyewaan private (list berisi String). Sertakan:
    • addRental(String vehicleInfo) - menambahkan catatan penyewaan
    • getRentalCount() - mengembalikan jumlah penyewaan
    • bool isEligible() - mengembalikan true jika pelanggan memiliki kurang dari 3 penyewaan aktif
    Override toString() agar mengembalikan Customer: name (id) - X rentals.
  • rental_service.dart: Buat class RentalService menggunakan generics dengan List<Vehicle> untuk armada dan List<Customer> untuk pelanggan. Sertakan:
    • addVehicle(Vehicle vehicle) - menambahkan kendaraan ke armada, mencetak Added: vehicle.toString()
    • registerCustomer(Customer customer) - menambahkan pelanggan
    • rentVehicle(String customerId, String vehicleId, int days) - jika pelanggan ada, memenuhi syarat, dan kendaraan tersedia: mengubah status kendaraan menjadi Rented, menambahkan penyewaan ke pelanggan, lalu mencetak customerId rented vehicleId for X days. Cost: $Y (Y diformat menjadi 2 angka desimal). Jika tidak, cetak pesan yang sesuai: Customer not found, Customer not eligible, Vehicle not found, atau Vehicle not available
    • returnVehicle(String vehicleId) - mengubah status kendaraan menjadi Available, lalu mencetak vehicleId returned
    • sendToMaintenance(String vehicleId) - mengubah status kendaraan menjadi Maintenance, lalu mencetak vehicleId sent to maintenance
    • getAvailableVehicles() - mengembalikan list kendaraan yang tersedia
  • main.dart: Tunjukkan cara kerja layanan penyewaanmu. Buat RentalService dan gunakan factory untuk menambahkan tiga kendaraan:
    • Mobil: V001, Toyota Camry, $45/hari
    • Sepeda motor: V002, Honda CBR, $35/hari
    • Truk: V003, Ford F-150, $75/hari
    Daftarkan seorang pelanggan (C001, Alice Johnson) lalu cetak data pelanggan tersebut. Cetak persyaratan truk. Sewakan mobil kepada Alice selama 3 hari. Coba sewakan mobil itu lagi, tindakan ini seharusnya gagal. Kirim sepeda motor ke pemeliharaan. Cetak jumlah kendaraan yang tersedia dengan format Available vehicles: X. Kembalikan mobil. Cetak jumlah akhir kendaraan yang tersedia.

Output yang diharapkan:

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

Coba sendiri

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

void main() {
  // TODO: Buat instance RentalService
  
  // TODO: Gunakan VehicleFactory untuk membuat dan menambahkan tiga kendaraan:
  // - Mobil: V001, Toyota Camry, $45/hari
  // - Sepeda motor: V002, Honda CBR, $35/hari
  // - Truk: V003, Ford F-150, $75/hari
  
  // TODO: Daftarkan pelanggan (C001, Alice Johnson)
  
  // TODO: Cetak data pelanggan
  
  // TODO: Cetak persyaratan truk (cari truk lalu panggil getRequirements())
  
  // TODO: Sewakan mobil (V001) kepada Alice (C001) selama 3 hari
  
  // TODO: Coba sewakan mobil itu lagi (seharusnya gagal karena tidak tersedia)
  
  // TODO: Kirim sepeda motor (V002) untuk perawatan
  
  // TODO: Cetak jumlah kendaraan yang tersedia dalam format 'Available vehicles: X'
  
  // TODO: Kembalikan mobil (V001)
  
  // TODO: Cetak jumlah akhir kendaraan yang tersedia
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Dart online