# BMICALCULATOR

표준체중계산기 (BMI Calculator)
BMIFrame

– 표준체중
// 남자표준체중 = 신장(m) x 신장(m) x 22
// 여자표준체중 = 신장(m) x 신장(m) x 21

– BMI
// BMI = 체중(kg)/신장^2(m^2)
// 20 미만 저체중 (Underweight)
// 20~24 정상 (Normal)
// 25~29 과체중 (Overweight)
// 30 이상 비만 (Obesity)

– 하루 권장 섭취량
// 한국인 하루권장섭취량 남성 2600 kcal 여성 2100 kcal
// 기초대사량산출공식 (Herris Benedict Equation)
// 기초대사량(남성) = 66.47 + (13.75*weight) + (5*height) – (6.76*age)
// 기초대사량(여성) = 655.1 + (9.05*weight) + (1.85*height) – (4.68*age)
// 활동대사량 = 저활동적(1.3)/중간활동적(1.5)/활동적(1.75)
// 개인별 하루권장섭취량(kcal) = 기초대사량 * 활동대사량

``````
enum BMI {
UNDERWEIGHT, NORMAL, OVERWEIGHT, OBESITY
}
``````
``````
enum Gender {
FEMALE, MALE
}
``````
``````
enum Activity {
LOW, MEDIUM, HIGH;

public static String[] names() {
String[] names = new String[Activity.values().length];
for (Activity t : Activity.values())
names[t.ordinal()] = t.toString();
return names;
}

public static Activity valueOf(int value) {
switch(value) {
case 0: return LOW;
case 1: return MEDIUM;
case 2: return HIGH;
default: return null;
}
}
}
``````
``````
public class Person {
protected String name;
protected int age;
protected Gender gender;

public Person() {
this("", 0, Gender.FEMALE);
}

public Person(String name, int age, Gender gender) {
this.name = name;
this.age = age;
this.gender = gender;
}

public void setName(String name) {
this.name = name;
}

public void setAge(int age) {
this.age = age;
}

public void setGender(Gender gender) {
this.gender = gender;
}

public String getName() {
return name;
}

public int getAge() {
return age;
}

public Gender getGender() {
return gender;
}

public void print() {
System.out.println(this);
}

@Override
public String toString() {
return "Person Name=" + name + " Age=" + age + " Gender=" + gender;
}
}
``````
``````
public class BMICalculator extends Person {
protected double height;
protected double weight;
protected Activity activity;

public BMICalculator() {
this("J", 20, Gender.FEMALE, 165.0, 55.0, Activity.MEDIUM);
}

public BMICalculator(String name, int age, Gender gender, double height, double weight, Activity activity) {
super(name, age, gender);
this.height = height;
this.weight = weight;
this.activity = activity;
}

public void setHeight(double height) {
this.height = height;
}

public void setWeight(double weight) {
this.weight = weight;
}

public void setActivity(Activity activity) {
this.activity = activity;
}

public double getHeight() {
return height;
}

public double getWeight() {
return weight;
}

public Activity getActivity() {
return activity;
}

public BMI calculateBMI() {
double bmi = weight / (height * 0.01) / (height * 0.01);
if (bmi >= 0.0 && bmi < 20.0) return BMI.UNDERWEIGHT;
else if (bmi >= 20.0 && bmi < 24.0) return BMI.NORMAL;
else if (bmi >= 24.0 && bmi < 30.0) return BMI.OVERWEIGHT;
else return BMI.OBESITY;
}

public double calculateStandardWeight() {
if (this.gender == Gender.MALE)
return height * height * 22 * 0.0001;
return height * height * 21 * 0.0001;
}

// Herris Benedict Equation
public double calculateDailyCaloryIntake() {
double activityCalory = 1.0;
switch (this.activity) {
case LOW:
activityCalory = 1.3;
break;
case MEDIUM:
activityCalory = 1.5;
break;
case HIGH:
activityCalory = 1.75;
break;
default:
break;
}

if (this.gender == Gender.MALE)
return 66.47 + (13.75 * this.weight) + (5.0 * this.height) - (6.76 * (double)(this.age)) * activityCalory;
return 655.1 + (9.05 * this.weight) + (1.85 * this.height) - (4.68 * (double)(this.age)) * activityCalory;
}

@Override
public String toString() {
return "BMICalculator Name=" + name + " Age=" + age + " Gender=" + gender + " Height=" + height + " Weight=" + weight + " BMI=" + calculateBMI();
}
}
``````
``````import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class BMICalculatorFrame extends JFrame implements ActionListener, KeyListener {
JLabel label1 = new JLabel("나이"); // 레이블 초기화
JLabel label2 = new JLabel("키(cm)"); // 레이블 초기화
JLabel label3 = new JLabel("몸무게(kg)"); // 레이블 초기화
JLabel label4 = new JLabel("성별"); // 레이블 초기화
JLabel label5 = new JLabel("활동량"); // 레이블 초기화
JTextField textfield1 = new JTextField(10); // age 텍스트필드 초기화
JTextField textfield2 = new JTextField(10); // height 텍스트필드 초기화
JTextField textfield3 = new JTextField(10); // weight 텍스트필드 초기화
JComboBox<String> combobox1 = new JComboBox<String>(Activity.names()); // acitivity 콤보박스

JButton button1 = new JButton("계산"); // bmi calculator 버튼 초기화

JLabel label6 = new JLabel("BMI 지수"); // 레이블 초기화
JLabel label7 = new JLabel("정상 몸무게"); // 레이블 초기화
JLabel label8 = new JLabel("일일 칼로리섭취량"); // 레이블 초기화
JTextField textfield4 = new JTextField(10); // bmi 텍스트필드 초기화
JTextField textfield5 = new JTextField(10); // standard weight 텍스트필드 초기화
JTextField textfield6 = new JTextField(10); // dailry calory intake 텍스트필드 초기화

JPanel panel = new JPanel(); // 패널 초기화
JPanel panel1 = new JPanel(new GridLayout(0, 2)); // 패널 초기화
JPanel panel2 = new JPanel(new GridLayout(0, 2)); // 패널 초기화
JPanel panel3 = new JPanel(new GridLayout(0, 2)); // 패널 초기화
JPanel panel4 = new JPanel(new GridLayout(0, 2)); // 패널 초기화
JPanel panel5 = new JPanel(); // 패널 초기화
JPanel panel6 = new JPanel(new GridLayout(0, 2)); // 패널 초기화
JPanel panel7 = new JPanel(); // 패널 초기화
JPanel panel8 = new JPanel(new GridLayout(0, 2)); // 패널 초기화
JPanel panel9 = new JPanel(new GridLayout(0, 2)); // 패널 초기화
JPanel panel10 = new JPanel(new GridLayout(0, 2)); // 패널 초기화

public BMICalculatorFrame() {
super("BMICalculatorFrame");

// frame

// event

setSize(350, 300);
setResizable(false);
setVisible(true);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

private Gender selectGender() {
if (rbutton1.isSelected() return Gender.FEMALE;
return Gender.MALE;
}

private Activity selectActivity() {
return Activity.valueOf(combobox1.getSelectedIndex());
}

private void calculateStandardWeightAndBMI() {
calculator.age = Integer.parseInt(textfield1.getText());
calculator.height = Double.parseDouble(textfield2.getText());
calculator.weight = Double.parseDouble(textfield3.getText());
calculator.gender = selectGender();
calculator.activity = selectActivity();
System.out.println("age=" + calculator.age);
System.out.println("height=" + calculator.height);
System.out.println("weight=" + calculator.weight);
System.out.println("gender=" + calculator.gender);
System.out.println("activity=" + calculator.activity);
BMI bmi = calculator.calculateBMI();
double sw = calculator.calculateStandardWeight();
double dailyIntake = calculator.calculateDailyCaloryIntake();
textfield4.setText("" + bmi);
textfield5.setText("" + sw);
textfield6.setText("" + dailyIntake);
}

public void actionPerformed(ActionEvent e) {
JButton button = (JButton) e.getSource();
if (button == button1) {
calculateStandardWeightAndBMI(); // 계산
}
}

public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_ENTER) {
Toolkit.getDefaultToolkit().beep();
System.out.println("ENTER pressed");
calculateStandardWeightAndBMI(); // 계산
}
}

public static void main(String[] args) {
new BMICalculatorFrame();
}
}
``````