栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java入门第二季实战——答答租车系统

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java入门第二季实战——答答租车系统

  • CargoCapacity.java

public interface CargoCapacity {
    // 获取载货量
    float getWeight();
}
  • MannedCapacity.java

public interface MannedCapacity {
    // 获取载人数
    int getNumber();
}
  • Car.java

public class Car { //定义父类
    private int id; //编号
    private String name; //名字
    private float price; //价格

    //定义构造方法
    public Car(int id, String name, float price) {
 this.id = id;
 this.name = name;
 this.price = price;
    }

    public int getId() {
 return id;
    }

    public String getName() {
 return name;
    }

    public float getPrice() {
 return price;
    }
}
  • CargoCar.java

public class CargoCar extends Car implements CargoCapacity {
    private float weight; // 载货量

    public CargoCar(int id, String name, float price, float weight) {
 super(id, name, price);
 this.weight = weight;
    }

    @Override
    public float getWeight() {
 return this.weight;
    }

    @Override
    public String toString() {
 return this.getId() + "t" + this.getName() + "t " + this.getPrice() + "元/天t载货:" + getWeight() + "吨";
    }
}
  • MannedCar.java

public class MannedCar extends Car implements MannedCapacity {
    private int number; // 载人数

    public MannedCar(int id, String name, float price, int number) {
 super(id, name, price);
 this.number = number;
    }

    @Override
    public int getNumber() {
 return this.number;
    }

    @Override
    public String toString() {
 return this.getId() + "t" + this.getName() + "t " + this.getPrice() + "元/天t载人:" + this.getNumber() + "人";
    }
}

  • MannedCargoCar.java

public class MannedCargoCar extends Car implements MannedCapacity, CargoCapacity {

    private int number; // 裁人数
    private float weight; // 载货数

    public MannedCargoCar(int id, String name, float price, int number, float weight) {
 super(id, name, price);
 this.number = number;
 this.weight = weight;
    }

    @Override
    public int getNumber() {
 return this.number;
    }

    @Override
    public float getWeight() {
 return this.weight;
    }

    @Override
    public String toString() {
 return this.getId() + "t" + this.getName() + "t " + this.getPrice() + "元/天t载人:" + getNumber() + "人t载货:" + getWeight() + "吨";
    }

}
  • RentalItem.java

public class RentalItem {
    private Car car; // 租赁的汽车
    private Integer days; // 租赁天数
    private Integer quantity; // 租赁数量

    public RentalItem(Car car, Integer days, Integer quantity) {
 this.car = car;
 this.days = days;
 this.quantity = quantity;
    }

    public float getRent() {
 return this.car.getPrice() * this.days * this.quantity;
    }

    public int getNumber() {
 if (isMannedCar()) {
     return ((MannedCapacity) car).getNumber();
 }
 return 0;
    }

    public float getWeight() {
 if (isCargoCar()) {
     return ((CargoCapacity) car).getWeight();
 }
 return 0;
    }

    public boolean isMannedCar() {
 return car instanceof MannedCapacity;
    }

    public boolean isCargoCar() {
 return car instanceof CargoCapacity;
    }

    public String getName() {
 return car.getName();
    }
}
  • CarManager.java
import java.util.ArrayList;
import java.util.List;


public class CarManager {

    private List cars = new ArrayList<>();

    public CarManager() {
 init();
    }

    //初始化Car集合
    private void init() {
 add(new MannedCar(getCarId(), "奥迪A4", 500, 4));
 add(new MannedCar(getCarId(), "马自达6", 400, 4));
 add(new MannedCargoCar(getCarId(), "皮卡雪6", 450, 4, 2));
 add(new MannedCar(getCarId(), "金龙", 800, 20));
 add(new CargoCar(getCarId(), "松花江", 400, 4));
 add(new CargoCar(getCarId(), "依维柯", 1000, 20));
    }

    public void add(Car car) {
 cars.add(car);
    }

    //菜单显示
    public void showMenu() {
 System.out.println("========可租车的类型及其价目表========");
 System.out.println("序号t" + "汽车名称   " + "租金tt  " + "容量");
 cars.forEach(System.out::println);
    }

    public Car get(int index) {
 return cars.get(index - 1);
    }

    public boolean hasIndex(Integer carId) {
 return carId > 0 && carId <= cars.size();
    }

    private int getCarId() {
 return cars.size() + 1;
    }
}
  • RentalBill.java
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;


public class RentalBill {

    private Map itemMap = new HashMap<>();

