饮料自动售货机

news/2025/3/26 17:38:16/文章来源:https://www.cnblogs.com/yuanxinglan/p/18788777

有一个饮料自动售货机(处理单价为5角钱)的控制处理软件,它的软件规格说明如下:

若投入5角钱的硬币,按下橙汁啤酒的按钮,则相应的饮料就送出来。若投入1元钱的硬币,同样也是按橙汁啤酒的按钮,则自动售货机在送出相应饮料的同时退回5角钱的硬币。

模拟程序如下:

 

 

因果图法测试该程序,并撰写实验报告。

实验步骤:

   ①编写程序

package org.example;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class VendingMachine extends JFrame {
    private JRadioButton oneYuan, fiftyFen;
    private JRadioButton orangeJuice, beer;
    private JButton confirm, reset;
    private JTextField drinkField, changeField;

    public VendingMachine() {
        setTitle("自动售货机模拟程序");
        setSize(400, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);

        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(6, 2));

        panel.add(new JLabel("请投币:"));
        oneYuan = new JRadioButton("一元");
        fiftyFen = new JRadioButton("五角");
        ButtonGroup coinGroup = new ButtonGroup();
        coinGroup.add(oneYuan);
        coinGroup.add(fiftyFen);
        JPanel coinPanel = new JPanel();
        coinPanel.add(oneYuan);
        coinPanel.add(fiftyFen);
        panel.add(coinPanel);

        panel.add(new JLabel("请选择商品:"));
        orangeJuice = new JRadioButton("橙汁");
        beer = new JRadioButton("啤酒");
        ButtonGroup drinkGroup = new ButtonGroup();
        drinkGroup.add(orangeJuice);
        drinkGroup.add(beer);
        JPanel drinkPanel = new JPanel();
        drinkPanel.add(orangeJuice);
        drinkPanel.add(beer);
        panel.add(drinkPanel);

        confirm = new JButton("确定");
        reset = new JButton("复位");
        panel.add(confirm);
        panel.add(reset);

        drinkField = new JTextField(20);
        changeField = new JTextField(20);
        panel.add(new JLabel("请取饮料:"));
        panel.add(drinkField);
        panel.add(new JLabel("找零:"));
        panel.add(changeField);

        add(panel);

        confirm.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String result = vendingMachine();
                drinkField.setText(result.split("")[0]);
                if (result.contains("退回")) {
                    changeField.setText(result.split("")[1]);
                } else {
                    changeField.setText("");
                }
            }
        });

        reset.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                fiftyFen.setSelected(false);
                oneYuan.setSelected(false);
                orangeJuice.setSelected(false);
                beer.setSelected(false);
                drinkField.setText("");
                changeField.setText("");
            }
        });
    }

    private String vendingMachine() {
        if (!oneYuan.isSelected() && !fiftyFen.isSelected()) {
            return "无效输入:请投币";
        }
        if (!orangeJuice.isSelected() && !beer.isSelected()) {
            return "无效输入:请选择商品";
        }
        String coin = oneYuan.isSelected() ? "1 元" : "5 角";
        String drink = orangeJuice.isSelected() ? "橙汁" : "啤酒";
        if (coin.equals("1 元")) {
            return drink + ",退回 5 角硬币";
        } else {
            return drink;
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new VendingMachine().setVisible(true);
            }
        });
    }
}

 

②分析原因与结果

原因:

C1:投入一元

C2:投入五角

C3:选择橙汁

C4:选择啤酒

结果:

B1:送出橙汁

B2:送出啤酒

B3:退回5角硬币(如果投入一元)

 

③画出因果图

 

④转化为决策表

 

 

 

 

 

 

 

序号

C1C1

C2C2

B1B1

B2B2

R1R1

R2R2

R3R3

1

2

3

4

5

无效输入

无效输入

无效输入

6

无效输入

无效输入

无效输入

7

无效输入

无效输入

无效输入

8

无效输入

无效输入

无效输入

 

⑤根据决策表设计测试用例,得到测试用例表

 

序号

输入数据

覆盖条件

预期输出

1

coin=0.5,button="橙汁"coin=0.5,button="橙汁"

C1,B1C1,B1

送出 橙汁

2

coin=0.5,button="啤酒"coin=0.5,button="啤酒"

C1,B2C1,B2

送出 啤酒

3

coin=1.0,button="橙汁"coin=1.0,button="橙汁"

C2,B1C2,B1

送出 橙汁,退回 5 角硬币

4

coin=1.0,button="啤酒"coin=1.0,button="啤酒"

C2,B2C2,B2

送出 啤酒,退回 5 角硬币

5

coin=0.0,button="橙汁"coin=0.0,button="橙汁"

无效输入

无效输入:请投入 5 角或 1 元硬币

6

coin=0.0,button="啤酒"coin=0.0,button="啤酒"

