-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathVehicleRentalSystem.java
143 lines (118 loc) · 3.71 KB
/
VehicleRentalSystem.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
import java.util.*;
abstract class Vehicle{
private String vehicleNumber;
private String type;
private double rentalRate;
public Vehicle(String vehicleNumber, String type, double rentalRate) {
this.vehicleNumber = vehicleNumber;
this.type = type;
this.rentalRate = rentalRate;
}
public String getVehicleNumber() {
return vehicleNumber;
}
public String getType() {
return type;
}
public double getRentalRate() {
return rentalRate;
}
public abstract double calculateRentalCost(int days);
public void displayDetails() {
System.out.println("Vehicle Number: " + vehicleNumber);
System.out.println("Type: " + type);
System.out.println("Rental Rate: " + rentalRate);
}
}
interface Insurable {
double calculateInsurance();
String getInsuranceDetails();
}
class Car extends Vehicle implements Insurable {
private double insuranceRate = 0.05; // 5% insurance rate
public Car(String vehicleNumber, double rentalRate) {
super(vehicleNumber, "Car", rentalRate);
}
@Override
public double calculateRentalCost(int days) {
return getRentalRate() * days;
}
@Override
public double calculateInsurance() {
return getRentalRate() * insuranceRate;
}
@Override
public String getInsuranceDetails() {
return "Car Insurance Rate: " + (insuranceRate * 100) + "%";
}
}
class Bike extends Vehicle {
public Bike(String vehicleNumber, double rentalRate) {
super(vehicleNumber, "Bike", rentalRate);
}
@Override
public double calculateRentalCost(int days) {
return getRentalRate() * days;
}
}
class Truck extends Vehicle implements Insurable {
private double insuranceRate = 0.10; // 10% insurance rate
public Truck(String vehicleNumber, double rentalRate) {
super(vehicleNumber, "Truck", rentalRate);
}
@Override
public double calculateRentalCost(int days) {
return getRentalRate() * days * 1.2; // Trucks have an extra surcharge
}
@Override
public double calculateInsurance() {
return getRentalRate() * insuranceRate;
}
@Override
public String getInsuranceDetails() {
return "Truck Insurance Rate: " + (insuranceRate * 100) + "%";
}
}
public class VehicleRentalSystem {
public static void main(String[] args) {
List<Vehicle> vehicles = new ArrayList<>();
Car sedan = new Car("1234", 50);
Bike sportsBike = new Bike("4567", 20);
Truck freightTruck = new Truck("7890", 100);
vehicles.add(sedan);
vehicles.add(sportsBike);
vehicles.add(freightTruck);
for (Vehicle vehicle : vehicles) {
vehicle.displayDetails();
int rentalDays = 5;
double rentalCost = vehicle.calculateRentalCost(rentalDays);
double insuranceCost = (vehicle instanceof Insurable) ? ((Insurable) vehicle).calculateInsurance() : 0;
System.out.println("Rental Cost for " + rentalDays + " days: " + rentalCost);
System.out.println("Insurance Cost: " + insuranceCost);
if (vehicle instanceof Insurable) {
System.out.println(((Insurable) vehicle).getInsuranceDetails());
}
System.out.println();
}
}
}
//SampleOutput
//Vehicle Number: 1234
//Type: Car
//Rental Rate: 50.0
//Rental Cost for 5 days: 250.0
//Insurance Cost: 2.5
//Car Insurance Rate: 5.0%
//
//Vehicle Number: 4567
//Type: Bike
//Rental Rate: 20.0
//Rental Cost for 5 days: 100.0
//Insurance Cost: 0.0
//
//Vehicle Number: 7890
//Type: Truck
//Rental Rate: 100.0
//Rental Cost for 5 days: 600.0
//Insurance Cost: 10.0
//Truck Insurance Rate: 10.0%