第二次大作业博客

一·前言
题目集 8 与题目集 9 均聚焦于 “航空货运管理系统”,核心目标是检验面向对象设计原则的实践运用。题目集 8 作为起始版本,着重完成货物计费重量核算、基础运费计算以及订单全流程管理等关键功能;题目集 9 在前者基础上进行功能拓展,引入货物分类、用户分级及差异化折扣机制,着重考察策略模式与依赖倒置原则的实际应用。在知识覆盖维度,包含类的封装特性、继承体系构建、多态行为实现、容器数据结构运用、接口设计规范,以及策略模式和输入输出处理等重要内容。
这两次题目集的题量相对适中,重点在于对前期题目集代码进行优化重构,并完善题目相关类的架构设计。
从难度层面分析,与以往侧重算法考核的题目集相比,这两次的难度显著降低。题目集 8 强调基础功能搭建和类的初步架构设计,题目集 9 则更关注设计原则的深度应用以及系统的可扩展能力构建。
二、设计分析
第一次题目要求
一、计费重量的确定
空运以实际重量(Gross Weight)和体积重量(Volume Weight)中的较
高者作为计费重量。
计算公式:
体积重量(kg) = 货物体积(长×宽×高,单位:厘米)÷ 6000
示例:
若货物实际重量为 80kg,体积为 120cm×80cm×60cm,则:
体积重量 = (120×80×60) ÷ 6000 = 96kg
计费重量取 96kg(因 96kg > 80kg)。
二、基础运费计算
费率(Rate):航空公司或货代根据航线、货物类型、市场行情等制定(如
CNY 30/kg)。本次作业费率采用分段计算方式:
公式:基础运费 = 计费重量 × 费率
三、题目说明
本次题目模拟某客户到该航空公司办理一次货运业务的过程:
航空公司提供如下信息:
航班信息(航班号,航班起飞机场所在城市,航班降落机场所在城市,航班
日期,航班最大载重量)
客户填写货运订单并进行支付,需要提供如下信息:
 客户信息(姓名,电话号码等)
 货物信息(货物名称,货物包装长、宽、高尺寸,货物重量等)
 运送信息(发件人姓名、电话、地址,收件人姓名、电话、地址,所选
航班号,订单日期)
 支付方式(支付宝支付、微信支付)
注:一个货运订单可以运送多件货物,每件货物均需要根据重量及费率单独
计费。
程序需要从键盘依次输入填写订单需要提供的信息,然后分别生成订单信
息报表及货物明细报表。
类图

Source Monitor分析结果:

Customer 类:存储客户信息
Goods 类:表示货物,包含计算体积重量、计费重量和费用的方法
Flight 类:表示航班信息
Order 类:表示订单,包含发货人和收货人的信息
Main 类:程序入口点,使用其他类来处理订单业务逻辑

心得
写代码时,我用类封装了客户、货物等信息,像Goods类算运费的逻辑挺完整,从体积重量到分档费率都考虑到了,主程序也把输入输出流程串起来了,这点我觉得做得还行。
但回头看,问题也不少。比如没做输入校验,万一用户输了负数或空值,程序可能崩,这得加判断;代码都堆在Main里,要是逻辑变复杂,维护起来麻烦,应该把计算运费这些功能拆到独立的服务类里;还有像运费分档的数字 “2”“5” 这些魔法值,该用常量存起来,不然以后改规则得满处找。
另外,类里只有getter没setter,万一需要改客户信息或航班载重就没法操作了,得补上。订单和货物的关联也能更直接,比如在Order里加个货物列表,这样逻辑更清晰。最后,测试也没做,像体积重量刚好等于实际重量的情况,得写单元测试确保逻辑正确。
总的来说,基础功能有了,但在健壮性、可维护性和扩展性上还有优化空间,后面得把这些点补上。

第二次作业

题目要求
一、计费重量的确定
空运以实际重量(Gross Weight)和体积重量(Volume Weight)中的较
高者作为计费重量。
计算公式:
体积重量(kg) = 货物体积(长×宽×高,单位:厘米)÷ 6000
二、基础运费计算
费率(Rate):航空公司或货代根据航线、货物类型、市场行情等制定(如
CNY 30/kg)。本次作业费率与货物类型有关,货物类型分为普通货物、危险货
物和加急货物三种,其费率分别为为三种;
计算公式:基础运费 = 计费重量 × 费率 × 折扣率
其中,折扣率是指不同的用户类型针对每个订单的运费可以享受相应的折扣,
在本题中,用户分为个人用户和集团用户,其中个人用户可享受订单运费的 9
折优惠,集团用户可享受订单运费的 8 折优惠。
三、题目说明
本次题目模拟某客户到该航空公司办理一次货运业务的过程:
航空公司提供如下信息:
航班信息(航班号,航班起飞机场,航班降落机场,航班日期,航班最大载
重量)
3
客户填写货运订单并进行支付,需要提供如下信息:
 客户信息(姓名,电话号码等)
 货物信息(货物名称,货物包装长、宽、高尺寸,货物重量等)
 运送信息(发件人姓名、电话、地址,收件人姓名、电话、地址,所选
航班号,订单日期)
 支付方式(支付宝支付、微信支付、现金支付)
注:一个货运订单可以运送多件货物,每件货物均需要根据重量及费率单独
计费。
程序需要从键盘依次输入填写订单需要提供的信息,然后分别生成订单信
息报表及货物明细报表。

类图

Source Monitor分析结果:


三、踩坑心得
一开始自己太不细心了,而且没什么耐心,导致第一次作业没做出来,在老师谈话之后发现这次作业并不难,第二次作业时更加认真了些,也是成功拿到了满分。
写这个题目一定不能乱来,要理清思路。
四、改进建议
在充分解析题目要求的前提下,需严格遵循单一职责原则,确保各模块功能独立,杜绝逻辑交叉重叠的情况。
优先选用更优的算法逻辑,尽可能精简条件分支,以提升代码的可读性和流畅性。
培养良好的代码注释习惯,对关键逻辑和复杂操作进行清晰标注,便于自身及他人快速理解程序逻辑。
若存在可依托的框架体系,可借助其规范的结构和成熟的工具链,让开发思路更清晰,流程更高效,从而更有序地推进开发工作。
五、总结

通过对题目集8与题目集9的代码剖析可知,代码在完成基础功能的过程中,显现出若干有待优化之处。例如,部分方法的复杂度较高,设计模式的运用不够充分,同时还缺乏必要的注释。若能遵循面向对象的设计原则,对复杂方法进行重构,引入恰当的设计模式,并对代码结构与规范加以优化,将有助于提升代码的质量、可维护性以及可扩展性。

这两次题目集的实践,让我深切体会到面向对象设计原则在实际项目中的重要意义,也明晰了如何运用这些原则去设计和优化代码。在今后的学习与实践中,我会持续努力,不断增强自身的代码设计与实现能力。

建议教师在布置编程作业前,可在课堂上列举几个类似的实例,帮助我们更好地理解编程题目的要求,从而更顺利地上手完成作业。

posted @ 2025-05-24 11:17  曹楚梦  阅读(22)  评论(0)    收藏  举报