From db9d6eeec27bc5a165bceeece57ebdfc27e9ed71 Mon Sep 17 00:00:00 2001 From: Wangyanshu <2680603193@qq.com> Date: Thu, 2 Apr 2026 00:56:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=20'README.md'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 165 ------------------------------------------------------ 1 file changed, 165 deletions(-) delete mode 100644 README.md diff --git a/README.md b/README.md deleted file mode 100644 index cbb358e..0000000 --- a/README.md +++ /dev/null @@ -1,165 +0,0 @@ -车辆管理系统实验报告 -实验目的 -巩固封装的基本实现:私有属性 + 公有 getter/setter -练习构造方法的重载以及 this 关键字的用法 -掌握在业务方法中加入数据校验,保护对象状态的合法性 -能够编写测试类验证类的功能 -项目结构 -CarRentalSystem/ -└── src/ - └── com/ - └── rental/ - ├── Car.java # 车辆实体类 - └── TestCar.java # 测试类 -核心代码说明 -Car类设计要点 -1. 属性封装(全部private) -private String licensePlate; // 车牌号(不可变) -private String brand; // 品牌 -private String model; // 型号 -private double dailyRent; // 日租金 -private boolean isRented; // 租用状态 -private static int totalCars; // 车辆总数 -2. 构造方法重载 -全参构造方法:接收所有参数,isRented初始化为false -三参构造方法:使用默认日租金300元,通过this()调用全参构造 -3. Getter/Setter规则 -licensePlate:只提供getter,不提供setter(不可变) -brand、model:提供完整的getter和setter -dailyRent:setter中包含数据校验(必须>0) -isRented:只提供isRented()查询方法,不提供setter -4. 业务方法 -rentCar():租车,检查当前状态 -returnCar():还车,检查当前状态 -calculateRent(int days):计算租金 -displayInfo():显示车辆信息 -5. 静态成员(加分项) -totalCars:统计创建的车辆总数 -getTotalCars():返回总车辆数 -运行结果 -===== 车辆管理系统测试 ===== - -=== 创建的车辆信息 === -车牌号:京A12345 -品牌:大众 -型号:朗逸 -日租金:200.0 元/天 -租用状态:可租 ------------------------- -车牌号:沪B67890 -品牌:丰田 -型号:凯美瑞 -日租金:350.0 元/天 -租用状态:可租 ------------------------- -车牌号:粤C24680 -品牌:本田 -型号:雅阁 -日租金:300.0 元/天 -租用状态:可租 ------------------------- - -=== 测试租车功能 === -对车辆1进行租车操作: -车辆租用成功 -再次尝试租车: -车辆已租出,无法再次租用 - -=== 测试还车功能 === -对车辆1进行还车操作: -车辆归还成功 -再次尝试还车: -车辆未被租用,无需归还 - -=== 测试租金计算 === -车辆2租用5天的费用:1750.0 元 -车辆3租用3天的费用:900.0 元 - -=== 测试setter数据校验 === -尝试将车辆1的日租金设置为-100: -日租金必须大于0,当前值:-100.0,保持原值:200.0 -车辆1当前日租金:200.0 -将车辆1的日租金设置为250: -车辆1当前日租金:250.0 - -=== 测试品牌和型号修改 === -修改后的车辆1信息: -车牌号:京A12345 -品牌:奥迪 -型号:A4 -日租金:250.0 元/天 -租用状态:可租 ------------------------- - -=== 车辆总数统计 === -总车辆数:3 辆 - -=== 测试完成 === -类图 -┌─────────────────────────────────┐ -│ Car │ -├─────────────────────────────────┤ -│ - licensePlate: String │ -│ - brand: String │ -│ - model: String │ -│ - dailyRent: double │ -│ - isRented: boolean │ -│ - totalCars: static int │ -├─────────────────────────────────┤ -│ + Car(licensePlate, brand, │ -│ model, dailyRent) │ -│ + Car(licensePlate, brand, │ -│ model) │ -│ + getLicensePlate(): String │ -│ + getBrand(): String │ -│ + setBrand(brand): void │ -│ + getModel(): String │ -│ + setModel(model): void │ -│ + getDailyRent(): double │ -│ + setDailyRent(dailyRent): void │ -│ + isRented(): boolean │ -│ + rentCar(): void │ -│ + returnCar(): void │ -│ + calculateRent(days): double │ -│ + displayInfo(): void │ -│ + getTotalCars(): static int │ -└─────────────────────────────────┘ -实验总结 -封装带来的好处 -数据保护:通过private修饰符保护内部数据,防止外部直接修改 -数据校验:在setter方法中添加逻辑判断,确保数据的合法性 -业务逻辑控制:通过业务方法(rentCar、returnCar)控制状态变化,避免非法操作 -易于维护:内部实现改变不影响外部调用 -为什么isRented不提供setter? -如果直接提供setRented(boolean)方法,会带来以下风险: - -业务逻辑失控:外部可以随意设置租用状态,绕过业务规则 -数据不一致:可能导致车辆状态与实际租用情况不符 -缺少业务校验:无法检查当前状态是否允许修改 -违反封装原则:将内部状态直接暴露给外部 -通过提供rentCar()和returnCar()业务方法,可以: - -在状态改变前进行业务校验 -提供友好的操作提示 -确保状态转换的合法性 -维护对象的完整性 -遇到的问题及解决方法 -构造方法重载:使用this()调用其他构造方法,避免代码重复 -数据校验:在setter中添加条件判断,保护数据合法性 -状态管理:通过业务方法控制状态变化,提供操作反馈 -编译和运行 -编译 -cd C:\Users\王彦舒\Desktop\CarRentalSystem\src -javac com/rental/Car.java com/rental/TestCar.java -运行 -java com.rental.TestCar -评分要点达成情况 -评分要点 分值 完成情况 -属性封装正确(全部private) 10分 ✓ 完成 -构造方法正确实现(含重载及this调用) 15分 ✓ 完成 -Getter/Setter符合要求(含数据校验) 20分 ✓ 完成 -业务方法逻辑正确(租车/还车状态切换、提示) 20分 ✓ 完成 -测试类全面覆盖各种情况 20分 ✓ 完成 -实验报告完整(类图、代码、截图、总结) 15分 ✓ 完成 -静态变量和静态方法(加分项) 额外加分 ✓ 完成 -总分:100分 + 加分项 \ No newline at end of file