第二次Blog作业航空货运管理系统

前言

这次Blog作业是第二次迭代大作业的总结,经过上次迭代大作业后我们面向对象编程的基础能力得到了很大提升,在本次大作业中,我顺利的完成了所有题目。本次大作业是航空货运系统的迭代,考察的是我们对抽象类,子类继承父类的使用。这次大作业并没有复杂的算法,这意味着我们的代码难度有明显的降低,但是这次作业并没有给我们类图,因此此次大作业还考察了我们类图设计的能力。我认为这次大作业更加适合锻炼我们的面向对象的能力,下面是我对这次大作业的总结与心得。

第一次航空货运管理系统题目

某航空公司“航空货运管理系统”中的空运费的计算涉及多个因素,通常包
括货物重量/体积、运输距离、附加费用、货物类型、客户类型以及市场供需等。
本次作业主要考虑货物重量/体积,以下是具体的计算方式和关键要点:
一、计费重量的确定
空运以实际重量(Gross Weight)和体积重量(Volume Weight)中的较
高者作为计费重量。
计算公式:
体积重量(kg) = 货物体积(长×宽×高,单位:厘米)÷ 6000
示例:
若货物实际重量为 80kg,体积为 120cm×80cm×60cm,则:
体积重量 = (120×80×60) ÷ 6000 = 96kg
计费重量取 96kg(因 96kg > 80kg)。
二、基础运费计算
费率(Rate):航空公司或货代根据航线、货物类型、市场行情等制定(如
CNY 30/kg)。本次作业费率采用分段计算方式:
image

公式:基础运费 = 计费重量 × 费率
三、题目说明
本次题目模拟某客户到该航空公司办理一次货运业务的过程:
航空公司提供如下信息:
航班信息(航班号,航班起飞机场所在城市,航班降落机场所在城市,航班
日期,航班最大载重量)
客户填写货运订单并进行支付,需要提供如下信息:
 客户信息(姓名,电话号码等)
 货物信息(货物名称,货物包装长、宽、高尺寸,货物重量等)
 运送信息(发件人姓名、电话、地址,收件人姓名、电话、地址,所选
航班号,订单日期)
 支付方式(支付宝支付、微信支付)
注:一个货运订单可以运送多件货物,每件货物均需要根据重量及费率单独
计费。
程序需要从键盘依次输入填写订单需要提供的信息,然后分别生成订单信
息报表及货物明细报表。
四、题目要求
本次题目重点考核面向对象设计原则中的单一职责原则、里氏代换原则、开
闭原则以及合成复用原则,除需要在 PTA 平台提交源码外,还需要在超星平台
提交本次作业最终得分源码(首次提交最高分源码)的类图,评判标准为:
基础得分:PTA 实际得分
设计因素:单一职责原则(40%)、里氏代换原则(20%)、开闭原则(20%)、
合成复用原则(20%)

第一次作业类图

image
image
image

代码分析

image
代码行数:295 行,语句数:147(代码密度适中,非纯空行填充)。
结构与复杂度:
类与接口:6 个,平均方法数 / 类:1.67(类职责单一,符合高内聚原则)。
平均语句数 / 方法:9.60(方法短小,可读性佳,便于维护)。
最复杂方法:Main.main()(行号 172,圈复杂度 4),复杂度较低,逻辑清晰。
代码块深度:
最大深度 6(嵌套层级稍深,需检查是否存在过度嵌套,如if-else或循环嵌套过深)。
平均深度 2.62(整体嵌套合理,无严重深度问题)。
质量指标:
注释比例 22.0%:注释充足,增强代码可理解性。
分支语句占比 5.4%:条件逻辑较少,代码流程相对线性(或存在大量简单逻辑)。
方法调用语句 56 个:模块间交互适度,未出现过度耦合。
可视化分析:
Kiviat 图:各度量指标(注释、方法数、语句数、复杂度、深度等)分布均衡,无明显异常。
Block Histogram:语句集中在深度 0-5,深度 6 + 占比低,符合平均深度 2.62,代码结构扁平化较好。
总结:
代码度量指标健康,结构清晰,复杂度和深度均在合理范围。通过局部优化(如嵌套结构和主方法拆分),可进一步提升可维护性,符合 Java 代码设计规范。

第二次航空货运系统题目

某航空公司“航空货运管理系统”中的空运费的计算涉及多个因素,通常包
括货物重量/体积、运输距离、附加费用、货物类型、客户类型以及市场供需等。
本次作业主要考虑货物重量/体积,以下是具体的计算方式和关键要点:
一、计费重量的确定
空运以实际重量(Gross Weight)和体积重量(Volume Weight)中的较
高者作为计费重量。
计算公式:
体积重量(kg) = 货物体积(长×宽×高,单位:厘米)÷ 6000
示例:
若货物实际重量为 80kg,体积为 120cm×80cm×60cm,则:
体积重量 = (120×80×60) ÷ 6000 = 96kg
计费重量取 96kg(因 96kg > 80kg)。
二、基础运费计算2
费率(Rate):航空公司或货代根据航线、货物类型、市场行情等制定(如
CNY 30/kg)。本次作业费率与货物类型有关,货物类型分为普通货物、危险货物和加急货物三种,其费率分别为:
image

