[코드]
// 2025.03.13. (목)
// 자판기, 메뉴 5가지
// 콜라 / 사이다 / 이온음료 / 주스 / 물
// 800 / 700 / 600 / 600 / 500
// 돈 넣음 -> 얼마 넣었는지 보여줌.
// 10원보다 적게 넣으면 메뉴선택 / 많으면 추가 돈 입력
// 10, 50, 100, 500, 1000, 5000, 10000, 50000원 만 받음.
// ex) 117원 들어오면 거부
// 정상적인 돈 들어오면, 그 메뉴 뽑아주는데, 몇개 고를건지도 물어봐야함.
// 더 구매할건지 물어보고, no라고 하면 잔돈 받아, yes라고 하면 다시 메뉴고름.
#include <stdio.h>
int main()
{
int input, user_menu, num_menu;
int total_money = 0; // 사용자의 총 소지금
char user_select; // 더 구매할건지에 대한 유저 선택 (y/n)
while (1)
{
printf("\n=================================\n");
printf("|\t현재 소지금 : %d원\t|\n", total_money);
printf("============ < MENU > ===========\n1. 콜라\t\t(800원)\n2. 사이다\t(700원)\n3. 이온음료\t(600원)\n4. 주스\t\t(600원)\n5. 물\t\t(500원)\n\n");
printf("숫자를 입력해주세요 : ");
scanf("%d", &input); // 메뉴 or 금액 입력
if (0 < input && input < 6) // 메뉴선택 (input이 1~5인 경우)
{
user_menu = input; // 용어가 헷갈리니까 user_menu로 바꿔줌.
printf("몇 개 사실건가요? : ");
scanf("%d", &num_menu); // 몇개 구매할건지 입력
printf("\n┌────────── 주문서 ──────────┐\n");
printf("│\t메뉴 : %d번\t │\n", user_menu);
printf("│\t개수 : %d개\t │\n", num_menu);
printf("│\t니돈 : %d원\t │\n", total_money);
printf("└────────────────────────────┘\n");
// 금액이 부족한 경우 처리
if (user_menu == 1 && total_money < 800*num_menu)
{
printf("총 구매 금액은 %d원 입니다. %d원이 부족합니다. 돈을 더 넣어주세요.\n\n", 800*num_menu, (total_money-800*num_menu)*(-1));
continue;
}
else if (user_menu == 2 && total_money < 700*num_menu)
{
printf("총 구매 금액은 %d원 입니다. %d원이 부족합니다. 돈을 더 넣어주세요.\n\n", 700*num_menu, (total_money-700*num_menu)*(-1));
continue;
}
else if (user_menu == 3 && total_money < 600*num_menu)
{
printf("총 구매 금액은 %d원 입니다. %d원이 부족합니다. 돈을 더 넣어주세요.\n\n", 600*num_menu, (total_money-600*num_menu)*(-1));
continue;
}
else if (user_menu == 4 && total_money < 600*num_menu)
{
printf("총 구매 금액은 %d원 입니다. %d원이 부족합니다. 돈을 더 넣어주세요.\n\n", 600*num_menu, (total_money-600*num_menu)*(-1));
continue;
}
else if (user_menu == 5 && total_money < 500*num_menu)
{
printf("총 구매 금액은 %d원 입니다. %d원이 부족합니다. 돈을 더 넣어주세요.\n\n", 500*num_menu, (total_money-500*num_menu)*(-1));
continue;
}
// 선택한 메뉴와 갯수에 따른 총 금액이 충종될 때 처리
if (user_menu == 1 && total_money >= 800*num_menu)
{
printf("총 구매금액 : %d원\n", 800*num_menu);
total_money -= 800*num_menu;
printf("현재 소지금 : %d원\n", total_money);
printf("더 구매하실 건가요? [ 1. Yes | 2. No ] : ");
getchar(); // 구매하고 나서 더 구매할건지 물어보고 scanf로 입력받기 전에 getchar()로 버퍼 비워주기
scanf("%c", &user_select);
if (user_select == 'y') // y를 입력하면 continue를 통해 메뉴판으로 돌아감
{
continue;
}
else if (user_select == 'n') // n을 입력하면 잔돈을 출력해줌. (아직 종료 조건을 안만들어서 결국 그냥 맨 처음으로 돌아감 while문으로)
{
printf("잔돈 : %d원\n\n", total_money);
}
}
else if (user_menu == 2 && total_money >= 700*num_menu)
{
printf("총 구매금액 : %d원\n", 700*num_menu);
total_money -= 700*num_menu;
printf("현재 소지금 : %d원\n", total_money);
printf("더 구매하실 건가요? [ y | n ] : ");
getchar();
scanf("%c", &user_select);
if (user_select == 'y')
{
continue;
}
else if (user_select == 'n')
{
printf("잔돈 : %d원\n\n", total_money);
}
}
else if (user_menu == 3 && total_money >= 600*num_menu)
{
printf("총 구매금액 : %d원\n", 600*num_menu);
total_money -= 600*num_menu;
printf("현재 소지금 : %d원\n", total_money);
printf("더 구매하실 건가요? [ y | n ] : ");
getchar();
scanf("%c", &user_select);
if (user_select == 'y')
{
continue;
}
else if (user_select == 'n')
{
printf("잔돈 : %d원\n\n", total_money);
}
}
else if (user_menu == 4 && total_money >= 600*num_menu)
{
printf("총 구매금액 : %d원\n", 600*num_menu);
total_money -= 600*num_menu;
printf("현재 소지금 : %d원\n", total_money);
printf("더 구매하실 건가요? [ y | n ] : ");
getchar();
scanf("%c", &user_select);
if (user_select == 'y')
{
continue;
}
else if (user_select == 'n')
{
printf("잔돈 : %d원\n\n", total_money);
}
}
else if (user_menu == 5 && total_money >= 500*num_menu)
{
printf("총 구매금액 : %d원\n", 500*num_menu);
total_money -= 500*num_menu;
printf("현재 소지금 : %d원\n", total_money);
printf("더 구매하실 건가요? [ y | n ] : ");
getchar();
scanf("%c", &user_select);
if (user_select == 'y')
{
continue;
}
else if (user_select == 'n')
{
printf("잔돈 : %d원\n\n", total_money);
}
}
else // 소지한 금액이 구매금액보다 적은 경우 처리
{
printf("금액이 부족합니다.\n");
printf("잔돈 : %d원\n\n", total_money);
}
}
else if (input % 10 != 0 || input == 0) // 입력한 숫자가 10원 단위로 떨어지지 않거나, 0을 입력한 경우 continue 사용하여 다시 입력받도록 함.
{
printf("잘못된 숫자입니다. 숫자를 다시 입력해주세요.\n");
continue;
}
else if (input >= 10) // input이 10 이상이면 돈으로 인식하여 total_money에 input을 더해줌. continue 사용하여 다시 숫자 입력으로 돌아감.
{
total_money += input;
continue;
}
}
return 0;
}
[출력결과]
'C > 본수업' 카테고리의 다른 글
[2025.03.14] Ch.09_함수_자판기 만들기 함수화 (동영상 포함) (0) | 2025.03.14 |
---|---|
[2025.03.14] Ch.08_문자 입출력과 입력 유효성 검사 (0) | 2025.03.14 |
[2025.03.12] Ch.06_C의 제어문: 루프_별찍기 (0) | 2025.03.12 |
[2025.03.12] Ch.06_C의 제어문: 루프_연습문제 (0) | 2025.03.12 |
[2025.03.12] Ch.06_C의 제어문: 루프 (0) | 2025.03.12 |