饮料自动售货机

有一个饮料自动售货机(处理单价为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="可乐"

无效输入

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

posted @ 2025-03-24 09:23  不会JAVA的小袁  阅读(74)  评论(0)    收藏  举报