计算公式:基础运费 = 计费重量 × 费率 × 折扣率
其中,折扣率是指不同的用户类型针对每个订单的运费可以享受相应的折扣,
在本题中,用户分为个人用户和集团用户,其中个人用户可享受订单运费的 9
折优惠,集团用户可享受订单运费的 8 折优惠。
三、题目说明
本次题目模拟某客户到该航空公司办理一次货运业务的过程:
航空公司提供如下信息:
航班信息(航班号,航班起飞机场,航班降落机场,航班日期,航班最大载
重量)3
客户填写货运订单并进行支付,需要提供如下信息:
 客户信息(姓名,电话号码等)
 货物信息(货物名称,货物包装长、宽、高尺寸,货物重量等)
 运送信息(发件人姓名、电话、地址,收件人姓名、电话、地址,所选
航班号,订单日期)
 支付方式(支付宝支付、微信支付、现金支付)
注:一个货运订单可以运送多件货物,每件货物均需要根据重量及费率单独
计费。
程序需要从键盘依次输入填写订单需要提供的信息,然后分别生成订单信
息报表及货物明细报表。
四、题目要求
本次题目重点考核面向对象设计原则中的单一职责原则、里氏代换原则、开
闭原则以及合成复用原则、依赖倒转原则,除需要在 PTA 平台提交源码外,还
需要在超星平台提交本次作业最终得分源码(首次提交最高分源码)的类图,
评判标准为:
基础得分:PTA 实际得分
设计因素:单一职责原则(20%)、里氏代换原则(20%)、开闭原则(20%)、
合成复用原则(20%)、依赖倒转原则(20%)。
最终得分:基础得分扣减所有违背设计原则分值(违背所有五个原则的设计
最终得分为 0 分)

第二次作业类图

image

代码分析

image
代码规模相关
行数:288 行,说明代码量不算极少,有一定规模。
语句数:175 条,语句是执行具体操作的代码单元,反映代码实际执行操作的数量。
结构与控制流相关
分支语句百分比:14.9% ,分支语句(如if - else、switch等)占比不算高,代码逻辑相对较线性,复杂分支嵌套可能较少。
方法调用语句数:49 ,说明代码中方法调用较为频繁,体现代码模块化程度,可能有较多功能封装在不同方法中。
代码组织相关
类和接口数量:3 ,表示代码中定义了 3 个类或接口,代码有一定的结构划分。
每个类的方法数:7.67 ,平均每个类有较多方法,可能存在功能较为聚合的类。
每个方法的平均语句数:7.26 ,方法内语句数量适中,方法功能可能不是特别复杂,但也并非过于简单。
复杂度相关
最复杂方法行数:116 行,DangerousGoods.getRate() 方法最为复杂,行数较多意味着逻辑可能较繁琐,维护难度相对较大。
最大复杂度:5 ,复杂度衡量代码理解和维护难度,数值不算极高,但仍需关注。
最深代码块行数:258 行,最大块深度为 4 ,平均块深度1.04 ,说明存在较深层级嵌套的代码块,但整体平均深度不算大,大部分代码块结构相对扁平。
平均复杂度:1.67 ,整体代码复杂度处于较低水平,代码相对容易理解和维护。
可视化图表
雷达图:展示了注释百分比、平均复杂度、最大复杂度、最大深度、平均深度、每个类的方法数、每个方法的平均语句数等指标的相对情况,直观呈现代码多维度特征。
柱状图:以语句数为纵轴,代码块深度为横轴,展示不同深度代码块中语句数分布,可看出深度为 1 的代码块中语句数最多,随着深度增加语句数递减 。

总结

代码有模块化倾向,分支语句14.9%,逻辑较为线性,方法调用语句49条,体现代码功能的封装性。平均复杂度为1.67,比较低。总体而言代码相对容易维护,但部分方法和代码块需要优化。

踩坑心得

第一次作业:
1.计算重量与实际重量选取出错
应该用math.max(a,b)方法选出最大重量
2.计算总费用时漏掉部分费用
这属于个人细心问题,警醒我在编程时要考虑周全
第二次作业
1.订单运费未考虑折扣
这个要求在题目说明中,容易忘记考虑
2.支付方式复杂
开始我依旧使用if-else判断支付方式,后来考虑到后期维护代码便利性,我将其改为switch-case

总结:

本次大作业虽然依然有踩坑,但相较第一次大作业而言,我获得了极大提升,我在此次大作业掌握了子类如何继承父类,理解了抽象类的职责。在第一次作业中,我专注父类子类的继承关系,将相同的对象与方法放进父类中,在由子类继承,这有效的降低了代码的长度,避免重复编译相同的方法。在第二次作业中,我在费率方法中增加了不同货物的费率,还在输出方法中增加了一个判断支付方式的方法,另外此次大作业我增加了注释,更方便他人理解和阅读代码,最后我想说的是,这次作业不仅锻炼了我的编程能力,更让我进一步建立了面向对象设计的思维方式,为后续开发更复杂、可维护的项目奠定了坚实的基础。

posted @ 2025-05-24 20:26  萧辰1  阅读(24)  评论(0)    收藏  举报