题目集8~9总结:航空货运管理系统设计与实现
一、前言
本次题目集8~9围绕"航空货运管理系统"展开,主要考察面向对象程序设计能力。题目集包含1道综合性编程题,要求完成一个完整的航空货运管理系统,涉及客户管理、货物分类、航班调度、订单处理等核心功能。
知识点覆盖:
面向对象三大特性(封装、继承、多态)
抽象类与接口的应用
集合框架的使用
输入输出处理
二、设计与分析
题目集8分析
类图设计:
题目集8类图

核心类结构:
Customer抽象类作为基类
IndividualCustomer和CorporateCustomer作为具体客户类型
Cargo接口定义货物行为
三种具体货物实现类
SourceMonitor报表关键指标:
方法平均复杂度:2.3
最大复杂度:5(出现在费率计算方法)
注释率:18.5%
类平均方法数:6.2
设计亮点:
合理使用抽象类统一客户共性
通过接口实现多种货物类型
采用Stream API简化集合操作
题目集9改进分析
新增功能:
支付方式模块
航班载重控制
更完善的订单打印功能
类图演进:
题目集9类图

复杂度变化:
平均复杂度升至2.7
新增支付方式增加了系统灵活性
订单类承担了过多职责(需改进)
关键代码分析:
java
// 订单运费计算逻辑
public double getTotalFreight() {
double total = cargos.stream()
.mapToDouble(Cargo::calculateFreight)
.sum();
return total * customer.getDiscountRate();
}
这段代码很好地结合了Stream API和多态特性,是系统的核心算法之一。
三、采坑心得
- 对象创建问题
问题现象:
初始版本在Main类中直接创建对象,导致:
创建逻辑分散
新增类型需要修改多处代码
测试数据:
Corporate C001 公司A 13800138000 北京
Normal 2
N001 货物1 10 20 30 15
N002 货物2 15 15 15 10
CA123 北京 上海 2023-05-20 50
...
解决方案:
引入简单工厂模式,将对象创建集中管理:
java
class CargoFactory {
public static Cargo createCargo(String type, String id,
String name, double width,
double length, double height,
double weight) {
switch(type) {
case "Normal": return new NormalCargo(...);
// 其他类型...
}
}
}
2. 运费计算问题
错误案例:
最初将运费计算逻辑放在Main类中,违反了单一职责原则。
改进方案:
将计算逻辑分散到各货物类中,通过多态实现差异化计算。
测试结果对比:
方案 可维护性 扩展性 代码复用率
集中计算 差 差 低
分散计算 优 优 高
3. 航班载重控制
边界条件:
未考虑多个订单分配到同一航班的情况,导致载重计算错误。
修复方案:
java
// Flight类中添加方法
public synchronized boolean canAddCargo(double weight) {
return currentLoad + weight <= maxLoadCapacity;
}
使用synchronized保证线程安全
四、改进建议
- 架构层面
引入分层架构:
将系统分为表现层、业务层、数据访问层
例如将订单打印功能分离到View层
应用DDD原则:
识别聚合根(如Order)
划分限界上下文(货运、客户、支付等)
- 代码层面
费率计算重构:
java
// 使用策略模式替代if-else
interface RateStrategy {
double calculateRate(double weight);
}
class NormalRateStrategy implements RateStrategy {
public double calculateRate(double weight) {
// 实现具体逻辑
}
}
引入建造者模式:
java
Order order = new Order.Builder()
.withOrderId("O001")
.withCustomer(customer)
// 其他参数
.build();
增强异常处理:
java
public Flight(String flightNumber, ...) {
if (maxLoadCapacity <= 0) {
throw new IllegalArgumentException("载重必须大于0");
}
// ...
}
3. 功能扩展建议
添加货物追踪功能
实现运费分段计价
支持国际货运关税计算
增加数据持久化层
五、总结
通过这两次题目集的练习,我的收获主要体现在以下几个方面:
面向对象设计能力:
掌握了抽象类与接口的实际应用场景
理解了多态在业务系统中的价值
学会了识别类之间的关系
系统思维培养:
从全局视角设计系统架构
平衡功能的完整性与代码的简洁性
考虑业务规则的可扩展性
工程实践能力:
使用工具分析代码质量
通过重构持续改进设计
编写可维护的业务代码
需要进一步学习的领域:
设计模式的深入应用
这两次题目集让我深刻体会到,好的软件设计不仅要实现功能,更要考虑可维护性和扩展性。航空货运管理系统从简单实现到逐步完善的过程,正是我们面向对象编程能力成长的缩影。
浙公网安备 33010602011771号