课程设计麦当劳点餐系统编程要点和坑点总结

麦当劳点餐系统编程要点和坑点总结

WX:help-assignment (可debug 可开课答疑)

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

有些同学总想着订单一完成或者一失败就立马printf输出。这是不对的,因为你输出的时候需要按照订单点单时的先后顺序进行输出,不然对不上号对吧?所以,不要急于输出,其实可以把订单状态保存在订单里面,然后,直到把每一秒的状态都模拟完成了,也就是到达23:59:59,然后再输出所有订单的状态、失败的就fail,成功的就输出时间。
2. 从文件读取数据有问题:
其实多数同学的读取食物信息、w1、w2都没啥问题,问题最多的就是combo的那一行不定长字符串数字,不知道结尾在哪里,那我先前讲公开课的时候就说过,有两种操作方式,第1种是把一整行读取进来,然后依据空格划分每一个字符串,每行第一个就是套餐名,后面都是食物名。第2种是一个小技巧,套餐名都有combo后缀,所以读到带有combo的字符串就是新一轮套餐,相关函数就是strstr。
3. 订单主动找食物or食物主动供应订单?
订单主动找食物这种方式有一个好处,就是订单只要以数组形式保存,天然就是依据开始时间排好序的,这是题目保证的,那我们只要对每一个订单遍历库存中的食物,看是否为本订单需要的食物,即可,这样就自然保证了先来的订单先得到食物供应。但如果是食物主动供应订单,那就需要食物有一个优先队列,这个队列要保证早到的订单排在前面,后到的订单排在后面,略微增加了复杂度。
4. 系统接单状态更新:
如果一个订单的加入,无法立刻完成,就会导致未完成订单数加一,并且此时未完成订单数大于w1,那么接单系统立刻失败。但如果有订单完成后,未完成订单数小于w2,则在下一秒!下一秒!下一秒!
5. 可否提早结束点餐模拟:
当然可以!
只要已完成订单数和失败订单数加起来等于总订单数,就可以停止模拟循环,进行最后的订单输出。更有些同学还能做更好的优化,比如中间有一段时间未完成订单数为0,而还有订单未抵达,完全可以直接使用时间跳转机制,比如一下子计算出1分钟后食物的库存量和下一个食物剩余时间,完全能做到,可以降低很多时间复杂度。但同学们请记住,不是最后一个订单完成了就算全部完成,因为会存在后面的订单比前面的订单先完成

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值