JIANGzihao0222

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
统计
 

     

 

实验项目名称:黑盒测试       

一、 实验目的

1、 掌握黑盒测试的基础知识;

2、 掌握黑盒测试的检查内容及测试目的;

3、 掌握黑盒测试的几种基本测试方法:等价类划分方法、边界值分析方法、因果图法、决策表法和场景法;

二、 实验内容

实验题目

1、设计函数实现输入日期显示星期几,并用等价类及边界值法测试

 

实验步骤:

① 设计程序

源程序见学习通平台。

② 划分等价类,得到等价类表。等价类表格式如下:

输入条件

有效等价类

唯一标识

无效等价类

唯一标识

年份

1900到2050内的平年整数

1

年份 < 1900

10

1900到2050内的闰年整数

2

年份 > 2050

11

 

 

年份包括非数字字符

12

月份

1、3、5、7、8、10、12

3

月份 < 0

13

4、6、9、11

4

月份 > 13

14

2

5

月份包括非数字字符

15

日期

1 <= 日期 <= 28

6

< 0

16

日期 = 29

7

> 31

17

日期 = 30

8

日期包含非数字字符

18

日期 = 31

9

年份为闰年且月份为2月且日期大于29

19

 

 

年份为平年且月份为2月且日期大于28

20

 

 

月份为4、6、9、11且日期大于30

   21

 

③ 运用等价类划分法设计测试用例,得到测试用例表。测试用例表格式如下:

 

序号

输入数据

覆盖等价类

输出

1

2002、1、19

1、3、6

合法日期

2

2003、4、29

1、4、7

合法日期

3

2000、3、30

2、3、8

合法日期

4

2000、3、31

2、3、9

合法日期

5

2000、2、29

2、5、7

日期非法

6

1880、1、1

10

年份非法

7

2055、2、3

11

年份非法

8

12HS、3、1

12

含非数字字符

9

2002、-1、3

13

月份非法

10

2030、14、2

14

月份非法

11

2030、14、HH

15

含非数字字符

12

1990、12、-2

16

日期非法

13

2022、3、31

17

日期非法

14

2014、4、HH

18

含非数字字符

15

2000、2、30

19

日期非法

16

2001、2、29

20

日期非法

17

2034、4、29

21

合法日期

 

④ 运用边界值法设计测试用例。

序号

输入数据

预测输出

实际输出

1

1900,12,3

合法日期

合法日期

2

1901,11,3

合法日期

合法日期

3

2050,1,3

合法日期

合法日期

4

2049,2,4

合法日期

合法日期

5

2036,12,3

合法日期

合法日期

6

2024,11,21

合法日期

合法日期

7

2008,1,23

合法日期

合法日期

8

2010,2,17

合法日期

合法日期

9

2003,3,27

合法日期

合法日期

10

2009,2,28

合法日期

合法日期

11

2110,2,29

年份非法

年份非法

12

2007,4,30

合法日期

合法日期

13

2008,12,31

合法日期

合法日期

14

2006,6,23

合法日期

合法日期

 

2、找零钱最佳组合

   假设商店货品价格(R) 都不大于100元(且为整数),若顾客付款(P)100元内,现有一个程序能在每位顾客付款后给出找零钱的最佳组合(找给顾客货币张数最少)。 假定此商店的货币面值只包括:50(N50)10(N10)5(N5)1(N1) 四种。

   请结合等价类划分法和边界值分析法为上述程序设计 出相应的测试用例。

实验步骤:

④ 设计程序

源程序见学习通平台。

⑤ 划分等价类,得到等价类表。等价类表格式如下:

输入条件

有效等价类

唯一标识

无效等价类

唯一标识

货品价格(R)

 0 <= R <= 100

1

R > 100

3

    R为整数

2

R < 0

4

 

 

R 非整数数字

5

付款(P)

 0 <= P <= 100

6

P > 100

8

    P >= R

7

P < 0

9

    P为整数

11

P 非整数数字

10

 

 

 

P < R

11

 

⑥ 运用等价类划分法设计测试用例,得到测试用例表。测试用例表格式如下:

 

序号

输入数据

覆盖等价类

输出

1

90,23

1,2,3,4,7

付款价钱不规范

2

101,23

3,

