17、Java——汽车租赁系统(对象+数组)

简介: 17、Java——汽车租赁系统(对象+数组)

项目需求


车型

具体信息

日租金

折扣

轿车

宝马X6(京NY28588)

800

days>7天9折

days>30天8折

days>150天7折

宝马550i(京CNY3284)

600

别克林荫大道(京NT37465)

300

别克GL8(京NT96968)

600

客车

金杯,16座(京6566754)

800

days>=3天9折

days>=7天8折

days>=30天7折

days>=150天6折

金龙,16座(京8696997)

金杯,34座(京9696996)

1500

金龙,34座(京8696998)


设计步骤


1.gif


类的属性和方法

属性:


汽车类:车牌号、品牌、日租金

客车类:车牌号、品牌、日租金、座位数

轿车类:车牌号、品牌、日租金、型号

汽车业务类:忽略

汽车租赁管理类:忽略方法:


1.gif


代码展示


1、汽车类(父类)


package cn.bdqn.demo06;
public abstract class Automobile {
  // 定义汽车类的属性(车牌号、品牌、日租金)
  private String numberPlate;
  private String brand;
  private double dayRent;
  public Automobile() {
  super();
  }
  public Automobile(String numberPlate, String brand, double dayRent) {
  super();
  this.numberPlate = numberPlate;
  this.brand = brand;
  this.dayRent = dayRent;
  }
  public String getNumberPlate() {
  return numberPlate;
  }
  public void setNumberPlate(String numberPlate) {
  this.numberPlate = numberPlate;
  }
  public String getBrand() {
  return brand;
  }
  public void setBrand(String brand) {
  this.brand = brand;
  }
  public double getDayRent() {
  return dayRent;
  }
  public void setDayRent(double dayRent) {
  this.dayRent = dayRent;
  }
  //定义计算租金的抽象方法
  public abstract double calRent(int days);
}


2、轿车类(子类)


package cn.bdqn.demo06;
public class Car extends Automobile {
  // 定义特有属性
  private String type;
  public Car() {
  super();
  }
  public Car(String numberPlate, String brand, double dayRent, String type) {
  super(numberPlate, brand, dayRent);
  this.type = type;
  }
  public String getType() {
  return type;
  }
  public void setType(String type) {
  this.type = type;
  }
  @Override
  public double calRent(int days) {
  double discount=this.getDayRent()*days;
  if(days>150){
    discount*=0.7;
  }else if(days>30){
    discount*=0.8;
  }else if(days>7){
    discount*=0.9;
  }
  return discount;
  }
}


3、客车类(子类)


package cn.bdqn.demo06;
public class Bus extends Automobile {
  private int seat;
  public Bus() {
  super();
  }
  public Bus(String numberPlate, String brand, double dayRent, int seat) {
  super(numberPlate, brand, dayRent);
  this.seat = seat;
  }
  public int getSeat() {
  return seat;
  }
  public void setSeat(int seat) {
  this.seat = seat;
  }
  @Override
  public double calRent(int days) {
  double discount=this.getDayRent()*days;
  if(days>150){
    discount*=0.6;
  }else if(days>30){
    discount*=0.7;
  }else if(days>7){
    discount*=0.8;
  }else if(days>3){
    discount*=0.9;
  }
  return discount;
  }
}



4、汽车业务类


package cn.bdqn.demo06;
//汽车业务类
public class AutomobileMethod {
  //汽车类型的数组
  Automobile[] automobiles=new Automobile[8];
  //初始化数据
  public void initData(){
  automobiles[0]=new Car("京NY28588", "宝马", 800, "X6");
  automobiles[1]=new Car("京CNY3284", "宝马", 600, "550i");
  automobiles[2]=new Car("京NT37465", "别克", 300, "林荫大道");
  automobiles[3]=new Car("京NT96968", "别克", 600, "GL8");
  automobiles[4]=new Bus("京6566754", "金杯", 800, 16);
  automobiles[5]=new Bus("京8696997", "金龙", 800, 16);
  automobiles[6]=new Bus("京9696996", "金杯", 1500, 34);
  automobiles[7]=new Bus("京8696998", "金龙", 1500, 34);
  }
  //租车
  public Automobile autoMethod(String brand,String type,int seat){
  Automobile auto=null;
  for (Automobile autobile : automobiles) {
    if(autobile instanceof Car){
    Car car=(Car)autobile;
    if(car.getBrand().equals(brand)&&car.getType().equals(type)){
      auto=car;
      break;
    }
    }else if(autobile instanceof Bus){
    Bus bus=(Bus)autobile;
    if(bus.getBrand().equals(brand)&&bus.getSeat()==seat){
      auto=bus;
      break;
    }
    }
  }
  return auto;
  }
}

