wisePocket

[Algorithm] 음식과 음료 주문, 계산서를 출력하는 계산기 만들기 본문

Java & Algorithm/Algorithm Practice

[Algorithm] 음식과 음료 주문, 계산서를 출력하는 계산기 만들기

ohnyong 2023. 8. 2. 11:41

 

음식과 음료 주문, 계산서를 출력하는 계산기

정해진 나의 룰에 따라서 연습 문제를 계속해서 답안을 보지 않고 스스로 풀어보고자 한다.

핵심이 되었던 연습 과정은 아래 두개 과정이다.
물론 이 구조가 이제 Java를 배우면서 더 깊게 변경 될 예정이다.
하지만 해당 카테고리 페이지는 
알고리즘 문제 해결을 하기 위한 연습이 주 목적이라서
기본적으로 내가 객체 인스턴스화를 통해 메서드 호출을 구분하면서 
"연산"에 집중 할 수 있는 나만의 틀로 활용하고자 한다.
 
https://ohnyong.tistory.com/177
 [Algorithm★] 4칙연산을 해주는 계산기 - 객체 지향 - 혼자 만들기+ChatGPT의 피드백 받기

https://ohnyong.tistory.com/178
 [Algorithm★] 4칙연산을 해주는 계산기 - 객체 지향 - 혼자 만들기+ChatGPT의 피드백 적용

오늘은 추가적으로 "%,d원" 으로 printf의 숫자, 가격 등 표시 할 때 3자리마다 ,콤마를 표기하여 출력을 깔끔하게 만들어주는 표현을 얻었다.

 

1. 문제 파악 과정
 - 필요 데이터 파악
    +--- 데이터 타입 확인

 - 필요 메서드 파악
    +--- 기본 입력부 input(){} 
             +-- 입력 값 갯수 확인
             +-- 데이터 제한조건 파악(유효성검사 while loop)
    +--- 기본 계산부 calculate(){}
             +-- 필요 연산 확인
             +-- 필요 조건 확인
    +--- 기본 출력부 output(){}
             +-- 출력할 데이터, 내용 확인
    +--- 각 메서드 별 파라미터 전달 필요 부분 확인
 
2. 코드 작성 과정
 - Main.java 실행부 생성 , Solution.java 클래스(설계도) 생성

 - 클래스 member 구현
    +--- 필요 데이터 정리에 따라 변수 선언
    +--- 기본 생성자 선언
    +--- 필요 메서드 정리에 따른 메서드 선언
             +-- input(){}과 관련된 메서드부터 작성, 유효성 체크(진입부 메서드)
             +-- calculate(){}의 실제 연산 로직 작성
             +-- output(){}의 출력 관련 정리

 - 실행부 Main.java에서 객체 인스턴스 생성 및 객체로부터 진입부 메서드 호출

 

 


1. Main.java


package Algorithm06;

public class Main {
    public static void main(String[] args) {
        //System.out.println("문제 설명\n" +
        //        "머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다. \n" +
        //        "양꼬치는 1인분에 12,000원, 음료수는 2,000원입니다.\n" +
        //        " 정수 n과 k가 매개변수로 주어졌을 때,\n" +
        //        " 양꼬치 n인분과 음료수 k개를 먹었다면 \n" +
        //        "총얼마를 지불해야 하는지 return 하도록" +
        //        "\b solution 함수를 완성해보세요.\n" +
        //        "\n" +
        //        "제한사항\n" +
        //        "0 < n < 1,000\n" +
        //        "n / 10 ≤ k < 1,000\n" +
        //        "서비스로 받은 음료수는 모두 마십니다.");
        Solution solution = new Solution();
        solution.inputOrder();
    }
}

 

2. Solution.java


package Algorithm06;

import java.text.DecimalFormat;
import java.util.Scanner;

public class Solution {
/*"머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다. \n" + // lambDish , sodaCharge, sodaFree=lambDish 10th +1
"양꼬치는 1인분에 12,000원, 음료수는 2,000원입니다.\n" + // lambPrice 12000, sodaPrice 2000
" 정수 n과 k가 매개변수로 주어졌을 때,\n" +
" 양꼬치 n인분과 음료수 k개를 먹었다면 \n" + order(int lambDish, int sodaCan){return bill}
"총얼마를 지불해야 하는지 return 하도록" +
"\b solution 함수를 완성해보세요.\n" +
"\n" +
"제한사항\n" +
"0 < n < 1,000\n" +
"n / 10 ≤ k < 1,000\n" +
"서비스로 받은 음료수는 모두 마십니다.");
*/
    int lambDish;
    int sodaCharge;
    int sodaFree;
    int lambPrice;
    int sodaPrice;
    int lambBill;
    int sodaBill;
    int totalBill;
    Scanner sc = new Scanner(System.in);

    public Solution(){

    }

    void inputOrder(){
        while(true) {
            System.out.println("양꼬치는 1인분에 12,000원입니다.\n몇인분 주문하시겠습니까?\n숫자로 입력해주세요.");
            lambDish = sc.nextInt();
            if(lambDish<0 && lambDish>1000){
                System.out.println("너무 많은 수를 입력하셨습니다. 1,000개 이하로 다시 입력해주세요.");
                continue;
            }
            break;
        }
        while(true){
            System.out.println("양꼬치 10인분에 음료수가 1개 무료로 제공되는 이벤트를 진행중입니다.");
            System.out.println("추가로 주문하시는 음료수는 1개에 2,000원입니다.\n음료는 몇개 주문하시겠습니까?\n숫자로 입력해주세요.");
            sodaCharge = sc.nextInt();
            if (sodaCharge<0 && sodaCharge>1000){
                System.out.println("너무 많은 수를 입력하셨습니다. 1000개 이하로 다시 입력해주세요.");
                continue;
            }
            break;
        }
        calculate(lambDish, sodaCharge);
    }

    void calculate(int lambDish, int sodaCharge) {
        lambPrice = 12000;
        sodaPrice = 2000;
        sodaFree = lambDish/10;
        lambBill = lambDish*lambPrice;
        sodaBill = sodaCharge*sodaPrice;
        totalBill = lambBill+sodaBill;
        outputBill(lambBill, sodaBill, sodaFree, totalBill);
    }


    void outputBill(int lambBill, int sodaBill, int sodaFree, int totalBill){
        System.out.printf("주문하신 내용은 다음과 같습니다.\n양꼬치 : %d인분\n음료수 : %d개\n무료음료수 : %d개 이벤트 서비스\n", lambDish, sodaCharge, sodaFree);
        System.out.printf("--------계산서-------- \n양꼬치 : %,d원\n음료수 : %,d원\n--------------------\n총 금액 : %,d원 입니다.\n--------------------", lambBill, sodaBill, totalBill);
    }
}