求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(); } }
三、开发&测试步骤
- 把上述三个类分别创建为Java文件(文件名要和类名一致,比如
Snack.java、VendingMachine.java、Main.java) - 编译并运行Main类,测试每个功能是否正常:
- 查看零食列表是否正确显示
- 投币时输入非支持面额是否报错
- 购买零食时测试余额不足、库存为0的情况
- 退款和退出功能是否正常
四、扩展优化建议
如果想让项目更完善,可以添加这些功能:
- 支持纸币(20元、50元),同时优化找零逻辑(计算最少数量的硬币/纸币)
- 添加零食补货功能(管理员模式)
- 记录每日销售数据(保存到文件)
- 图形化界面(用Swing或JavaFX实现)
内容的提问来源于stack exchange,提问作者Orozco Cortez Brian
相关产品推荐
相关产品推荐

