2013年8月16日代码道场活动纪实
代码道场的参与者:秦鸿源,陈阳,王安宁,丁健勇,李炳岳,黄志强,李剑文,张艺辉,江毅超, 李峰
地点:4G会议室
小组成员丁健勇,贡献了上次代码道场活动的总结:
好的: 成功在一次活动中各个组员都获得了写代码的时间,大家团结一致,也顺利完成了单元测试,再去编写代码,并最终完成了题目的需求
坏的: 导航员很多时候还是没有起到导航的作用。其他组员很多时候也没有用提问的方式,而是直接说出自己的思路和想法,有时候会影响了些代码的组员
这次代码道场活动,我们延续上次的活动,我们来实现扩展功能,
扩展: 单集购买5本,优惠7元。 支持买6送1活动。 支持购买100元送10活动。
我们定义了结帐接口
package cn.pconline.harrypotter;
import java.util.List;
public interface PriceCalculator {
public int calculate(List<Book> list);
}
单集购买5本,优惠7元。方案2
测试代码
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<Book> list = new ArrayList<Book>();
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<Book>();
//单集够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<Book> 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本送一本
测试代码
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<Book> list = new ArrayList<Book>();
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<Book> list){
int saveTimes = 0; //优惠的次数
if(list == null ){
return 0;
}
saveTimes += list.size()/7;
return (list.size()-saveTimes) * 800;
}
}
买100减10(即90)
测试代码
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<Book> books = new ArrayList<Book>();
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<Book> 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;
}
}
![(please configure the [header_logo] section in trac.ini)](http://www1.pconline.com.cn/hr/2009/global/images/logo.gif)