[Java/자바] 배열(5) 카페 프로그램 예제 풀어보기
안녕하세요 오늘은 카페 프로그램을 만들어 보는 시간을 가져보겠습니다.
우선 카페 프로그램을 만들기 전에 어떤 프로그램인지 알아야 하니 프로그램에 대한 설명을 한번 봐보도록 하죠.
기능 알아보기
- 주문하기
- 주문 가능한 메뉴를 출력한다.
- 주문받을 메뉴를 입력받는다.
- 주문한 메뉴의 가격을 총금액에 누적한다.
- 주문한 메뉴를 전체 메뉴 리스트에 추가한다.(장바구니 기능)
- 주문한 개수를 한 개 증가한다.
- 취소하기
- 주문한 메뉴 리스트를 출력한다.
- 그중에서 취소한 메뉴를 입력받는다.
- 입력받은 메뉴를 주문 리스트에서 제가 한다.
- 입력받은 메뉴의 금액을 총금액에서 차감한다.
- 주문한 개수를 한 개 감소한다.
- 결제하기
- 결제해야 할 총금액을 출력한다.
- 사용자에게 지불할 금액을 입력받는다.
- 지불한 금액과 총 금액을 비교해서, 만약, 지불한 금액이 총금액보다 적다면 “금액이 부족합니다” 출력 후 결제 최소 맞는 금액을 입력했다면 잔돈과 함께 “계산완료”를 출력한다.
- 총금액은 0원으로 주문 리스트는 비워준다.
- 전체 개수를 0개로 초기화한다.
- 끝내기
각 기능을 구현하기 위해서 필요한 작업 생각해보기
<사용할 개념>
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문이 종료되겠네요!
자! 오늘은 카페 프로그램 만들기를 해보았는데요.
뭔가 재밌으면서도 어렵고 머리가 아프네요.
혹시 제가 설명이 부족했다거나 아쉬운 부분이 있다면 댓글로 남겨주시면 감사하겠습니다!
글 읽어주셔서 감사합니다.
이상으로 포스팅 마치겠습니다!
