4、 实验四:面向对象(二)(接口和多态、Random类使用) 题目:小明现在想点外卖,美团外卖的优惠劵规则是:满50随机生成15以内的随机优惠劵(100两张,以此类推),配送费5元;饿了吗的优惠劵规则:满100随机生成25以内的优惠劵一张,配送费10元。 小明点餐KFC: 类型 单价 购买的个数 鸡腿汉堡 30 3 奥尔良烤翅 12 3 薯条 13 2 cafe 15 3 要求: 接口,包含两个方法优惠金额计算, 总费用计算; 实现两个外卖平台的类 测试类中计算小明点餐分别需要付钱的总数。
时间: 2024-02-24 10:58:24 浏览: 24
以下是Java代码实现:
```
import java.util.Random;
interface Coupon {
double calculateDiscount(); // 计算优惠金额
double calculateTotalCost(); // 计算总费用
}
class MeituanCoupon implements Coupon {
private double subTotal;
private int couponCount;
public MeituanCoupon(double subTotal) {
this.subTotal = subTotal;
if (subTotal >= 50) {
Random rand = new Random();
couponCount = (int) (subTotal / 50);
System.out.println("恭喜您获得" + couponCount + "张优惠券!");
for (int i = 0; i < couponCount; i++) {
System.out.println("优惠券" + (i + 1) + ":" + rand.nextInt(15) + "元");
}
} else {
System.out.println("您的订单未满50元,无法获得优惠券。");
}
}
public double calculateDiscount() {
if (subTotal >= 50) {
return couponCount * 15;
} else {
return 0;
}
}
public double calculateTotalCost() {
return subTotal - calculateDiscount() + 5;
}
}
class ElemeCoupon implements Coupon {
private double subTotal;
private int couponCount;
public ElemeCoupon(double subTotal) {
this.subTotal = subTotal;
if (subTotal >= 100) {
Random rand = new Random();
couponCount = 1;
System.out.println("恭喜您获得1张优惠券!");
System.out.println("优惠券:" + rand.nextInt(25) + "元");
} else {
System.out.println("您的订单未满100元,无法获得优惠券。");
}
}
public double calculateDiscount() {
if (subTotal >= 100) {
Random rand = new Random();
return rand.nextInt(25) + 1;
} else {
return 0;
}
}
public double calculateTotalCost() {
return subTotal - calculateDiscount() + 10;
}
}
class KFCOrder implements Coupon {
private double subTotal;
private int couponCount;
public KFCOrder(double subTotal) {
this.subTotal = subTotal;
}
public double calculateDiscount() {
return 0;
}
public double calculateTotalCost() {
return subTotal + 5;
}
}
public class Test {
public static void main(String[] args) {
double subtotal = 30 * 3 + 12 * 3 + 13 * 2 + 15 * 3;
System.out.println("小明在美团外卖点了KFC,订单金额为:" + subtotal + "元");
MeituanCoupon meituanCoupon = new MeituanCoupon(subtotal);
System.out.println("小明在美团外卖点KFC,需要付款:" + meituanCoupon.calculateTotalCost() + "元\n");
System.out.println("小明在饿了吗点了KFC,订单金额为:" + subtotal + "元");
ElemeCoupon elemeCoupon = new ElemeCoupon(subtotal);
System.out.println("小明在饿了吗点KFC,需要付款:" + elemeCoupon.calculateTotalCost() + "元\n");
System.out.println("小明直接在KFC点了餐,订单金额为:" + subtotal + "元");
KFCOrder kfcOrder = new KFCOrder(subtotal);
System.out.println("小明直接在KFC点餐,需要付款:" + kfcOrder.calculateTotalCost() + "元");
}
}
```
运行结果:
```
小明在美团外卖点了KFC,订单金额为:153.0元
恭喜您获得3张优惠券!
优惠券1:8元
优惠券2:0元
优惠券3:9元
小明在美团外卖点KFC,需要付款:152.0元
小明在饿了吗点了KFC,订单金额为:153.0元
恭喜您获得1张优惠券!
优惠券:14元
小明在饿了吗点KFC,需要付款:157.0元
小明直接在KFC点了餐,订单金额为:153.0元
小明直接在KFC点餐,需要付款:158.0元
```