汽车类父类:
//父类:汽车类
public abstract class Vehicle {
//车牌号 品牌 日租金
private String vehicleId;//车牌
private String brand;//品牌
private int perRent;//日租金
//有参构造
public Vehicle(String vehicleId, String brand, int perRent) {
this.vehicleId = vehicleId;
this.brand = brand;
this.perRent = perRent;
}
public Vehicle() {
}
public String getVehicleId() {
return vehicleId;
}
public void setVehicleId(String vehicleId) {
this.vehicleId = vehicleId;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public int getPerRent() {
return perRent;
}
public void setPerRent(int perRent) {
this.perRent = perRent;
}
//抽象方法:计算租金--》根据租赁周期来计算租金
public abstract float clacRent(int days);
}
子类轿车类:
//子类:轿车类
public class Car extends Vehicle {
//型号
private String type;
public Car() {
}
public Car(String vehicleId, String brand, int perRent,String type) {
super(vehicleId, brand, perRent);
this.type=type;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
//根据轿车计算租金的规则重写父类方法
@Override
public float clacRent(int days) {
//租金 = 日租金*租赁周期
float price = this.getPerRent()*days;
//折扣规则
if(days>7 && days<=30){
price*=0.9f;
}else if(days>30 && days<=150){
price*=0.8f;
}else if(days>150){
price*=0.7f;
}
return price;
}
}
子类客车类:
//子类:客车类
public class Bus extends Vehicle {
//座位数
private int seatCount;
public Bus() {
}
public Bus(String vehicleId, String brand, int perRent,int seatCount) {
super(vehicleId, brand, perRent);
this.seatCount=seatCount;
}
public int getSeatCount() {
return seatCount;
}
public void setSeatCount(int seatCount) {
this.seatCount = seatCount;
}
//根据客车计算租金的规则重写父类方法
@Override
public float clacRent(int days) {
//租金 = 日租金*租赁周期
float price = this.getPerRent()*days;
//折扣规则
if(days>3 && days<=7){
price*=0.9f;
}else if(days>7 && days<30){
price*=0.8f;
}else if(days>=30 && days<=150){
price*=0.7f;
}else if(days>150){
price*=0.6f;
}
return price;
}
}
汽车业务类
import cn.Bus;
import cn.Car;
import cn.Vehicle;
//汽车业务类
public class VehicleOperation {
Vehicle[] vehicles = new Vehicle[8];
//汽车信息初始化
public void init(){
vehicles[0] = new Car("浙N1556","宝马",700,"x6");
vehicles[1] = new Car("浙L5669","宝马",800,"550i");
vehicles[2] = new Car("浙P3456","别克",500,"林荫大道");
vehicles[3] = new Car("浙O1896","别克",600,"GL8");
vehicles[4] = new Bus("浙Q1556","金龙",900,34);
vehicles[5] = new Bus("浙W6856","金龙",1000,16);
vehicles[6] = new Bus("浙V0356","金杯",1100,34);
vehicles[7] = new Bus("浙X1786","金杯",750,16);
}
//租车
//参数 : 品牌 座位数 型号
public Vehicle rentVehicle(String brand ,int seatCount,String type){
Vehicle v= null;
for(Vehicle vehicle :vehicles){
if(vehicle instanceof Car){
//轿车
Car car = (Car)vehicle;//向下转型
//轿车的品牌型号与客户想要的品牌和型号吻合
if(car.getBrand().equals(brand) && car.getType().equals(type)){
v=car;
break;
}
}else{
//客车
Bus bus = (Bus)vehicle;//向下转型
//客车的品牌型号与客户想要的品牌和型号吻合
if(bus.getBrand().equals(brand) && bus.getSeatCount()==seatCount){
v=bus;
break;
}
}
}
return v;
}
}
汽车租赁管理类:入口测试类
import java.util.Scanner;
import cn.Vehicle;
//汽车租赁管理类:入口测试类
public class VehicleRent {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
VehicleOperation vehicleOpr = new VehicleOperation();
System.out.println("****************欢迎光临腾飞租赁汽车系统*******************");
System.out.print("请选择你要租赁的车型:1.轿车 2.客车");
int vehicleType = input.nextInt();
//获取用户租赁汽车的三个条件:品牌 座位数 型号
String brand = "";
int seatCount = 0;
String type = "";
switch(vehicleType){
case 1://租赁轿车,获取到用户想租赁的轿车的品牌及型号信息
System.out.print("请输入您想租赁的汽车品牌:1.别克 2.宝马");
int choose = input.nextInt();
if(choose==1){
brand = "别克";
System.out.print("请输入您要租赁的汽车类型:1.林荫大道 2.GL8");
type = (input.nextInt() == 1)?"林荫大道": "GL8";
}else{
brand = "宝马";
System.out.print("请输入您要租赁的汽车类型:1.x6 2.550i");
type = (input.nextInt() == 1)?"x6": "550i";
}
break;
case 2://租赁客车
System.out.print("请输入您想租赁的汽车品牌:1.金杯 2.金龙");
brand = (input.nextInt() == 1)?"金杯": "金龙";
System.out.print("请输入您想租赁的汽车座位数:1.16座 2.34座");
seatCount = (input.nextInt() == 1)?16: 34;
break;
}
//初始化汽车信息
vehicleOpr.init();
//租车
Vehicle v = vehicleOpr.rentVehicle(brand, seatCount, type);
//提示用户租车的车牌号 计算租金(多态)
System.out.print("请输入您要租赁汽车的天数:");
int days = input.nextInt();
float price = v.clacRent(days);
System.out.println("分配给您的汽车车牌号为:"+v.getVehicleId());
System.out.print("您需要支付的租赁费用为:"+price+"元");
}
}
运行结果: