菜单题目集1~3

发布时间 2023-05-22 12:49:56作者: 超级无敌暴龙兽Hjl123

一、前言

  Java这三次题目集中

第一周的九题:题目难度较低,比较基础,适合过渡。

第二周的四题:题目难度较第一周有较大升级,java的面向对象性开始体现,类间关系及类与类之间属性方法的调用难度加大,java的难处初显。

第三周的七题:第三周的题目难易混杂,7-1 菜单计价程序-3是第二周两个菜单题目的延续且难度较大,第三、四题也包括新的知识点HashSet、TreeMap的使用。

总的来说,这三周的pta的大作业题目都非常的有价值。

二、设计与分析

我这里对其中关键的三道菜单计价题进行分析:

1.菜单计价程序-1

1.代码:

 

2.类图:

 

3.分析:

这是菜单类的第一大题,该题的菜品比较单一,代码也没那么复杂。该题涉及到了类与类之间的属性方法的相互调用,该题我一共创建了五个类:主类、菜品类、菜谱类、点菜记录类、订单类;在菜品类中有菜名属性name和菜品单价unit_price和getPrice方法该方法中需传参,将菜品的份额portion传入该方法中,在该方法中用switch语句实现对每一道菜计算价格,在菜单类我创建了菜品数组用来保存所有菜品信息,并在该菜单类中的Dish searthDish(String dishName)方法中对菜单中的菜品信息(菜名、单价)做了初始化操作并且设置了比对功能,如果顾客所点的菜与菜单中的菜不匹配则print该菜does not exist,若匹配成功则返回顾客所点菜的菜名。在点菜记录类中我也创建了菜品类Dish的对象和份额portion属性,该订单中的getPrice()方法与Dish类重名,可是两者内容是不同的,Record类中的getPrice方法是用来计价计算本条记录的价格。订单类中创建了点菜记录类Record的对象,并创建了getTotalPrice()方法用来计算点菜记录的总价,也创建了addARecord(String dishName,int portion)的方法用来实现不同顾客不同点菜记录的需求。在创建好这些必须类的内容后,我们再开始主类内容,该题输入主要是菜名和份额,也就是输入字符型和整形数据,最后输出菜的总价或某某菜不存在,所以创建字符变量a接收输入的字符型数据,整形变量b来接收输入菜名的份额,并创建order类与Menu类对象分别为c和n,只要变量a接收的数据不是end,b变量接收份额,并且c变量也继续接收储存新的点菜记录,这之后还要运用Menu对象n中的方法searthDish(String dishName)与点菜记录Record比对,存在则输出总价,若有不存在的菜名,则输出dishname+does not exist和总价。

 

2.菜单计价程序-2

1.代码:

 3.类图:

 

3.分析:

该菜单计价程序二相比与计价程序一增加了用户删菜的功能,模板其实是和菜单计价程序-1差不多的,不过该题的菜单并不是固定的,不想第一题那样就四道菜,它可能就两道菜,这是因为该题的输入格式相比较菜单计价程序-1不同了,该题先输入菜品记录格式也就是菜单,接着输入点菜记录格式,接着输入删除记录格式或这end,这里就有一个小技巧了,由于第一题的数据输入我将输入的数据分为String类型和int类型来分别表示菜名和份额,但由于第二题它并不是按照一定的顺序输入一个String类型数据接着输入int类型,它可能int类型数据输入完还要输入int类型数据这样输入格式就愈加复杂了,我发现菜单类的输入与订单类的输入两个输入的长度是不同的,所以我创建了一个字符数组b以空格字符间隔,这样只要满足条件a.length==2&&!a[1].equals("delete")就显而易见是菜单的输入,满足条件a.length==4那么就是订单的输入,如果满足条件a[1].equals("delete")那就是要执行删菜的操作了,调用订单类order中方法delARecordByOrderNum()实现删除菜品并计总价时排除该菜品。

 

3.菜单计价程序-3

菜单计价程序的第三题是第二题的进阶版,新增加桌类table类计算价格按桌号,并且添加代点菜功能,代点菜是当前桌为另外一桌点菜,信息中的桌号是另一桌的桌号,带点菜的价格计算在当前这一桌。还添加了折扣的计算方法,每桌的总价等于那一桌所有菜的价格之和乘以折扣。如存在小数,按四舍五入规则计算,保留整数。折扣的计算方法(注:以下时间段均按闭区间计算):

周一至周五营业时间与折扣:晚上(17:00-20:30)8折,周一至周五中午(10:30--14:30)6折,其余时间不营业。

周末全价,营业时间:9:30-21:30

如果下单时间不在营业范围内,输出"table " + t.tableNum + " out of opening hours"

 

三、踩坑心得

看题要看完全,考虑完全,不然到后面都不知道自己错哪。

 测试点有很多,一旦你忽略了某个细节,就会有某个测试点对应错误。

四、主要困难以及改进建议

困难:在写代码的过程中,总是因为对知识点不熟悉而去查资料,并且容易搞混类与类之间的关系。

建议:可以先画出类图,再根据类图写代码。

五、总结

通过这三次的题目集,我了解了面向对象的思想,对java中的类有了更为深刻的理解,让我初步认识到java与上学期学的c语言的区别与相似之处,以及让我认识到如何使用java来完成对一些问题的解决。

建议:希望以后的题目难度不要太大,一周的时间着实有点紧张。