    public void add(RentalItem item) {
 // 如果重复租赁相同的车辆,则叠加租赁天数和租赁数量
 if (itemMap.containsKey(item.getId())) {
     RentalItem existItem = itemMap.get(item.getId());
     existItem.setDays(existItem.getDays() + item.getDays());
     existItem.setQuantity(existItem.getQuantity() + item.getQuantity());
 } else {
     itemMap.put(item.getId(), item);
 }
    }

    public void showBill() {
 System.out.println("=============您的账单=============");
 System.out.println("***可载人的车有:" + "nt" + mannedCarNames() + " 共载人:" + totalNumber() + "人");
 System.out.println("***可载货的车有:" + "nt" + cargoCarNames() + " 共载货:" + totalWeight() + "吨");
 System.out.println("***租车总价格:" + totalRent() + "元");
    }

    private List mannedCarNames() {
 return getCarNames(RentalItem::isMannedCar);
    }

    private List cargoCarNames() {
 return getCarNames(RentalItem::isCargoCar);
    }

    private List getCarNames(Function condition) {
 return itemMap.values().stream().filter(item -> condition.apply(item)).map(RentalItem::getName).collect(Collectors.toList());
    }

    private Integer totalNumber() {
 return itemMap.values().stream().filter(RentalItem::isMannedCar).map(RentalItem::getNumber).reduce(Integer::sum).get();
    }

    private Float totalWeight() {
 return itemMap.values().stream().filter(RentalItem::isCargoCar).map(RentalItem::getWeight).reduce(Float::sum).get();
    }

    private Float totalRent() {
 return itemMap.values().stream().map(RentalItem::getRent).reduce(0f, (sum, rent) -> sum += rent);
    }

}
  • CarRentalSystem.java
import java.util.Scanner;
import java.util.function.Function;


public class CarRentalSystem {
    private Scanner scanner = new Scanner(System.in);
    private RentalBill rentalBill = new RentalBill();
    private CarManager carManager = new CarManager();

    public void launch() {
 System.out.println("欢迎使用答答租车系统:");

 if (goOn()) {
     showMenu();
     collectRentalItems();
     showBill();
 } else {
     System.out.println("谢谢使用!客官慢走!");
 }
    }

    
    private void showMenu() {
 carManager.showMenu();
    }

    
    private void showBill() {
 rentalBill.showBill();
    }

    
    private void collectRentalItems() {
 while (true) {
     // 获取车辆序号
     int carId = getInputCarId();
     Car car = carManager.get(carId);
     // 获取租赁数量
     int quantity = getInputQuantity(car.getName());
     // 获取租赁天数
     int days = getInputDays(car.getName());

     rentalBill.add(new RentalItem(car, days, quantity));

     System.out.print("是否选择继续租赁操作?(n:退出,并打印租赁清单;其他任意键继续):");
     String input = scanner.next();
     if ("N".equalsIgnoreCase(input.trim())) {
  break;
     }
 }
    }

    private boolean goOn() {
 int key = getInput("您是否要租车?(1是 0否):", input -> {
     if (input != 0 && input != 1) {
  System.out.println("请输入数字1或0!");
  return false;
     }
     return true;
 });
 return key == 1;
    }

    private int getInputDays(String name) {
 return getInput("请输入["+name+"]的租赁天数:", days -> {
     if (days < 1) {
  System.out.println("不合法的租赁天数,请重新输入!");
  return false;
     }
     return true;
 });
    }

    private int getInputQuantity(String name) {
 return getInput("请输入["+name+"]的租赁数量:", quantity -> {
     if (quantity < 1 ) {
  System.out.println("不合法的租赁数量,请重新输入!");
  return false;
     }
     return true;
 });
    }

    private int getInputCarId() {
 return getInput("请输入要租赁的车辆序号:", carId -> {
     if (!carManager.hasIndex(carId)) {
  System.out.println("不合法的车辆序号,请重新输入!");
  return false;
     }
     return true;
 });
    }

    
    private int getInput(String hint, Function function) {
 while (true) {
     System.out.print(hint);
     try {
  int input = scanner.nextInt();
  if (!function.apply(input)) {
      continue;
  }
  return input;
     } catch (Exception e) {
  System.out.println("输入不合法!请重新输入!");
  // 如果出现异常,则跳过本次输入的信息
  scanner = scanner.skip(".*");
     }
 }
    }
}
  • Test.java

public class Test {
    public static void main(String[] args) {
 new CarRentalSystem().launch();
    }
}
转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号