为了账号安全,请及时绑定邮箱和手机立即绑定

Java程序员学习路径,java入门第二季6-1练习,答答租车系统

标签:
Java

借鉴了很多幕友的代码,自己试着写写(下午加晚上) 算是总结
1.首先创建抽象父类Car 供子类继承,共同属性id,name和price 属性设置抽象方法setProperties();

public abstract class Car {
    public int id;//序号
    public String name;//车名
    public int price;//租金
//抽象方法,设置属性
    public abstract void setProperties(int newId, String newNmame, int newPrice);
}

2.两个接口:载货 ILoadGoods 载人 ILoadPerson (注意Java只能单继承,但可以多实现)

//载人接口
public interface ILoadPerson {
    public void setPerson(int newPerson);
    public int getPerson();

}
//载货接口
public interface ILoadGoods {
    public void setGoods(int newGoods);
    public int getGoods();

}

3.创建三个子类 分别继承父类和实现相应接口
客车类 继承Car类,因为是客车,所以只需实现载人接口即可

public class PersonCar extends Car implements ILoadPerson {

    private int person;//私有属性 载客量
    //构造函数
    public PersonCar(int newId, String newNmame, int newPrice, int newPerson) {
        // TODO Auto-generated constructor stub
//设置属性
        setProperties(newId, newNmame, newPrice);
//设置载客量
        setPerson(newPerson);
    }

    @Override  //覆盖接口中的抽象方法
    public void setPerson(int newPerson) {
        // TODO Auto-generated method stub
        this.person = newPerson;
    }

    @Override//覆盖接口中的抽象方法
    public int getPerson() {
        // TODO Auto-generated method stub
        return person;
    }

    @Override//覆盖父类中的抽象方法
    public void setProperties(int newId, String newNmame, int newPrice) {
        // TODO Auto-generated method stub
        this.id = newId;
        this.name = newNmame;
        this.price = newPrice;
    }
    //此处注意要覆盖Object类中的toString 方法,方便打印实例对象时输出字符串而不是地址
    public String toString(){
        return id+".    "+name+"\t"+price+"元/天    "+"载人:"+getPerson()+"人";
    }

}

货车类 继承Car类,因为是货车,所以只需实现载货接口即可

public class GoodsCar extends Car implements ILoadGoods {

    private int goods; //私有属性 载货量
    //构造函数 创建实例对象初始化
    public GoodsCar(int newId, String newNmame, int newPrice, int newGoods) {
        // TODO Auto-generated constructor stub
        setProperties(newId, newNmame, newPrice);
        setGoods(newGoods);
    }

    @Override  //覆盖接口中的抽象方法
    public void setGoods(int newGoods) {
        // TODO Auto-generated method stub
        this.goods = newGoods;
    }

    @Override  //覆盖接口中的抽象方法
    public int getGoods() {
        // TODO Auto-generated method stub
        return goods;
    }

    @Override  //覆盖父类中的抽象方法
    public void setProperties(int newId, String newNmame, int newPrice) {
        // TODO Auto-generated method stub
        this.id = newId;
        this.name = newNmame;
        this.price = newPrice;
    }

    public String toString(){
        return id+".    "+name+"\t"+price+"元/天    "+"载货:"+getGoods()+" 吨";
    }

}

皮卡类 继承Car类 因为是皮卡,所以既需要实现载人接口也需要载货接口

public class PickUpCar extends Car implements ILoadGoods, ILoadPerson {

    private int person;//私有属性
    private int goods;//私有属性
    //构造函数
    public PickUpCar(int newId, String newNmame, int newPrice, int newPerson, int newGoods) {
        // TODO Auto-generated constructor stub
        setProperties(newId, newNmame, newPrice);
        setGoods(newGoods);
        setPerson(newPerson);
    }
    @Override //覆盖接口中的抽象方法
    public void setPerson(int newPerson) {
        // TODO Auto-generated method stub
        this.person = newPerson;
    }

    @Override //覆盖接口中的抽象方法
    public int getPerson() {
        // TODO Auto-generated method stub
        return person;
    }

    @Override  //覆盖接口中的抽象方法
    public void setGoods(int newGoods) {
        // TODO Auto-generated method stub
        this.goods = newGoods;
    }

