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

前言:


    相比于第一次的大作业,这一次总体给我的感觉就是题目比较难懂,写起来比较复杂, 但是逻辑和算法上比较简单,就像是那种高三的作文题目让你以高三的文笔写小学才写的“吃饭”细节😅。题量倒是算不上多,只不过是题目头过于唬人,尤其是太多给出来的要求和规则让人看着就烦,难度也估计是主要是在读题方面,其他还好。
  其次就是知识点方面强调了继承和多态关系,尤其是抽象类和子类继承的知识点要频繁运用,此外,单一职责的原则和开闭原则这次更是凸显重要,要是直接强行进行内容的书写十分困难,面对此次的题目只能一块一块分析,然后组合才最为方便✔️。

第一次航空货运管理系统作业:


题目:

某航空公司“航空货运管理系统”中的空运费的计算涉及多个因素,通常包
括货物重量/体积、运输距离、附加费用、货物类型、客户类型以及市场供需等。

本次题目模拟某客户到该航空公司办理一次货运业务的过程:
航空公司提供如下信息:
航班信息(航班号,航班起飞机场所在城市,航班降落机场所在城市,航班
日期,航班最大载重量)
客户填写货运订单并进行支付,需要提供如下信息:
 客户信息(姓名,电话号码等)
 货物信息(货物名称,货物包装长、宽、高尺寸,货物重量等)
 运送信息(发件人姓名、电话、地址,收件人姓名、电话、地址,所选
航班号,订单日期)
 支付方式(支付宝支付、微信支付)

要求:

一、计费重量的确定
空运以实际重量(Gross Weight)和体积重量(Volume Weight)中的较
高者作为计费重量。
计算公式:
体积重量(kg) = 货物体积(长×宽×高,单位:厘米)÷ 6000
示例:
若货物实际重量为 80kg,体积为 120cm×80cm×60cm,则:
体积重量 = (120×80×60) ÷ 6000 = 96kg
计费重量取 96kg(因 96kg > 80kg)。
二、基础运费计算
费率(Rate):航空公司或货代根据航线、货物类型、市场行情等制定(如
CNY 30/kg)。本次作业费率采用分段计算方式:

公式:基础运费 = 计费重量 × 费率
三、题目说明
注:一个货运订单可以运送多件货物,每件货物均需要根据重量及费率单独
计费。
程序需要从键盘依次输入填写订单需要提供的信息,然后分别生成订单信
息报表及货物明细报表。

如果订单中货物重量超过航班剩余载重量,程序输出The flight with flight number:航班号 has exceeded its load capacity and cannot carry the order. ,程序终止运行。

输出结果保留一位小数。

输入格式:

客户编号
客户姓名
客户电话
客户地址
运送货物数量
[货物编号
货物名称
货物宽度
货物长度
货物高度
货物重量
]//[]内的内容输入次数取决于“运送货物数量”,输入不包含“[]”
航班号
航班起飞机场
航班降落机场
航班日期(格式为YYYY-MM-DD)
航班最大载重量
订单编号
订单日期(格式为YYYY-MM-DD)
发件人地址
发件人姓名
发件人电话
收件人地址
收件人姓名
收件人电话

输出格式:

客户:姓名(电话)订单信息如下:
-----------------------------------------
航班号:
订单号:
订单日期:
发件人姓名:
发件人电话:
发件人地址:
收件人姓名:
收件人电话:
收件人地址:
订单总重量(kg):
微信支付金额:

货物明细如下:
-----------------------------------------
明细编号    货物名称    计费重量    计费费率    应交运费
1    ...
2    ...

分析问题:

1:在每一件货物输出前就有对于总价位的输出,所以说计算总价的类是独立的,且能在分别输出各自货物内容的时候就计算出总价。
2:题目中的重量的取舍取决于每一件物品的实际计算重量谁的大,所以要分出一个方法子类来计算出实际计算重量取哪个。
3:题目中有大量计算,所以最好开通一个计算类,进行各种不同的内容计算。
4:在计算利率的时候不同的范围计算的利率不同,要单独做个方法。
5:输出在格式上别具一格,且无列表符号的出现,所以每一行内容都并非单纯的输出所有列表语句实现。
6:要注意对于单位的取舍和飞机载重的限制。

设计类图:

设计了几个主大类来分成前面提到的板块,后期可以缓慢修改。但此时其实也暗示了后期的复杂与逻辑复杂度高。

plane类:记录飞机出发点和目的点还有基本信息

order类:记录每一个货物的内容

allorder类:以列表形式控制所有的货物

customer类:记录订单客户的基本信息

main类:接收输入

control类:用于全局操作

jisuan类:用于处理所有计算内容

写完代码参数分析:


可以看到,这次的类图设计相比于上一次的电梯设计有着巨大的进步,上次几乎全部都在绿色意外,这次居然有安全区,复杂度都很低,还有就是此次代码通篇编译,  都未出现有注释的情况,对后期加工和更改带来了麻烦。

思路讲解:

   创建对应的类先把输入的内容“吃掉”,然后再通过控制类将不同类吃掉的内容“笑话”,以一个大的计算类进行前提要求下提到的不同板块内容的计算,还有就是提出一个计算实际重量的方法找到真正有用的实际重量带到后期的计算。有了前期消化的内容和消化,现在就可以转化为输出,对于复杂的内容可以直接输出的绝不多加麻烦,要提前计算总重量的地方提前算好。采用这种流程式的对象设计,大大方便了我的代码编译和理解。

问题与解决:

