Java练习小项目02

此博客介绍了如何使用Java编程语言设计一个租车系统,通过抽象类`FatherCar`定义车辆的基本属性和接口,再创建轿车`Car`和客车`Bus`子类实现不同类型的租车费用计算。系统利用`ShuRu`类进行数据初始化,并通过用户输入选择车型、品牌和租期,计算并输出租金。整个系统展示了面向对象的多态特性。
摘要由CSDN通过智能技术生成

用重写、多态相关知识写租车系统

1、车的父类代码

public abstract class FatherCar {
    public FatherCar() {
    }

    public FatherCar(String chepaihao, String pinpai, double daymoney) {
        this.chepaihao = chepaihao;
        this.pinpai = pinpai;
        this.daymoney = daymoney;
    }

    private String chepaihao;
    private String pinpai;
    private double daymoney;
//    private int days;

    public abstract double money(int x);

//    public int getDays() {
//        return days;
//    }
//
//    public void setDays(int days) {
//        this.days = days;
//    }

    public String getChepaihao() {
        return chepaihao;
    }

    public void setChepaihao(String chepaihao) {
        this.chepaihao = chepaihao;
    }

    public String getPinpai() {
        return pinpai;
    }

    public void setPinpai(String pinpai) {
        this.pinpai = pinpai;
    }

    public double getDaymoney() {
        return daymoney;
    }

    public void setDaymoney(double daymoney) {
        this.daymoney = daymoney;
    }
}

2、轿车子类代码

public class Car extends FatherCar{
    public Car() {
    }

    public Car(String chepaihao, String pinpai, double daymoney, String zhonglei) {
        super(chepaihao, pinpai, daymoney);
        this.zhonglei = zhonglei;
    }

    private String zhonglei;

    public String getZhonglei() {
        return zhonglei;
    }

    public void setZhonglei(String zhonglei) {
        this.zhonglei = zhonglei;
    }

    @Override
    public double money(int x) {
        if(x<15){
            return getDaymoney()*1*x;
        }else if(x>15 && x<90){
            return getDaymoney()*0.9*x;
        }else if(x>90 && x<150){
            return getDaymoney()*0.8*x;
        }else{
            return getDaymoney()*0.7*x;
        }
    }
}

3、客车子类代码

public class Bus extends FatherCar{
    public Bus() {
    }

    public Bus(String chepaihao, String pinpai, double daymoney, String setamount) {
        super(chepaihao, pinpai, daymoney);
        this.setamount = setamount;
    }

    private String setamount;

    public String getSetamount() {
        return setamount;
    }

    public void setSetamount(String setamount) {
        this.setamount = setamount;
    }

    @Override
    public double money(int x) {
        if(x<7){
            return getDaymoney()*1*x;
        }else if(x>7 && x<30){
            return getDaymoney()*0.9*x;
        }else if(x>30 && x<90){
            return getDaymoney()*0.8*x;
        }else{
            return getDaymoney()*0.7*x;
        }
    }
}

4、中间类

public class ShuRu {
    FatherCar[] xinxi = new FatherCar[8];
    public void init() {
        xinxi[0] = new Car("陕A1212", "比亚迪", 100, "唐");
        xinxi[1] = new Car("陕A2323", "奔驰", 200, "SL");
        xinxi[2] = new Car("陕A3434", "比亚迪", 100, "宋");
        xinxi[3] = new Car("陕A4545", "奔驰", 200, "CLK");
        xinxi[4] = new Bus("陕A5656", "宇通", 80, "30");
        xinxi[5] = new Bus("陕A6767", "海格", 90, "30");
        xinxi[6] = new Bus("陕A7878", "宇通", 85, "40");
        xinxi[7] = new Bus("陕A8989", "海格", 95, "40");
    }

    public FatherCar panduan(String pinpai,String zhonglei,String setamount) {
        FatherCar b = null;
        for (FatherCar a : xinxi) {
            if(a instanceof Car){
                Car car = (Car)a;
                if (car.getPinpai().equals(pinpai) && car.getZhonglei().equals(zhonglei)) {
                    b = car;
                    break;
                }
            }else{
                Bus bus = (Bus)a;
                if(bus.getPinpai().equals(pinpai)&&bus.getSetamount().equals(setamount)){
                    b = bus;
                    break;
                }
            }
        }
        return b;
    }
}

5、主函数

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        ShuRu s = new ShuRu();
        s.init();
        FatherCar f;
        System.out.println("**********欢迎来到安全租车***********");
        System.out.println("1.小轿车  2.客车");
        System.out.println("请选择您想租聘的汽车类型");
        Scanner input = new Scanner(System.in);
        if(input.nextInt()==1){
            System.out.println("请选择您想租聘的汽车品牌:1.奔驰 2.比亚迪");
            if(input.nextInt() == 1){
                System.out.println("请选择您想租聘的汽车种类:1.SL 2.CLK");
                if(input.nextInt() == 1){
                    f = s.panduan("奔驰","SL",null);
                }else{
                    f = s.panduan("奔驰","CLK",null);
                }
            }else{
                System.out.println("请选择您想租聘的汽车种类:1.唐 2.宋");
                if(input.nextInt() == 1){
                    f = s.panduan("比亚迪","唐",null);
                }else{
                    f = s.panduan("奔驰","宋",null);
                }
            }
        }else{
            System.out.println("请选择您想租聘的汽车品牌:1.宇通 2.海格");
            if(input.nextInt() == 1){
                System.out.println("请选择您想租聘的汽车种类:1.30 2.40");
                if(input.nextInt() == 1){
                    f = s.panduan("宇通",null,"30");
                }else{
                    f = s.panduan("宇通",null,"40");
                }
            }else{
                System.out.println("请选择您想租聘的汽车种类:1.30 2.40");
                if(input.nextInt() == 1){
                    f = s.panduan("海格",null,"30");
                }else{
                    f = s.panduan("海格",null,"40");
                }
            }
        }
        System.out.println("您的车牌号是:"+f.getChepaihao());
        System.out.println("请输入您要租聘的天数:");
        System.out.println("您的租金是:"+f.money(input.nextInt()));
    }
}

整体优化后的主函数代码:

ShuRu s = new ShuRu();
s.init();

        switch (input.nextInt()) {
            case 1:
                System.out.print("请选择你要租赁的汽车品牌:1、别克 2、宝马");
                int choose2 = input.nextInt();
                if (choose2 == 1) {
                    brand = "别克";
                    System.out.print("请选择你要租赁的汽车类型:1、林荫大道 2、GL8");
                    type = (input.nextInt() == 1) ? "林荫大道" : "GL8";
                } else if (choose2 == 2) {
                    brand = "宝马";
                    System.out.print("请选择你要租赁的汽车类型:1、X6  2、550i");
                    type = (input.nextInt() == 1) ? "X6" : "550i";
                }
                FatherCar f = s.panduan(brand, type, 0);
                break;
            case 2:
                System.out.print("请选择你要租赁的汽车品牌:1、金龙 2、金杯");
                brand = (input.nextInt() == 1) ? "金龙" : "金杯";
                System.out.print("请选择你要租赁的汽车座位数:1、16座 2、34座");
                seat = (input.nextInt() == 1) ? 16 : 34;
                FatherCar f = s.panduan(brand, "", seat);
                break;
        }
        //计算租金   天数
        System.out.print("请输入您要租赁的天数:");
        int days = input.nextInt();
        // 调用子类  计算租金方法 (重写 父类的方法)
        float sum = f.money(days);
        System.out.println("原价:" + (f.getdaymoney() * days) + ",折后价格:" + sum);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值