使用两个包加强封装性,并清除setter方法。
创建一个包用来存放租车系统内部处理的代码。
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人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