价钱不规范

3

-2,34

4,

价钱不规范

4

R,54

5

含非整数数字字符

5

12,102

8

付款价钱不规范

6

23,-1

9

付款价钱不规范

7

24,U

10

含非整数数字字符

9

12,3

11

付款价钱不规范

 

④ 运用边界值法设计测试用例。

序号

输入数据

预测输出

实际输出

1

0,13

价钱不规范

价钱不规范

2

1,23

找零: {N1=2, N10=2}

找零: {N1=2, N10=2}

3

99,32

付款价钱不规范

付款价钱不规范

4

100,23

价钱不规范

价钱不规范

5

23,0

付款价钱不规范

付款价钱不规范

6

43,1

付款价钱不规范

付款价钱不规范

7

34,99

找零: {N5=1, N50=1, N10=1}

找零: {N5=1, N50=1, N10=1}

8

65,100

付款价钱不规范

付款价钱不规范

9

34,56

找零: {N1=2, N10=2}

找零: {N1=2, N10=2}

 

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

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

模拟程序如下:

 

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

实验步骤:

   ①编写程序

源程序见学习通平台。

②分析原因与结果,与同学交换程序测试。

结果:

1:出5角钱  ---》 投1元钱,按下任意按钮

2:出啤酒    ----》 投币,按下啤酒按钮

3:出橙汁    ----》 投币,按下橙汁按钮

③画出因果图

 

 

 

④转化为决策表

 

选项规则

1

5

6

7

8

9

10

11

12

14

15

 

 

 

 

 

 

 

条件

0.5元

1

1

1

1

1

0

0

0

0

0

0

1元

1

0

0

0

0

-

1

1

1

0

0

按啤酒

-

1

1

0

0

1

1

0

0

1

0

按橙汁

-

1

0

1

0

1

0

1

0

0

-

已投钱

 

 

1

1

 

 

1

1

 

 

 

已按按钮

 

 

1

1

 

 

1

1

 

 

 

 

 

 

 

 

 

 

 

动作

出啤酒

 

 

1

 

 

 

1

 

 

 

 

出橙汁

 

 

 

1

 

 

 

1

 

 

 

出五角钱

 

 

 

 

 

 

1

1

 

 

 

错误操作

1

1

 

 

1

1

 

 

1

1

1

 

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

 

测试用例编号

输入数据

预期输出

实际输出

1

0.5元+按啤酒

出啤酒

啤酒

2

0.5元+按橙汁

出橙汁

橙子

3

1元 + 按啤酒

出啤酒 + 5角钱

出啤酒 + 5角钱

4

1元 + 按橙汁

出橙汁 + 5角钱

出橙汁 + 5角钱

5

按啤酒

弹提示

弹提示

6

按橙汁

弹提示

弹提示

7

0.5元

弹提示

弹提示

8

1元

弹提示

弹提示

 

4、航空服务查询问题:根据航线,仓位,飞行时间查询航空服务。

假设一个中国的航空公司规定:

① 中国去欧美的航线所有座位都有食物供应,每个座位都可以播放电影。

② 中国去非欧美的国外航线都有食物供应,只有商务仓可以播放电影。

③ 中国国内的航班的商务仓有食物供应,但是不可以播放电影

④ 中国国内航班的经济仓只有当飞行时间大于2小时时才有食物供应,但是不可以播放电影。

请用程序实现上述功能,并用决策表法设计测试用例,再执行测试,撰写实验报告。

 

 

实验步骤:

① 编写程序,与同学交换程序测试。

② 构造决策表

 

 

序号

1

2

3

4

5

6

 

 

 

 

 

条件

 

 

航线

 

欧美

1

0

0

0

0

0

非欧美

0

1

1

0

0

0

国内

0

0

0

1

1

1

 

机舱

商务仓

-

1

0

1

0

0

经济仓

-

0

1

0

1

1

 

时间

2小时内

-

-

-

-

1

0

大于2小时

-

-

-

-

0

1

 

动作

食物供应

1

1

1

1

0

1

播放电影

1

1

0

0

0

0

 

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

欧美:A1 非欧美:A2 国内:A3  商务仓:B1 经济舱:B2 小于等于2小时:C1

大于两小时:C2

