You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求Java实现零食自动销售代码(学校项目)技术方案指导

Java零食自动售货机项目开发指南

一、先明确核心功能

先把项目必须实现的核心功能列出来,避免开发跑偏:

  • 展示在售零食的名称、价格、剩余库存
  • 接收用户投币(支持常见面额:1元、5元、10元)
  • 用户选择零食后,判断投币金额是否足够、库存是否充足
  • 完成购买后自动计算并找零
  • 更新对应零食的库存数量
  • 提供退出售货机的选项

二、设计类结构(面向对象核心)

Java是面向对象语言,拆分以下3个核心类即可满足基础需求:

1. Snack类(零食实体)

用来封装每款零食的属性,代码示例:

public class Snack {
    private int id;
    private String name;
    private double price;
    private int stock;

    // 构造方法
    public Snack(int id, String name, double price, int stock) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.stock = stock;
    }

    // Getter和Setter方法
    public int getId() { return id; }
    public String getName() { return name; }
    public double getPrice() { return price; }
    public int getStock() { return stock; }
    public void setStock(int stock) { this.stock = stock; }
}

2. VendingMachine类(售货机核心逻辑)

封装售货机的所有操作逻辑,代码示例:

import java.util.ArrayList;
import java.util.List;

public class VendingMachine {
    private List<Snack> snacks;
    private double insertedMoney;

    public VendingMachine() {
        snacks = new ArrayList<>();
        insertedMoney = 0.0;
        // 初始化几款零食
        snacks.add(new Snack(1, "薯片", 3.5, 10));
        snacks.add(new Snack(2, "可乐", 2.5, 15));
        snacks.add(new Snack(3, "巧克力", 5.0, 8));
    }

    // 展示所有零食
    public void displaySnacks() {
        System.out.println("=== 零食列表 ===");
        for (Snack snack : snacks) {
            System.out.printf("ID:%d | 名称:%s | 价格:%.1f元 | 库存:%d\n",
                    snack.getId(), snack.getName(), snack.getPrice(), snack.getStock());
        }
        System.out.println("===============");
    }

    // 投币方法
    public void insertMoney(double amount) {
        if (amount == 1 || amount == 5 || amount == 10) {
            insertedMoney += amount;
            System.out.printf("已投币%.0f元,当前余额:%.1f元\n", amount, insertedMoney);
        } else {
            System.out.println("仅支持1元、5元、10元硬币!");
        }
    }

    // 购买零食方法
    public void buySnack(int snackId) {
        Snack selectedSnack = null;
        for (Snack snack : snacks) {
            if (snack.getId() == snackId) {
                selectedSnack = snack;
                break;
            }
        }

        if (selectedSnack == null) {
            System.out.println("不存在该ID的零食!");
            return;
        }

        if (selectedSnack.getStock() <= 0) {
            System.out.println("该零食已售罄!");
            return;
        }

        if (insertedMoney < selectedSnack.getPrice()) {
            System.out.printf("余额不足,还需补充%.1f元\n", selectedSnack.getPrice() - insertedMoney);
            return;
        }

        // 完成购买
        selectedSnack.setStock(selectedSnack.getStock() - 1);
        double change = insertedMoney - selectedSnack.getPrice();
        insertedMoney = 0.0; // 重置余额
        System.out.printf("购买成功!您的%s已出货,找零%.1f元\n", selectedSnack.getName(), change);
    }

    // 退款方法
    public void refund() {
        if (insertedMoney > 0) {
            System.out.printf("已退款%.1f元\n", insertedMoney);
            insertedMoney = 0.0;
        } else {
            System.out.println("当前无余额可退!");
        }
    }
}

3. Main类(控制台交互入口)

用来实现用户和售货机的交互,代码示例:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        VendingMachine machine = new VendingMachine();
        Scanner scanner = new Scanner(System.in);
        boolean running = true;

        while (running) {
            System.out.println("\n=== 零食自动售货机 ===");
            System.out.println("1. 查看零食列表");
            System.out.println("2. 投币");
            System.out.println("3. 购买零食");
            System.out.println("4. 退款");
            System.out.println("5. 退出");
            System.out.print("请选择操作:");
            int choice = scanner.nextInt();

            switch (choice) {
                case 1:
                    machine.displaySnacks();
                    break;
                case 2:
                    System.out.print("请输入投币金额(1/5/10元):");
                    double amount = scanner.nextDouble();
                    machine.insertMoney(amount);
                    break;
                case 3:
                    machine.displaySnacks();
                    System.out.print("请输入要购买的零食ID:");
                    int snackId = scanner.nextInt();
                    machine.buySnack(snackId);
                    break;
                case 4:
                    machine.refund();
                    break;
                case 5:
                    running = false;
                    System.out.println("感谢使用,再见!");
                    break;
                default:
                    System.out.println("无效选项,请重新选择!");
            }
        }
        scanner.close();
    }
}

三、开发&测试步骤

  1. 把上述三个类分别创建为Java文件(文件名要和类名一致,比如Snack.java、VendingMachine.java、Main.java)
  2. 编译并运行Main类,测试每个功能是否正常:
    • 查看零食列表是否正确显示
    • 投币时输入非支持面额是否报错
    • 购买零食时测试余额不足、库存为0的情况
    • 退款和退出功能是否正常

四、扩展优化建议

如果想让项目更完善,可以添加这些功能:

  • 支持纸币(20元、50元),同时优化找零逻辑(计算最少数量的硬币/纸币)
  • 添加零食补货功能(管理员模式)
  • 记录每日销售数据(保存到文件)
  • 图形化界面(用Swing或JavaFX实现)

内容的提问来源于stack exchange,提问作者Orozco Cortez Brian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:50:25