PTA前三次作业
一、前言:总结三次题目集的知识点、题量、难度
1、第一次题目集
题量:偏多
难度:简单,多为基础题
2、第二次题目集
题量:中等
难度:中等
3、第三次题目集
难度:中等偏上上上上
题量;中等
三次题目集知识点总结:
- 使用
Scanner
和StreamTokenizer
进行输入/输出 - 异常处理(
IOException
) - 数组和数组初始化
- 循环和迭代(
for
循环) - 数学计算
- 基本的算术运算
- 使用输入流(
InputStreamReader
)进行操作 - 字符串处理:使用了
String
类的方法来处理字符串,如replace()
、split()
等 - 集合类:使用了集合类如
Set
、LinkedHashSet
、TreeSet
来存储和操作数据
- 封装和访问修饰符(
public
、private
) - 方法重载
- 使用日期和日历进行操作(
Calendar
类) - 异常处理(
ParseException
) - 使用
SimpleDateFormat
进行日期解析和格式化
- 基本的Java语法和结构
- 使用
Scanner
类进行输入/输出 - 条件语句(
if-else
) - 使用
split()
进行字符串操作 - 使用
Integer.parseInt()
进行整数解析 - 方法调用和对象创建
- 面向对象编程概念
- 类和对象的创建
- 数组和数组初始化
- 使用循环(
for
循环)进行迭代 - 方法调用和返回语句
- 使用集合(
ArrayList
)进行操作
二、难题分析和设计
1、 菜单计价程序-1
题目的思路如下:
-
创建一个菜品类(Dish),包含菜品名称(name)和基础价格(unit_price)两个属性。该类还应该有一个方法(getPrice),用于根据点菜的份额计算菜品的价格。
-
创建一个菜谱类(Menu),包含一个菜品数组(dishs),用于保存所有菜品的信息。该类还应该有一个方法(searchDish),根据菜名在菜谱中查找菜品信息并返回相应的Dish对象。
-
创建一个点菜记录类(Record),用于保存订单上的一道菜品记录。该类包含一个Dish对象(d)和份额(portion)两个属性,还有一个方法(getPrice),用于计算本条记录的价格。
-
创建一个订单类(Order),用于保存用户点的所有菜的信息。该类包含一个记录数组(records),保存订单上每一道菜的记录,还有一个方法(getTotalPrice),用于计算订单的总价。此外,还应该有一个方法(addARecord),用于向订单中添加一条菜品信息。
-
根据输入的订单,进行处理和计算。每次读取一行输入作为一条点菜记录,直到输入为"end"为止。对于每一条记录,首先从菜谱中查找菜品信息,如果找不到,则输出错误信息"** does not exist"。如果找到菜品信息,则创建一个记录对象并添加到订单中。
-
在计算订单总价时,遍历订单中的每一条记录,调用记录对象的计价方法(getPrice),并累加价格。
-
输出订单的总价(整数数值),每份菜的价格。
注意:在计算菜品价格时,需要按照题目要求进行四舍五入处理,可以使用Java中的Math.round()方法。
详细代码如下:
dish类:
menu类:
record类:
order类:
主函数:
2、菜单计价程序-2
根据题目要求,我们可以按照以下思路设计点菜计价程序:
-
创建一个菜品类(Dish),包含菜品名称(name)和基础价格(unit_price)两个属性。该类还应该有一个方法(getPrice),用于根据点菜的份额计算菜品的价格。
-
创建一个菜谱类(Menu),包含一个菜品数组(dishs),用于保存所有菜品的信息。该类还应该有一个方法(searchDish),根据菜名在菜谱中查找菜品信息并返回相应的Dish对象。
-
创建一个点菜记录类(Record),用于保存订单上的一道菜品记录。该类包含一个序号(orderNum)、Dish对象(d)、份额(portion)和份数(num)四个属性,还有一个方法(getPrice),用于计算本条记录的价格。
-
创建一个订单类(Order),用于保存用户点的所有菜的信息。该类包含一个记录数组(records),保存订单上每一道菜的记录,还有方法用于添加记录(addARecord)、删除记录(delARecordByOrderNum)和查找记录(findRecordByNum),以及计算订单的总价(getTotalPrice)。
-
根据输入的菜单信息,创建菜谱对象(Menu)并添加菜品信息。
-
根据输入的订单信息,创建订单对象(Order)并添加点菜记录。
-
对于每一条点菜记录,首先从菜谱中查找菜品信息。如果找不到,则输出错误信息"** does not exist",其中**是不能识别的菜名。如果找到菜品信息,则创建一个记录对象(Record)并添加到订单中。
-
对于每一条删除记录,根据序号在订单中查找相应的记录并删除。
-
遍历订单中的每一道菜品记录,计算记录的价格,并输出处理信息(序号+菜名+价格)。
-
输出订单的总价(整数数值)。
注意:在计算菜品价格时,需要按照题目要求进行四舍五入处理,可以使用Java中的Math.round()方法。
注释:菜单2在1的基础上要很多改动,菜单需要自己输入,我的main函数比较绕,用了两个循环来分别输入菜单和点单,其实1个就够了。怎么搞我懒得写了,但菜单3是改了的。
main函数:
dish类:
menu类:
record类:
order类:
3、菜单计价程序-3
思路如下:
- 创建一个
Menu
对象,用于保存菜单信息。 - 创建一个
Order
对象,用于保存订单信息。 - 循环读取输入,根据不同的输入格式执行相应的操作:
- 如果是菜单记录,解析菜名和基础价格,并将菜品信息添加到
Menu
对象中。 - 如果是桌号标识,创建一个新的
Order
对象,解析桌号和时间,并将其作为当前订单。 - 如果是点菜记录,解析序号、菜名、份额和份数,创建一个
Record
对象,将其添加到当前订单的记录中。 - 如果是删除记录,解析序号,根据序号删除当前订单中的对应记录。
- 如果是代点菜信息,解析桌号、序号、菜品名称、份额和分数,根据桌号找到相应的订单,将代点菜信息添加到该订单的记录中。
- 如果是"end",表示输入结束,跳出循环。
- 如果是菜单记录,解析菜名和基础价格,并将菜品信息添加到
- 遍历每个订单,输出订单的处理信息:
- 输出桌号标识。
- 遍历订单的每条记录,输出序号、菜名和价格。
- 如果菜名无法识别,输出"** does not exist"。
- 如果删除记录的序号不存在,输出"delete error"。
- 遍历每个订单,计算并输出订单的总价:
- 输出桌号标识。
- 计算订单的总价,并按照折扣规则进行四舍五入。
- 输出桌号和总价。
以上是整体的思路,根据题目描述的类模板,可以具体实现相应的类和方法。请注意根据需要进行错误处理和边界条件的判断。
date方法判断日期是否合法
dish类:
menu类:
record类:
order类:
三、踩坑心得
-
输入格式验证:需要对输入进行合法性验证,确保输入的格式符合预期,例如检查菜单记录的格式、桌号标识的格式等。如果输入格式错误,需要给出相应的错误提示。
-
菜品识别和匹配:当输入点菜记录或代点菜信息时,需要能够准确地识别菜品名称,并与菜单中的菜品进行匹配。如果菜品名称无法识别或与菜单中的菜品不匹配,需要给出相应的错误提示。
-
订单管理:需要能够正确地管理多个订单,包括创建新订单、查找已存在的订单以及删除订单中的记录等。在处理订单时,需要注意订单的状态以及与桌号的关联。
-
折扣计算和金额处理:根据题目中的折扣规则,需要正确计算每个订单的总价,并按照要求进行四舍五入。在进行金额计算和处理时,需要注意数据类型的选择和精度的处理,以避免舍入误差或溢出等问题。
-
错误处理和异常情况:在程序运行过程中,可能会出现各种错误和异常情况,例如输入错误、订单不存在、删除记录失败等。需要对这些情况进行适当的错误处理,给出明确的错误提示,并保证程序的健壮性和可靠性。
四、总结
这几个题目涉及了餐厅点餐系统的设计与实现。首先,需要进行输入验证,确保用户提供的输入是有效和合法的。这包括检查输入格式、边界值和错误处理。例如,验证用户输入的菜品编号是否存在,验证订单数量是否超出库存限制。
其次,菜品识别与匹配是实现点餐系统的重要部分。系统需要能够根据用户输入的菜品名称或关键词,快速找到匹配的菜品。这可以通过建立菜品名称和关键词的索引,以及使用适当的算法(如字符串匹配算法)来实现。
订单管理是系统的核心功能之一。系统应能够处理用户的点餐请求,并将其转化为订单。订单管理涉及到创建新订单、添加菜品、修改订单、删除菜品等操作。同时,系统还需要能够跟踪订单状态、计算订单总金额,并生成订单确认信息。
折扣计算与金额处理也是餐厅点餐系统中的重要考虑因素。系统需要根据特定的折扣规则和优惠条件,计算订单的折扣金额,并正确处理订单的支付金额。这可能涉及到折扣代码的编写、优惠条件的判断和金额计算的准确性。
最后,系统还需要处理错误和异常情况。例如,用户可能会提供无效的输入、点餐菜品可能会超出库存量、网络连接可能会中断等。系统应具备良好的错误处理机制,能够及时捕获并处理这些异常情况,给用户提供友好的错误提示和解决方案。
综上所述,设计和实现餐厅点餐系统需要考虑输入验证、菜品识别与匹配、订单管理、折扣计算与金额处理,以及错误处理和异常情况等方面的问题。这些问题的解决将有助于创建一个功能完善、用户友好的点餐系统,提升用户体验并提高餐厅的运营效率。