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();
});
}
}