blog2

前言:总结之前所涉及到的知识点、题量、难度等情况

 显而易见,这两次的PTA作业所考察的知识点以及难度呈现不断变大的趋势。PTA4作业难度较难,在PTA3作业上加大了难度,且输入时加入了特色菜,还有异常情况。而PTA5在PTA上菜单计价程序-4同属菜单计价程序-3的两个不同迭代分支菜单5菜单输入时增加特色菜,特色菜的输入格式:菜品名+英文空格+口味类型+英文空格+基础价格+"T"而且本题要考虑代点菜的情况,当前桌点的菜要加上被其他桌代点的菜综合计算口味度平均值,以及考虑客户订多桌菜的情况,输入时桌号时,增加用户的信息。两次PTA的作业着重练习类的构造方法、方法的调用、参数传递、对象的构造与使用;练习循环结构、控制结构;练习数据的输入与输出;学习编写结构清晰、逻辑正确、功能完善的java代码。学习使用工具对代码进行跟踪调试。理解抽象类与子类的关系,实现继承操作,构造类族;正确使用抽象类和子类实现多态操作;理解接口的意义,并实现行为的多态;理解了解抽象类、类以及接口三者的异同以及使用场合。掌握UML基本用法和画法,并能根据题目描述画出类、接口、类。整体题量较难,大部分的题目的难度适难,而且每个题目都有着鲜明的特点、特征。

 

1.PTA4: 本体大部分内容与菜单计价程序-3相同,但是增加了输入时加入了特色菜,还有异常情况。增加的异常情况有17种,菜单输入时增加特色菜,特色菜的输入格式:菜品名+英文空格+基础价格+"T"。本题要用到的知识点主要是面向对象以及类的设计。

以下是我的实验思路:

1、首先创建Dish类,用于存储菜品信息。该类包括两个实例变量,分别是菜名和单价,以及一个getPrice方法,根据不同份额计算价格。

2、创建Menu类,用于存储菜谱信息。该类包含一个Dish数组,以及searthDish和addDish两个方法,用于根据菜名查找和添加菜品信息。

3、创建Record类,用于存储点菜记录。该类包括订单号、Dish对象、份额以及一个用于计算价格的getPrice方法。

4、创建Order类,用于存储订单信息。该类包括一个Record数组和一个int类型的折扣属性。此外,该类还包括一个addARecord方法,用于添加点菜记录;一个delARecordByOrderNum方法,用于删除指定序号的点菜记录;一个findRecordByNum方法,用于查找指定序号的点菜记录;以及一个getTotalPrice方法,用于计算订单总价。

5、最后,创建Main类,用于实现点菜计价程序的整个流程。应该注意以下几个问题:

①应该定义一个枚举类型来表示星期几和时间段:如SUN, MON, TUE, WED, THU, FRI, SAT和MORNING, AFTERNOON, EVENING以及一个checkTime方法来比较下单时间是否在营业时间段内。

②在处理输入时,应该分别处理菜单和订单,避免将两者混合在一起。

③在读入订单时,需要先读入桌号标识,然后再读入该桌的所有点菜记录,直到下一个桌号标识。

④在计算价格时,应该注意对重复的点菜记录进行合并,避免出现四舍五入误差。同时,应该考虑代点菜的情况,即将其他桌点的菜品价格计入当前桌的总价。

⑤最后输出总价时应该按桌号从小到大的顺序输出,并根据时间区间计算折扣。

下面是简单类图;

 

 

其中,各个类的简要说明如下:

Kitchen(厨房):负责烹饪菜品的类,可能包含多个烹饪员,需要知道菜品信息和需要烹饪的订单信息。

Dish(菜品):保存菜品的名称、单价、制作时间等信息的类,可以使用静态工厂方法创建对象。

Menu(菜单):包含所有可供选择的菜品列表,可以根据菜品名称获取菜品对象信息。

Record(订单记录):保存每道菜品的份额和价格计算方法的类,可能包含代点菜属性。

Order(订单):保存所有点菜记录的列表,包含对订单总价进行计算的方法,以及增加、删除点菜记录的方法。

Table(餐桌):保存桌号和订单信息的类,可以列出点餐列表并对订单进行增加、删除点餐的操作。

Cashier(收银员):对多个餐桌进行订单汇总,计算总价,并输出结果的类。

 

下面是部分Java代码实现:

 

 

 

 

 

 

 

2.PTA5:本题在菜单计价程序-3的基础上增加了部分内容,增加的内容用加粗字体标识。注意不是菜单计价程序-4,本题和菜单计价程序-4同属菜单计价程序-3的两个不同迭代分支。菜单5菜单输入时增加特色菜,特色菜的输入格式:菜品名+英文空格+口味类型+英文空格+基础价格+"T"而且本题要考虑代点菜的情况,当前桌点的菜要加上被其他桌代点的菜综合计算口味度平均值,以及考虑客户订多桌菜的情况,输入时桌号时,增加用户的信息。

 

以下是我的实验思路:

这个点菜计价程序涉及到多个类的设计和实现,可以分为以下几个步骤:

 

