3.14饮料自动售货机

news/2025/4/1 18:43:39/文章来源:https://www.cnblogs.com/yindantong/p/18795273

实现步骤

  1. 创建VendingMachine

  2. 实现饮料选择逻辑

实现代码(Java Swing)

java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class VendingMachineGUI extends JFrame {private JButton orangeJuiceButton;private JButton beerButton;private JButton coin5Button;private JButton coin10Button;private JTextArea displayArea;private int currentCoin = 0;public VendingMachineGUI() {setTitle("饮料自动售货机");setSize(400, 400);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLayout(new BorderLayout(10, 10));// 投币面板JPanel coinPanel = new JPanel(new GridLayout(1, 2, 5, 5));coin5Button = new JButton("投入5角");coin10Button = new JButton("投入1元");coinPanel.add(coin5Button);coinPanel.add(coin10Button);// 饮料选择面板JPanel drinkPanel = new JPanel(new GridLayout(1, 2, 5, 5));orangeJuiceButton = new JButton("橙汁");beerButton = new JButton("啤酒");drinkPanel.add(orangeJuiceButton);drinkPanel.add(beerButton);// 显示区域displayArea = new JTextArea();displayArea.setEditable(false);displayArea.setFont(new Font("微软雅黑", Font.PLAIN, 16));JScrollPane scrollPane = new JScrollPane(displayArea);// 状态标签JLabel stateLabel = new JLabel("当前投币: 0角", JLabel.CENTER);stateLabel.setFont(new Font("微软雅黑", Font.BOLD, 14));// 添加组件add(coinPanel, BorderLayout.NORTH);add(drinkPanel, BorderLayout.CENTER);add(scrollPane, BorderLayout.SOUTH);add(stateLabel, BorderLayout.WEST);// 添加事件监听器coin5Button.addActionListener(e -> {currentCoin += 5;updateStateLabel(stateLabel);displayArea.append("已投入5角钱\n");});coin10Button.addActionListener(e -> {currentCoin += 10;updateStateLabel(stateLabel);displayArea.append("已投入1元钱\n");});orangeJuiceButton.addActionListener(e -> selectDrink("橙汁"));beerButton.addActionListener(e -> selectDrink("啤酒"));setVisible(true);}private void updateStateLabel(JLabel label) {label.setText("当前投币: " + currentCoin + "角");}private void selectDrink(String drink) {if (currentCoin < 5) {displayArea.append("投币不足,请至少投入5角钱\n");return;}if (currentCoin == 5) {displayArea.append("已选择" + drink + ",请取用\n");currentCoin = 0;} else {displayArea.append("已选择" + drink + ",请取用并找回5角钱\n");currentCoin = 0;}// 显示饮料图片showDrinkImage(drink);}private void showDrinkImage(String drink) {JFrame imageFrame = new JFrame(drink);imageFrame.setSize(200, 300);JLabel imageLabel = new JLabel();imageLabel.setHorizontalAlignment(JLabel.CENTER);if (drink.equals("橙汁")) {imageLabel.setIcon(new ImageIcon("orange_juice.png")); // 替换为实际图片路径imageLabel.setText("🍊 橙汁"); // 如果没有图片,使用emoji} else {imageLabel.setIcon(new ImageIcon("beer.png")); // 替换为实际图片路径imageLabel.setText("🍺 啤酒"); // 如果没有图片,使用emoji}imageFrame.add(imageLabel);imageFrame.setVisible(true);}public static void main(String[] args) {SwingUtilities.invokeLater(() -> new VendingMachineGUI());}
}

运行结果示例

饮料自动售货机界面

  1. 点击"投入5角"或"投入1元"按钮投币

  2. 当前投币金额显示在左侧

  3. 选择"橙汁"或"啤酒"按钮

  4. 结果显示在下方文本区域

  5. 弹出窗口显示所选饮料的图片或emoji表示

因果图测试用例

  1. 投入5角,选择橙汁 → 出橙汁

  2. 投入5角,选择啤酒 → 出啤酒

  3. 投入1元,选择橙汁 → 出橙汁+退5角

  4. 投入1元,选择啤酒 → 出啤酒+退5角

  5. 投入其他金额 → 提示错误

  6. 选择其他选项 → 提示错误

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/906551.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【一步步开发AI运动APP】三、使用相机组件抽帧

之前我们为您分享了【一步步开发AI运动小程序】开发系列博文,通过该系列博文,很多开发者开发出了很多精美的AI健身、线上运动赛事、AI学生体测、美体、康复锻炼等应用场景的AI运动小程序;为了帮助开发者继续深耕AI运动领域市场,今天开始我们将为您分享新系列【一步步开发AI…

Docker Desktop,docker save 报错:Error response from daemon: write xxx : no space left on device

前言 在使用 docker save 时报错:docker save lanling-text-trainer:v1 -o lanling-text-trainer.tar Error response from daemon: write /var/lib/docker/tmp/docker-export-1292051631/34bda97aaedafa599cb48e60f010ce2e474f725817509a2153979af694021656/layer.tar: no sp…

19K+ Star!一款基于 Vue3 实现的后台管理系统!

vue-manage-system —— 一套基于 Vue3 + Element Plus + TypeScript 实现的多功能的后台前端模板框架,适用于绝大部分的后台管理系统开发。大家好,我是 Java陈序员。 今天,给大家推荐一款基于 Vue3 实现的后台管理系统前端模板框架,适合外包项目,实现快速交付!关注微信公…

3.10黑盒测试

实验一 黑盒测试 一、实验目的 1、 掌握黑盒测试的基础知识; 2、 掌握黑盒测试的检查内容及测试目的; 3、 掌握黑盒测试的几种基本测试方法:等价类划分方法、边界值分析方法、因果图法和决策表法; 二、实验要求 1、 复习有关内容,理解黑盒测试; 2、 掌握等价类划分、…

利用大模型LLM生成训练数据

项目:https://github.com/jiangnanboy/llm_dataset_generation这里假设一家海嘉物流公司,此公司需做一个关于本公司物流的问答机器人,需要判断用户的查询语句是否与本公司物流相关,需要训练数据进行分类,故利用deepseek进行生成与审核,免于无数据和标注的烦恼。 datas…

20231904 2023-2024-2 《网络攻防实践》实验五

一、实践内容 (1)配置Linux操作系统平台上的iptables,完成过滤ICMP数据包和特定IP地址访问主机等功能; (2)使用Snort对pcap文件进行入侵检测,获得并分析报警日志; (3)分析虚拟网络攻防环境中蜜网网关的防火墙和IDS/IPS配置规则。 二、实践过程 本次实验使用以下虚拟机…

如何高效智能地进行设备数据采集,提高企业核心竞争力?

机台设备数据采集是指通过各种技术手段和设备,从生产制造过程中的机台设备上获取各种相关数据的过程。采集的目的:1.生产监控:实时了解机台设备的运行状态,如是否正常工作、运行速度、工作时长等,以便及时发现设备故障或异常情况,保障生产过程的连续性和稳定性。 2.质量控…

树莓派2B的选购建议及相关分析

# 2015年淘宝买了一块树莓派2B,10多年过去了软件支持还是可以运行,非常给力!一、树莓派2B的硬件特性与适用场景基础配置处理器:搭载Broadcom BCM2836芯片,4核ARM Cortex-A7,主频900MHz。 内存:1GB RAM(早期版本可能为512MB)。 接口:4个USB 2.0、HDMI、以太网口、Micr…

2025必看:跨网文件安全交换系统 如何提升数据保护和管理能力?

在数字化转型的浪潮中,企业数据已成为核心资产。然而,随着企业业务的扩展和全球化,跨网文件交换变得越来越频繁,数据泄露、未授权访问和合规性问题也随之而来。传统的文件交换方式(如电子邮件、FTP等)已无法满足企业对数据安全和高效管理的需求。因此,引入专业的跨网文件…

Qt/C++开发经验小技巧311-315

关于流媒体推拉流延时的几点说明。经常看到一些流媒体相关的程序,号称零延迟,不用怀疑,这肯定吹牛逼的。 搞音视频开发,有个核心的指标就是实时性,也就是延迟多少毫秒,这个问题问的也是最多的。 音视频文件几乎不存在实时性问题,只有音视频流才有实时性的指标。 延迟多久…

windows-web1

windows-web1 挑战内容 前景需要: 小李在值守的过程中,发现有CPU占用飙升,出于胆子小,就立刻将服务器关机,并找来正在吃苕皮的hxd帮他分析,这是他的服务器系统,请你找出以下内容,并作为通关条件: 1.攻击者的shell密码 2.攻击者的IP地址 3.攻击者的隐藏账户名称 4.攻击…

CF708E Students Camp

先设 \(D(i)\) 表示 \(k\) 次吹风中 \(i\) 次成功吹在特定行的概率,有 \[D(i)={k \choose i}p^i(1-p)^{k-i} \]设 \(P(l,r)\) 表示某一行只剩下 \((l,r)\) 的砖块的概率,由于左右两边显然独立,于是我们有: \[P(l,r) =D(l-1)D(m-r) \]再设 \(f(i,l,r)\) 表示第 \(i\) 行剩下…