食物供应:D1 播放电影:D2 D3:无服务

序号

测试用例

预期结果

实际结果

1

A1 B1 C1

D1、D2

D1、D2

2

A2 B1 C1

D1、D2

D1、D2

3

A2 B2 C1

D1、

D1

4

A3 B1 C1

D1、

D1

5

A3 B2 C1

D3

D3

6

A3 B2 C2

D1、

D1

 

5、旅馆住宿系统中,旅馆业主可进行添加房间操作。

旅馆业主登录旅馆住宿系统后,可以请求添加房间;

待进入“房间管理”对话框,单击“添加”按钮可进行添加房间操作;

添加房间时,可以设定房间的房间编号、房间类型、房间描述信息;

添加房间信息不能缺失,若某一项未填写,要给出提示信息;

房间编号长度不超过5个字符;

房间描述长度不超过1000个字符;

房间信息不能重复,成功填写后,可进行保存或取消操作,之后返回“房间管理”对话框,结束添加房间流程。

实验步骤:

利用黑盒测试策略编写添加房间功能的测试用例。

①等价类划分:

输入条件

有效等价类

唯一标识

无效等价类

唯一标识

房间编号

 0 < 长度 <= 5

1

长度 > 5

2

   

 

长度 = 0

3

房间类型

   非空

4

5

 

 

 

房间描述信息

 0 < 长度 <= 1000

6

长度 > 1000

7

   

 

长度 = 0

9

   

 

房间编号重复

10

 

②测试用例表格式如下:

 

序号

输入数据

覆盖等价类

输出

1

1,单人间,100元一晚

1,4,6

操作成功

2

111111,单人间,100元一晚

2

房间编号不超过5个字符

3

 ,单人间,100元一晚

3

房间编号非空

4

2,,100元一晚

5

房间类型非空

5

3,单人间,,

7

房间描述非空

6

4,单人间,100元一晚.....

9

房间编号不超过1000个字符

7

1,单人间,100元一晚

10

房间信息重复

 ③运用边界值法设计测试用例。

序号

输入数据

预测输出

1

1,单人间,100元一晚

操作成功

2

12,单人间,100元一晚

操作成功

3

1222,单人间,100元一晚

操作成功

4

12222,单人间,100元一晚

操作成功

5

23,单人间,1

操作成功

6

34,单人间,10

操作成功

7

5,单人间,100元一晚...X999

操作成功

8

6,单人间,100元一晚...X1000

操作成功

9

56,单人间,100元一晚

操作成功

④:场景法进行测试

V表示这个条件必须是有效的才可执行基本流

I表示这种条件下将激活所需备选流

n/a表示这个条件不适用于测试用例

用例ID

场景

登录

添加合理信息

预测结果

1

登录->房间管理->添加->设置信息->保存/取消->房间管理

V

V

添加信息成功

2

登录->登录失败

I

n/a

登录失败

3

登录->房间管理->添加->设置信息->输入不合理->房间管理

V

I

添加失败,退回管理界面

 

三、 个人体会

1、在实际的测试中,如何设计测试用例才能达到用最少的测试用例检测出最多的缺陷;

要进行多种方法的检验和使用,首先要先考虑划分等价类,对于输入进行划分,进行一个最全面的规划,其次,对于一些问题,有着对应的测试方法,如决策表,因果图,等等。

首先进行等价类划分,包括输入条件和输出条件的等价划分,将无限测试变成有限测试,在任何情况下,都必须使用边界值分析法。可以用错误推测法追加一些用例,这需要依靠测试工程师的经验。对照程序逻辑,检查出已设计出的测试用例的逻辑覆盖程度,如果没有足够覆盖,应当再补充足够的测试用例。如果程序说明中有输入条件的组合情况,则一开始就可以选用因果图或判定表驱动法设计测试用例。对于参数配置类型的软件,要用正交试验法选择较少的组合方式,达到最佳效果。对于业务流清晰的系统,可利用场景法贯穿整个测试案例过程,在案例中综合使用各种设计方法

2、在进行用例设计时,如何考虑软件测试用例的充分性和减少软件测试用例的冗余性; 

