邮费计算
问题
某 B2C 网站需要计算订单的邮寄费用,大部分情况下,邮费有包裹的总重量决定,但是,当订单的价格超过 300 美元时,提供免费付运。详细规则如下面的 mailCharge 表所示:
field | minVal | maxVal | Charge |
---|---|---|---|
cost | 300 | 1000000 | 0 |
weight | 0 | 1 | 10 |
weight | 1 | 5 | 20 |
weight | 5 | 10 | 25 |
weight | 10 | 1000000 | 40 |
该表记录了各个字段在各种取值范围内时的邮费。例如,第一条记录表示,cost 字段取值在 300 与 1000000 之间的时候,邮费为 0(免费付运);第二条记录表示,weight 字段取值在 0 到 1(kg)之间时,邮费为 10(美元)。
下面是该网站的一些订单:
id | cost | weight(kg) |
---|---|---|
Josh1 | 150 | 6 |
Drake | 100 | 3 |
Megan | 100 | 1 |
Josh2 | 200 | 3 |
Josh3 | 500 | 1 |
请计算这些订单的详细邮费。
思路
大致思路:分别找出资费记录中 filed 字段为 cost 和 weight 的记录,再对着整个订单记录进行循环。先判断订单记录中的 cost 值是否满足免费标准,不满足则根据重量判断邮费档次。
代码
A | B | C | D | |
---|---|---|---|---|
1 | =file("C:\\txt\\mailCharge.txt").import@t() | / 读邮费表 | ||
2 | =file("C:\\txt\\testOrder.txt").import@t() | / 读订单表 | ||
3 | =A1.select(FIELD=="COST") | / 读取免费记录 | ||
4 | =A1.select(FIELD=="WEIGHT").sort(-MINVAL) | / 读取按重量计费记录 | ||
5 | =A2.derive(POSTAGE) | / 给订单表增加邮费记录 | ||
6 | for A5 | |||
7 | if A3.MINVAL < A6.COST | / 当订单价格超过免费标准时 | ||
8 | >A6. POSTAGE= A3.CHARGE | / 免费付运 | ||
9 | next | |||
10 | for A4 | |||
11 | if A6.WEIGHT > B10.MINVAL | / 根据重量判断邮费档次 | ||
12 | >A6. POSTAGE= B10.CHARGE | |||
13 | next A6 |
英文版
数据文件
mailCharge.txt
testOrder.txt