CodeKata-Kata01:超市定价

CodeKata

即编程练习,Dave Thomas已经创造了21个Kata,我们可以在他的博客上使用:
http://codekata.com/

Kata1 超市定价

超市中的商品,有些容易定价,比如:一罐豆子定价$0.65.但是其他商品可能更加复杂,比如:

  • 三个一美元(如果买4,或5个呢?)
  • $1.99每磅 (4盎司要花多少呢?)
  • 买二赠一 (那么第三个商品有没有价格?)

我们需要考虑的问题:

  • 1.小数位的价格是否存在?
  • 2.取整的情况什么时候发生?
  • 3.如何保持审计跟踪你的定价决策?(how do you keep an audit trail of pricing decisions (and do you need to)? )
  • 4.花费 costs 和定价 prices 是一回事儿么?
  • 5.如果货架上有100罐商品是买二送一的,如何定价这些商品?(if a shelf of 100 cans is priced using “buy two, get one free”, how do you value the stock?)

练习目的:

针对这个松散的实验模型进行练习。找到尽量多的解决方法。考虑每个问题的多种权衡方案。

一种答案:

定价模型具有商品类 和 订单类。
商品具有两个属性 价格 和 优惠策略。
优惠策略,满减,满赠等:

//优惠策略1
if totalPrice>=X //满X元减Y元
    total_price -= Y;
//优惠策略2 
if totalNumber>=n //满n个减Z元
{//购买商品数大于n,每n个商品优惠x元。如商品A定价34美分,三个商品A优惠价为1美元,也就是每三个A优惠2美分。
    Z = x*floor(totalNumber/n);
    total_price -= Z;
}
//优惠策略3 
if totalNumber>=n //满n个赠m个
{//购买商品数大于n, 赠送m个
    totalNumber+= m;
}
  1. 不存在小数位的价格。价格最小单位一般为美分,以美元为单位,小数点后两位。采用美分为计量单位,即可用整型变量表示价格,可避免计算机某些语言小数计算出现的问题。
  2. 没有取整的情况。如果某三个一美元(如果买4,或5个)的一种方案,定价为
    C++
    price = ceil(100/3);//34美分

    优惠策略采用上文,策略2。
  3. 维护一个订单类,包括商品,购买数量和优惠策略。
  4. 商品花费和定价不同。定价是商品的属性,花费是价格应用优惠策略的产物。
  5. 100罐商品A应用买2赠1的优惠策略。那么商品A的定价规则为:
    C++
    //单个商品成本价
    costPrice = X;
    //最低价,当定价大于bottomPrice时,才能保证盈利。
    bottomPrice =(costPrice*100)(99*2/3+1);

猜你喜欢

转载自blog.csdn.net/u010679316/article/details/78173706