4 changed files with 224 additions and 0 deletions
@ -0,0 +1,158 @@ |
|||
package com.rental; |
|||
|
|||
/** |
|||
* 车辆管理系统的Car类,封装车辆属性和业务行为 |
|||
*/ |
|||
import java.util.Objects; |
|||
import java.util.concurrent.atomic.AtomicInteger; |
|||
|
|||
public class Car { |
|||
// 私有属性
|
|||
private final String licensePlate; // 车牌号不可变,加final
|
|||
private String brand; |
|||
private String model; |
|||
private double dailyRent; |
|||
private boolean isRented; |
|||
|
|||
// 静态变量:统计车辆总数(线程安全)
|
|||
private static final AtomicInteger totalCars = new AtomicInteger(0); |
|||
|
|||
// 全参构造方法:车牌号、品牌、型号、日租金
|
|||
public Car(String licensePlate, String brand, String model, double dailyRent) { |
|||
if (licensePlate == null || licensePlate.trim().isEmpty()) { |
|||
throw new IllegalArgumentException("车牌号不能为空"); |
|||
} |
|||
if (brand == null || brand.trim().isEmpty()) { |
|||
throw new IllegalArgumentException("品牌不能为空"); |
|||
} |
|||
if (model == null || model.trim().isEmpty()) { |
|||
throw new IllegalArgumentException("型号不能为空"); |
|||
} |
|||
this.licensePlate = licensePlate.trim(); |
|||
this.brand = brand.trim(); |
|||
this.model = model.trim(); |
|||
this.dailyRent = validateDailyRent(dailyRent); |
|||
this.isRented = false; |
|||
totalCars.incrementAndGet(); |
|||
} |
|||
|
|||
// 三参构造方法:调用全参构造,日租金默认300
|
|||
public Car(String licensePlate, String brand, String model) { |
|||
this(licensePlate, brand, model, 300.0); // this()必须是构造方法第一行
|
|||
} |
|||
|
|||
// Getter:车牌号(仅get,无set)
|
|||
public String getLicensePlate() { |
|||
return licensePlate; |
|||
} |
|||
|
|||
// 品牌:get+set
|
|||
public String getBrand() { |
|||
return brand; |
|||
} |
|||
public void setBrand(String brand) { |
|||
this.brand = brand; |
|||
} |
|||
|
|||
// 型号:get+set
|
|||
public String getModel() { |
|||
return model; |
|||
} |
|||
public void setModel(String model) { |
|||
this.model = model; |
|||
} |
|||
|
|||
// 日租金:get+set(含合法性校验)
|
|||
public double getDailyRent() { |
|||
return dailyRent; |
|||
} |
|||
public void setDailyRent(double dailyRent) { |
|||
this.dailyRent = validateDailyRent(dailyRent); |
|||
} |
|||
|
|||
// 私有方法:验证日租金合法性
|
|||
private double validateDailyRent(double dailyRent) { |
|||
if (dailyRent > 0) { |
|||
return dailyRent; |
|||
} else { |
|||
System.out.println("日租金必须大于0,使用默认值300元/天"); |
|||
return 300.0; |
|||
} |
|||
} |
|||
|
|||
// 租出状态:仅查询(isXXX命名规范),无set
|
|||
public boolean isRented() { |
|||
return isRented; |
|||
} |
|||
|
|||
// 静态方法:获取车辆总数
|
|||
public static int getTotalCars() { |
|||
return totalCars.get(); |
|||
} |
|||
|
|||
// 业务方法:租车
|
|||
public boolean rentCar() { |
|||
if (isRented) { |
|||
System.out.println("车牌号【" + licensePlate + "】:车辆已租出,无法再次租用"); |
|||
return false; |
|||
} else { |
|||
isRented = true; |
|||
System.out.println("车牌号【" + licensePlate + "】:租车成功,车辆已租出"); |
|||
return true; |
|||
} |
|||
} |
|||
|
|||
// 业务方法:还车
|
|||
public boolean returnCar() { |
|||
if (!isRented) { |
|||
System.out.println("车牌号【" + licensePlate + "】:车辆未被租用,无需归还"); |
|||
return false; |
|||
} else { |
|||
isRented = false; |
|||
System.out.println("车牌号【" + licensePlate + "】:还车成功,车辆已归还"); |
|||
return true; |
|||
} |
|||
} |
|||
|
|||
// 业务方法:计算总租金(日租金×天数)
|
|||
public double calculateRent(int days) { |
|||
if (days <= 0) { |
|||
throw new IllegalArgumentException("租车天数必须大于0"); |
|||
} |
|||
return dailyRent * days; |
|||
} |
|||
|
|||
// 自定义方法:展示车辆完整信息(方便测试)
|
|||
public void displayInfo() { |
|||
System.out.println("====================="); |
|||
System.out.println("车牌号:" + licensePlate); |
|||
System.out.println("品牌型号:" + brand + "-" + model); |
|||
System.out.println("日租金:" + dailyRent + "元/天"); |
|||
System.out.println("车辆状态:" + (isRented ? "已租出" : "可租用")); |
|||
System.out.println("=====================\n"); |
|||
} |
|||
|
|||
@Override |
|||
public boolean equals(Object o) { |
|||
if (this == o) return true; |
|||
if (o == null || getClass() != o.getClass()) return false; |
|||
Car car = (Car) o; |
|||
return Objects.equals(licensePlate, car.licensePlate); |
|||
} |
|||
|
|||
@Override |
|||
public int hashCode() { |
|||
return Objects.hash(licensePlate); |
|||
} |
|||
|
|||
@Override |
|||
public String toString() { |
|||
return "Car{" + |
|||
"licensePlate='" + licensePlate + '\'' + |
|||
", brand='" + brand + '\'' + |
|||
", model='" + model + '\'' + |
|||
", dailyRent=" + dailyRent + |
|||
", isRented=" + isRented + |
|||
'}'; |
|||
} |
|||
} |
|||
Binary file not shown.
@ -0,0 +1,66 @@ |
|||
import com.rental.Car; |
|||
|
|||
public class TestCar { |
|||
public static void main(String[] args) { |
|||
try { |
|||
// 测试1:创建车辆对象
|
|||
System.out.println("=== 测试1:创建车辆对象 ==="); |
|||
Car car1 = new Car("沪A12345", "奥迪", "A6", 500.0); |
|||
Car car2 = new Car("沪B67890", "宝马", "5系"); // 使用默认日租金
|
|||
|
|||
// 测试2:展示车辆信息
|
|||
System.out.println("=== 测试2:展示车辆信息 ==="); |
|||
car1.displayInfo(); |
|||
car2.displayInfo(); |
|||
|
|||
// 测试3:租车操作
|
|||
System.out.println("=== 测试3:租车操作 ==="); |
|||
boolean rentResult1 = car1.rentCar(); |
|||
System.out.println("租车结果: " + (rentResult1 ? "成功" : "失败")); |
|||
|
|||
// 测试4:重复租车
|
|||
System.out.println("=== 测试4:重复租车 ==="); |
|||
boolean rentResult2 = car1.rentCar(); |
|||
System.out.println("重复租车结果: " + (rentResult2 ? "成功" : "失败")); |
|||
|
|||
// 测试5:还车操作
|
|||
System.out.println("=== 测试5:还车操作 ==="); |
|||
boolean returnResult = car1.returnCar(); |
|||
System.out.println("还车结果: " + (returnResult ? "成功" : "失败")); |
|||
|
|||
// 测试6:计算租金
|
|||
System.out.println("=== 测试6:计算租金 ==="); |
|||
double rent = car1.calculateRent(7); |
|||
System.out.println("7天租金: " + rent + "元"); |
|||
|
|||
// 测试7:获取车辆总数
|
|||
System.out.println("=== 测试7:获取车辆总数 ==="); |
|||
System.out.println("车辆总数: " + Car.getTotalCars()); |
|||
|
|||
// 测试8:测试toString方法
|
|||
System.out.println("=== 测试8:测试toString方法 ==="); |
|||
System.out.println(car1.toString()); |
|||
System.out.println(car2.toString()); |
|||
|
|||
// 测试9:测试参数验证
|
|||
System.out.println("=== 测试9:测试参数验证 ==="); |
|||
try { |
|||
new Car(null, "奔驰", "C级"); |
|||
} catch (IllegalArgumentException e) { |
|||
System.out.println("空车牌号测试: " + e.getMessage()); |
|||
} |
|||
|
|||
try { |
|||
car1.calculateRent(0); |
|||
} catch (IllegalArgumentException e) { |
|||
System.out.println("天数为0测试: " + e.getMessage()); |
|||
} |
|||
|
|||
System.out.println("\n=== 所有测试完成 ==="); |
|||
|
|||
} catch (Exception e) { |
|||
System.out.println("测试过程中出现错误: " + e.getMessage()); |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
} |
|||
Binary file not shown.
Loading…
Reference in new issue