首先要将用例的充分性进行优先考虑,测试就是要进行最全面的进行测试,对于冗余性,在影响程序小的的情况下,适当的冗余也可以接收,为了做到极可能全名的测试,对于冗余性我认为在数量不是贴别多的情况下可以接收,就如:边界值方法,有些会进行min-,max+,但是对于边界之外的数据,已经有专门的模块进行测试。

3、本次实验遇到的难点、如何解决的及体会。

难点:主要对于测试的概念不了解,对于等价类的划分,等价类的设计用例,就如:对于无效等价类的设计,边界值的设计要保证其余条件的正确性,来进行专门测试该等价类。对于决策表和判定表的理解不清,不能很好的进行区分,对于一些决策表的设计用例和实际程序运行时的结果不进行匹配,但找不错误。

解决:上网查找答案,自己想,询问老师

体会:对于黑盒测试的一些基本方法有了初步的了解,对于测试有了一些认知与体会,明白了写程序时应该注意的一些问题,但仍然存在一些问题,我认为是软件测试这个学科的问题,这个毕竟不是数学那样有逻辑,面向实际生活总是有例外。

 

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
public class Test1 {
 
 
    public static void check(Date date1){
        int year,month,date;
 
        try {
            year = new Integer(date1.getYear());
            month = new Integer(date1.getMonth());
            date = new Integer(date1.getDate());
            System.out.print( year +"年" + month + "月" + date +"日:");
        } catch (NumberFormatException e) {
            System.out.println(date1.getYear() + "年" + date1.getMonth() + "月" + date1.getDate() +"日:"+"含非数字字符");
            return;
        }
        // 判断年份
        if(year > 2050 || year < 1900){
            System.out.println("年份非法");
            return;
        }
        // 判断月份
        if(month > 12 || month < 0){
            System.out.println("月份非法");
            return;
        }
        // 判断合法日期
        if (date > 31 || date < 0){
            System.out.println("日期非法");
            return;
        }
        // 判断31日
        if( date == 31 && (month != 1 && month != 3 && month != 5 && month != 7 && month != 9 && month != 10 && month != 12)){
            System.out.println("11");
            System.out.println("日期非法");
            return;
        }
        // 判断30日
        if( date == 30 && month == 2){
            System.out.println("日期非法");
            return;
        }
        // 判断29日
        if( date == 29 && month == 2){
            System.out.println("日期非法");
            return;
        }
        // 判断28日
        if( date == 28 && month == 2 && ((year % 400 == 0)||(year % 4 == 0) && (year % 100 == 0))){
            System.out.println("日期非法");
            return;
        }
        System.out.println("合法日期");
    }
 
    public static void main(String[] args) {
 
        Date date1 = new Date( "2002","1","19");
        Date date2 = new Date("2003","4","29");
        Date date3 = new Date( "2000","3","30");
        Date date4 = new Date("2002","3","31");
        Date date5 = new Date( "2002","2","29");
        Date date6 = new Date("1880","1","1");
        Date date7 = new Date( "2055","2","3");
        Date date8 = new Date("12HS","3","1");
        Date date9 = new Date("2002","-1","3");
        Date date10 = new Date("2030","14","2");
        Date date11 = new Date("2030","14","HH");
        Date date12 = new Date("1990","12","-2");
        Date date13 = new Date("2022","3","31");
        Date date14 = new Date("2014","4","HH");
        Date date15 = new Date("2000","2","30");
        Date date16 = new Date("2001","2","29");
        Date date17 = new Date("2034","4","29");
 
 
        Date date18 = new Date("1900","12","3");
        Date date19 = new Date("1901","11","3");
        Date date20 = new Date("2050","1","3");
        Date date21 = new Date("2049","2","4");
        Date date22 = new Date("2036","12","3");
        Date date23 = new Date("2024","11","21");
        Date date24 = new Date("2008","1","23");
        Date date25 = new Date("2010","2","17");
        Date date26 = new Date("2003","3","27");
        Date date27 = new Date("2009","2","28");
        Date date28 = new Date("2110","2","29");
        Date date29 = new Date("2007","4","30");
        Date date30 = new Date("2008","12","31");
        Date date31 = new Date("2006","6","23");
 
 
        Date array[] = {date1,date2,date3,date4,date5,date6,date7,date8,date9,date10,date11,date12,date13,date14,date15,date16,date17,date18,date19,
        date20,date21,date22,date23,date24,date25,date26,date27,date28,date29,date30,date31};
 
        for (int i = 0;i < array.length; i ++){
            check(array[i]);
        }
 
    }
 
