航空货运管理系统题目总结

航空货运管理系统题目集结束了,以继承与多态程序为中心,不断增加新功能,我学到了很多:
1.通过继承实现不同类型货物的差异化费率计算
2.使用数据库替代ArrayList持久化数据
3.show()方法统一格式化输出
下面我将从程序结构,公测、互测以及bug分析几个方面来总结我这两次作业。
第一次作业
1,作业要求
要求对航空货运管理系统进行类设计,考虑货物重量/体积来计算货物的运费。空运以实际重量(GrossWeight)和体积重量(VolumeWeight)中的较高者作为计费重量。计算公式:体积重量(kg)= 货物体积(长×宽×高,单位:厘米)÷6000
2,实现方式
运用继承与多态,抽象类等相关知识进行编写。用ArrayList储存所有货物信息,打印时判断是否超载。
3,代码规模

4,类图
第一次作业类图

5,复杂度分析

可以看出Goods类里面的getValue方法复杂度较高。
6,Bug分析
实现类图的时候,才发现顾客和发件人与收件人不同。导致多个输入问题。(我主观认为发起订单的一般都是发件人,仔细一看才发现不同。
第二次作业
1,作业要求
较第一作业增加了不同的货物样式,不同的顾客身份,不同的费率计算,这就需要将货物等类变为抽象类,生成几个子类继承。
2,实现方式
同理,将Show方法为Main的static方法。在main里调用。Show再调用各个类的show方法,打印出数据和需要的格式。获得费率等属性来计算运费需要将Customer类和Goods关联起来。
3,代码规模
第二次作业代码规模

4,类图

5,复杂度分析

可以看出Denglous,Expedite,Nomal的getRate方法的复杂度很高,因为这个方法有一个共同点,就是用了复杂的if/else条件判断语句来获取Rate
6,Bug分析
最后的错误输入结果有问题,本来以为超过重量的货物就从ArrayList中删去,不打印出来。后来发现只要输出“The flight with flight number:航班号 has exceeded its load capacity and cannot carry the order.”就可以了。
我原本设计的货物类型应该是Goods的属性,后来发现按题意应该是Customer的属性。(有点离谱)
关于设计模式的思考
(1):/if(goodsType.equals("Normal")){
new Normal(...);
} else if(...)
/这些代码违反了开闭原则:使用接口解决创建问题。(接口的使用还是不熟悉)
(2):/// 费率计算分散在各子类
class Normal extends Goods {
@Override
public double getRate() { /
多层if判断 / }
}
/使用装饰者模式修改,实现动态费用修改。

posted on 2025-05-19 22:48  不要尔康  阅读(18)  评论(0)    收藏  举报