很久很久以前,有个音像店经营VCD,DVD,D9,磁带等商品。这几天生意不好老板想打折:
买VCD 满800元送珍藏版蓝光碟片一张;
D9满8张打九折
请用java代码实现;
思考:因为音像店的种类很多,但是都用共性,如:商品名称、价格、数量等,故抽出中的音像制品类,各个子品种继承音像制品类,在添加自己特有的属性比如:内容,歌手姓名,赠送礼物等;
总的音像制品类:
package com.hubin.practice.pojo;
public class Audiovisual {
private String name;
private Double price;
private Integer num;
private Double signalTotalPrice;
public Audiovisual() {
super();
}
public Audiovisual(String name, Double price, Integer num,
Double signalTotalPrice) {
super();
this.name = name;
this.price = price;
this.num = num;
this.signalTotalPrice = signalTotalPrice;
}
public Double getSignalTotalPrice() {
return signalTotalPrice;
}
public void setSignalTotalPrice(Double signalTotalPrice) {
this.signalTotalPrice = signalTotalPrice;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
@Override
public String toString() {
return "商品名称" + name + "商品价格" + price + "商品数量"
+ num + "商品单价" + signalTotalPrice ;
}
}
VCD类:
package com.hubin.practice.pojo;
public class VCD extends Audiovisual{
private String gift;
public VCD(String gift) {
this.gift = gift;
}
public VCD() {
super();
}
public String getGift() {
return gift;
}
public void setGift(String gift) {
this.gift = gift;
}
@Override
public String toString() {
return "商品名称" + getName()
+ "商品单价" + getPrice() + "商品数量" + getNum() + "单品总价为"
+ getSignalTotalPrice()
;
}
}
D9类
package com.hubin.practice.pojo;
public class D9 extends Audiovisual{
}
通过在页面输入名称,数量,价格使用代码来判断是否赠送礼物,是否打折,并且打印单品的明细,当输入商品名称为0,点击回车的时候,最后显示总的价格,并且打印出来
package com.hubin.practice.Program;
import java.util.Scanner;
import com.hubin.practice.pojo.Audiovisual;
import com.hubin.practice.pojo.D9;
import com.hubin.practice.pojo.VCD;
public class Program {
public static void main(String[] args) {
Double totalPrice = 0.0;
while (true) {
System.out.println("请输入名字");
Scanner sc = new Scanner(System.in);
String sysIn = sc.nextLine();
if ("0".equals(sysIn)) {
break;
}
Audiovisual aud = getProduct(sysIn);
aud = getSpecificProduct(aud);
totalPrice += aud.getSignalTotalPrice();
}
System.out.println("总的价格是" + totalPrice + "元");
}
public static Audiovisual getProduct(String name) {
Audiovisual aud = null;
if ("VCD".equals(name)) {
aud = new VCD();
} else if ("D9".equals(name)) {
aud = new D9();
}
System.out.println("请输入价格");
Scanner scPrice = new Scanner(System.in);
Double price = scPrice.nextDouble();
System.out.println("请输入数量");
Scanner scNum = new Scanner(System.in);
Integer num = scPrice.nextInt();
aud.setName(name);
aud.setPrice(price);
aud.setNum(num);
return aud;
}
public static Audiovisual getSpecificProduct(Audiovisual aud) {
Double signalTotalPrice = (double) (aud.getNum() * aud.getPrice());
aud.setSignalTotalPrice(signalTotalPrice);
if ("VCD".equals(aud.getName())) {
if (signalTotalPrice > 800) {
VCD vcd = (VCD) aud;
vcd.setGift("蓝光碟片一张");
System.out.println(vcd.toString()+ "价格满200元赠送" + vcd.getGift());
return vcd;
}
}
if ("D9".equals(aud.getName())) {
if (aud.getNum() > 8) {
aud.setSignalTotalPrice(signalTotalPrice * 0.9);
}
}
System.out.println(aud.toString());
return aud;
}
}
这段代码虽然能够实现预想的功能,但是感觉不够整洁,扩展性也不好,希望自己以后多读书后可以改的更高效,这各就放这里给小白的我立一个flag。