    static class Date{
 
        private String Year;
        private String Month;
        private String Date;
 
        public Date(String year, String month, String date) {
            Year = year;
            Month = month;
            Date = date;
        }
 
        public String getYear() {
            return Year;
        }
 
        public void setYear(String year) {
            Year = year;
        }
 
        public String getMonth() {
            return Month;
        }
 
        public void setMonth(String month) {
            Month = month;
        }
 
        public String getDate() {
            return Date;
        }
 
        public void setDate(String date) {
            Date = date;
        }
 
    }
}

  

复制代码
import java.util.HashMap;
import java.util.Map;

public class Test2 {

    public static Map<String, Integer> calculateChange(int price, int payment) {
        Map<String, Integer> change = new HashMap<>();
        int remainingChange = payment - price;

        int[] denominations = {50, 10, 5, 1};
        String[] names = {"N50", "N10", "N5", "N1"};

        for (int i = 0; i < denominations.length; i++) {
            int count = remainingChange / denominations[i];
            if (count > 0) {
                change.put(names[i], count);
                remainingChange %= denominations[i];
            }
        }

        return change;
    }

    public static void main(String[] args) {

        testChange("90", "23");
        testChange("101", "23");
        testChange("-2", "34");
        testChange("R", "54");
        testChange("12", "102");
        testChange("23", "-1");
        testChange("24", "U");
        testChange("12", "3");
        testChange("0", "13");
        testChange("1", "23");
        testChange("99", "32");
        testChange("100", "23");
        testChange("23", "0");
        testChange("43", "1");
        testChange("34", "99");
        testChange("65", "100");
        testChange("34", "56");

    }