首先设计Dish(菜品)类,包含菜品名称、单价、价格计算方法等信息,可以考虑使用静态工厂方法创建菜品对象。

定义Menu(菜谱)类,包含一组菜品对象,可以通过菜品名称在菜谱中查找菜品信息。

设计Record(点菜记录)类,保存一道菜品的点菜信息,包括序号、菜品对象、份额、价格计算等信息。

定义Order(订单)类,保存点菜记录列表和计算订单总价等方法,可以使用ArrayList来保存点菜记录。

接下来定义Table(桌子)类,包含桌号和订单信息,以及添加、删除点菜记录等方法。注意,每条订单信息可能存在代点菜的情况,需要特殊处理。

最后,设计Cashier(收银员)类,根据输入的信息计算全部桌位的总价,并输出相应的结果。

 

总体思路如上,实现时还需要注意边角情况的处理,例如判断时间是否在营业时间内、输入格式是否正确等。同时要注意类之间的联系和数据传递,确保程序能够正确运行

这是简单类图

 

Kitchen(厨房):负责烹饪菜品的类,可能包含多个烹饪员,需要知道菜品信息和需要烹饪的订单信息。

Dish(菜品):保存菜品的名称、单价、制作时间等信息的类,可以使用静态工厂方法创建对象。

Menu(菜单):包含所有可供选择的菜品列表,可以根据菜品名称获取菜品对象信息。

Record(订单记录):保存每道菜品的份额和价格计算方法的类,可能包含代点菜属性。

Order(订单):保存所有点菜记录的列表,包含对订单总价进行计算的方法,以及增加、删除点菜记录的方法。

Table(餐桌):保存桌号和订单信息的类,可以列出点餐列表并对订单进行增加、删除点餐的操作。

Cashier(收银员):对多个餐桌进行订单汇总,计算总价,并输出结果的类。

下面是部分Java代码实现:

 

 

 

 

  1. 期中考试:

期中考试较两次大作业难度更简单,其中包含4个题目,且每个题目难度迭代上升。

测验1-圆类设计

 

该题较为简单,只需要创建一个简单的类即可拿到满分。

以下是我的代码实现:

 

 

测验2-类结构设计

该题目也只设计一个矩形类,其属性由矩形左上角坐标点(x1,y1)及右下角坐标点(x2,y2)组成,其中,坐标点属性包括该坐标点的X轴及Y轴的坐标值(实型数),求得该矩形的面积。类设计如下图

 

该题目代码较简单,只有20多行,以下是我的代码实现:

 

 

 

 

测验3-继承与多态

该题目需要将测验1与测验2的类设计进行合并设计,抽象出Shape父类(抽象类),Circle及Rectangle作为子类,类图如下所示;

 

 

此题目也较为简单,但是有一个测试点较难,我试了好几次都无法通过

 

 

 

 

测验4-抽象类与接口

该题目在测验3的题目基础上,重构类设计,实现列表内图形的排序功能(按照图形的面积进行排序)。
提示:题目中Shape类要实现Comparable接口。

而且此题目还有特殊的输入格式:

输入格式:

输入图形类型(1:圆形;2:矩形;0:结束输入)

输入图形所需参数

输出格式:

按升序排序输出列表中各图形的面积(保留两位小数),各图形面积之间用空格分隔。

输入样例:

在这里给出一组输入。例如:

1

2.3

2

3.2

3

6

5

1

2.3

0

输出样例:

在这里给出相应的输出。例如:

5.60 16.62 16.62

下面是我的部分代码:

 

 

 

 

 

 

 

主要困难以及改进建议

菜单计价程序方面做的不好,类与对象的知识点没有掌握好,功能实现不完整。对多项式求导还有待改进,没能完全实现多项式求导功能,圈复杂度无法控制。在控制圈复杂度上还有待改进,三次题目集的圈复杂度都没在10以下,在降低圈复杂的方面还有待研究,了解圈复杂度过高的原因,如何在设计之初就降低圈复杂度,尽量不要在实现完功能后,在去修改圈复杂度思维僵化,死板。在写题目过程中,不能灵活的调用知识,即使掌握了新知识点,仍然沿用以前的思维考虑题目,查错能力低。不能系统的思考问题产生的原因,思考如何解决问题,而是不断地运行程序,不断地进行输入操作,阅读题目不仔细。在没能完全理解题目要求的情况下,就开始思考如何解决题目,一味的求快,在最后需要花费更多的时间来查错。

 

总结

首先在这里我使用了新的知识java,同时也学到了如何使用字符串中的方法,同时还学到了创建一个新的类,对我在这几道题的帮助特别大,同时我还需要继续学习父类和子类之间如何使用的,同时老师在对我们学习这方面帮助很大,作业和实验每次也都刚刚好,希望老师在课上时能够多多与示例相结合来讲解书本内容。但是这几次作业总体来说自己做的不是很好,虽然if-else知识点掌握情况较好,对变量的定义输出也掌握较好,但是类与对象方面知识点掌握不够好,在以后的学习中,我一定会对自己不足的知识点进行补充。

posted @ 2023-06-28 22:13  霹雳暴龙战士  阅读(63)  评论(0)    收藏  举报