1.自动售货机有3个投币孔,分别为1元、5元和10元。 2.售货共有3种饮料供选择,分别为汽水、花茶和咖啡。 3.如投币总额超过销售价格,将可由退币钮找回余额。 4.投币总额或当前值显示在7段数码管上。 5.投币值等于或大于12元时,汽水指示灯亮,表示只可选择汽水。 6.投币值等于或大于15元时,汽水和花茶指示灯亮,表示只可选择汽水和花茶。 7.投币值等于或大于20元时,汽水、花茶和咖啡指示灯亮,表示3种均可选择。 8.按下要饮用的饮料按钮,则相对应的指示灯开始闪烁,3s后自动停止,表示饮料 已经掉出。 9.动作停止后按退币钮,可以退回余额,退回金额如果大于10元,则先退10元再退1 元,如果小于10元则直接退1元的。
时间: 2024-02-23 21:02:33 浏览: 47
以下是一个基于Java的简单自动售货机程序,实现了上述功能:
```java
import java.util.Scanner;
public class VendingMachine {
private int total; // 投币总额
private int balance; // 余额
private String selectedDrink; // 已选择的饮料
private int drinkPrice; // 饮料价格
private String availableDrinks; // 可选饮料
public VendingMachine() {
total = 0;
balance = 0;
selectedDrink = "";
drinkPrice = 0;
availableDrinks = "";
}
public void insertCoin(int coin) {
switch (coin) {
case 1:
case 5:
case 10:
total += coin;
balance += coin;
updateAvailableDrinks();
break;
default:
System.out.println("Invalid coin");
}
}
public void selectDrink(String drink) {
if (availableDrinks.contains(drink) && balance >= drinkPrice) {
selectedDrink = drink;
balance -= drinkPrice;
}
}
public void returnCoins() {
System.out.println("Returned coins:");
while (balance > 0) {
if (balance >= 10) {
System.out.println("10");
balance -= 10;
} else {
System.out.println("1");
balance -= 1;
}
}
total = 0;
selectedDrink = "";
drinkPrice = 0;
updateAvailableDrinks();
}
public void dropDrink() {
if (selectedDrink.equals("soda") && balance >= 3) {
System.out.println("Dropping soda");
balance -= 3;
} else if (selectedDrink.equals("tea") && balance >= 5) {
System.out.println("Dropping tea");
balance -= 5;
} else if (selectedDrink.equals("coffee") && balance >= 8) {
System.out.println("Dropping coffee");
balance -= 8;
}
total = balance;
selectedDrink = "";
drinkPrice = 0;
updateAvailableDrinks();
}
private void updateAvailableDrinks() {
if (total >= 20) {
availableDrinks = "soda,tea,coffee";
drinkPrice = 8;
} else if (total >= 15) {
availableDrinks = "soda,tea";
drinkPrice = 5;
} else if (total >= 12) {
availableDrinks = "soda";
drinkPrice = 3;
} else {
availableDrinks = "";
drinkPrice = 0;
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
VendingMachine vendingMachine = new VendingMachine();
while (true) {
System.out.println("Total: " + vendingMachine.total);
System.out.println("Balance: " + vendingMachine.balance);
System.out.println("Available drinks: " + vendingMachine.availableDrinks);
System.out.println("Selected drink: " + vendingMachine.selectedDrink);
System.out.println("Drink price: " + vendingMachine.drinkPrice);
System.out.println("Insert coin (1, 5, or 10):");
int coin = scanner.nextInt();
vendingMachine.insertCoin(coin);
System.out.println("Select drink (soda, tea, or coffee):");
String drink = scanner.next();
vendingMachine.selectDrink(drink);
System.out.println("Drop drink?");
String drop = scanner.next();
if (drop.equalsIgnoreCase("yes")) {
vendingMachine.dropDrink();
}
System.out.println("Return coins?");
String returnCoins = scanner.next();
if (returnCoins.equalsIgnoreCase("yes")) {
vendingMachine.returnCoins();
}
}
}
}
```
在该示例程序中,我们定义了一个VendingMachine类来表示自动售货机。该类包含了total、balance、selectedDrink、drinkPrice和availableDrinks等属性,分别表示投币总额、余额、已选择的饮料、饮料价格和可选饮料。我们实现了insertCoin、selectDrink、returnCoins和dropDrink等方法来处理投币、选择饮料、退币和掉出饮料等操作。我们还实现了updateAvailableDrinks方法来根据投币总额更新可选饮料和饮料价格。
在main方法中,我们使用Scanner类来读取用户的输入,并调用VendingMachine类中相应的方法来处理用户的操作。我们可以通过不断地输入指令来模拟自动售货机的使用过程。
需要注意的是,该示例程序并没有处理输入错误的情况,也没有处理多个用户同时使用自动售货机的情况。在实际应用中,我们需要更加细致地设计程序,以确保程序的正确性和健壮性。
阅读全文