Layanan Penyewaan Kendaraan
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 110 dari 110.
Tantangan
MudahSelamat 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 classVehicleStateyang menentukan perilaku kendaraan dalam berbagai status. Sertakan method abstractString getStatus()danbool canRent(). Lalu buat tiga status konkret:AvailableState- mengembalikanAvailabledan mengizinkan penyewaanRentedState- mengembalikanRenteddan tidak mengizinkan penyewaanMaintenanceState- mengembalikanIn Maintenancedan tidak mengizinkan penyewaan
vehicle.dart: Buat abstract classVehicledengan idfinal(String), modelfinal(String),_dailyRateprivate (double) dengan getter, dan_stateprivate (VehicleState) yang diinisialisasi keAvailableState. Sertakan:- Getter
statusyang mengembalikan status kendaraan bool isAvailable()- memeriksa apakah status saat ini mengizinkan penyewaanvoid setState(VehicleState state)- mengubah status kendaraan- Method abstract
double calculateRentalCost(int days) - Method abstract
String getRequirements()- mengembalikan persyaratan khusus
toString()agar mengembalikan[Type] model (id) - status, dengan Type sebagai tipe runtime.- Getter
vehicles.dart: Buat tiga jenis kendaraan yang merupakan turunan dariVehicle:Car- biaya penyewaan standar adalah tarif harian dikalikan jumlah hari. Persyaratan:Valid driver's licenseMotorcycle- 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 classVehicleFactorydengan method staticVehicle create(String type, String id, String model, double dailyRate)yang mengembalikan kendaraan yang sesuai berdasarkan tipe (car,motorcycle, atautruck). Untuk tipe yang tidak dikenal, secara default buat Car.customer.dart: Buat classCustomerdengan id (String), name (String), dan list catatan penyewaan private (list berisi String). Sertakan:addRental(String vehicleInfo)- menambahkan catatan penyewaangetRentalCount()- mengembalikan jumlah penyewaanbool isEligible()- mengembalikan true jika pelanggan memiliki kurang dari 3 penyewaan aktif
toString()agar mengembalikanCustomer: name (id) - X rentals.rental_service.dart: Buat classRentalServicemenggunakan generics denganList<Vehicle>untuk armada danList<Customer>untuk pelanggan. Sertakan:addVehicle(Vehicle vehicle)- menambahkan kendaraan ke armada, mencetakAdded: vehicle.toString()registerCustomer(Customer customer)- menambahkan pelangganrentVehicle(String customerId, String vehicleId, int days)- jika pelanggan ada, memenuhi syarat, dan kendaraan tersedia: mengubah status kendaraan menjadi Rented, menambahkan penyewaan ke pelanggan, lalu mencetakcustomerId 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, atauVehicle not availablereturnVehicle(String vehicleId)- mengubah status kendaraan menjadi Available, lalu mencetakvehicleId returnedsendToMaintenance(String vehicleId)- mengubah status kendaraan menjadi Maintenance, lalu mencetakvehicleId sent to maintenancegetAvailableVehicles()- mengembalikan list kendaraan yang tersedia
main.dart: Tunjukkan cara kerja layanan penyewaanmu. BuatRentalServicedan 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
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 formatAvailable vehicles: X. Kembalikan mobil. Cetak jumlah akhir kendaraan yang tersedia.- Mobil:
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: 2Coba 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
1Dasar-Dasar OOP
file Eksternallibrary dan ImporPengantar OOPClass dan ObjectKata kunci thismethodVariabel InstanceDasar-Dasar ConstructorRingkasan: Kalkulator Sederhana4Keamanan Null
Pengantar Keamanan NullBisa Null vs Tidak Bisa NullOperator ? dan !Kata Kunci late dan Keamanan NullOperator Penanganan NullKeamanan Null dalam classRangkuman: Sistem Profil Pengguna7class Abstrak & Antarmuka
class AbstrakMethod abstrakAntarmuka di DartAntarmuka ImplisitMengimplementasikan vs MemperluasBeberapa AntarmukaRingkasan: Kalkulator Bentuk10Koleksi dan Generik
Gambaran Umum list, set, dan MapKoleksi dengan Tipe AmanKelas GenerikMetode GenerikBatasan GenerikIterable dan IteratorUlasan: Penyimpanan Generik2Konstruktor dalam Dart
Konstruktor DefaultKonstruktor BernamaInitializer ListsKonstruktor KonstanKonstruktor FactoryKonstruktor RedirectingRangkuman, Pembuat Bentuk5Enkapsulasi
Member Publik vs PrivatKonvensi Prefiks _Privasi Tingkat libraryPendalaman Getter & SetterPenyembunyian InformasiRingkasan: Catatan Siswa8Mixin
Pengantar MixinMembuat MixinMenggunakan Beberapa MixinKata Kunci on pada MixinMixin vs. PewarisanMixin vs. InterfaceRangkuman: Sistem Hewan3Property Class
Anggota Instance vs StaticField Final dan ConstVariabel LateMethod dan Field StaticGetter dan SetterRangkuman: Pengelola Rekening Bank6Pewarisan
Pewarisan DasarKata Kunci superPenimpaan methodAnotasi @overrideKata Kunci class finalKonstruktor dan PewarisanRangkuman, Hierarki Karyawan9Polimorfisme
Dasar-Dasar PolimorfismePolimorfisme melalui AntarmukaPemeriksaan Tipe saat RuntimeOperator is & asKata Kunci KovarianRangkuman: Pemroses PembayaranLatihan sendiri: Compiler Dart online