麦当劳点餐系统要点和坑点总结 | 我发现很多同学有几个共性的问题:

麦当劳点餐系统要点和坑点总结 | 我发现很多同学有几个共性的问题:

1. 输出的订单完成时间对不上号:

有些同学总想着订单一完成或者一失败就立马printf输出。这是不对的,因为你输出的时候需要按照订单点单时的先后顺序进行输出,不然对不上号对吧?所以,不要急于输出,其实可以把订单状态保存在订单里面,然后,直到把每一秒的状态都模拟完成了,也就是到达23:59:59,然后再输出所有订单的状态、失败的就fail,成功的就输出时间。

2. 从文件读取数据有问题:

其实多数同学的读取食物信息、w1、w2都没啥问题,问题最多的就是combo的那一行不定长字符串数字,不知道结尾在哪里,那我先前讲公开课的时候就说过,有两种操作方式,第1种是把一整行读取进来,然后依据空格划分每一个字符串,每行第一个就是套餐名,后面都是食物名。第2种是一个小技巧,套餐名都有combo后缀,所以读到带有combo的字符串就是新一轮套餐,相关函数就是strstr。

3. 订单主动找食物or食物主动供应订单?

订单主动找食物这种方式有一个好处,就是订单只要以数组形式保存,天然就是依据开始时间排好序的,这是题目保证的,那我们只要对每一个订单遍历库存中的食物,看是否为本订单需要的食物,即可,这样就自然保证了先来的订单先得到食物供应。但如果是食物主动供应订单,那就需要食物有一个优先队列,这个队列要保证早到的订单排在前面,后到的订单排在后面,略微增加了复杂度。

4. 系统接单状态更新:

如果一个订单的加入,无法立刻完成,就会导致未完成订单数加一,并且此时未完成订单数大于w1,那么接单系统立刻失败。但如果有订单完成后,未完成订单数小于w2,则在下一秒!下一秒!下一秒!(重要的事情说三遍)开始接单,比图片中的这个例子:

2分13秒刚好一个订单完成了,此时未完成订单数为1,单系统的接单状态此刻不发生任何改变,下一秒才开启。所以,2分13秒的新进来的chocolatesauce接单失败,从而显示fail。有些同学这里显示了该订单完成。

5. 可否提早结束点餐模拟:

当然可以!只要已完成订单数和失败订单数加起来等于总订单数,就可以停止模拟循环,进行最后的订单输出。更有些同学还能做更好的优化,比如中间有一段时间未完成订单数为0,而还有订单未抵达,完全可以直接使用时间跳转机制,比如一下子计算出1分钟后食物的库存量和下一个食物剩余时间,完全能做到,可以降低很多时间复杂度。但同学们请记住,不是最后一个订单完成了就算全部完成,因为会存在后面的订单比前面的订单先完成的情况。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现麦当劳点餐功能,可以运用Vue3框架来构建前端界面和处理交互逻辑。首先,需要建立一个Vue实例,并在data选项中定义需要的数据,比如菜单列表、购物车等。然后,可以利用Vue的指令和生命周期钩子来实现不同功能的逻辑。 在前端界面上,可以使用Vue的模板语法来展示菜单项和购物车内容。可以使用v-for指令循环渲染菜单列表,并使用v-bind绑定数据到元素属性上。例如,设置按钮的点击事件,通过v-on指令调用对应的方法。购物车列表也可以通过v-for指令循环渲染,并使用v-model指令实现双向绑定,使得数量的变化能够及时反映在界面上。 对于交互逻辑,可以通过定义对应的方法来处理点击事件、添加菜品到购物车、删除购物车中的菜品等。例如,点击菜单项时,可以调用添加菜品方法,将选中的菜品添加到购物车中。在添加菜品方法中可以判断菜品是否已存在购物车中,如果存在则增加数量,若不存在则向购物车中添加新的菜品。 此外,还可以为购物车添加结算功能。可以在购物车组件中定义计算总价格的方法,并在结算按钮的点击事件中调用该方法,同时可以使用弹窗来显示结算结果和确认订单。 总而言之,通过使用Vue3框架,我们可以方便地实现麦当劳点餐的功能。可以利用Vue的指令、生命周期钩子和模板语法来操作数据和渲染界面,实现菜单的展示、添加菜品到购物车、购物车的展示以及结算等功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值