    public static void testChange(String price0, String payment0) {

        int price = 0;
        int payment = 0;
        try {
            price = new Integer(price0);
            payment = new Integer(payment0);
        } catch (NumberFormatException e) {
            System.out.println("价钱: " + price0 + ", 付款: " + payment0);
            System.out.println("含非整数数字字符");
            System.out.println();
            return;
        }

        if(price <= 0 || price >= 100)
        {
            System.out.println("价钱: " + price + ", 付款: " + payment);
            System.out.println("价钱不规范");
            System.out.println();
            return;
        }
        if (payment <= 0 || payment >= 100 || payment < price){
            System.out.println("价钱: " + price + ", 付款: " + payment);
            System.out.println("付款价钱不规范");
            System.out.println();
            return;
        }

        System.out.println("价钱: " + price + ", 付款: " + payment);
        Map<String, Integer> change = calculateChange(price, payment);
        System.out.println("找零: " + change);
        System.out.println();
    }
}
复制代码
复制代码
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Test3 extends JFrame {
    JPanel root;
    JCheckBox checkBox, checkBox_1, checkBox_2, checkBox_3,checkBox_4, checkBox_5,checkBox_6;
    JTextField textField1,textField2;
    ButtonGroup flightGroup,flightGroup1,flightGroup2;
    public Test3() {
        root = new JPanel();      //定义面板容器
        setContentPane(root);
        setLayout(null);//设置面板为绝对布局
        setTitle("自动售货机模拟程序");

        // 定义边界,用于包裹每一行的选项
        Border border = BorderFactory.createEtchedBorder();

        // 创建面板来容纳每一行的选项
        JPanel panel1 = new JPanel();
        panel1.setLayout(null);
        panel1.setBorder(border);
        panel1.setBorder(BorderFactory.createTitledBorder("请投币")  );
        panel1.setBounds(10, 10, 580, 70);

        JPanel panel2 = new JPanel();
        panel2.setLayout(null);
        panel2.setBorder(border);
        panel2.setBorder(BorderFactory.createTitledBorder("选择饮料")  );
        panel2.setBounds(10, 90, 580, 70);

        // 定义复选框组件

        flightGroup = new ButtonGroup();
        flightGroup1 = new ButtonGroup();


        checkBox = new JCheckBox("一元");
        checkBox_1 = new JCheckBox("五角");
        checkBox_2 = new JCheckBox("啤酒");
        checkBox_3 = new JCheckBox("橙汁");

        // Add radio buttons to the ButtonGroup
        flightGroup.add(checkBox);
        flightGroup.add(checkBox_1);

        flightGroup1.add(checkBox_2);
        flightGroup1.add(checkBox_3);

        // 设置复选框显示位置和大小
        // 航班
        checkBox.setBounds(20, 25, 100, 20);
        checkBox_1.setBounds(220, 25, 100, 20);

        checkBox_2.setBounds(20, 25, 100, 20);
        checkBox_3.setBounds(220, 25, 100, 20);


        // 将复选框添加到各自的面板中
        panel1.add(checkBox);
        panel1.add(checkBox_1);

        panel2.add(checkBox_2);
        panel2.add(checkBox_3);

        JButton jButton = new JButton("确定");
        jButton.setBounds(50, 180, 200, 30);
        jButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                boolean toubi = checkBox.isSelected()||checkBox_1.isSelected();
                boolean anniu = checkBox_3.isSelected()||checkBox_2.isSelected();

                if(!(toubi&&anniu)) {
                    JOptionPane.showMessageDialog(null, "选项不能为空");
                }else {
                    if(checkBox.isSelected()){
                        if(checkBox_2.isSelected()){
                            textField1.setText("啤酒");
                            textField2.setText("0.5元");
                        }else {
                            textField1.setText("橙汁");
                            textField2.setText("0.5元");
                        }
                    }
                    if(checkBox_1.isSelected()){
                        if(checkBox_2.isSelected()){
                            textField1.setText("啤酒");
                            textField2.setText("0元");
                        }else {
                            textField1.setText("橙汁");
                            textField2.setText("0元");
                        }
                    }
                }
            }
        });

        JButton jButton1 = new JButton("复位");
        jButton1.setBounds(350, 180, 200, 30);
        jButton1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                flightGroup.clearSelection();
                flightGroup1.clearSelection();
                textField1.setText("");
                textField2.setText("");


            }
        });

        // 文本框
        JLabel label = new JLabel("请取饮料:");

        // 设置标签的位置和大小
        label.setBounds(20, 250, 100, 30); //
        // 输入框
        textField1 = new JTextField();
        textField1.setEditable(false); // 设置文本框为只读
        textField1.setBounds(100, 250, 200, 30); // (x, y, width, height)

        JLabel label2 = new JLabel("找零:");

        // 设置标签的位置和大小
        label2.setBounds(320, 250, 100, 30); //
        // 输入框
        textField2 = new JTextField();
        textField2.setEditable(false); // 设置文本框为只读
        textField2.setBounds(370, 250, 200, 30); // (x, y, width, height)

        // 将面板添加到主面板中
        root.add(panel1);
        root.add(panel2);
        root.add(label);
        root.add(textField1);
        root.add(label2);
        root.add(textField2);
        root.add(jButton);
        root.add(jButton1);



        // 设置窗口风格
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setBounds(400, 300, 640, 480);
        setVisible(true);

    }

    // main方法
    public static void main(String args[]) {
        new Test3();
    }
}
复制代码
复制代码
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Test4 extends JFrame{
    JPanel root;
    JCheckBox checkBox, checkBox_1, checkBox_2, checkBox_3,checkBox_4, checkBox_5,checkBox_6;

    ButtonGroup flightGroup,flightGroup1,flightGroup2;
    public Test4() {
        root = new JPanel();      //定义面板容器
        setContentPane(root);
        setLayout(null);//设置面板为绝对布局
        setTitle("航空服务查询问题");

        // 定义边界,用于包裹每一行的选项
        Border border = BorderFactory.createEtchedBorder();

        // 创建面板来容纳每一行的选项
        JPanel panel1 = new JPanel();
        panel1.setLayout(null);
        panel1.setBorder(border);
        panel1.setBorder(BorderFactory.createTitledBorder("航班")  );
        panel1.setBounds(10, 10, 580, 70);

        JPanel panel2 = new JPanel();
        panel2.setLayout(null);
        panel2.setBorder(border);
        panel2.setBorder(BorderFactory.createTitledBorder("机舱")  );
        panel2.setBounds(10, 90, 580, 70);

        JPanel panel3 = new JPanel();
        panel3.setLayout(null);
        panel3.setBorder(border);
        panel3.setBorder(BorderFactory.createTitledBorder("时间")  );
        panel3.setBounds(10, 170, 580, 70);


        // 定义复选框组件

        flightGroup = new ButtonGroup();
        flightGroup1 = new ButtonGroup();
        flightGroup2 = new ButtonGroup();


        checkBox = new JCheckBox("欧美");
        checkBox_1 = new JCheckBox("国外非欧美");
        checkBox_2 = new JCheckBox("国内");
        checkBox_3 = new JCheckBox("商务舱");
        checkBox_4 = new JCheckBox("经济舱");
        checkBox_5 = new JCheckBox("2小时内");
        checkBox_6 = new JCheckBox("2小时外");

        // Add radio buttons to the ButtonGroup
        flightGroup.add(checkBox);
        flightGroup.add(checkBox_1);
        flightGroup.add(checkBox_2);

        flightGroup1.add(checkBox_3);
        flightGroup1.add(checkBox_4);

        flightGroup2.add(checkBox_5);
        flightGroup2.add(checkBox_6);
        // 设置复选框显示位置和大小
        // 航班
        checkBox.setBounds(20, 25, 100, 20);
        checkBox_1.setBounds(220, 25, 100, 20);
        checkBox_2.setBounds(420, 25, 100, 20);

        // 机舱  panel2.setBounds(10, 90, 580, 70);
        checkBox_3.setBounds(20, 25, 100, 20);
        checkBox_4.setBounds(220, 25, 100, 20);

        // 时间
        checkBox_5.setBounds(20, 25, 100, 20);
        checkBox_6.setBounds(220, 25, 100, 20);

        // 将复选框添加到各自的面板中
        panel1.add(checkBox);
        panel1.add(checkBox_1);
        panel1.add(checkBox_2);

        panel2.add(checkBox_3);
        panel2.add(checkBox_4);

        panel3.add(checkBox_5);
        panel3.add(checkBox_6);

        // 文本框
        JLabel label = new JLabel("航空服务:");

        // 设置标签的位置和大小
        label.setBounds(20, 250, 100, 30); //

        // 输入框
        JTextField textField = new JTextField();
        textField.setEditable(false); // 设置文本框为只读
        textField.setBounds(100, 250, 200, 30); // (x, y, width, height)

        JButton jButton = new JButton("查询");
        jButton.setBounds(350, 250, 200, 30);
        jButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                boolean hangdao = checkBox.isSelected()||checkBox_1.isSelected()||checkBox_2.isSelected();
                boolean jichang = checkBox_3.isSelected()||checkBox_4.isSelected();
                boolean shijian = checkBox_5.isSelected()||checkBox_6.isSelected();
                if(!(hangdao&&jichang&&shijian)) {
                    JOptionPane.showMessageDialog(null, "选项不能为空");
                }
                // 遍历单选框,检查哪个单选框被选中
                else if (checkBox.isSelected()) {
                    textField.setText("获取食物、电影服务");
                } else if (checkBox_1.isSelected()) {
                    if(checkBox_3.isSelected()){
                        textField.setText("获取食物、电影服务");
                    }else {
                        textField.setText("获取食物服务");
                    }
                } else if (checkBox_2.isSelected()) {
                    if(checkBox_3.isSelected()){
                        textField.setText("获取食物服务");
                    }else if (checkBox_4.isSelected()){
                        if (checkBox_5.isSelected()){
                            textField.setText("无服务");
                        }else if (checkBox_6.isSelected()){
                            textField.setText("获取食物服务");
                        }
                    }

                }

            }
        });

        // 将面板添加到主面板中
        root.add(panel1);
        root.add(panel2);
        root.add(panel3);
        root.add(label);
        root.add(textField);
        root.add(jButton);



        // 设置窗口风格
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setBounds(400, 300, 640, 480);
        setVisible(true);

    }

    // main方法
    public static void main(String args[]) {
        new Test4();
    }
}
复制代码

 

 

 

posted on   实名吓我一跳  阅读(209)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2023-04-17 2023/4/17每日随笔
 
点击右上角即可分享
微信分享提示