Java

[Java/자바] 배열(5) 카페 프로그램 예제 풀어보기

둥구는 지굴다 2022. 9. 25. 20:17

안녕하세요 오늘은 카페 프로그램을 만들어 보는 시간을 가져보겠습니다.

우선 카페 프로그램을 만들기 전에 어떤 프로그램인지 알아야 하니 프로그램에 대한 설명을 한번 봐보도록 하죠.

 

 

기능 알아보기

  1. 주문하기
    1. 주문 가능한 메뉴를 출력한다.
    2. 주문받을 메뉴를 입력받는다.
    3. 주문한 메뉴의 가격을 총금액에 누적한다.
    4. 주문한 메뉴를 전체 메뉴 리스트에 추가한다.(장바구니 기능)
    5. 주문한 개수를 한 개 증가한다.
  2. 취소하기
    1. 주문한 메뉴 리스트를 출력한다.
    2. 그중에서 취소한 메뉴를 입력받는다.
    3. 입력받은 메뉴를 주문 리스트에서 제가 한다.
    4. 입력받은 메뉴의 금액을 총금액에서 차감한다.
    5. 주문한 개수를 한 개 감소한다.
  3. 결제하기
    1. 결제해야 할 총금액을 출력한다.
    2. 사용자에게 지불할 금액을 입력받는다.
    3. 지불한 금액과 총 금액을 비교해서, 만약, 지불한 금액이 총금액보다 적다면 “금액이 부족합니다” 출력 후 결제 최소 맞는 금액을 입력했다면 잔돈과 함께 “계산완료”를 출력한다.
    4. 총금액은 0원으로 주문 리스트는 비워준다.
    5. 전체 개수를 0개로 초기화한다.
  4. 끝내기

각 기능을 구현하기 위해서 필요한 작업 생각해보기

<사용할 개념>

1. 무한반복

반복이 종료되지 않고 계속 실행되는 구조입니다. 따라서 while문을 사용해서 무한반복을 사용해야 할 것 같네요.

2. 문자열 배열

메뉴를 받을 때 사용할 문자열 배열이 필요할 것 같네요.

이외에도 자잘한 변수들이 많이 필요할 것 같습니다. 바로 코드 들어가 보도록 하죠!

1. 필요한 변수 및 배열, 클래스 선언하기

Scanner sc= new Scanner(System.in);
int count=0;
//주문은 총 5개까지 가능
String OrderList[]=new String[5];
//주문한 금액을 담을 변수
int total=0;

2. while문으로 무한반복으로 주문을 받고 기능들 큰 틀 만들어 놓기

주석에 달린 것처럼 기능을 넣기 전 큰 틀을 만들어 놓았습니다. 

