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

Java第一个项目——达达租车系统v2

标签:
Java

使用两个包加强封装性,并清除setter方法。
创建一个包用来存放租车系统内部处理的代码。

父类 Vehicle
package com.dada;

public class Vehicle {
    protected String name;//车辆名称
    protected int price;//单天租车价格
    protected int passengers;//载客数
    protected int goods;//载货量

    public String getName() {
        return name;
    }

    public double getPrice() {
        return price;
    }

    public int getPassengers() {
        return passengers;
    }

    public int getGoods() {
        return goods;
    }

    //显示车辆信息
    public void showInfo() {
        System.out.println("显示车辆信息");
    }
}
载人车辆 PassengerVehicle
package com.dada;

//客运汽车
public class PassengerVehicle extends Vehicle {

    public PassengerVehicle(String name, int passengers, int price) {
        // TODO Auto-generated constructor stub
        this.name = name;
        this.passengers = passengers;
        this.price = price;
        this.goods = 0;
    }

    @Override
    //显示车辆信息
    public void showInfo() {
        System.out.println(name + "\t" + price + "元/天\t载人:" + passengers + "人");
    }

}
载货车辆 GoodsVehicle
package com.dada;

//货运汽车
public class GoodsVehicle extends Vehicle {

    public GoodsVehicle(String name, int goods, int price) {
        this.name = name;
        this.goods = goods;
        this.price = price;
        this.passengers = 0;
    }

    @Override
    //显示车辆信息
    public void showInfo() {
        System.out.println(name + "\t" + price + "元/天\t载货:" + goods + "吨");
    }
}
皮卡 PickupTruck
package com.dada;

//皮卡车,客货两用
public class PickupTruck extends Vehicle {

    public PickupTruck(String name, int passengers, int goods, int price) {
        super();
        this.name = name;
        this.passengers = passengers;
        this.goods = goods;
        this.price = price;
    }

    @Override
    //显示车辆信息
    public void showInfo() {
        System.out.println(name + "\t" + price + "元/天\t载人:" + passengers + "人 载货:" + goods + "吨");
    }
}
租车处理 HireVehicle
package com.dada;

import java.util.Scanner;

public class HireVehicle {
    private static Vehicle v[];// 保存所有车辆信息
    private static int vehicleNums; // 记录客户要租的车辆数
    private static int days; // 记录租车天数
    private static int hiredVehicleNo[]; // 记录客户选择的车辆编号,数组长度即所租车辆数

    // 初始化所有车辆信息
    public static void initialVechicles(){
        // 初始化车辆信息
        Vehicle localV[] = { 
                new PassengerVehicle("奥迪A4", 4, 500), 
                new PassengerVehicle("马自达6", 4, 400),
                new PickupTruck("皮卡雪6", 4, 2, 450), 
                new PassengerVehicle("金龙", 20, 800),
                new GoodsVehicle("松花江", 4, 400), 
                new GoodsVehicle("依维柯", 20, 1000) 
        };
        v = localV;
    }

    // 显示所有车辆信息
    public static void listVehicles(Vehicle v[]) {
        if (v != null) {
            System.out.println("您可租车的类型及其价目表:");
            System.out.println("序号\t汽车名称\t租金\t容量");
            for (int i = 0; i < v.length; i++) {
                System.out.print((i + 1) + ".\t");
                v[i].showInfo();
            }
        }
    }

    // 填写租车订单
    public static void order() {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入您要租汽车的数量:");
        vehicleNums = input.nextInt();// 记录客户要租的车辆数
        int localHiredVehicleNo[] = new int[vehicleNums];// 记录客户选择的车辆编号
        for (int i = 0; i < vehicleNums; i++) {
            System.out.println("请输入第" + (i + 1) + "辆车的序号:"); // 使用i+1以符合用户的使用习惯,从1开始数
            localHiredVehicleNo[i] = input.nextInt();
        }
        hiredVehicleNo = localHiredVehicleNo; // 引用传递给成员变量,以便供其它方法使用
        System.out.println("请输入租车天数:");
        days = input.nextInt();// 记录租车天数
        input.close();
    }

    // 输出账单
    public static void showOrder() {
        int tPassenger = 0;// 总载客人数
        float tGoods = 0;// 总载重量
        double tPrice = 0;// 1天的租车总价

        //租车数大于0,才输出账单,否则说明没有租车,输出提示没有订单信息。
        if (hiredVehicleNo.length > 0) {
            System.out.println("您的账单:");
            System.out.println("***可载人的车有:");
            //先遍历所有租用的车辆,寻找能载客的车辆信息,输出车辆名称,并统计出总载客人数和单日租金总额
            for (int i = 0; i < hiredVehicleNo.length; i++) {
                int j = hiredVehicleNo[i] - 1;//读取所租车辆编号
                if ((v[j] instanceof PassengerVehicle) || (v[j] instanceof PickupTruck)) {  //如果是载客汽车或皮卡车
                    tPassenger += v[j].getPassengers();//累加总载客人数
                    System.out.print("  " + v[j].getName());//输出车辆名称
                    tPrice += v[j].getPrice();//累加单日租金
                }
            }
            System.out.println("   共载人:" + tPassenger + "人");//输出总载客人数

            System.out.println("***载货的车有:");
            //再次遍历所有租用的车辆,寻找能载货的车辆信息,输出车辆名称,并统计出总载货量和单日租金总额
            for (int i = 0; i < hiredVehicleNo.length; i++) {
                int j = hiredVehicleNo[i] - 1;//读取所租车辆编号
                if (v[j] instanceof GoodsVehicle) { //如果是载货车辆
                    tGoods += v[j].getGoods();//累加总载货量
                    System.out.print("  " + v[j].getName());//累加总载货量
                    tPrice += v[j].getPrice();//累加单日租金
                } else if (v[j] instanceof PickupTruck) {//如果是皮卡车
                    tGoods += v[j].getGoods();//累加总载货量
                    System.out.print("  " + v[j].getName());//累加总载货量。因为之前统计载客车辆时已累加皮卡车的租金,所以此次不应再累加租金。
                }
            }
            System.out.println("   共载货:" + tGoods + "吨");//输出总载货量
            System.out.println("***租车总价格:" + (tPrice * days) + "元");//输出租金总额(单日租金总额*天数)
        } else {
            System.out.println("没有订单信息。");
        }

    }

    // 租车
    public static void hire(){
        // 显示欢迎信息,并询问是否租车
        System.out.println("欢迎使用达达租车系统:\n您是否要租车:1是 0否");
        int flagHire = 0;// 是否要租车标记,1租车,0不租
        Scanner input = new Scanner(System.in);
        flagHire = input.nextInt();

        if (flagHire == 0) {
            System.out.println("欢迎下次光临"); // 不租
        } else { // 租车
            // 显示所有车辆信息
            HireVehicle.listVehicles(v);
            // 下订单
            HireVehicle.order();
            // 显示账单
            HireVehicle.showOrder();
        }

        input.close();
    }
}

创建另一个包用来放主程序,完全隐藏租车系统的内部代码。

主程序
package com.dada.hire;
import com.dada.*;

public class Hire {
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        //使用两个包就实现了内部处理过程(com.dada包)的完全封装,即com.dada.hire包仅用于启动租车系统,不能对系统进行修改。

        //初始化车辆信息
        HireVehicle.initialVechicles();

        //租车
        HireVehicle.hire();
    }

}
点击查看更多内容
2人点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消