Java--阶段练习(汽车租赁)

阶段练习

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

面向对象的设计过程

1.分析需求

2.找名词(类,属性)

父类:汽车:品牌,车牌,日租金

子类:

轿车:型号

客车:座位数

汽车业务类

汽车租赁管理类

3.动词(方法)

汽车类(计算租金)

汽车业务类(初始化车信息,提供租赁服务)

汽车租赁管理类(入口和系统界面)

4.优化设计

父子类的关系:汽车类—>轿车,客车(子类)

汽车类(抽象类).(计算租金):抽象方法

5.梳理运行过程

汽车类业务(MotorOpration)

初始化车---->构造车(轿车,客车)

–>构造的这些车用对象数组存储(Car[])

(Car car1=new Motoncar(…); )

(Car car2=new Bus(…) ; )

租车

根据用户条件去查询相应的车辆,并返回相应的车辆,用户的租车条件:方法参数

循环遍历车辆数组Car

拿到的每一辆车(MotorCar,Bus)

将车辆转换为自己实际的子类型

instanceof

根据用户不同的条件进行比较

MotorCar:brand,moder

Bus:brand,setnumber

发下符合用户条件的车辆进行返回

测试和调试

定义车子父类和抽象方法租金的计算

package carRental;

public abstract class Car {
   private String breed;
    private String numberplace;
    private int rent;
    public Car(){

    }
    public Car(String breed,String numberplace,int rent){
        this.breed=breed;
        this.numberplace=numberplace;
        this.rent=rent;
    }
    public void setBreed(String breed) {
        this.breed = breed;
    }

    public String getBreed() {
        return breed;
    }

    public void setRent(int rent) {
        this.rent = rent;
    }

    public int getRent() {
        return rent;
    }

    public void setNumberplace(String numberplace) {
        this.numberplace = numberplace;
    }

    public String getNumberplace() {
        return numberplace;
    }
    public abstract float countrent (int day);
}

定义子类轿车

package carRental;

public class Motorcar extends Car {
    private String moder;

    public void setModer(String moder) {
        this.moder = moder;
    }

    public String getModer() {
        return moder;
    }

    public Motorcar(){

    }
    public Motorcar(String breed,String numberplace,int rent,String moder){
        super(breed,numberplace,rent);
        this.moder=moder;
    }

    public float countrent(int day) {
        float price = this.getRent();
        if (day > 7 && day <= 30) {
            price = price * 0.9f;
        }
        else if (day>30&&day<=150){
            price=price*0.8f;

        }
        else if (day>150){
            price=price*0.7f;
        }
        else price=day*price;
        return price;
    }
}

定义子类客车

package carRental;

public class Bus extends Car {
    private int setnumber;
    public Bus(){

    }

    public void setSetnumber(int setnumber) {
        this.setnumber = setnumber;
    }

    public int getSetnumber() {
        return setnumber;
    }

    public Bus(String breed, String numberplace, int rent, int setnumber){
        super(breed,numberplace,rent);
        this.setnumber=setnumber;
    }
    public  float countrent (int day){
        float price = this.getRent();
        if (day >= 3 && day < 7) {
            price = price * 0.9f;
        }
        else if (day>=7&&day<=30){
            price=price*0.8f;

        }
        else if (day>30&&day<150){
            price=price*0.7f;
        }
        else if (day>=150){
            price=price*0.6f;
        }
        else price=day*price;
        return price;
    }
}

定义汽车业务类

package carRental;

public class Carbusiness {
Car car[]=new Car[8];
public void init(){
    car[0]=new Motorcar("宝马","京NY28588",800,"x6");
    car[1]=new Motorcar("宝马","京CNY3284",600,"550i");
    car[2]=new Motorcar("别克","京NT37465",300,"林荫大道");
    car[3]=new Motorcar("别克","京NT96968",600,"GL8");

    car[4]=new Bus("金杯","京6566754",800,16);
    car[5]=new Bus("金龙","京8696997",800,16);
    car[6]=new Bus("金杯","京9696996",1500,34);
    car[7]=new Bus("金龙","京8696998",1500,34);

}
public Car rentservice(String breed,String moder,int setnumber){
    Car car1=null;
    for (Car car2 :car){
        if (car2 instanceof Motorcar){
            Motorcar motorcar=(Motorcar)car2;
            if (motorcar.getBreed().equals(breed)&&motorcar.getModer().equals(moder)){
                car1=car2;
                break;
            }

        }
        else if (car2 instanceof Bus){
            Bus bus=(Bus)car2;
            if (bus.getBreed().equals(breed)&&bus.getSetnumber()==setnumber){
                car1= bus;
                break;
            }
        }

    }
                     return car1;
    }

}

