8~9航空货运管理系统题目总结
一.前言
1.在题目8的航空货运管理系统题目中,运用到了继承,多态,ArrayList这些知识,让我对于继承多态的运用更加的熟练。
2.在题目9的航空货运管理系统题目中,在题目8的基础上进行代码的迭代,进行了逻辑的升级,代码逻辑比题目8稍微复杂一些。
二.设计与分析
题目:
某航空公司“航空货运管理系统”中的空运费的计算涉及多个因素,通常包
括货物重量/体积、运输距离、附加费用、货物类型、客户类型以及市场供需等。
本次作业主要考虑货物重量/体积,以下是具体的计算方式和关键要点:
一、计费重量的确定
空运以实际重量(GrossWeight)和体积重量(VolumeWeight)中的较
高者作为计费重量。
计算公式:
体积重量(kg)= 货物体积(长×宽×高,单位:厘米)÷6000
示例:
若货物实际重量为80kg,体积为120cm×80cm×60cm,则:
体积重量 =(120×80×60)÷6000=96kg
计费重量取96kg(因96kg>80kg)。
二、基础运费计算
1
费率(Rate):航空公司或货代根据航线、货物类型、市场行情等制定(如
CNY30/kg)。本次作业费率与货物类型有关,货物类型分为普通货物、危险货
物和加急货物三种,其费率分别为:
计算公式:基础运费 = 计费重量 × 费率 × 折扣率
其中,折扣率是指不同的用户类型针对每个订单的运费可以享受相应的折扣,
在本题中,用户分为个人用户和集团用户,其中个人用户可享受订单运费的9
折优惠,集团用户可享受订单运费的8折优惠。
三、题目说明
本次题目模拟某客户到该航空公司办理一次货运业务的过程:
航空公司提供如下信息:
航班信息(航班号,航班起飞机场,航班降落机场,航班日期,航班最大载
重量)
2
客户填写货运订单并进行支付,需要提供如下信息:
客户信息(姓名,电话号码等)
货物信息(货物名称,货物包装长、宽、高尺寸,货物重量等)
运送信息(发件人姓名、电话、地址,收件人姓名、电话、地址,所选
航班号,订单日期)
支付方式(支付宝支付、微信支付、现金支付)
注:一个货运订单可以运送多件货物,每件货物均需要根据重量及费率单独
计费。
程序需要从键盘依次输入填写订单需要提供的信息,然后分别生成订单信
息报表及货物明细报表。
第一次题目八
在这次题目中,拿到题目先设计类,下面是我这次的类图

在设计好类后进行代码的编写,下面是我代码通过SourceMonitor分析的数据