1:在编译错误全部排除后还是显示格式错误
解决:通过实验数据样例经行对比,发现自己在输出货物的时候没有提前进行“------”的格式分离。
2:现在虽然显示格式真确,但是还是显示答案错误
解决:经过与他人的讨论发现内容上对于重量的计算不单单局限于计算价格,还有是否超重等等全范围的重量取舍都是采取的一种最大值。

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


题目变化:

  相比于前一次的货物运输问题,这次题目中多加了几个要求概念。比如在利率方面将货物类型分为普通货物、危险货物和加急货物三种。此外还新增了折扣的概念和支付方式等等。内容具体如下:

折扣率是指不同的用户类型针对每个订单的运费可以享受相应的折扣,在本题中,用户分为个人用户和集团用户,其中个人用户可享受订单运费的 9折优惠,集团用户可享受订单运费的 8 折优惠。

分析问题:

    由于新增了一些要求,但是仔细一看这些要求有部分内容有异曲同工之处,已经在暗示我们利用继承和抽象类等方法是多态化几个子类,可以做到便捷开发,我们或许可以尝试引出一个利率类和支付方式类,来进行不同输入要求下的操作,还有至于折扣,由于只有了两个方面内容,这里若是直接利用if语句判断也未尝不可,也能比较快捷地完成题目要求。后面便是组合和互相连接,使得整体可以正确运行。

类图设计:

可以看到,这次设计完后类要多了很多,但是其实都是基于前面类的细化还有扩展。

新增类:

Rate类:返回具体的利率,延申控制下面的危险,加急,普通货物

Pay类:判别输入信息中需求提到的支付方式延申子类(微信,支付宝,现金)

SHOW类:原先control的变形,改变了一些内容,换了名称

写完代码参数分析:

可以看得出来,在这一次的编译中我进行了部分关键内容的注释,可以便于后期更改理解,还有就是这次的类图比上次的更为复杂,并且新加了很多类,若不是有抽象接口等父类约束内容,子类的理解和扩展会变得十分复杂。

思路讲解:

    没有搞什么花里胡哨的东西,这次便是直接在添加了三个板块后直接在主题上进行链接,使用的也是一些比较基础的语法知识点,然后开始扩展子类功能。对于利率方面便是直接利用输入的不同内容而判别后产生不同效果来进行分类返回利率达到题目要求,而支付方式方面也是直接用判断语句快速通过,但是相比于之前的一次作业,这次在代码的结构上进行了部分的优化和增加,比如全新的类命名和多态利用,使得代码更加全面稳定。
  

问题与解决:

  1:只有异常检测是正确通过的,其他的监测点全是答案错误

  解决:再次读题,发现改进的时候忘记加入对于支付方式的方法辨别了,于是加入后显示便对了

踩坑心得:


    从我上述的类图中可以看出来,两次提交的类图有很大区别,因为在构建完成后实际操作的时候还是发现有很多问题出现,比如有些内容几乎无法靠着思维构造出的板块实现,只能在后期不断更改🤦‍♂️,在大体上第二次改进的时候相比于前一次就好一点, 毕竟在前一次花了很多功夫在类的设计上,现在只需要在原先的基础上去更改。但是还是遇到不少问题。好比如说在二次更改的时候发现原先的代码其实还有很多可以优化的地方,若是不优化的化连读起来都有点困难。只能一遍扩展一遍优化以前的代码,逻辑内容也在脑子里越来越清晰。但是从提供的参数信息可以看出,设计出来的代码框架还是存在一点问题,注释过少或者是类分类和层级数目都有些许问题。也暴露了框架的不稳定性,还花费了大量无意义的时间。

改进建议 :


  在改进上,我觉得这次很有说法。其一就是在进行支付的时候,由于不同支付软件后台利率不同,或许还可能存在使用不同的支付软件可以获得不同的优惠,此外还有支付操作上的复杂程度和时间成本可以相应考虑。可以在支付类中增添新方法来实现。

  其二在飞机运输过程中不同货物可能有着不同的物品性质导致运费成本增加,比如运输水果可能有腐烂率,会加大运输成本,这个可能要在货物类中增加一处方法来计算多余的费用产生和货物属性。

  其三就是在运输货物的时候由于货物数量的多少都会有着相应的飞机乘务服务难度不同,可能要考虑人工服务成本,这个可以试着在主函数输入数据的时候先判别数量,再加载到飞机类中。

  至于可持续性能方面我觉得我的代码还是存在一些问题,比如如果说存在货物为0的情况飞机该作何操作,这个可能要重新改进一下输入类的内容。还有就是在对于支付方式或者是折扣方式方面我选择的是直接与字符串对比,这样可能无法处理输入数据存在细微大小写这种漏洞的错误情况处理。可以尝试在输入类矫正👍👍👍。
  

总结:


    总的来说还是学到了不少东西的,最明显的变化就是对于抽象类的运用和打字变快了好多。。。在对于接口的使用方面还是有太多欠缺,对于接口的理解和运用感觉还是连入门的门槛都差一点,以后要多加联系,还有就是建议以后在老师们的教学或者是知识讲解的时候建议老师们讲解一下每个知识点的主要作用和这样做的好处,比如抽象类的继承为什么比父类到子类的继承要好,为什么?明明实现的效果差不多,如果不是特别明白新知识的好处我们可能更倾向于用自己熟练的老知识而疏于练习新内容。最好是能以它的哪一个语句相当于c语言中的哪一句这种类比来讲解,又熟悉感强还强化c语言的理解,作业单一的pta确实有帮助但是还是只锻炼到了个人的能力,建议开展组队的作业完成内容,加强团队合作能力👌。

  

posted @ 2025-05-20 17:40  吴与思了~  阅读(46)  评论(0)    收藏  举报