    @Override  //覆盖接口中的抽象方法
    public int getGoods() {
        // TODO Auto-generated method stub
        return goods;
    }

    @Override//覆盖父类中的抽象方法
    public void setProperties(int newId, String newNmame, int newPrice) {
        // TODO Auto-generated method stub
        this.id = newId;
        this.name = newNmame;
        this.price = newPrice;
    }

    public String toString(){
        return id+".    "+name+"\t"+price+"元/天     "+"载人:"+getPerson()+"人"+"  "+"载货:"+getGoods()+" 吨";
    }

}

4.测试类 Users

import java.util.Scanner;  //导入包,用于键盘录入

public class Users {
    private static int rentDay,rentNum;//租车天数,租车数量
    private static int allPerson;//所有载客量
    private static int allGoods;//所有载货量
    private static int allMoney;//所有租金
    private static int[] idNum;//存储选择的车型序号

    //创建各种车实例对象 要静态 因为后面要用 实例.属性 调用 否则还要在各类中写get方法(这里偷懒了)
    private static  Car[] cars = {new PersonCar(1,"奥迪A4",500, 4),
                      new PersonCar(2, "马自达6", 400, 4),
                      new PickUpCar(3, "皮卡雪6", 450, 4, 2),
                      new PersonCar(4, "金龙", 800, 20),
                      new GoodsCar(5, "松花江", 400, 4),
                      new GoodsCar(6, "依维柯", 1000, 20)};

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("欢迎使用答答租车系统!");
        System.out.println("您是否要租车?(1是 0否)请选择:");
        Scanner input = new Scanner(System.in);
        int choice = input.nextInt();//调用键盘输入
        if (choice != 1) {
            System.out.println("欢迎再次光临");
            System.exit(0);
        }else{
            //打印车辆信息
            System.out.println("您可租车的类型及其价目表如下所示:");
            System.out.println("序号    汽车类型          租金           容量");
            for (Car car : cars){
                System.out.println(car);
            }   
            }
        System.out.println("请输入您要租车的数量(1辆起租):");
            rentNum = input.nextInt();
            idNum = new int[rentNum];//创建一个租车数量长度的 id数组,存储输入的id
        for (int i =1;i<=rentNum;i++){
            System.out.println("请输入第"+i+"辆车的序号:");
            idNum[i-1] = input.nextInt();
        }

        System.out.println("请输入租车天数:");
            rentDay = input.nextInt();
            input.close(); //关闭Scanner  不然会有警告(本人有强迫症)

        //打印账单  
        new Users().PrintBill();

        }

    public void PrintBill(){
        String strPerson = "";  //载人车型名称 必须要先初始化赋值 不然后面会报错
        String strGoods = "";  //载货车型名称
        for (int carId :idNum){
            for (Car car : cars){
                if(car.id ==carId){
                    //先计算租金,因为租金不受车型影响,照加不误
                    allMoney += car.price;
           /*再逐个判断是哪种车型  
             *关键字instanceof 判断一个实例是否是某个类的对象 返回boolean量
             *也可使用getClass()函数做判断 :if(car.getClass == PersonCar.class )
             *每个Id 都只能执行其中一个if代码块
              */
                    if(car instanceof PersonCar){
                        strPerson = strPerson + car.name + "   ";
                        allPerson += ((PersonCar) car).getPerson();//注意需要类型转换 ecli会自动帮你加上
                    }else if(car instanceof GoodsCar){
                        strGoods = strGoods + car.name + "   ";
                        allGoods += ((GoodsCar) car).getGoods();
                    }else if(car instanceof PickUpCar){
                        strPerson = strPerson + car.name + "   ";
                        strGoods = strGoods +car.name + "   ";
                        allPerson += ((PickUpCar) car).getPerson();
                        allGoods += ((PickUpCar) car).getGoods();
                    }
                }
            }
        }
        System.out.println("您的账单如下:");
        System.out.println("可载人的车型有:");
        System.out.println(strPerson+"\t共可载人:"+allPerson+" 人");
        System.out.println("可载货的车型有:");
        System.out.println(strGoods+"\t共可载货:"+allGoods+" 吨");
        System.out.println("您租车的总价格为:"+allMoney*rentDay+" 元\n 感谢您的使用");
    }
}
点击查看更多内容
19人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消