控制台界面

package carRental;

import java.util.Scanner;

public class Manage {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("********欢迎光临XX汽车租赁公司********");
        System.out.println("请输入想租车的类型:1.小轿车 2.客车");
int a=scanner.nextInt();
String moder="";
int setnumber=0;
String breed="";
switch (a){
    case 1:

        System.out.println("请输入汽车品牌1.宝马, 2.别克");
        breed=(scanner.nextInt()==1)?"宝马":"别克";
        if (breed.equals("宝马")){
            System.out.println("请输入汽车型号1.x6  2.550i");
            moder=(scanner.nextInt()==1)?"x6":"550i";
        }
        else {
            System.out.println("请输入汽车型号1.林荫大道  2.GL8");
            moder=(scanner.nextInt()==1)?"林荫大道":"GL8";
        }
break;
    case 2:
        System.out.println("请输入客车品牌1.金杯, 2.金龙");
        breed=(scanner.nextInt()==1)?"金杯":"金龙";

            System.out.println("请输入客车座位1.16  2.34");
            setnumber=(scanner.nextInt()==1)?16:24;

            break;

}
System.out.println("请输入想租赁的天数:");
int day=scanner.nextInt();
Carbusiness carbusiness=new Carbusiness();
carbusiness.init();
Car car2= carbusiness.rentservice(breed,moder,setnumber);
if (car2 instanceof Motorcar){
    Motorcar motorcar=(Motorcar) car2;
   float price= motorcar.countrent(day);
    System.out.println("给您分配的车辆是"+car2.getBreed()+((Motorcar) car2).getModer()+"车牌是"+car2.getNumberplace()+"价格是"+price);
}
else if (car2 instanceof Bus){
    Bus bus=(Bus)car2;
    float price=bus.countrent(day);
    System.out.println("给您分配的车辆是"+car2.getBreed()+((Bus) car2).getSetnumber()+"车牌是"+car2.getNumberplace()+"价格是"+price);
}

    }
}

遇到的问题

一,

在 Java 中,0.9F 是一个浮点数(Floating Point Number)的文本表示,其中 Ff 表示该数字是一个 float 类型的常量。在 Java 中,浮点数有两种基本类型:

  1. float:这是单精度浮点数,它占用 32 位内存。

  2. double:这是双精度浮点数,它占用 64 位内存。

    默认情况下,当你在 Java 中写一个浮点数常量(如 0.9)时,编译器会假设它是 double 类型的。如果你想明确地指定一个 float 类型的常量,你需要在数字后面加上 Ff。因此,0.9F 是一个 float 类型的常量,它的值是 0.9。

二,

在 Java 中,增强型for循环(Enhanced for Loop)也被称为“for-each”循环,它是 Java 5 引入的一种新的循环结构,用于简化数组和集合的遍历。增强型for循环的语法如下:

java

复制

for (声明语句 : 表达式) {
    // 循环体
}

这里的“声明语句”是一个变量声明,它的类型必须与“表达式”所产生的一系列元素类型相匹配。表达式是产生一系列元素的表达式,比如数组或实现了 Iterable 接口的集合。

增强型for循环的例子:

int[] numbers = {1, 2, 3, 4, 5};
for (int number : numbers) {
    System.out.println(number);
}

在这个例子中,增强型for循环遍历了整数数组 numbers,在每次迭代中,变量 number 依次被赋值为数组中的下一个元素,直到数组遍历完成。

增强型for循环也可以用于集合:

三,

只有调用方法时,方法内的数据才会载入

四,三目运算符

setnumber=(scanner.nextInt()==1)?16:24;

。表达式是产生一系列元素的表达式,比如数组或实现了 Iterable 接口的集合。

增强型for循环的例子:

int[] numbers = {1, 2, 3, 4, 5};
for (int number : numbers) {
    System.out.println(number);
}

在这个例子中,增强型for循环遍历了整数数组 numbers,在每次迭代中,变量 number 依次被赋值为数组中的下一个元素,直到数组遍历完成。

增强型for循环也可以用于集合:

三,

只有调用方法时,方法内的数据才会载入

四,三目运算符

setnumber=(scanner.nextInt()==1)?16:24;

当输入为1时setnumber=16,不是一时setnumber=24;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

whc15059539669

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值