内容:
Metrics Details For File 'Main.java'
Parameter Value
========= =====
Project Directory D:\daima1\Java\pta\pta\src
Project Name
Checkpoint Name Baseline
File Name Main.java
Lines 278
Statements 167
Percent Branch Statements 6.6
Method Call Statements 46
Percent Lines with Comments 2.5
Classes and Interfaces 7
Methods per Class 3.71
Average Statements per Method 3.58
Line Number of Most Complex Method 167
Name of Most Complex Method Weight.rate()
Maximum Complexity 7
Line Number of Deepest Block 21
Maximum Block Depth 3
Average Block Depth 1.63
Average Complexity 1.54
Most Complex Methods in 7 Class(es): Complexity, Statements, Max Depth, Calls
Customer.Customer() 1, 2, 2, 1
Customer.getCustomerNumber() 1, 1, 2, 0
Flight.Flight() 1, 5, 2, 0
Flight.getFlightNumber() 1, 1, 2, 0
Flight.getMaxLoadCapacity() 1, 1, 2, 0
Main.main() 3, 36, 3, 27
Object.getName() 1, 1, 2, 0
Object.getNumber() 1, 1, 2, 0
Object.getWeight() 1, 1, 2, 0
Object.Object() 1, 3, 2, 0
Order.getFlight() 1, 1, 2, 0
Order.getOrderDate() 1, 1, 2, 0
Order.getOrderNumber() 1, 1, 2, 0
Order.getReceiver() 1, 1, 2, 0
Order.getSender() 1, 1, 2, 0
Order.Order() 1, 5, 2, 0
Person.getAddress() 1, 1, 2, 0
Person.getName() 1, 1, 2, 0
Person.getPhone() 1, 1, 2, 0
Person.Person() 1, 3, 2, 0
Weight.calculateFreight() 7, 9, 3, 0
Weight.getChargeWeight() 1, 1, 2, 2
Weight.getGrossWeight() 1, 1, 2, 0
Weight.getVolumeWeight() 1, 1, 2, 0
Weight.rate() 7, 9, 3, 0
Weight.Weight() 1, 4, 2, 0
Block Depth Statements
0 10
1 59
2 81
3 17
4 0
5 0
6 0
7 0
8 0
9+ 0
这段代码最高复杂度为7,最好需要拆解重构,整体代码复杂度较低,只存在个别复杂度高的代码。代码的注释较少,下次写代码的时候应该多加一些注释。
第二次题目九
下面是第二次的类图:
![]()
下面是第二次数据分析后的结果:
![]()
内容:
Metrics Details For File 'Main.java'
Parameter Value
========= =====
Project Directory D:\daima1\Java\pta3\src
Project Name
Checkpoint Name Baseline
File Name Main.java
Lines 391
Statements 242
Percent Branch Statements 14.9
Method Call Statements 62
Percent Lines with Comments 1.8
Classes and Interfaces 8
Methods per Class 4.25
Average Statements per Method 4.18
Line Number of Most Complex Method 220
Name of Most Complex Method Weight.rate3()
Maximum Complexity 7
Line Number of Deepest Block 23
Maximum Block Depth 3
Average Block Depth 1.79
Average Complexity 2.21
Most Complex Methods in 8 Class(es): Complexity, Statements, Max Depth, Calls
Customer.Customer() 1, 3, 2, 1
Customer.getCustomerNumber() 1, 1, 2, 0
Customer.getCustomerType() 3, 4, 3, 1
Flight.Flight() 1, 5, 2, 0
Flight.getFlightNumber() 1, 1, 2, 0
Flight.getMaxLoadCapacity() 1, 1, 2, 0
Goods.getGoodsType() 1, 1, 2, 0
Goods.Goods() 1, 1, 2, 0
Main.main() 3, 39, 3, 30
Object.getName() 1, 1, 2, 0
Object.getNumber() 1, 1, 2, 0
Object.getWeight() 1, 1, 2, 0
Object.Object() 1, 3, 2, 0
Order.getFlight() 1, 1, 2, 0
Order.getOrderDate() 1, 1, 2, 0
Order.getOrderNumber() 1, 1, 2, 0
Order.getReceiver() 1, 1, 2, 0
Order.getSender() 1, 1, 2, 0
Order.Order() 1, 6, 2, 0
Person.getAddress() 1, 1, 2, 0
Person.getName() 1, 1, 2, 0
Person.getPhone() 1, 1, 2, 0
Person.Person() 1, 3, 2, 0
Weight.calculateFreight1() 7, 9, 3, 0
Weight.calculateFreight2() 7, 9, 3, 0
Weight.calculateFreight3() 7, 9, 3, 0
Weight.getChargeWeight() 1, 1, 2, 2
Weight.getGrossWeight() 1, 1, 2, 0
Weight.getVolumeWeight() 1, 1, 2, 0
Weight.rate1() 7, 9, 3, 0
Weight.rate2() 7, 9, 3, 0
Weight.rate3() 7, 9, 3, 0
Weight.Weight() 1, 5, 2, 0
Block Depth Statements
0 11
1 71
2 119
3 41
4 0
5 0
6 0
7 0
8 0
9+ 0
代码存在的最大问题是注释较少,在下一次编码的过程中一定会注重注释的添加。
三.踩坑心得
1.在第一次写航空货运管理系统的过程中,对于类的设计有不合理的地方,对于继承的运用理解不够,会出现改继承的时候没有用继承,不该用的时候又使用了继承的方法。
2.对于分段计算的逻辑在一开始没有看清楚题目,对于边界值的处理出现了问题,在修改后的代码中得到了改进。
3.在第二次对于第一次所写的航空货运管理系统进行迭代,增加了货物类型多样不同价格计算的逻辑,还增加了集团用户和个人用户不同的折率的逻辑,还有不同支付方式的判断,增加的逻辑在原有代码上修改的过程要遵循单一职责原则,不然代码会非常混乱。
四.改进建议
感觉这次的航空货运管理系统的题目,逻辑稍微有些简单,相比于上次的电梯题目,电梯题目的逻辑到这道题目差距有点大,可以在题目逻辑上稍微有一点点难度,提升我们处理逻辑的能力。
五.总结
通过这次作业,我对类的设计和继承的理解确实更深了。比如 Customer 继承 Person,这样可以复用姓名、电话这些属性,代码一下子简洁了很多。还有集合的使用也更熟练了,以前老是搞不清楚泛型怎么用,现在算是有点感觉了。总的来说,虽然过程有点痛苦,但看到代码能正常跑起来,输出正确的结果,还是很有成就感的。下次写代码前一定要先把类图设计好,特别是这种有继承关系的,不然改起来太费劲了。还有就是要多写注释,这次注释写得太少,自己后面看的时候都有点迷糊了,通过了上次电梯题目对于自身能力的提升,在这次航空货运管理系统题目写代码的过程中,能够自己独立完成代码的编写,在看到题目的时候也能够有自己的想法设计相应的类应该有怎样的类与类之间的关系,是依赖还是什么。然后是否应该用继承来实现代码,也能够有自己的判断,相信在后续的学习中能够对于java知识的运用越来越熟练,我自己在课后也会吸取这次写题目过程中的教训,在下次的题目中能够将代码完成的更好。


浙公网安备 33010602011771号