5、租车测试类


package cn.bdqn.demo06;
import java.util.Scanner;
//测试类
public class AutomobileLease {
  public static void main(String[] args) {
  Scanner sc=new Scanner(System.in);
  String brand=null,type=null;
  int seat=0;
  AutomobileMethod autoM=new AutomobileMethod();
  //获取所有车辆信息
  autoM.initData();
  System.out.println("********欢迎光临租赁公司********\n");
  System.out.println("请选择汽车类型:1、轿车\t2、客车");
  int autoType=sc.nextInt();
  if(autoType==1){
    System.out.println("请选择轿车品牌:1、宝马\t2、别克");
    if(sc.nextInt()==1){
    brand="宝马";
    System.out.println("请选择轿车型号:1、X6\t2、550i");
    type=(sc.nextInt()==1)?"X6":"550i";
    }else if(sc.nextInt()==2){
    brand="别克";
    System.out.println("请选择轿车型号:1、林荫大道\t2、GL8");
    type=(sc.nextInt()==1)?"林荫大道":"GL8";
    }
  }else if(autoType==2){
    System.out.println("请选择客车品牌:1、金杯\t2、金龙");
    brand=(sc.nextInt()==1)?"金杯":"金龙";
    System.out.println("请选择需要的座位数:1、16座\t2、34座");
    type=(sc.nextInt()==1)?"16":"34";
  }
  Automobile auto= autoM.autoMethod(brand, type, seat);
  System.out.println("请选择租赁天数:");
  int days=sc.nextInt();
  double money=auto.calRent(days);
  System.out.println("租车成功!请按照"+auto.getNumberPlate()+"车牌号取车!租金为:"+money);
  }
}


效果展示




  1.gif


1.gif

相关文章
|
15天前
|
安全 Java 编译器
Java对象一定分配在堆上吗?
本文探讨了Java对象的内存分配问题,重点介绍了JVM的逃逸分析技术及其优化策略。逃逸分析能判断对象是否会在作用域外被访问,从而决定对象是否需要分配到堆上。文章详细讲解了栈上分配、标量替换和同步消除三种优化策略,并通过示例代码说明了这些技术的应用场景。
Java对象一定分配在堆上吗?
|
19天前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
39 17
|
10天前
|
运维 自然语言处理 供应链
Java云HIS医院管理系统源码 病案管理、医保业务、门诊、住院、电子病历编辑器
通过门诊的申请,或者直接住院登记,通过”护士工作站“分配患者,完成后,进入医生患者列表,医生对应开具”长期医嘱“和”临时医嘱“,并在电子病历中,记录病情。病人出院时,停止长期医嘱,开具出院医嘱。进入出院审核,审核医嘱与住院通过后,病人结清缴费,完成出院。
40 3
|
18天前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
14天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
16 1
|
16天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
21天前
|
存储 缓存 算法
Java 数组
【10月更文挑战第19天】Java 数组是一种非常实用的数据结构,它为我们提供了一种简单而有效的方式来存储和管理数据。通过合理地使用数组,我们能够提高程序的运行效率和代码的可读性。更加深入地了解和掌握 Java 数组的特性和应用,为我们的编程之旅增添更多的精彩。
31 4
|
19天前
|
移动开发 前端开发 JavaScript
java家政系统成品源码的关键特点和技术应用
家政系统成品源码是已开发完成的家政服务管理软件,支持用户注册、登录、管理个人资料,家政人员信息管理,服务项目分类,订单与预约管理,支付集成,评价与反馈,地图定位等功能。适用于各种规模的家政服务公司,采用uniapp、SpringBoot、MySQL等技术栈,确保高效管理和优质用户体验。
|
21天前
|
存储 缓存 算法
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
19 2
|
21天前
|
XML JSON 监控
告别简陋:Java日志系统的最佳实践
【10月更文挑战第19天】 在Java开发中,`System.out.println()` 是最基本的输出方法,但它在实际项目中往往被认为是不专业和不足够的。本文将探讨为什么在现代Java应用中应该避免使用 `System.out.println()`,并介绍几种更先进的日志解决方案。
44 1