1. 프로그램 소개
C언어의 기본인 반복문, 조건문, 변수 활용 능력을 기르기 위해 제작한 키오스크 프로그램입니다.
이번 과제에서는 C언어의 기본 문법을 활용하여
전자기기 판매점 주문/정산 프로그램(KIOSK)을 구현하였습니다.
사용자는 상품 번호와 수량을 입력하여 여러 번 주문할 수 있으며,
최종적으로 다음 정보를 출력합니다.
- 총 구매 금액
- 할인 금액
- 배송비
- 최종 결제 금액
- 사은품 지급 여부
실제 키오스크처럼 동작하도록 구현한 것이 핵심입니다.
2. 코드 구조
/*
* KIOSK Program
* Developer : 비밀
*/
#include <stdio.h>
int main() {
int menu = 0;
int qty = 0, qty_1 = 0, qty_2 = 0, qty_3 = 0, qty_4 = 0, qty_5 = 0;
int total_qty = 0;
double total_price = 0;
double discount = 0;
double shipping_cost = 0;
double final_price = 0;
while (1) {
printf("\n==============================\n");
printf(" 전자기기 판매점 주문 시스템\n");
printf("==============================\n");
printf("1. USB 메모리 12000원\n");
printf("2. 무선 마우스 25000원\n");
printf("3. 기계식 키보드 55000원\n");
printf("4. 헤드셋 38000원\n");
printf("5. 충전기 18000원\n");
printf("0. 결제하기\n");
printf("==============================\n");
printf("상품 번호 입력 : ");
scanf("%d", &menu);
if (menu == 0) break;
if (menu < 0 || menu > 5) {
printf("[오류] 올바르지 않은 상품 번호입니다. 다시 입력해주세요.\n");
continue;
}
printf("수량 입력 : ");
scanf("%d", &qty);
if (qty <= 0) {
printf("[오류] 수량은 1 이상이어야 합니다. 주문이 무효 처리됩니다.\n");
continue;
}
switch (menu) {
case 1:
qty_1 += qty;
printf("주문금액: %d원\n", 12000 * qty);
break;
case 2:
qty_2 += qty;
printf("주문금액: %d원\n", 25000 * qty);
break;
case 3:
qty_3 += qty;
printf("주문금액: %d원\n", 55000 * qty);
break;
case 4:
qty_4 += qty;
printf("주문금액: %d원\n", 38000 * qty);
break;
case 5:
qty_5 += qty;
printf("주문금액: %d원\n", 18000 * qty);
break;
}
}
total_qty = qty_1 + qty_2 + qty_3 + qty_4 + qty_5;
total_price = (qty_1 * 12000) + (qty_2 * 25000) + (qty_3 * 55000) + (qty_4 * 38000) + (qty_5 * 18000);
if (total_price >= 100000) {
discount = total_price * 0.1;
}
else if (total_price >= 70000) {
discount = total_price * 0.05;
}
else {
discount = 0;
}
if (total_price < 30000 && total_price > 0) {
shipping_cost = 3000;
}
else {
shipping_cost = 0;
}
final_price = total_price - discount + shipping_cost;
printf("\n========= 결제 내역 =========\n");
printf("USB 메모리 구매 수량 : %d\n", qty_1);
printf("무선 마우스 구매 수량 : %d\n", qty_2);
printf("기계식 키보드 구매 수량 : %d\n", qty_3);
printf("헤드셋 구매 수량 : %d\n", qty_4);
printf("충전기 구매 수량 : %d\n", qty_5);
printf("----------------------------\n");
printf("총 구매 수량 : %d\n", total_qty);
printf("총 구매 금액 : %.0f원\n", total_price);
printf("할인 금액 : %.0f원\n", discount);
printf("배송비 : %.0f원\n", shipping_cost);
printf("최종 결제 금액 : %.0f원\n", final_price);
if (qty_3 >= 1 || total_qty >= 5) {
printf("사은품 지급 대상입니다.\n");
}
else {
printf("사은품 지급 대상이 아닙니다.\n");
}
printf("============================\n");
return 0;
}
코드



while(1)을 사용하여 무한 반복됩니다.
0이 입력될 시 반복문에서 탈출할 수 있습니다.

0이랑 5사이의 숫자가 아닌 다른 숫자를 입력하거나 수량이 음수(-)가 나오지 않게 조건을 걸어주었습니다.

