【中国大学MOOC】java程序设计-week10-做一个窗体应用程序“体重指数计算器”

1.题目

做一个窗体应用程序“体重指数计算器”,能根据用户输入的性别、身高、体重计算出“体质指数(身体质量指数)”,并给出是否偏胖的判断。其中,体质指数(BMI)=体重(kg)÷身高^2(m),大于24则为偏胖,更详细的判断可以在网上查查相关的资料。要求有用户界面组件(如文本框、单选按钮、按钮)、布局和事件处理。

评分标准:

是一个窗体应用程序(1分);

有按钮、文本框等组件(2分);

有布局(2分);

有事件处理(2分);

正确计算,并显示结果(2分);

总体较好(1分)。

2.题解

/* encoding = GBK */
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
/*
输入性别:boy / girl      eg:boy
输入身高:数字,单位m       eg:1.8
输入体重:数字,单位kg      eg:65
点击Calculate,计算得到BMI指数,并且根据BMI指数高低给出评价建议
(18.5-24为正常,小于18.5过瘦,大于24过胖)
点击Reset,重置清零
 */
public class homework10 extends JFrame implements ActionListener{
 
    JLabel sex = new JLabel("Sex", JLabel.CENTER);
    JLabel height = new JLabel("Height(m)", JLabel.CENTER);
    JLabel weight = new JLabel("Weight(kg)", JLabel.CENTER);
    JTextField tsex = new JTextField("boy");
    JTextField theight = new JTextField("0.0");
    JTextField tweight = new JTextField("0.0");
    JButton reset = new JButton("Reset");
    JButton cal = new JButton("Calculate");
    JLabel bmi = new JLabel("BMI=Weight/Height^2", JLabel.CENTER);
    JTextField tbmi = new JTextField();
    JTextField comment = new JTextField();
 
    public homework10(){
        super("BMI 计算器");
        tsex.setHorizontalAlignment(JTextField.CENTER);
        theight.setHorizontalAlignment(JTextField.CENTER);
        tweight.setHorizontalAlignment(JTextField.CENTER);
        tbmi.setHorizontalAlignment(JTextField.CENTER);
        comment.setHorizontalAlignment(JTextField.CENTER);
 
        // add components
        JPanel pnlBody = new JPanel(new GridLayout(5, 2));
        pnlBody.add(sex);
        pnlBody.add(tsex);
        pnlBody.add(height);
        pnlBody.add(theight);
        pnlBody.add(weight);
        pnlBody.add(tweight);
        pnlBody.add(reset);
        pnlBody.add(cal);
        pnlBody.add(bmi);
        pnlBody.add(tbmi);
 
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(BorderLayout.CENTER, pnlBody);
        getContentPane().add(BorderLayout.SOUTH, comment);
 
        // register listeners
        reset.addActionListener(this);
        cal.addActionListener(this);
 
        // set frame properties
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(300,300);
        setVisible(true);
    }
 
    @Override
    public void actionPerformed(ActionEvent e) {
        Object source = e.getSource();
        if(source == reset)
            handleReset();
        else if(source == cal)
            handleCal();
        else
            System.out.println("Error");
    }
 
    private void handleReset() {
        tsex.setText("boy");
        theight.setText("0.0");
        tweight.setText("0.0");
        tbmi.setText("0.0");
        comment.setText("等待输入");
    }
 
    private void handleCal() {
        String str_sex = tsex.getText();
        double num_theight = Double.parseDouble(theight.getText());
        double num_tweight = Double.parseDouble(tweight.getText());
        double num_bmi = num_tweight/(num_theight*num_theight);
        tbmi.setText(String.format("%.4f", num_bmi));
 
        if(num_bmi<18.5)
            comment.setText("体重过轻,多吃点!");
        else if(num_bmi>24)
            comment.setText("体重过重,赶快锻炼吧!");
        else{
            if(str_sex.contains("boy"))
                comment.setText("小伙子BMI正常,祝你早日走向人生巅峰!");
            else
                comment.setText("小姑娘BMI正常,祝你早日拥有了小蛮腰!");
        }
    }
 
    public static void main(String[] args){
        SwingUtilities.invokeLater(()->{
            new homework10();
        });
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值