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

一.前言

最近我们刚搞完题目集 8~9 的航空货运管理系统题目,感觉收获满满,也踩了不少坑。这次题目集主要是让我们模拟航空公司货运业务,重点熟悉那些面向对象设计原则,像单一职责原则、里氏代换原则、开闭原则以及合成复用原则。刚开始接触这些原则有点不适应,但通过这次实践,感觉自己对它们的理解深了不少。

1.知识点

面向对象设计 :

运用类封装货物、订单、航班等信息,明确各对象职责,如 Cargo 类管理货物详情,Order 类处理订单信息,Flight 类包含航班数据。

数据结构 :

借助集合存储多件货物信息及订单列表,方便数据管理和操作。

输入输出处理 :

从键盘输入订单信息,输出订单报表与货物明细报表,需严格把控输入数据格式验证及异常处理。

2.题量和难度

第一次题目(航空货运基础设计)

题量:设计 Cargo、Order、Flight 等基础类,实现货物信息管理、订单计费与报表生成、航班信息存储等功能。
难度:中等。需理解并实现各基础类的基本功能,确保类间协作顺畅。
知识点:掌握基础类设计,了解各对象职责,实现简单的订单处理流程。

第二次题目(类设计优化与迭代)

题量:在第一次题目基础上,优化类设计,引入支付方式类 Payment 子类Cash等,完善订单支付功能,并优化计费逻辑。
难度:较难。需深入理解面向对象设计原则,合理分解类职责,增强系统功能。
知识点:遵循单一职责原则,优化类结构,增强代码复用性与可维护性,完善系统功能。

二.设计与分析

1.类图展示

第一次题目

image

第二次题目

第二次与第一次的输入有些不同,新增了一个子类,类图基本不变
image

2.SourceMonitor 报表分析

第一次题目

image

第二次题目

image

三.踩坑心得

1.类职责划分

一开始我图省事儿,把订单计费和货物信息管理一股脑全塞一块儿,结果代码乱成一团麻,看着就揪心,读都读不懂。后来痛定思痛,把货物相关的计算单独拎出来放 CargoInfo 类,订单整体处理逻辑规整到 ShippingOrder 类,才使结构清晰。

2.输入验证

第一次

输入

点击查看代码
10001
郭靖
13807911234
南昌航空大学
2
101
发电机
80
60
40
80
102
信号发生器
55
70
60
45
MU1234
昌北国际机场
大兴国际机场
2025-04-22
1000
900001
2025-04-22
南昌大学
洪七公
18907912325
北京大学
黄药师
13607912546

输出

点击查看代码
客户:郭靖(13807911234)订单信息如下:
-----------------------------------------
航班号:MU1234
订单号:900001
订单日期:2025-04-22
发件人姓名:洪七公
发件人电话:18907912325
发件人地址:南昌大学
收件人姓名:黄药师
收件人电话:13607912546
收件人地址:北京大学
订单总重量(kg):125.0
微信支付金额:3350.0

货物明细如下:
-----------------------------------------
明细编号    货物名称    计费重量    计费费率    应交运费
1    发电机    80.0    25.0    2000.0
2    信号发生器    45.0    30.0    1350.0

第二次

输入

点击查看代码
Corporate
10001
郭靖
13807911234
南昌航空大学
Expedite
2
101
发电机
80
60
40
80
102
信号发生器
55
70
60
45
MU1234
昌北国际机场
大兴国际机场
2025-04-22
1000
900001
2025-04-22
南昌大学
洪七公
18907912325
北京大学
黄药师
13607912546
ALiPay

输出

点击查看代码
客户:郭靖(13807911234)订单信息如下:
-----------------------------------------
航班号:MU1234
订单号:900001
订单日期:2025-04-22
发件人姓名:洪七公
发件人电话:18907912325
发件人地址:南昌大学
收件人姓名:黄药师
收件人电话:13607912546
收件人地址:北京大学
订单总重量(kg):125.0
支付宝支付金额:4360.0

货物明细如下:
-----------------------------------------
明细编号	货物名称	计费重量	计费费率	应交运费
1	发电机	80.0	40.0	3200.0
2	信号发生器	45.0	50.0	2250.0

3.异常处理

对可能出现的异常也没上心,比如航班载重量不够这种事儿,程序直接就 “罢工” 了。后来把异常捕获和处理这块儿补上,程序才稳稳当当跑起来。

四、改进建议

1.优化类设计结构

可以把一些公共方法抽出来,放到工具类里,像通用的计算方法之类的。这样代码就不用重复写了,复用性也能上去。

2.降低代码复杂度

订单计费那块儿逻辑复杂得要命,我打算用设计模式来简化,比如搞个策略模式,计费策略能灵活切换,那样就能少写好多嵌套的条件判断,代码看着也舒心。
image

第一次题目中每个方法中的平均语句数量过多,所以凸出来好大一截,所以改进建议是将长方法拆分为多个短小、功能单一的方法,每个方法只做一件事。例如,如果有一个方法既负责计算又负责格式化输出,可以将其拆分为 calculate() 和 formatOutput() 两个方法。

五、总结

通过本阶段两次题目集的学习,我收获颇丰,在面向对象设计方面,不仅深入理解并实践了单一职责等原则,还学会了如何合理地将一个复杂系统拆分成多个相互协作的类,每个类都专注于特定的功能,从而使得整个系统更加清晰、可维护。例如,在题目集 8 中,我设计了 Cargo 类来管理货物的详细信息,Order 类来处理订单的计费与报表生成,以及 Flight 类来存储航班的相关数据,这样的设计不仅符合单一职责原则,还使得每个类都可以独立地进行测试和优化,同时也提高了代码的复用性。
数据结构的选择与操作能力也得到了提升。在处理多件货物信息及订单列表时,我学会了如何根据业务需求合理选用集合等数据结构来高效地管理和操作数据。例如,使用列表来存储多件货物的信息,方便了对货物的批量处理和迭代操作,同时也便于在订单报表中准确地展示每件货物的详细信息。
在输入输出处理方面,我更加注重数据的准确性和程序的健壮性。通过严格的输入验证机制,确保了从键盘输入的订单信息符合预期的格式和类型,避免了因非法数据导致的程序错误或异常。同时,在输出订单报表和货物明细报表时,我也更加注重信息的完整性和可读性,使得用户能够一目了然地了解订单的详细情况。
异常处理能力的提升也是本次学习的一个重要成果。在实际编程过程中,我深刻认识到程序可能会遇到各种预期内外的异常情况,如航班载重量不足、用户输入格式错误等。因此,代码中增加了完善的异常捕获与处理机制,使得程序在遇到异常时能够给出明确的提示信息,并采取相应的措施进行处理,从而增强了程序的健壮性和用户体验。
在题目集 9 中,我进一步学会了如何运用设计模式来降低代码的复杂度。例如,在处理不同计费策略时,我尝试引入策略模式,使得计费逻辑更加灵活且易于扩展。这种设计模式的应用不仅减少了条件判断的嵌套,还提高了代码的可读性和可维护性,同时也为未来可能的计费策略变更或扩展提供了便利。
总体而言,后续学习中,我将继续致力于进一步优化类设计架构,深入探索更高效的设计模式与算法,以应对日益复杂的编程挑战。我相信,通过对面向对象设计原则的深入理解和灵活运用,以及对代码质量的不断追求,我将能够设计出更加优雅、高效和可维护的软件系统。

posted @ 2025-05-22 00:39  24201533-钟永福  阅读(12)  评论(0)    收藏  举报