总结1-3

一.前言:
前三次作业是完成航空货运陪在系统的迭代升级,从基础的管理模式,再逐渐新增和完善系统的功能。三次作业难度逐渐升级,从知识点来看的话,是从基础面向对象结构,到模块化设计再到系统级整合,逐渐加深我们的到代码编写能力,其中当然也遇到了很多问题,第二次系统升级的代码,总是写不对,最后也不得不放弃。不过这次作业模拟了我们以后真实软件开发的过程,总体来说很有意义。拿题量来说的话使越来越多的,第一次的基础型代码在一百行左右,第二次两百行第三次三百行,题量是越来越多的,耗费的时间与精力也更多。接下来我将基于本人三次作业提交的源代码,从设计分析、采坑心得、改进建议、阶段总结四个维度进行全面复盘。
二.设计与分析:
第一次作业源码设计分析:
核心需求:实现航班货物录入、按重量降序排序、总重量统计、超载警告输出。
下面是我的类图:
image
我一共设置了五大类:
1.Cargo 类:货物实体类,封装货物名称、重量属性,提供构造方法与 getter 方法,实现属性私有化封装;
2.CargoSorter 类:排序工具类,提供静态 sort 方法,使用选择排序实现货物按重量降序排列;
3.LoadManifest 类:载货清单类,管理货物集合,提供添加货物、计算总重量方法;
4.Flight 类:航班类,封装最大载重、载货清单属性;
5.Main 类:程序入口,处理输入、调用各类方法、输出结果。
设计心得:第一次作业不是很复杂,但是却给我建立了基础的面向对象思维:将现实事物抽象为类,将行为抽象为方法。但是我的业务逻辑依旧有很多问题,暴露了很多我思维上的问题,这个我会在后面提到。总之第一次作业是为了后面的迭代开发打下基础。

第二次作业源码设计分析:
核心需求:多货舱配置、货物按目标货舱分配、重量校验、排序优化、分级超载判断、格式化输出。
类图:
image
第二次作业的复杂程度显著提升,一共有七个类,
1.Position 类:位置实体类,记录货舱坐标;
2.Cargo 类:扩展货物属性,新增目标货舱 ID;
3.CargoCompartment 类:货舱核心类,管理容量、货物、载重判断、添加货物;
4.Flight 类:航班管理类,整合多个货舱,提供货舱查找、总重量统计;
5.LoadDispatcher 类:调度工具类,实现货物按重量降序排序;
6.InputValidator 类:输入校验工具类,判断数字合法性;
7.Main 类:流程控制类,完成输入、分配、输出全流程。

并且此次作业我总有测试点不通过并且不知道为什么最后还是放弃了
屏幕截图 2026-05-17 204405

设计心得:
此次作业是在第一次上的进阶,我在这里逐渐明白如何将业务查分成多个工具类、实体类、管理类,降低了代码耦合度。通过静态工具类实现通用功能,让代码复用性大幅提升,程序结构更加清晰易读。

第三次作业源码设计分析:
核心需求:旅客 + 行李整合、前后货舱分配、货物 ID 排序、容量动态判断、飞机重心平衡计算、标准舱单格式化输出
类图:
image

第三次作业在第二次的基础上扩展为了九个类:
1.Luggage 类:行李实体类;
2.Passenger 类:旅客类,整合行李,固定体重标准;
3.Cargo 类:货物类,新增 ID 属性,用于排序;
4.CargoCompartment 类:货舱类,管理容量、货物、载重统计;
5.Flight 类:总调度类,管理旅客、货舱;
6.LoadDispatcher 类:排序工具类,实现冒泡排序按货物 ID 升序;
7.WeightBalanceCalculator 类:核心计算类,实现重心、力矩、平衡评估;
8.InputValidator 类:输入校验类,支持范围判断、负数拦截;
9.Main 类:程序入口,控制全流程。
从类的复杂程度可以看出第三次作业的难度很大
设计心得:
第三次作业是面向对象综合能力的完整检验。我实现了从数据录入、业务处理、计算核心到结果输出的全流程封装,使代码结构严谨、可维护性强。

三.踩坑心得
第一次作业采坑记录:
1.选择排序边界错误
问题:最初编写排序时循环边界错误,导致货物丢失。
原因:循环条件i < n写成i <= n,数组越界。
解决:严格核对集合索引范围,修复循环边界。
2.输出格式不统一
问题:重量小数位格式混乱。
解决:使用printf("%.1f")统一格式化输出。
下面是第一次作业的流程图:
image
第二次作业采坑记录:
1.货舱查找返回 null
问题:输入错误货舱 ID 时程序空指针异常。
原因:未判断 getCompById () 返回 null 的情况。
解决:增加非空判断,提升程序健壮性。
2.排序逻辑错误
问题:重量相同时顺序混乱。
原因:未保留输入顺序。
解决:使用indexOf保持原顺序,实现稳定排序。
最后也没有通过所有测试点;
image
第三次作业采坑记录:
1.货舱容量判断逻辑倒置
问题:超载判断条件写反,允许超载装载。
原因:>与<=混淆。
解决:重新梳理逻辑,先判断再装载。
输入范围校验失效
2.问题:货物分配数量超出范围程序崩溃。
原因:未做范围拦截。
解决:使用getIntInRange方法强制范围校验。
冒泡排序逻辑错误
3.问题:应该是用ID排序,但是我用重量排序,导致前三个测试点不通过。
原因:思路错误。
解决:修正为 ID 升序排列。
image

四.改进建议
基于三次作业源代码存在的不足,提出可持续、可落地的改进方案。
第一次作业改进建议
1..异常处理:增加重量负数判断,避免非法数据;
3.算法优化:将选择排序替换为 Collections.sort,效率更高、代码更简洁。
第二次作业改进建议
1.配置化管理:将提示文字、格式符号定义为常量;
2.功能扩展:支持货物卸载、按名称查询、货舱清空功能;
第三次作业改进建议
1.重心计算模块化:将计算拆分为多个方法,降低单个方法复杂度;
2.配置文件:将飞机固定参数写入配置文件,无需修改代码;
3.数据持久化:支持舱单保存到文件,便于存档。

五.总结
理解加深的知识点与能力:
能根据业务抽象实体、工具、管理类,实现高内聚低耦合;熟练使用 private 修饰属性,通过 getter/setter 访问;熟练使用 ArrayList 完成数据管理、遍历、排序;更加熟练掌握选择排序、冒泡排序、自定义排序;
能独立完成输入、处理、计算、输出全流程;
不足与后续学习方向:
1.继承与多态应用不足:三次作业均以单类结构为主,未使用继承、接口、多态;
2.异常处理不完善:部分场景仍使用 System.exit (0),未使用自定义异常;
3.代码注释不足:核心算法缺少详细注释;
后续将重点学习继承、多态、接口等进阶知识。

posted @ 2026-05-17 23:00  eeeqqqq  阅读(22)  评论(0)    收藏  举报