java面向对象自动贩卖机程序包含多态接口继承扫码支付还有异常库存不足
时间: 2023-08-26 12:11:39 浏览: 150
好的,下面是一个更新后的Java面向对象自动贩卖机程序,它包含多态、接口、继承、扫码支付以及库存不足的异常处理。
首先,我们可以定义一个Drink类作为所有饮料的父类,其中包含以下属性:
- name:一个String类型的变量,表示饮料名称。
- price:一个double类型的变量,表示饮料价格。
- count:一个int类型的变量,表示饮料库存。
然后,我们可以定义多个子类,分别代表不同的饮料种类,例如Coke、Sprite和MineralWater。这些子类继承自Drink类,并实现Drink提供的接口。
接口可以定义自动贩卖机的基本功能,例如showDrinks()、insertCoin(double coin)和buy(int index)。这些功能可以被VendingMachine类和Drink类的子类实现,以实现代码的复用和扩展。
扫码支付可以通过继承自insertCoin()方法,并在其中增加扫码支付的逻辑实现。
库存不足的异常处理可以在buy()方法中进行,如果饮料库存不足,则抛出一个StockNotEnoughException异常。
下面是一个简单的示例代码:
```java
public interface IVendingMachine {
void showDrinks();
void insertCoin(double coin);
void buy(int index) throws StockNotEnoughException;
}
public class VendingMachine implements IVendingMachine {
private Drink[] drinks;
private double balance;
public VendingMachine(Drink[] drinks) {
this.drinks = drinks;
this.balance = 0;
}
@Override
public void showDrinks() {
System.out.println("饮料种类\t价格\t库存");
for (int i = 0; i < drinks.length; i++) {
System.out.println((i + 1) + ". " + drinks[i].getName() + "\t" + drinks[i].getPrice() + "\t" + drinks[i].getCount());
}
}
@Override
public void insertCoin(double coin) {
this.balance += coin;
System.out.println("当前余额:" + this.balance);
}
@Override
public void buy(int index) throws StockNotEnoughException {
Drink drink = drinks[index - 1];
if (drink.getCount() == 0) {
throw new StockNotEnoughException(drink.getName() + "已售罄");
}
if (balance >= drink.getPrice()) {
System.out.println("购买成功," + drink.getName() + ",找零:" + (balance - drink.getPrice()));
balance -= drink.getPrice();
drink.setCount(drink.getCount() - 1);
} else {
System.out.println("余额不足,请继续投币");
}
}
public void buyByCode(String code) throws StockNotEnoughException, CodeErrorException {
int index = code.charAt(code.length() - 1) - '0';
if (index < 1 || index > drinks.length) {
throw new CodeErrorException("二维码错误");
}
buy(index);
}
}
public class Drink {
private String name;
private double price;
private int count;
public Drink(String name, double price, int count) {
this.name = name;
this.price = price;
this.count = count;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
public class Coke extends Drink {
public Coke(int count) {
super("可乐", 3.0, count);
}
}
public class Sprite extends Drink {
public Sprite(int count) {
super("雪碧", 2.5, count);
}
}
public class MineralWater extends Drink {
public MineralWater(int count) {
super("矿泉水", 1.5, count);
}
}
public class StockNotEnoughException extends Exception {
public StockNotEnoughException(String message) {
super(message);
}
}
public class CodeErrorException extends Exception {
public CodeErrorException(String message) {
super(message);
}
}
```
在这个示例代码中,我们定义了一个IVendingMachine接口,它包含了所有自动贩卖机的基本功能。然后,我们让VendingMachine类实现了这个接口,以便实现自动贩卖机的功能。同时,Drink类和它的子类也实现了这个接口,以便在需要时扩展自动贩卖机的功能。
使用多态和接口的好处在于,我们可以在不修改原有代码的情况下,扩展自动贩卖机的功能。例如,我们可以定义一个新的子类,代表一种新的饮料种类,然后让它实现IVendingMachine接口,即可将这种新的饮料加入到自动贩卖机中。
在buy()方法中,我们进行了库存不足的异常处理,如果饮料库存不足,则抛出一个StockNotEnoughException异常。这样,我们可以在调用buy()方法时,捕获这个异常并进行相应的处理。
在buyByCode()方法中,我们实现了扫码支付的功能。这个方法首先对二维码进行解析,然后调用buy()方法进行购买操作。如果二维码错误,则抛出一个CodeErrorException异常。
这样,我们就实现了一个包含多态、接口、继承、扫码支付以及库存不足的异常处理的Java面向对象自动贩卖机程序。
阅读全文