package com.ppcc.carData;
/**
* 车库类
* @author ppcc
*
*/
public class CarHold {
/**
* 存放所有车的车库
*/
private CarBase allCar[];
/**
* 获取车库中的车
* @return 车库
*/
public CarBase[] getAllCar() {
return allCar;
}
/**
*构造函数
*/
public CarHold() {
//给数组赋值
allCar=new CarBase[]{
new SaloonCar(1,"奥迪A4 ",500,4),
new SaloonCar(2,"马自达6",400,4),
new PickupCar(3,"皮卡雪6",450,4,2),
new SaloonCar(4,"金龙 ",800,20),
new WagonCar(5,"松花江 ",400,4),
new WagonCar(6,"依维柯 ",1000,20)
};
}
/**
* 显示车库所有的车
*/
public void showAllCar(){
//for循环遍历所有车
for(CarBase currCar : allCar){
//显示车的信息
currCar.showCarInfor();
}
}
}
package com.ppcc.carData;
/**
* 车的基本信息(父类)
* @author ppcc
*
*/
public abstract class CarBase {
/**
* 车的序号
*/
protected int carNum;
/**
* 车的名称
*/
protected String carName;
/**
* 车出租的单价
*/
protected int carRentMoney;
/**
* 获取车的序号
* @return 车的序号
*/
public int getCarNum() {
return carNum;
}
/**
* 车的名称
* @return 车的名称
*/
public String getCarName() {
return carName;
}
/**
* 车出租的单价
* @return 车出租的单价
*/
public int getCarRentMoney() {
return carRentMoney;
}
/**
* 构造函数
* @param carNum 车的序号
* @param carName 车的名称
* @param carRentMoney 车出租的单价
*/
public CarBase(int carNum, String carName, int carRentMoney) {
this.carNum = carNum;
this.carName = carName;
this.carRentMoney = carRentMoney;
}
/**
* 显示车的信息
*/
public abstract void showCarInfor();
}
package com.ppcc.carData;
/**
* 皮卡类
* @author ppcc
*
*/
public class PickupCar extends CarBase {
/**
* 车的载客量
*/
private int carCapacity;
/**
* 车的载货量
*/
private int carCarryCargo;
/**
* 获取车的载客量
* @return 车的载客量
*/
public int getCarCapacity() {
return carCapacity;
}
/**
* 获取车的载货量
* @return 车的载货量
*/
public int getCarCarryCargo() {
return carCarryCargo;
}
/**
* 构造函数
* @param carNum 车的序号
* @param carName 车的名称
* @param carRentMoney 车出租的单价
* @param carCapacity 车的载客量
* @param carCarryCargo 车的载货量
*/
public PickupCar(int carNum, String carName, int carRentMoney, int carCapacity, int carCarryCargo) {
super(carNum, carName, carRentMoney);
this.carCapacity=carCapacity;
this.carCarryCargo=carCarryCargo;
}
@Override
public void showCarInfor() {
//显示车的基本信息
System.out.println("序号:"+this.carNum+" 汽车名称:"+this.carName+" 租金:"+this.carRentMoney+"元/天"+" 载客量"+this.carCapacity+"人/车"+" 载货量"+this.carCarryCargo+"吨/车");
}
}
package com.ppcc.carData;
/**
* 客车类
* @author ppcc
*
*/
public class SaloonCar extends CarBase {
/**
* 车的载客量
*/
private int carCapacity;
/**
* 构造函数
* @param carNum 车的序号
* @param carName 车的名称
* @param carRentMoney 车出租的单价
* @param carCapacity 车的载客量
*/
public SaloonCar(int carNum, String carName, int carRentMoney, int carCapacity) {
super(carNum, carName, carRentMoney);
this.carCapacity=carCapacity;
}
@Override
public void showCarInfor() {
//显示车的基本信息
System.out.println("序号:"+this.carNum+" 汽车名称:"+this.carName+" 租金:"+this.carRentMoney+"元/天"+" 载客量"+this.carCapacity+"人/车");
}
}
package com.ppcc.carData;
/**
* 货车
* @author ppcc
*
*/
public class WagonCar extends CarBase {
/**
* 车的载货量
*/
private int carCarryCargo;
/**
* 构造函数
* @param carNum 车的序号
* @param carName 车的名称
* @param carRentMoney 车出租的单价
* @param carCarryCargo 车的载货量
*/
public WagonCar(int carNum, String carName, int carRentMoney, int carCarryCargo) {
super(carNum, carName, carRentMoney);
this.carCarryCargo=carCarryCargo;
}
@Override
public void showCarInfor() {
//显示车的基本信息
System.out.println("序号:"+this.carNum+" 汽车名称:"+this.carName+" 租金:"+this.carRentMoney+"元/天"+" 载货量"+this.carCarryCargo+"吨/车");
}
}
package com.ppcc.service;
import java.util.ArrayList;
import com.ppcc.carData.CarBase;
/**
* 账单类
* @author ppcc
*
*/
public class Bill {
/**
* 租车总数
*/
private int carNum;
/**
* 皮卡数目
*/
private int pickupNum;
/**
* 客车数目
*/
private int saloonNum;
/**
* 货车数目
*/
private int wagonNum;
/**
* 租车天数
*/
private int day;
/**
* 租车总花费
*/
private int money;
/**
* 构造函数
* @param carArr 用户租的所有车
* @param dayNum 用户租车的天数
*/
public Bill(ArrayList<CarBase> rentArr,int dayNum){
//首次初始化数目
this.pickupNum=0;
this.saloonNum=0;
this.wagonNum=0;
this.money=0;
//获取车的总数目
this.carNum=rentArr.size();
//获取租车的总天数
this.day=dayNum;
this.detailedBill(rentArr);
}
/**
* 获取各类车的数目/总租金
* @param carArr 用户租的所有车
*/
private void detailedBill(ArrayList<CarBase> rentArr){
for(CarBase currCar : rentArr){
this.money+=currCar.getCarRentMoney();
String str=(currCar.getClass()).toString();
if(str.equals("class com.ppcc.carData.SaloonCar"))
this.pickupNum++;
else if(str.equals("class com.ppcc.carData.PickupCar"))
this.saloonNum++;
else
this.wagonNum++;
}
}
/**
* 打印账单信息
*/
public void showBill(){
System.out.println("\n***********************你的账单**************************");
//输出租车总数目和总天数
System.out.println("租车的总数:"+ this.carNum+ "\t租车的天数:"+this.day);
//输出皮卡的数目
if(pickupNum!=0)
System.out.println("既能载客又能载货的车有:"+ this.pickupNum);
//输出客车的数目
if(saloonNum!=0)
System.out.println("只能载客的车有:"+ this.saloonNum);
//输出货车的数目
if(wagonNum!=0)
System.out.println("只能载货的车有:"+ this.wagonNum);
//输出租车总价格
System.out.println("总价格:"+ this.money);
}
}
package com.ppcc.service;
import java.util.ArrayList;
import java.util.Scanner;
import com.ppcc.carData.CarBase;
import com.ppcc.carData.CarHold;
/**
* 租车系统类
* @author ppcc
*
*/
public class Service {
/**
* 车库
*/
CarHold carsHold;
/**
* 接收输入
*/
Scanner sc=new Scanner(System.in);
public Service() {
this.carsHold = new CarHold();
}
/**
* 主界面
*/
public void mainMenu() {
//提示语句
System.out.println("欢迎使用嗒嗒租车系统!");
//输入是否正确的标志
boolean flag=false;
//用户选择界面
do{
System.out.print("是否租车(Y.是/ N.否):");
String sel=sc.next();
//进入租车系统
if(sel.equalsIgnoreCase("y")){
System.out.println("===============================你可以租以下车===============================\n");
carsHold=new CarHold();
carsHold.showAllCar();
flag=false;
}
//退出租车系统
else if(sel.equalsIgnoreCase("n")){
System.out.println("正在为你退出答答租车...");
System.exit(0);
flag=false;
}
else{
System.out.println("请输入有效操作!");
System.out.println("*****************************************");
flag=true;
}
}while(flag);
}
/**
* 租车数目/具体车型
* @return 租的所有车
*/
public ArrayList<CarBase> rentCar(){
System.out.println("\n============================================================================");
int num=0,i=0,count=0;
ArrayList<CarBase> rentArr=new ArrayList<CarBase>();
System.out.print("请输入你租车的总数目:");
count=sc.nextInt();
if(count<0||count>20){
System.out.println("你出租的车数量应在在0-20之间,请重新输入");
return rentCar();
}
System.out.println("");
for(;i<count;){
System.out.print("请输入第"+(i+1)+"辆车的序号:");
num=sc.nextInt();
if(num>0&&num<7){
CarBase[] allCars=carsHold.getAllCar();
rentArr.add(allCars[num-1]);
i++;
}else{
System.out.println("输入无效序号,重新输入!");
}
}
return rentArr;
}
/**
* 输入租车天数
* @return 租车天数
*/
public int rentDay(){
System.out.print("\n请输入你租车的总天数:");
int day=sc.nextInt();
if(day>0)
return day;
else{
System.out.println("天数应大于0");
return rentDay();
}
}
}
package com.ppcc.main;
import com.ppcc.service.Bill;
import com.ppcc.service.Service;
/**
* 测试类
* @author ppcc
*
*/
public class Test {
public static void main(String[] args) {
Service user=new Service();
user.mainMenu();
(new Bill(user.rentCar(),user.rentDay())).showBill();
}
}