카테고리 없음
김복천국 최종 코드
joo_coding
2025. 3. 29. 21:58
/*---------------------헤더--------------------*/
#include <stdio.h>
#include <stdlib.h> // 말록 프리
#include <string.h> // strcpy
#define MENU_NUM 48
#define BASKET_SIZE 10
typedef struct // < 메뉴 구조체 >
{
int menu_code;
char menu_name[30];
int menu_price;
} menu;
typedef struct // < 장바구니 구조체 >
{
int menu_code;
int how_many;
} s_basket;
void menu_borad(menu *m) // 메뉴 출력 함수
{
printf("========메뉴판========\n");
for (int i = 0; i < MENU_NUM; i++)
{
printf("%02d.\t %-12s\t %4d원\n", i+1, m[i].menu_name, m[i].menu_price);
// 가로배치는 별찍기 응용
}
}
void cash_receipt(s_basket *basket, menu *m, int menu_count ,int user_total, int dc_money, int pay_money)
{
printf("====================\n");
printf(" 현금영수증 \n");
printf("메뉴:\n");
for (int i = 0; i < menu_count; i++) // 유저가 산 만큼만 장바구니 보기
{
for (int j = 0; j < MENU_NUM; j++) // 메뉴 목록
{
if (basket[i].menu_code == m[j].menu_code) // 장바구니가
{
printf("%d. %s %d개\n", i+1, m[j].menu_name, basket[i].how_many);
}
}
}
printf("합계: %d원\n", user_total + dc_money);
printf("할인: %d원\n", dc_money);
printf("총 결제금액: %d원\n", user_total);
printf("====================\n\n");
}
void card_receipt(s_basket *basket, menu *m, int menu_count, int user_total, int dc_money, int pay_money)
{
printf("====================\n");
printf(" 카드영수증 \n");
printf("메뉴:\n");
for (int i = 0; i < menu_count; i++) // 유저가 산 만큼만 장바구니 보기
{
for (int j = 0; j < MENU_NUM; j++) // 메뉴 목록
{
if (basket[i].menu_code == m[j].menu_code) // 장바구니가
{
printf("%d. %s %d개\n", i+1, m[j].menu_name, basket[i].how_many);
}
}
}
printf("카드부가세: %d원\n", (user_total+dc_money)/10);
printf("합계: %d원\n", user_total);
printf("할인: %d원\n", dc_money);
printf("총 결제금액: %d원\n", user_total);
printf("====================\n\n");
}
int main_pick(int main_meun_pick, int month, int day)
{
printf("[ 김복천국 키오스크 ]\n[ ]\n");
printf("[ 1. 정산 ]\n");
printf("[ 2. 주문 ]\n");
printf("[ 3. 종료 ]\n\n");
int main_menu_pick;
printf("입력: ");
scanf("%d", &main_menu_pick);
return main_menu_pick;
}
void main_1(int month, int day, int sales)
{
printf("===========\n");
printf("정산을 시작합니다. \n");
printf("날짜:%d월%d일\n", month, day);
printf("일매출: %d원\n", sales);
printf("===========\n\n");
}
/*---------------------main--------------------*/
int main()
{
s_basket basket[BASKET_SIZE];
int daily_sales=0; // 일매출
int date_month=3, date_day=1;
// 김밥,라면,덮밥,찌개,떡볶이,튀김,기타,음료 (1~8)
menu all_menu[] = // 멤버) 코드,이름,가격
{
// 1. 김밥 (8)
{1101,"김밥",3000},
{1102,"치즈김밥",3500},
{1103,"참치김밥",3500},
{1104,"김치김밥",3500},
{1105,"야채김밥",3000},
{1106,"소고기김밥",4000},
{1107,"돈까스김밥",4000},
{1108,"삼겹살김밥",4500},
// 2. 라면 (7)
{1201,"라면",3000},
{1202,"계란라면",3500},
{1203,"치즈라면",3500},
{1204,"만두라면",3500},
{1205,"짬뽕라면",4000},
{1206,"떡라면",3500},
{1207,"떡만두라면",4000},
// 3. 덮밥 (9)
{1301,"제육덮밥",7000},
{1302,"오징어덮밥",7500},
{1303,"오징어제육덮밥",8000},
{1304,"돈까스덮밥",8000},
{1305,"쇠고기덮밥",8000},
{1306,"김치덮밥",7000},
{1307,"김치제육덮밥",7500},
{1308,"소세지덮밥",7500},
{1309,"오므라이스",7500},
// 4. 찌개 (8)
{1401,"김치찌개",7000},
{1402,"된장찌개",7000},
{1403,"참치김치찌개",7500},
{1404,"고기듬뿍찌개",8000},
{1405,"차돌된장찌개",8000},
{1406,"부대찌개",8000},
{1407,"동태찌개",8000},
{1408,"순두부찌개",8000},
// 5. 떡볶이 (6)
{1501,"떡볶이",5000},
{1502,"치즈떡볶이",6000},
{1503,"해물떡볶이",7000},
{1504,"짜장떡볶이",7000},
{1505,"라볶이",6000},
{1506,"치즈라떡볶이",7000},
// 6. 튀김 (5)
{1601,"김말이튀김",4000},
{1602,"야채튀김",4000},
{1603,"만두튀김",4000},
{1604,"고추튀김",5000},
{1605,"오징어튀김",5000},
// 7. 기타 (1)
{1701,"공기밥",1500}, // 44
// 8. 음료수 (4)
{1801,"콜라",1000},
{1802,"사이다",1000},
{1803,"오렌지환타",1000},
{1804,"파인애플환타",1000}, // 48
// 빈칸
{0,"빈칸",0} // 49
}; // 총 48개
while (1) // 종료전까지 키오스크를 계속 돌린다.
{
////////////////////////////////////////
int menu_count=0; // 유저가 메뉴 고른 횟수
int basket_count=0; // 장바구니에 들어있는 메뉴 갯수
int drink_count=0; // 장바구니에 들어있는 음료 갯수
int real_count=0; // 할인에 적용할 갯수 (전체-음료)
int user_total=0; // 장바구니 총액
int dc_money=0; // 할인된 금액들
int pay_money=0; // 총액-할인금액
int takeout_cost=0; // 포장비
////////////////////////////////////////
printf("매출:%d원 ", daily_sales);
printf("%d월%d일\n", date_month, date_day);
int main_menu_pick;
main_menu_pick = main_pick(main_menu_pick, date_month, date_day);
if (main_menu_pick == 1)
{
main_1(date_month,date_day,daily_sales);
daily_sales = 0; // 일매출 초기화
date_day += 1; // 날짜 하루 추가
}
else if (main_menu_pick == 2)
{
// 메뉴출력
menu_borad(all_menu);
// 주문하기
int buy_or_not = 1;
while (buy_or_not == 1) // 그만 산다고 할 때 까지 반복
{
int menu_pick; // 메뉴선택
printf("===============");
printf("\n메뉴를 골라주세요: ");
scanf("%d", &menu_pick);
for (int i = 0; i < 48; i++) // 메뉴 48개를 훑는다.
{
if (menu_pick == i) // i번 메뉴를 골랐다면?
{
printf("'%s'를 골랐습니다.\n", all_menu[i-1].menu_name);
int how_many; // 몇개 살건지?
printf("수량을 입력해주세요: ");
scanf("%d", &how_many);
int cancle_or_not; // 진짜 살건지, 취소할건지?
printf("(1)취소 (2)담기 ");
scanf("%d", &cancle_or_not);
if (cancle_or_not == 1)
{
printf("취소하셨습니다. 다시 골라주세요.\n");
break; // 반복문을 나가서 다시 메뉴 선택
}
else if (cancle_or_not == 2)
{
// 현재 카운트가 0이니까 0번에 저장을 해준다.
basket[menu_count].menu_code = all_menu[i-1].menu_code; // 메뉴코드 저장
basket[menu_count].how_many = how_many; // 몇개샀는지 저장
basket_count += how_many; // 장바구니에도 몇개 샀는지 저장
user_total += (all_menu[i-1].menu_price * how_many); // 합계에 저장
menu_count += 1; // n번째 메뉴에 저장했으니 다음은 n+1
if (menu_pick > 44) // 고른 메뉴가 음료수라면?
{
drink_count += how_many;
}
break;
}
}
}
printf("\n[ 현재 장바구니 ]\n");
for (int i = 0; i < menu_count; i++) // menu_count 현재 유저가 고른 메뉴갯수만큼 장바구니 보여주기
{
for (int j = 0; j < MENU_NUM; j++)
{
// 메뉴판의 코드와 장바구니에 담긴 메뉴코드가 같다면?
if (all_menu[j].menu_code == basket[i].menu_code)
{
// 메뉴명과 수량을 저장
printf("%s(%d개)\n", all_menu[j].menu_name, basket[i].how_many);
}
}
}
printf("[총합: %d개 | 합계: %d원]\n", basket_count, user_total);
printf("\n(1)더 주문하기 (2)결제하기 ");
scanf("%d", &buy_or_not);
if (buy_or_not == 1)
continue; // 더 주문하기 누르면 다시 메뉴선택
else if (buy_or_not == 2)
break; // 결제하기 누르면 반복문 탈출
}
real_count = (basket_count - drink_count); // 음료는 할인체크 시 포함되지 않는다.
// 세트할인 체크) 1.음료서비스 / 2.10%할인 / 3.세트할인(김라,떡튀,분식)
// 1.메뉴가 5개 넘으면 음료수 있나 체크
if ((real_count) >= 5) // 메뉴카운트에서 음료갯수는 빼야 진짜 갯수
{
printf("\n(음료수 서비스 확인중)\n");
if (drink_count >= 1)
{
int drink_service = (real_count/5); // 나눈게 n개면 음료수 n개 주라
printf("받을 수 있는 서비스 음료수: %d개\n", drink_service);
printf("현재 장바구니에 담긴 음료수: %d개\n", drink_count);
printf("장바구니에 담긴 수량만큼만 할인됩니다.\n");
int drink_dc=0;
drink_dc += (1000 * drink_count);
dc_money += drink_dc;
user_total -= drink_dc;
printf("음료 할인: %d원\n", drink_dc);
}
else
{
printf("음료를 안담으셨네요.(할인없음)\n");
}
}
// 2. 10개 넘으면 10% 할인
if (real_count >= 10)
{
printf("\n메뉴를 10개 이상 고르셨네요. 10% 할인 해드릴게요!\n");
dc_money += (user_total * 0.1);
printf("할인금액: %.0f원\n", user_total * 0.1);
}
int gim_count=0;
int ra_count=0;
int ddeok_count=0;
int fry_count=0;
// 3. 세트할인 (김라/떡튀/분식특선)
printf("\n(세트메뉴 확인중)\n");
for (int i = 0; i < menu_count; i++) // 장바구니를 훑었을 때
{
int code = basket[i].menu_code/100; // 메뉴 카테고리 11~18
if (code == 11) // 김
{
gim_count += basket[i].how_many;
printf("김밥 %d개\n", gim_count);
}
if (code == 12) // 라
{
ra_count += basket[i].how_many;
printf("라면 %d개\n", ra_count);
}
if (code == 15) // 떡
{
ddeok_count += basket[i].how_many;
printf("떡볶이 %d개\n", ddeok_count);
}
if (code == 16) // 튀
{
fry_count += basket[i].how_many;
printf("튀김 %d개\n", fry_count);
}
}
int tmp=0;
for (int i = 0; i < 100; i++)
{
// 분식특선을 제일 먼저 해줘야함
if (gim_count > 0 && ra_count > 0 && ddeok_count > 0 && fry_count > 0)
{
printf("분식특선 할인 적용(-2000원)\n");
gim_count --;
ra_count --;
ddeok_count --;
fry_count --;
tmp += 4; // 500x4 = 2000원
}
if (gim_count > 0 && ra_count > 0)
{
printf("김라세트 할인 적용(-1000원)\n");
gim_count --;
ra_count --;
tmp += 2; // 500x2 = 1000원
}
if (ddeok_count > 0 && fry_count > 0)
{
printf("떡튀세트 할인 적용(-500원)\n");
ddeok_count --;
fry_count --;
tmp ++; // 500원
}
}
dc_money += (500 * tmp);
printf("\n#세트할인 총액: %d원\n", 500*tmp);
// 포장or매장
int takeout_or_not;
printf("(1)포장 (2)매장 ");
scanf("%d", &takeout_or_not);
if (takeout_or_not == 1)
{
if (basket_count < 5) // 5개 미만
{
printf("포장비 2000원 추가\n");
takeout_cost += 2000;
printf("총 결제금액: %d원\n", user_total+takeout_cost);
}
else
printf("포장비 없음\n");
}
else if (takeout_or_not == 2)
{
printf("매장으로 선택하셨습니다.\n");
}
// 현금or카드
int cash_or_card;
printf("(1)카드 (2)현금 ");
scanf("%d", &cash_or_card);
if (cash_or_card == 1)
{
printf("카드결제를 선택하셨습니다.\n");
printf("합계: %d원\n", user_total);
printf("카드 부가세: %d원\n", (user_total/10));
printf("할인금액: %d원\n", dc_money);
// user_total += (user_total*0.1); // 부가세 추가
// user_total += takeout_cost; // 포장비 추가
// user_total -= dc_money; // 할인금액 차감
//printf("총 결제금액: %d원\n", user_total);
printf("====================\n");
printf(" 카드영수증 \n");
printf("메뉴:\n");
for (int i = 0; i < menu_count; i++) // 유저가 산 만큼만 장바구니 보기
{
for (int j = 0; j < MENU_NUM; j++) // 메뉴 목록
{
if (basket[i].menu_code == all_menu[j].menu_code) // 장바구니가
{
printf("%d. %s %d개\n", i+1, all_menu[j].menu_name, basket[i].how_many);
}
}
}
printf("\n합계: %d원\n", user_total);
printf("카드 부가세: %d원\n", (user_total/10));
printf("할인금액: -%d원\n", dc_money);
user_total += (user_total*0.1); // 부가세 추가
user_total += takeout_cost; // 포장비 추가
user_total -= dc_money; // 할인금액 차감
printf("총 결제금액: %d원\n", user_total);
printf("====================\n\n");
}
else if (cash_or_card == 2)
{
printf("현금결제를 선택하셨습니다.\n");
user_total += takeout_cost;
user_total -= dc_money;
printf("총 결제금액: %d원\n", user_total);
cash_receipt(basket, all_menu, menu_count, user_total, dc_money, pay_money);
}
// 결제 끝나면 일매출에 저장 + 장바구니 리셋
daily_sales += user_total;
user_total = 0;
dc_money = 0;
takeout_cost = 0;
menu_count = 0;
basket_count = 0;
drink_count = 0;
real_count = 0;
}
else if (main_menu_pick == 3)
{
if (daily_sales > 0)
{
printf("정산 후 종료합니다.\n");
main_1(date_month,date_day,daily_sales);
daily_sales = 0; // 일매출 초기화
date_day += 1; // 날짜 하루 추가
}
printf("종료합니다.\n");
break;
}
else
{
printf("잘못 입력하셨습니다.\n");
continue;
}
}
return 0;
}