无效输入

无效输入:请投入 5 角或 1 元硬币

7

coin=0.5,button="可乐"coin=0.5,button="可乐"

无效输入

无效输入:请选择“橙汁”或“啤酒”

8

coin=1.0,button="可乐"coin=1.0,button="可乐"

无效输入

无效输入:请选择“橙汁”或“啤酒”

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

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

相关文章

3.24

Android Studio 启动模拟器出现“Timed out after 300seconds waiting for emulator to come online“解决方案 问题: Timed out after 300seconds waiting for emulator to come online.**解决方法: 检查自己的Emulator是否是最新版本,如果不是检查更新到最新

使用ESP32的语音到文本转换

ESP32 + INMP441麦克风+ SD卡+ Deepgram API =语音到文本只需3秒!即时记录、存储和转录。现在就试试! 最快!使用ESP32板的语音到文本转换语音转文本技术改变了许多项目的游戏规则。从在智能家居中实现免提控制到为残疾人创建无障碍解决方案,将口语转换为文本的能力打开了无限的…

SNeP软件计算有效群体大小

001、官网: https://sourceforge.net/projects/snepnetrends/002、脚本: SNeP1.1 -ped sample_name.ped -map sample_name.map -threads 10 -ld -out ./sample_name003、结果文件:。

2025.3.28(周五)

android实验二第三部分 事情处理 1. 点击事件 (OnClickListener) 方法:setOnClickListener(View.OnClickListener listener) android:onClick(在 XML 中使用) 核心功能:处理按钮、文本、图片等控件的 单击事件。 使用场景:按钮提交、页面跳转、功能触发等。 2. 长按事件 (…

关于原生小程序canvas标签始终显示再最上层问题

官方说明: https://developers.weixin.qq.com/miniprogram/dev/component/native-component.html 解决方法:将canvas正常绘制 对canvas进行定位,远离手机屏幕显示区域 将canvas转换为img图片,将转换后的图片进行展示 如果图片清晰度不够,则将canvas成倍的绘制,将转换后的…

Particle Asset OTA 如何实现远程

问题 用粒子平台部署更新到你的舰队是很容易的。但是,当您的产品包含其他组件(如ML模型、显示器、协处理器、证书或图像和声音等媒体)时,远程管理更新就变得更具挑战性。传统的方法通常需要物理访问,这可能耗时、昂贵,而且在规模上不切实际。解决方案 粒子资产OTA使您能够轻…

【企业必读】内外网文件传输的6个常见误区,你中招了吗?

在数字化转型的浪潮中,企业内外网文件传输已成为日常运营中不可或缺的一环。然而,许多企业在进行网络隔离后的文件传输和产品选型时,常常陷入一些常见的误区。这些误区不仅可能影响工作效率,还可能带来严重的安全隐患和合规风险。本文将深入探讨这些误区,并提供实用的建议…

SpreadJS V18.0 新版本发布!数据驱动革新,效率与体验全面升级

表格控件SpreadJS推出V18.0及V8.0版本!本次更新聚焦数据管理、多语言适配、报表与透视表增强,新增多项重磅功能,赋能企业高效应对复杂业务场景。核心亮点速览👇 一、表格绑定数据源:直连数据管理器,性能与效率双突破 开发背景 企业常将 Excel 作为动态数据库使用(如分析…

使用LattePanda V1制作了一个简单的基于batocera的游戏仿真站

现在,我们正在使用我们最近开发的Batocera arcade Box使用PS1模拟器运行Roadrash。我们使用的是Batocera Linux,这是一个开源且完全免费的复古游戏发行版本,旨在将任何计算机或单板计算机变成游戏控制台。 在这里,我们在相当旧的Latte Panda V1单板计算机上启动了Batocera,…

河北省科级政策app 连接MySQL数据库

项目结构 在连接数据库的时候要把localhost改为自己电脑的IP地址 开放mysql数据库远程访问的权限 使用jdbc的方法把jar包导入项目中

【Guava工具类】StringsInts

String相关工具 Strings Guava 提供了一系列用于字符串处理的工具: 对字符串为null或空的处理nullToEmpty(@Nullable String string):如果非空,则返回给定的字符串;否则返回空字符串 public static String nullToEmpty(@Nullable String string) {//如果string为null则返回…

我开发的【巨大娘的玩耍♥】游戏正在众筹中,参与即可获得限量优惠回报

大家好,我开发的【巨大娘的玩耍♥】游戏正在众筹中,参与即可获得限量优惠回报 游戏目前正在爱发电上众筹,众筹总额达成5千元即可开发和发布正式版。众筹截止日期:2025年7月23日 支持者可获得 8折激活码、获得所有玩家可见的特殊成就、上感谢名单 等 限量 回报~ 点我查看具体…