租车信息:
输出结果:
代码:
1、先定义抽象类(汽车类:Moto)
1 package cn.aura.demo01; 2 3 public abstract class Moto { 4 //公共属性 5 private String id;//车牌号 6 private String brand;//品牌 7 private int preRent;//日租金 8 //构造方法 9 public Moto(String id, String brand, int preRent) { 10 this.id = id; 11 this.brand = brand; 12 this.preRent = preRent; 13 } 14 //set和get方法 15 public String getId() { 16 return id; 17 } 18 public void setId(String id) { 19 this.id = id; 20 } 21 public String getBrand() { 22 return brand; 23 } 24 public void setBrand(String brand) { 25 this.brand = brand; 26 } 27 public int getPreRent() { 28 return preRent; 29 } 30 public void setPreRent(int preRent) { 31 this.preRent = preRent; 32 } 33 //计算租金方法 34 public abstract double calRent(int days); 35 36 @Override 37 public String toString() { 38 return "Moto [id=" + id + ", brand=" + brand + ", preRent=" + preRent + "]"; 39 } 40 41 }
2.定义轿车类继承汽车类
1 package cn.aura.demo01; 2 /** 3 * 轿车类 4 */ 5 public class Car extends Moto{ 6 //私有属性 7 private String type;//型号 8 //set和get方法 9 public String getType() { 10 return type; 11 } 12 public void setType(String type) { 13 this.type = type; 14 } 15 //构造方法 16 public Car(String id, String brand, String type,int preRent) { 17 super(id, brand, preRent); 18 this.type = type; 19 } 20 21 //重写计算租金的算法 22 @Override 23 public double calRent(int days) { 24 if (days > 7 && days <= 30) { 25 //days大于7天,9折 26 return getPreRent()*days*0.9; 27 }else if (days > 30 && days <= 150) { 28 //days大于30天,8折 29 return getPreRent()*days*0.8; 30 }else if (days > 150) { 31 //days大于150天,7折 32 return getPreRent()*days*0.7; 33 } 34 return 0; 35 } 36 }
3.定义客车类
1 package cn.aura.demo01; 2 /** 3 * 客车类 4 */ 5 public class Bus extends Moto{ 6 //私有属性 7 private int seatCount;//座位数 8 //set和get方法 9 public int getSeatCount() { 10 return seatCount; 11 } 12 public void setSeatCount(int seatCount) { 13 this.seatCount = seatCount; 14 } 15 //构造方法 16 public Bus(String id, String brand, int seatCount, int preRent) { 17 super(id, brand, preRent); 18 this.seatCount = seatCount; 19 } 20 //重写计算租金的算法 21 @Override 22 public double calRent(int days) { 23 if (days >= 3 && days < 7) { 24 //days大于3天,9折 25 return getPreRent()*days*0.9; 26 }else if (days >= 7 && days <30) { 27 //days大于3天,8折 28 return getPreRent()*days*0.8; 29 }else if (days >= 30 && days <150) { 30 //days大于30天,7折 31 return getPreRent()*days*0.7; 32 }else if (days >= 150) { 33 //days大于150天,6折 34 return getPreRent()*days*0.6; 35 } 36 return 0; 37 } 38 }
4.定义汽车业务类
1 package cn.aura.demo01; 2 /** 3 * 定义汽车业务类 4 */ 5 public class MotoOperation { 6 //初始化数组 7 public static Moto[] motos = new Moto[8]; 8 //创建8个汽车对象 9 public void init() { 10 motos[0] = new Car("京NY28558", "宝马","X6", 800); 11 motos[1] = new Car("京CNY3284", "宝马","550i", 600); 12 motos[2] = new Car("京NT37465", "别克","林荫大道", 300); 13 motos[3] = new Car("京NT96968", "别克","GL8", 600); 14 motos[4] = new Bus("京6566754", "金杯", 16,800); 15 motos[5] = new Bus("京8696997", "金龙",16, 800); 16 motos[6] = new Bus("京9696996", "金杯", 34,1500); 17 motos[7] = new Bus("京8696998", "金龙",34, 1500); 18 } 19 //租赁汽车的方法 20 public static Moto motoLeaseOut(String brand,String type,int seat) { 21 Moto che = null; 22 //for循环遍历数组motos 23 for(int i=0;i<motos.length;i++){ 24 //判断Moto类的motos[i]的类型是否和Car一样 25 if(motos[i] instanceof Car){ 26 //Moto类的motos[i]向下转型变成子类Car 27 Car car = (Car)motos[i]; 28 if(car.getBrand().equals(brand) && car.getType().equals(type)){ 29 che=car; 30 break; 31 } 32 }else{ 33 //Moto类的motos[i]向下转型变成子类Bus 34 Bus bus = (Bus)motos[i]; 35 if(bus.getBrand().equals(brand) && bus.getSeatCount() == seat){ 36 che=bus; 37 break; 38 } 39 } 40 } 41 return che; 42 } 43 }
5.定义测试类
1 package cn.aura.demo01; 2 3 import java.util.Scanner; 4 5 /** 6 * 汽车租赁管理类 7 */ 8 public class TestRent { 9 //主函数 10 public static void main(String[] args) { 11 MotoOperation motoOperation = new MotoOperation(); 12 //初始化汽车数组 13 motoOperation.init(); 14 //提示信息 15 System.out.println("***********欢迎光临腾飞汽车租赁公司***********"); 16 System.out.println("1、轿车 2、客车"); 17 System.out.println("请输入你要租赁的汽车类型:"); 18 String brand = "";//品牌 19 String type = "";//型号 20 int seat = 0;//座位数 21 //获取用户输入 22 Scanner scanner = new Scanner(System.in); 23 int flag = scanner.nextInt(); 24 if (flag == 1) { 25 Car car =null; 26 System.out.println("请选择你要租赁的汽车品牌:1、别克 2、宝马"); 27 int flag1 = scanner.nextInt(); 28 if (flag1 == 1) { 29 System.out.println("请选择你要租赁的汽车类型:1、林荫大道 2、GL8"); 30 int flag2 = scanner.nextInt(); 31 brand = "别克"; 32 if (flag2 == 1) { 33 type = "林荫大道"; 34 }else if (flag2 == 2) { 35 type = "GL8"; 36 } 37 }else if (flag1 ==2) { 38 brand = "宝马"; 39 System.out.println("请选择你要租赁的汽车类型:1、X6 2、550i"); 40 int flag2 = scanner.nextInt(); 41 if (flag2 == 1) { 42 type = "X6"; 43 }else if (flag2 == 2) { 44 type = "550i"; 45 } 46 } 47 }else if (flag ==2) { 48 Bus bus = null; 49 System.out.println("请选择你要租赁的汽车品牌:1、金龙 2、金杯"); 50 int flag1 = scanner.nextInt(); 51 if (flag1 == 1) { 52 brand = "金龙"; 53 System.out.println("请选择你要租赁的汽车座位数:1、16座 2、34座"); 54 int flag2 = scanner.nextInt(); 55 if (flag2 == 1) { 56 seat = 16; 57 }else if (flag2 == 2) { 58 seat = 34; 59 } 60 }else if (flag1 ==2) { 61 brand = "金杯"; 62 System.out.println("请选择你要租赁的汽车座位数:1、16座 2、34座"); 63 int flag2 = scanner.nextInt(); 64 if (flag2 == 1) { 65 seat = 16; 66 }else if (flag2 == 2) { 67 seat = 34; 68 } 69 } 70 } 71 //租车 72 Moto che = MotoOperation.motoLeaseOut(brand,type,seat); 73 //获取用户租车天数 74 System.out.println("请输入您的租车天数:"); 75 int days = scanner.nextInt(); 76 //计算租车钱 77 double money = che.calRent(days); 78 System.out.println("分配给您的汽车牌号是:"+che.getId()); 79 System.out.println("您需要支付的租赁费用是:"+money+"元"); 80 } 81 82 83 }