首页 > 其他分享 >菜单题目集1~3

菜单题目集1~3

时间:2023-05-22 13:03:11浏览次数:27  
标签:菜单 题目 点菜 计价 菜品 菜名 输入

一、前言

  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来完成对一些问题的解决。

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

标签:菜单,题目,点菜,计价,菜品,菜名,输入
From: https://www.cnblogs.com/1947247665hjl/p/17420330.html

相关文章

  • 题目集 1~3 的总结性 Blog
    前言:题目集1~3的知识点、题量、难度等情况如下:知识点:JAVA基础,基础算法,面向对象程序设计题量:共计3道题目难度:题目从易到难,分为三个层次,分别为入门、中等和高级设计与分析:本次Blog重点分析菜单计价系列题目,即题目集2的7-1、7-2以及题目集3的7-1。这三......
  • 题目奶酪单
    Manacher模板:LuoguP3805反演:LuoguP3279总结......
  • 23-05-20 总结 Meeting rooms 系列3个题目
    题目列表:P1.【easy,会员】MeetingRooms-LeetCodeP2.【Mid,会员】MeetingRoomsII-LeetCodeP3.MeetingRoomsIII-LeetCodeP1.会员题,检测会议是否安排得开思路:非常简单,直接按starttime进行排序,然后检测是否有overlap即可时间:O(nlogn),空间:O(1)classSolut......
  • “百度杯”CTF比赛 九月场 类型:Web 题目名称:SQLi
    收获的知识:重定向一般发生在访问域名而且不加参数或者文件夹名,文件名这样的情况下sql注入也要留意HTTP信息的变化可以利用SQLmap跑一下看看有没有有用的信息不使用单引号和逗号的注入的注入技巧   发现页面空白然后查看源文件发现另一个页面进去后出现 后来手测和用sqlmap......
  • 二次函数题目解析
    写给自己看的,以免明天的我忘记解法(雾[温迪_欸嘿]-题目-问$①$:观察函数图像可得信息:1.$ c>0$ (函数图像与$ y$交点位于$ (0,c)$)2.$ a<0$ (函数开口向下时$a$为负号)3.$a$与$b$异号($a*b>0$[同号]时,对称轴在$y$轴左侧,右侧则为异号)∵$a<......
  • 第四五次菜单计价及期中考试分析与总结
    前言:经过五次大作业的洗礼与折磨,相信大家已经被折磨疯掉了吧,经过上一次的blog总结经验我现在已经学会了blog的总结经验,接下来,我将会从这两次大作业即一次期中考试所涉及的知识点,难度以及题量还有我对这三次作业的看法这四个方面展开,有针对的展开一次总结性blog!1.题量:(1).......
  • 菜单系列及考试分析
    一、前言大一下学期开始,我们开始接触java这门语言,Java具有大部分编程语言所共有的一些特征,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的形式和感觉,但它要比C++语言更易于使用,而且在编程时彻底采用了一种以对象为导向的方式。  Pta作业已经写了五次,除了第一次题......
  • PTA题目集4、5及期中考试的总结性Blog
    一、前言随着对java学习的越来越深入,需要学习的东西也越来越多,第四五次pta题目集主要还是以菜单计价系统为主,相较于以前的菜单计价系统,增加了异常情况的处理,以及特色菜,口味度等功能,使这个菜单计价系统越来越与现实生活相关联,当然与之同时题目的难度当然也是大幅度提高了。虽然这......
  • javaPTA题目集4、5及期中考试总结
    一、前言通过这三周对Java课程的学习及pta大作业的练习,我了解了Java的编译环境如JDK、JRE等等,Java去掉了C++语言的许多功能,是安全的、解释的、高性能的语言,但最主要的还是Java的面向对象性,Java中的类与对象的创建以及类间关系,类与类之间方法属性的调用时常让我头疼,通过pta的练习......
  • MFC程序隐藏托盘+右键关闭菜单
    背景介绍:我的程序是启动后,默认就隐藏到托盘中,等待http请求后,显示界面。所以最小化到托盘的代码,我是写在初始化里面。  正文:一、自定义消息WM_SHOWTASK#defineWM_SHOWTASK(WM_USER+101)  二、在类向导中添加消息处理点击【类向导】、【消息】......