while(true) {
			 System.out.println("★☆★☆cafe★☆★☆");
			 System.out.println("1.주문하기");
			 System.out.println("2.취소하기");
			 System.out.println("3.결제하기");
			 System.out.println("4.종료하기");
			 System.out.println("입력:");
			 int num=sc.nextInt();
			 //1.주문하기
			 if(num==1) {
			 }
			 //2.취소하기
			 else if(num==2) {
				 
			 }//3.결제하기
			 else if(num==3) {
				 
			 }//4.종료하기
			 else if(num==4) {
				 break;
			 }
			 else {
				 System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			 }

3. 주문하기 기능 만들기

if(num==1) {	 String menuName=""; 
				 int menuPrice=0; //가격과 메뉴의 이름을 입력받을 변수 초기화
                 //사용자에게 보여질 메뉴들
				 System.out.println("1. 아메리카노\\t3800원");
				 System.out.println("2. 에스프레소\\t2400원");
				 System.out.println("3. 카페라떼\\t4200원");
				 System.out.println("4. 밀크티\\t\\t5100원");
				 System.out.println("주문할 메뉴번호:");
				 int menuNum=sc.nextInt();
                 //각각의 입력받은 수에 맞게 메뉴와 가격 넣어주기
				 if(menuNum==1) {
					 menuName="아메리카노";
					 menuPrice=3800;
				 }
				 else if(menuNum==2) {
					 menuName="에스프레소";
					 menuPrice=2400;
				 }
				 else if(menuNum==3) {
					 menuName="카페라떼";
					 menuPrice=4200;
				 }
				 else if(menuNum==4) {
					 menuName="밀크티";
					 menuPrice=5100;
				 }
                 //입력한 메뉴와 가격 표시
				 System.out.println("주문한 메뉴는"+menuName+"입니다.");
				 System.out.println("가격은"+menuPrice+"원 입니다.");
			 }

주문하기를 눌렀을 때 출력 결과

4. 취소하기 기능 만들기

//2.취소하기
		else if(num==2) {
		for(int i=0;i<count;i++) {
	    System.out.println(i+1+"."+OrderList[i]); 
                     //주문한 메뉴들을 출력하여 사용자에게 보여줍니다.
                     //인덱스 값이기 때문에 i+1을 해줍니다.
		}
		System.out.print("취소할 메뉴번호:");
		int cancelNum=sc.nextInt(); //취소할 메뉴의 번호를 입력받습니다.
		if(1<=cancelNum&&cancelNum<=count) {
		String delMenu=OrderList[cancelNum-1];
		System.out.println(delMenu+"메뉴 삭제!");
		for(int i=cancelNum;i<count;i++) {
                     //메뉴를 삭제해줍니다.
			OrderList[i]=OrderList[i+1];
		}
                     //삭제한 메뉴들의 가격에 따라 total변수에 있는 값에서 빼줍니다.
		if(delMenu.equals("아메리카노")) {
			total-=3800;
		}
		else if(delMenu.equals("에스프레소")){
		total-=2400;
		}
		else if(delMenu.equals("카페라떼")){
			total-=4200;
		}
		else if(delMenu.equals("밀크티")){
			total-=5100;
		}
		count--;
				}

코드의 큰 틀은 주석에 설명해 두었지만 조금 헷갈릴 수 있는 부분을 설명드리겠습니다.

				if(1<=cancelNum&&cancelNum<=count) {
				String delMenu=OrderList[cancelNum-1];
				System.out.println(delMenu+"메뉴 삭제!");
				for(int i=cancelNum;i<count;i++) {
					OrderList[i]=OrderList[i+1];
				}

자 이 부분이 취소하기 기능의 핵심이라고 볼 수 있습니다.

취소를 한다는 것은 장바구니에서 지워버린다는 것입니다.

따라서 OrderList [ ] 배열에서 지워주어야겠죠

 if(1 <=cancelNum&&cancelNum <=count)

이 조건문이 왜 있나 싶을 수 있는데

별거 없습니다 cancelNum이 1보다 작거나 count 보다 크지 않을 경우 즉, 배열의 인덱스 값보다 큰 값을 넣거나 음수를 넣으면 값이 없기 때문에 미리 조건식을 넣어주어 준 것입니다.

 

String delMenu=OrderList [cancelNum-1];

사용자에게 입력받은 삭제할 메뉴를 delMenu에 넣어줍니다.

cancelNum-1을 한 이유는 인덱스 값이기 때문에 -1을 해줍니다.

사용자에게는 1. 아메리카노로 보이겠지만 사실상 인덱스 값은 0번이기 때문이지요!!

 

System.out.println(delMenu+"메뉴 삭제!");

삭제한 메뉴를 사용자에게 출력하여 보여줍니다.

 

for(int i=cancelNum;i <count;i++) {
OrderList [i]=OrderList [i+1];
}

이제 실질적으로 배열에서 값을 삭제해 주는 부분입니다.

count만큼 반복이니 배열의 길이만큼 반복을 하겠죠

따라서 OrderList [i+1]을 대입해 주었기 때문에 값을 삭제해 줄 수 있습니다.

출력 결과

2번을 누르니 주문 목록 1.아메리카노, 2.에스프레소가 나오고 취소할 메뉴를 눌르니 "아메리카노 삭제!"가 나오네요 ㅎㅎ

5. 결제하기 기능 만들기

			//3.결제하기
			 else if(num==3) {
				 System.out.println("결제할 금액"+total+"원");//총 결제금액 출력
				 System.out.println("지불할 금액:"); //지불할 금액을 입력 받음
				 int money= sc.nextInt();
				 if(money<total) { //돈을 적게 지불했을경우
					 System.out.println("잔돈이 부족합니다."); //출력
					 continue; // 끝내지 않고 계속
				 }
				 else {
                 //money-total즉 사용자가 낸 값과 총 금액의 차를 구해 잔돈을 계산
					 System.out.println("잔돈은"+(money-total)+"원입니다."); 
					 total=0; // 총 금액 초기화
					 for(int i=0;i<5;i++) {
						 OrderList[i]=""; //장바구니의 값을 초기화
					 }
					 count=0; //초기화
				 }
			 }

결제하기는 3번을 눌렀을 때 나오는 기능입니다.

출력 결과

잔돈을 계산하여 결제 완료 멘트까지 잘 출력된 것을볼 수 있네요 ㅎㅎ

 

6. 프로그램 종료

 else if(num==4) {
		break;
}

프로그램 종료는 break;문으로 종료를 했습니다.

무한반복인 while문이 종료되겠네요!

 

자! 오늘은 카페 프로그램 만들기를 해보았는데요.

뭔가 재밌으면서도 어렵고 머리가 아프네요.

혹시 제가 설명이 부족했다거나 아쉬운 부분이 있다면 댓글로 남겨주시면 감사하겠습니다!

글 읽어주셔서 감사합니다.

이상으로 포스팅 마치겠습니다!