다음은 switch문을 이용해 상품 번호별로 처리하고 상품별 수량을 따로 저장해주었습니다.

총 금액 기준으로 할인이 적용됩니다.
10% / 5% / 0으로 나뉩니다.

&&는 AND 논리연산기호입니다. 그리고 최종 결제 금액입니다.

만약 qty_3번을 구매하거나, 총 구매한 메뉴가 5개 이상이라면 사은품이 지급됩니다.
||는 OR논리기호입니다.
3. 실행 화면




4. 가장 어려웠던 부분
이번 과제를 하면서 가장 힘들었던 건 코드 길이가 길어진 점이었습니다.
이전 과제들의 코드는 20~30줄 정도였기 때문에 코드의 흐름을 쉽게 파악할 수 있었습니다. 하지만 이번 코드는 100줄이 넘어서, 코드를 얼마나 완성했는지, 그리고 코드를 작성하는 방향이 맞는지 확신이 서지 않는 경우가 많았습니다.
중간에 작은 실수 하나로 결과가 이상하게 나오는 경우가 있었는데, 원인을 찾는 데 시간이 꽤 걸렸습니다.
또 입력값이 다양하다 보니 한 번 실행해서 끝나는 게 아니라 여러 상황을 계속 테스트해야 했고, 이 때문에 예상보다 시간이 훨씬 오래 걸렸습니다.
5. 문제 해결 과정
이 문제를 해결하려고 처음부터 한 번에 완성하려고 하기보다는, 기능을 나눠서 하나씩 구현하는 방식으로 접근했습니다.
먼저 메뉴 출력과 입력 부분만 만든 다음, 정상적으로 반복되는지 확인했습니다. 그 다음 switch문으로 상품 선택 기능을 추가하고, 각 상품의 수량이 제대로 누적되는지 직접 입력해보면서 확인했습니다.
이후에는 총 금액 계산 부분을 구현했는데, 이 과정에서 변수 하나가 잘못 들어가면 결과가 완전히 달라질 수 있다는 걸 체감했습니다.
할인과 배송비 조건을 넣을 때는 처음에 조건이 겹치거나 빠지는 문제가 있어서, 여러 금액을 입력해 보면서 테스트를 반복했습니다. 마지막으로 사은품 조건까지 추가한 뒤에는 처음부터 끝까지 여러 번 실행해 보면서 전체 흐름을 점검했습니다.
이렇게 나눠서 작업하다 보니 어디서 문제가 생겼는지 찾기가 훨씬 쉬워졌습니다.
6. 깨달은 점
이번 과제를 통해 느낀 점은, 코드를 작성하기 전에 구조를 먼저 생각하는 게 훨씬 중요하다는 것이었습니다.
처음에는 그냥 기능부터 구현하려고 했는데, 중간에 계속 수정이 생기면서 오히려 더 복잡해졌습니다.
하지만 출력해야 할 값이 무엇인지 깨닫고 나서는 코딩 전에 변수를 미리 준비할 수 있었고, 덕분에 나머지 과정을 훨씬 수월하게 마무리할 수 있었습니다.
또 하나는, 한 번에 완성하려고 하기보다는 작은 단위로 나눠서 계속 확인하는 방식이 훨씬 효율적이라는 것입니다. 이번처럼 코드가 길어질수록 이 방식이 더 중요하다고 느꼈습니다.
처음으로 긴 프로그램을 완성해봤다는 점이 의미가 있었던 과제였습니다.
7. 과제에 대한 생각
이번 과제는 진짜 어렵다 생각했습니다. 하지만 막상 하나씩 구현해 보니, 지금까지 배웠던 반복문, 조건문, 그리고 switch문만으로도 생각보다 다양한 기능을 만들 수 있다는 것을 알게 되었습니다.
특히 단순한 문법들을 조합하는 것만으로도 실제 키오스크처럼 동작하는 프로그램을 만들 수 있다는 점이 인상 깊었습니다. 이전에는 각각의 문법을 따로 배운다는 느낌이 강했는데, 이번 과제를 통해 그것들을 연결해서 하나의 프로그램으로 완성하는 경험을 할 수 있었습니다.
또한 처음에는 어렵게 느껴졌던 과제도 직접 구현해보면서 점점 이해가 되었고, 완성했을 때는 뿌듯함도 느낄 수 있었습니다. 그래서 이런 형태의 과제를 통해 실습을 더 많이 해보고 싶다는 생각이 들었습니다.