'''2013年8月16日代码道场活动纪实'''[[BR]] [[BR]] '''代码道场的参与者''':秦鸿源,陈阳,王安宁,丁健勇,李炳岳,黄志强,李剑文,张艺辉,江毅超, 李峰[[BR]] [[BR]] '''地点''':4G会议室[[BR]] 小组成员丁健勇,贡献了上次代码道场活动的总结:[[BR]] '''好的:''' 成功在一次活动中各个组员都获得了写代码的时间,大家团结一致,也顺利完成了单元测试,再去编写代码,并最终完成了题目的需求[[BR]] '''坏的:''' 导航员很多时候还是没有起到导航的作用。其他组员很多时候也没有用提问的方式,而是直接说出自己的思路和想法,有时候会影响了些代码的组员[[BR]] 这次代码道场活动,我们延续上次的活动,我们来实现扩展功能, {{{ 扩展: 单集购买5本,优惠7元。 支持买6送1活动。 支持购买100元送10活动。 }}} 我们定义了结帐接口 {{{ package cn.pconline.harrypotter; import java.util.List; public interface PriceCalculator { public int calculate(List list); } }}} [[BR]] 单集购买5本,优惠7元。方案2 [[BR]] 测试代码 {{{ package cn.pconline.harrypotter; import java.util.ArrayList; import java.util.List; import junit.framework.Assert; import org.junit.Test; /** * 测试"单集购买5本,优惠7元" 计价优惠方式 * @author pc * */ public class DiscountCashierTest { DiscountCashier dc = new DiscountCashier(); @Test public void testCalculate() { //单集不够5本,总数够5本 List list = new ArrayList(); Book book1 = new Book(BookType.one); Book book2 = new Book(BookType.two); Book book3 = new Book(BookType.three); Book book4 = new Book(BookType.four); Book book5 = new Book(BookType.five); list.add(book1); list.add(book2); list.add(book3); list.add(book4); list.add(book5); int price = dc.calculate(list); Assert.assertEquals(5 * 800, price); list = new ArrayList(); //单集够5本,第一集够5本 list.add(book1); list.add(book1); list.add(book1); list.add(book1); list.add(book1); list.add(book2); price = dc.calculate(list); Assert.assertEquals(6 * 800 - 700, price); //多集够5本,第二集够5本 list.add(book2); list.add(book2); list.add(book2); list.add(book2); price = dc.calculate(list); Assert.assertEquals((10 * 800) - (2 * 700), price); // 第一集有10本,第二集5本 list.add(book1); list.add(book1); list.add(book1); list.add(book1); list.add(book1); price = dc.calculate(list); Assert.assertEquals((15 * 800) - (3 * 700), price); } } }}} 实现代码 {{{ package cn.pconline.harrypotter; import java.util.List; public class DiscountCashier implements PriceCalculator { @Override public int calculate(List list) { //满足优惠的次数 int count = 0; if(list == null){ return 0; }else{ if(list.size() >= 5){ for(BookType type : BookType.values()){ int num = BookStore.getBookNumByType(type, list); if( num >= 5){ count += num / 5; }; } return (800 * list.size()) - (count * 700); }else{ return 800 * list.size(); } } } } }}} 送书活动,买7本送一本 [[BR]] 测试代码 {{{ package cn.pconline.harrypotter; import java.util.ArrayList; import java.util.List; import junit.framework.Assert; import org.junit.Test; public class SendBookActivityTest { SendBookActivity dc = new SendBookActivity(); @Test public void testCalulate() throws Exception { //少于7本的情况 List list = new ArrayList(); Book book1 = new Book(BookType.one); Book book2 = new Book(BookType.two); list.add(book1); list.add(book1); list.add(book1); list.add(book1); list.add(book1); list.add(book2); int price = dc.calculate(list); Assert.assertEquals(6 * 800, price); //等于7本的情况 list.add(book2); price = dc.calculate(list); Assert.assertEquals((7-1) * 800, price); //等于14本 for(int i = 0 ; i < 7; i ++){ list.add(book1); } price = dc.calculate(list); Assert.assertEquals((14 - 2) * 800,price); } } }}} 实现代码 {{{ package cn.pconline.harrypotter; import java.util.List; /** * 送书活动,买7本送一本 * @author pc * */ public class SendBookActivity implements PriceCalculator{ public int calculate(List list){ int saveTimes = 0; //优惠的次数 if(list == null ){ return 0; } saveTimes += list.size()/7; return (list.size()-saveTimes) * 800; } } }}} 买100减10(即90) [[BR]] 测试代码 {{{ package cn.pconline.harrypotter; import java.util.ArrayList; import java.util.List; import org.junit.Assert; import org.junit.Test; public class SendMoneyActivityTest { @Test public void testCalculate() { Book book = new Book(BookType.one); List books = new ArrayList(); PriceCalculator pc = new SendMoneyActivity(); // 不足100块 books.add(book); books.add(book); int price = pc.calculate(books); Assert.assertEquals( 800 * 2 , price); // 大于100块 for(int i = 0 ;i < 11 ;i++){ books.add(book); } price = pc.calculate(books); Assert.assertEquals( 800 * 13 - 1000 , price); // 200块以上 for(int j = 0; j < 13; j++){ books.add(book); } price = pc.calculate(books); Assert.assertEquals((800 * 26) - (20 * 100), price); } } }}} 实现代码 {{{ package cn.pconline.harrypotter; import java.util.List; /** * @author pc * 买100减10(即90) */ public class SendMoneyActivity implements PriceCalculator { @Override public int calculate(List list) { int price = 0; //List为空(没有书) if(list == null || list.isEmpty()){ return price; } //List不为空(有书) int sumOfPrice = list.size() * 800; price = sumOfPrice - (sumOfPrice / 10000) * 1000; return price; } } }}}