抽象类 Car类
package com.dada.carrental.carclass;
public abstract class Car {
public int num;
public String name;
public float dayRent;
abstract public void print();
public Car(int num, String name, float dayRent) {
super();
this.num = num;
this.name = name;
this.dayRent = dayRent;
}
}
载货接口
package com.dada.carrental.carclass;
public interface ICarryCargo {
public abstract float carryCargo();
}
载客接口
package com.dada.carrental.carclass;
public interface ICarryPeople {
public abstract int carryPeople();
}
客车类
package com.dada.carrental.carclass;
public class PassengerCar extends Car implements ICarryPeople {
public int peopleLoad = 0;
public PassengerCar(int num, String name, float dayRent,int people) {
super(num, name, dayRent);
this.peopleLoad = people;
}
@Override
public int carryPeople() {
return this.peopleLoad;
}
@Override
public void print() {
System.out.println(num + ".\t" + name + "\t" + (int)dayRent +"元/天\t载人:" + peopleLoad + "人");
}
}
货车类
package com.dada.carrental.carclass;
public class Truck extends Car implements ICarryCargo {
public float cargoLoad = 0.0f;
public Truck(int num, String name, float dayRent,float cargo) {
super(num, name, dayRent);
this.cargoLoad = cargo;
}
@Override
public float carryCargo() {
return this.cargoLoad;
}
@Override
public void print() {
System.out.println(num + ".\t" + name + "\t" + (int)dayRent +"元/天\t载货:" + (int)cargoLoad + "吨");
}
}
皮卡类
package com.dada.carrental.carclass;
public class Pickup extends Car implements ICarryCargo, ICarryPeople {
public int peopleLoad = 0;
public float cargoLoad = 0.0f;
public Pickup(int num, String name, float dayRent,int people,float cargo) {
super(num, name, dayRent);
this.peopleLoad = people;
this.cargoLoad = cargo;
}
@Override
public int carryPeople() {
return this.peopleLoad;
}
@Override
public float carryCargo() {
return this.cargoLoad;
}
@Override
public void print() {
System.out.println(num + ".\t" + name + "\t" + (int)dayRent +"元/天\t载人:" + peopleLoad + "人\t载货:" + (int)cargoLoad + "吨");
}
}
在一个新的类里创建所有车的实例
package com.dada.carrental.cardata;
import com.dada.carrental.carclass.*;
public class CarData {
public Car car1 = new PassengerCar(1, "奥迪A4", 500, 4);
public Car car2 = new PassengerCar(2, "马自达6", 400, 4);
public Car car3 = new Pickup(3, "皮卡雪6", 450, 4, 2.0f);
public Car car4 = new PassengerCar(4, "金龙", 800, 20);
public Car car5 = new Truck(5, "松花江", 400, 4.0f);
public Car car6 = new Truck(6, "依维柯", 1000, 20);
}
系统类
package com.dada.carrental;
import java.util.Scanner;
import com.dada.carrental.carclass.*;
import com.dada.carrental.cardata.*;
class MainSystem {
static Scanner scanner = new Scanner(System.in);
static CarData data = new CarData();
static Car[] allCars = {data.car1,data.car2,data.car3,data.car4,data.car5,data.car6};
public static void main(String[] args) {
System.out.println("欢迎使用答答租车系统");
System.out.println("您是否要租车:1是 0否");
start();
}
//入口方法
static void start() {
int userPrint = scanner.nextInt();
//检测输入的是否是0或1,若不是,报错并重新输入
while (!(userPrint == 1||userPrint ==0)) {
System.out.println("输入错误,请重新输入");
userPrint = scanner.nextInt();
}
//检测用户输入的是1还是0,分支进行
switch (userPrint) {
case 1:
System.out.println("您可租车的类型及其价目表:");
System.out.println("序号\t汽车名称\t租金\t容量");
printData(allCars);
createNotice();
break;
case 0:
System.out.println("退出程序");
default:
break;
}
}
static void printData(Car[] cars) {
for (Car car : cars) {
car.print();
}
}
static void createNotice() {
int selectDays;
System.out.println("请输入您要租车的数量:");
int num = scanner.nextInt();
Car[] selectedCars = new Car[num];
for (int i = 0; i < num; i++) {
System.out.println("请输入第" + (i+1) + "辆车的序号:");
selectedCars[i] = allCars[scanner.nextInt()-1];
}
System.out.println("请输入租车天数:");
selectDays = scanner.nextInt();
Notice end = new Notice(selectedCars);
end.printNotice(selectDays, selectedCars);
}
}
详单类
package com.dada.carrental;
import com.dada.carrental.carclass.*;
class Notice {
int totalPeopleLoad;
float totalCargoLoad;
float dayTotalRent;
Notice(Car[] cars) {
for (Car car : cars) {
if (car instanceof ICarryPeople) {
totalPeopleLoad += ((ICarryPeople) car).carryPeople();
}
if (car instanceof ICarryCargo) {
totalCargoLoad += ((ICarryCargo) car).carryCargo();
}
dayTotalRent += car.dayRent;
}
}
public void printNotice(int days,Car[] cars) {
System.out.println("您的账单:");
System.out.println("***可载人的车有:");
for (Car car : cars) {
if (car instanceof ICarryPeople) {
System.out.print(car.name + "\t");
}
}
System.out.println("共载人:" + totalPeopleLoad + "人");
System.out.println("***载货的车有:");
for (Car car : cars) {
if (car instanceof ICarryCargo) {
System.out.print(car.name + "\t");
}
}
System.out.println("共载货:" + totalCargoLoad + "吨");
float totalRent = dayTotalRent * days;
System.out.println("***租车总价格" + totalRent +"元");
}
}