wm的第一次博客作业

发布时间 2023-05-23 20:32:15作者: WM_NN

                                                            PTA前三次作业

一、前言:总结三次题目集的知识点、题量、难度

1、第一次题目集

题量:偏多

难度:简单,多为基础题

 

2、第二次题目集

题量:中等

难度:中等

 

3、第三次题目集

难度:中等偏上上上上

题量;中等

三次题目集知识点总结:

  • 使用ScannerStreamTokenizer进行输入/输出
  • 异常处理(IOException
  • 数组和数组初始化
  • 循环和迭代(for循环)
  • 数学计算
  • 基本的算术运算
  • 使用输入流(InputStreamReader)进行操作
  • 字符串处理:使用了String类的方法来处理字符串,如replace()split()
  • 集合类:使用了集合类如SetLinkedHashSetTreeSet来存储和操作数据
  • 封装和访问修饰符(publicprivate
  • 方法重载
  • 使用日期和日历进行操作(Calendar类)
  • 异常处理(ParseException
  • 使用SimpleDateFormat进行日期解析和格式化
  • 基本的Java语法和结构
  • 使用Scanner类进行输入/输出
  • 条件语句(if-else
  • 使用split()进行字符串操作
  • 使用Integer.parseInt()进行整数解析
  • 方法调用和对象创建
  • 面向对象编程概念
  • 类和对象的创建
  • 数组和数组初始化
  • 使用循环(for循环)进行迭代
  • 方法调用和返回语句
  • 使用集合(ArrayList)进行操作

二、难题分析和设计

1、 菜单计价程序-1

题目的思路如下:

  1. 创建一个菜品类(Dish),包含菜品名称(name)和基础价格(unit_price)两个属性。该类还应该有一个方法(getPrice),用于根据点菜的份额计算菜品的价格。

  2. 创建一个菜谱类(Menu),包含一个菜品数组(dishs),用于保存所有菜品的信息。该类还应该有一个方法(searchDish),根据菜名在菜谱中查找菜品信息并返回相应的Dish对象。

  3. 创建一个点菜记录类(Record),用于保存订单上的一道菜品记录。该类包含一个Dish对象(d)和份额(portion)两个属性,还有一个方法(getPrice),用于计算本条记录的价格。

  4. 创建一个订单类(Order),用于保存用户点的所有菜的信息。该类包含一个记录数组(records),保存订单上每一道菜的记录,还有一个方法(getTotalPrice),用于计算订单的总价。此外,还应该有一个方法(addARecord),用于向订单中添加一条菜品信息。

  5. 根据输入的订单,进行处理和计算。每次读取一行输入作为一条点菜记录,直到输入为"end"为止。对于每一条记录,首先从菜谱中查找菜品信息,如果找不到,则输出错误信息"** does not exist"。如果找到菜品信息,则创建一个记录对象并添加到订单中。

  6. 在计算订单总价时,遍历订单中的每一条记录,调用记录对象的计价方法(getPrice),并累加价格。

  7. 输出订单的总价(整数数值),每份菜的价格。

注意:在计算菜品价格时,需要按照题目要求进行四舍五入处理,可以使用Java中的Math.round()方法。

详细代码如下:

dish类:

 menu类:

 record类:

 order类:

 主函数:

 2、菜单计价程序-2

根据题目要求,我们可以按照以下思路设计点菜计价程序:

  1. 创建一个菜品类(Dish),包含菜品名称(name)和基础价格(unit_price)两个属性。该类还应该有一个方法(getPrice),用于根据点菜的份额计算菜品的价格。

  2. 创建一个菜谱类(Menu),包含一个菜品数组(dishs),用于保存所有菜品的信息。该类还应该有一个方法(searchDish),根据菜名在菜谱中查找菜品信息并返回相应的Dish对象。

  3. 创建一个点菜记录类(Record),用于保存订单上的一道菜品记录。该类包含一个序号(orderNum)、Dish对象(d)、份额(portion)和份数(num)四个属性,还有一个方法(getPrice),用于计算本条记录的价格。

  4. 创建一个订单类(Order),用于保存用户点的所有菜的信息。该类包含一个记录数组(records),保存订单上每一道菜的记录,还有方法用于添加记录(addARecord)、删除记录(delARecordByOrderNum)和查找记录(findRecordByNum),以及计算订单的总价(getTotalPrice)。

  5. 根据输入的菜单信息,创建菜谱对象(Menu)并添加菜品信息。

  6. 根据输入的订单信息,创建订单对象(Order)并添加点菜记录。

  7. 对于每一条点菜记录,首先从菜谱中查找菜品信息。如果找不到,则输出错误信息"** does not exist",其中**是不能识别的菜名。如果找到菜品信息,则创建一个记录对象(Record)并添加到订单中。

  8. 对于每一条删除记录,根据序号在订单中查找相应的记录并删除。

  9. 遍历订单中的每一道菜品记录,计算记录的价格,并输出处理信息(序号+菜名+价格)。

  10. 输出订单的总价(整数数值)。

注意:在计算菜品价格时,需要按照题目要求进行四舍五入处理,可以使用Java中的Math.round()方法。

注释:菜单2在1的基础上要很多改动,菜单需要自己输入,我的main函数比较绕,用了两个循环来分别输入菜单和点单,其实1个就够了。怎么搞我懒得写了,但菜单3是改了的。

main函数:

 

 dish类:

 menu类:

 record类:

 

 order类:

 

 3、菜单计价程序-3

思路如下:

  1. 创建一个Menu对象,用于保存菜单信息。
  2. 创建一个Order对象,用于保存订单信息。
  3. 循环读取输入,根据不同的输入格式执行相应的操作:
    • 如果是菜单记录,解析菜名和基础价格,并将菜品信息添加到Menu对象中。
    • 如果是桌号标识,创建一个新的Order对象,解析桌号和时间,并将其作为当前订单。
    • 如果是点菜记录,解析序号、菜名、份额和份数,创建一个Record对象,将其添加到当前订单的记录中。
    • 如果是删除记录,解析序号,根据序号删除当前订单中的对应记录。
    • 如果是代点菜信息,解析桌号、序号、菜品名称、份额和分数,根据桌号找到相应的订单,将代点菜信息添加到该订单的记录中。
    • 如果是"end",表示输入结束,跳出循环。
  4. 遍历每个订单,输出订单的处理信息:
    • 输出桌号标识。
    • 遍历订单的每条记录,输出序号、菜名和价格。
    • 如果菜名无法识别,输出"** does not exist"。
    • 如果删除记录的序号不存在,输出"delete error"。
  5. 遍历每个订单,计算并输出订单的总价:
    • 输出桌号标识。
    • 计算订单的总价,并按照折扣规则进行四舍五入。
    • 输出桌号和总价。

以上是整体的思路,根据题目描述的类模板,可以具体实现相应的类和方法。请注意根据需要进行错误处理和边界条件的判断。

 
 
 main函数:

 

 

 date方法判断日期是否合法

 dish类:

 menu类:

 record类:

 order类:

 

 三、踩坑心得

  1. 输入格式验证:需要对输入进行合法性验证,确保输入的格式符合预期,例如检查菜单记录的格式、桌号标识的格式等。如果输入格式错误,需要给出相应的错误提示。

  2. 菜品识别和匹配:当输入点菜记录或代点菜信息时,需要能够准确地识别菜品名称,并与菜单中的菜品进行匹配。如果菜品名称无法识别或与菜单中的菜品不匹配,需要给出相应的错误提示。

  3. 订单管理:需要能够正确地管理多个订单,包括创建新订单、查找已存在的订单以及删除订单中的记录等。在处理订单时,需要注意订单的状态以及与桌号的关联。

  4. 折扣计算和金额处理:根据题目中的折扣规则,需要正确计算每个订单的总价,并按照要求进行四舍五入。在进行金额计算和处理时,需要注意数据类型的选择和精度的处理,以避免舍入误差或溢出等问题。

  5. 错误处理和异常情况:在程序运行过程中,可能会出现各种错误和异常情况,例如输入错误、订单不存在、删除记录失败等。需要对这些情况进行适当的错误处理,给出明确的错误提示,并保证程序的健壮性和可靠性。

四、总结

这几个题目涉及了餐厅点餐系统的设计与实现。首先,需要进行输入验证,确保用户提供的输入是有效和合法的。这包括检查输入格式、边界值和错误处理。例如,验证用户输入的菜品编号是否存在,验证订单数量是否超出库存限制。

其次,菜品识别与匹配是实现点餐系统的重要部分。系统需要能够根据用户输入的菜品名称或关键词,快速找到匹配的菜品。这可以通过建立菜品名称和关键词的索引,以及使用适当的算法(如字符串匹配算法)来实现。

订单管理是系统的核心功能之一。系统应能够处理用户的点餐请求,并将其转化为订单。订单管理涉及到创建新订单、添加菜品、修改订单、删除菜品等操作。同时,系统还需要能够跟踪订单状态、计算订单总金额,并生成订单确认信息。

折扣计算与金额处理也是餐厅点餐系统中的重要考虑因素。系统需要根据特定的折扣规则和优惠条件,计算订单的折扣金额,并正确处理订单的支付金额。这可能涉及到折扣代码的编写、优惠条件的判断和金额计算的准确性。

最后,系统还需要处理错误和异常情况。例如,用户可能会提供无效的输入、点餐菜品可能会超出库存量、网络连接可能会中断等。系统应具备良好的错误处理机制,能够及时捕获并处理这些异常情况,给用户提供友好的错误提示和解决方案。

综上所述,设计和实现餐厅点餐系统需要考虑输入验证、菜品识别与匹配、订单管理、折扣计算与金额处理,以及错误处理和异常情况等方面的问题。这些问题的解决将有助于创建一个功能完善、用户友好的点餐系统,提升用户体验并提高餐厅的运营效率。