BMI 측정 정보 관리 프로그램(Io)

Soozoo·2024년 6월 27일

JAVA

목록 보기
28/41

Java를 활용한 BMI 정보 관리 프로그램

이번 포스트에서는 Java를 사용하여 BMI 정보를 관리하는 간단한 프로그램을 구현해 보았습니다. 이 프로그램은 사용자로부터 이름, 성별, 키, 몸무게를 입력받아 BMI를 계산하고, 그 결과를 파일에 저장하거나 파일에서 로드하여 출력하는 기능을 제공합니다.

주요 클래스와 메서드

  1. MainEntry: 메뉴를 통해 사용자에게 입력을 받고, 입력에 따라 파일 저장 또는 파일 로드 기능을 수행합니다.
  2. fileSL: 파일 저장(fileSave()) 및 파일 로드(fileLoad()) 기능을 담당하는 클래스입니다.

코드 설명

MainEntry.java

java코드 복사
package QuizIO;

import java.io.*;
import java.util.Scanner;

public class MainEntry {
    public static void main(String[] args) throws IOException {

        fileSL fs = new fileSL();
        Scanner sc = new Scanner(System.in);

        int choice; // 메뉴 선택 변수를 밖으로 빼서 반복 사용

        while (true) {
            System.out.println("1. 작성하기 2. 저장내용보기 3. 프로그램 종료");
            choice = sc.nextInt();
            sc.nextLine(); // Consume newline left-over

            switch (choice) {
                case 1:
                    fs.fileSave();
                    break;
                case 2:
                    fs.fileLoad();
                    break;
                case 3:
                    System.out.println("프로그램 종료");
                    return; // Exit the program
                default:
                    System.out.println("존재하지 않는 번호입니다.");
            }
        }
    }
}
  • 기능 설명:
    • MainEntry 클래스는 사용자로부터 메뉴 선택을 받아 fileSL 객체를 통해 파일 저장 또는 파일 로드 기능을 호출합니다.
    • 사용자가 1을 선택하면 fileSave() 메서드를 호출하여 BMI 정보를 입력받고 파일에 저장합니다.
    • 사용자가 2를 선택하면 fileLoad() 메서드를 호출하여 저장된 BMI 정보를 파일에서 읽어와 출력합니다.
    • 사용자가 3을 선택하면 프로그램이 종료됩니다.

fileSL.java

java코드 복사
package QuizIO;

import java.io.*;
import java.util.*;

class fileSL {

    public void fileSave() {

        String name = null;
        boolean gender = true; // true for male, false for female
        double height = 0;
        double weight = 0;
        boolean con = true;
        String temp = null;
        double FBMI = 0;
        double MBMI = 0;
        String rank = null;

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = null;
        File f = new File("BMI.txt");

        try {
            bw = new BufferedWriter(new FileWriter(f, true)); // append mode

            while (con) {
                System.out.println("----------------회원 정보 입력 하기 ----------------------");
                System.out.print("이름 >> ");
                name = br.readLine();
                System.out.print("성별 (m/f) >> ");
                temp = br.readLine().toLowerCase();
                System.out.print("키 (cm) >> ");
                height = Double.parseDouble(br.readLine());
                System.out.print("몸무게 (kg) >> ");
                weight = Double.parseDouble(br.readLine());

                if (temp.equals("m")) {
                    gender = true;
                    MBMI = weight / ((height / 100) * (height / 100));
                    MBMI = MBMI * 0.95;
                } else if (temp.equals("f")) {
                    gender = false;
                    FBMI = weight / ((height / 100) * (height / 100));
                    FBMI = FBMI * 0.8;
                }

                double BMI = MBMI != 0 ? MBMI : FBMI;

                if (BMI < 18.5) {
                    rank = "저체중";
                } else if (BMI >= 18.5 && BMI < 23) {
                    rank = "정상";
                } else if (BMI >= 23 && BMI < 25) {
                    rank = "과체중";
                } else {
                    rank = "비만";
                }

                bw.write("이름: " + name + "\n");
                bw.write("성별: " + (gender ? "남성" : "여성") + "\n");
                bw.write("키: " + height + " cm\n");
                bw.write("몸무게: " + weight + " kg\n");
                bw.write("BMI: " + BMI + "\n");
                bw.write("판정: " + rank + "\n");
                bw.write("----------------------------\n");

                System.out.print("더 입력하시겠습니까? Y or N >> ");
                if (br.readLine().equalsIgnoreCase("N")) {
                    con = false;
                }
            }

            System.out.println("BMI.txt 파일에 저장 완료!!");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (bw != null)
                    bw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    } // fileSave end

    public void fileLoad() {
        BufferedReader br = null;
        File f = new File("BMI.txt");

        try {
            br = new BufferedReader(new FileReader(f));
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (FileNotFoundException e) {
            System.err.println("파일을 찾을 수 없습니다: " + e.getMessage());
        } catch (IOException e) {
            System.err.println("파일 읽기 오류: " + e.getMessage());
        } finally {
            try {
                if (br != null)
                    br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    } // fileLoad end
}
  • 기능 설명:
    • fileSL 클래스는 파일 저장(fileSave()) 및 파일 로드(fileLoad()) 기능을 구현합니다.
    • fileSave() 메서드는 사용자로부터 이름, 성별, 키, 몸무게를 입력받아 BMI를 계산하고 파일에 저장합니다.
    • fileLoad() 메서드는 저장된 BMI 정보를 파일에서 읽어와 콘솔에 출력합니다.
    • BMI 값에 따라 판정 결과("저체중", "정상", "과체중", "비만")를 계산하여 파일에 저장하고 출력합니다.
    • 파일 입출력 관련 예외 처리를 포함하여 안전하게 데이터를 처리합니다.
profile
넙-죽

0개의 댓글