카테고리 없음

[C언어 과제] 전자기기 판매점 주문/정산 프로그램(KIOSK) 만들기

qkr3853 2026. 4. 16. 22:32

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문을 이용해 상품 번호별로 처리하고 상품별 수량을 따로 저장해주었습니다.

 

if/else if 조건문을 사용해 일정금액 이상 구매 시 할인이 되게끔 짜보았습니다.

총 금액 기준으로 할인이 적용됩니다.

10% / 5% / 0으로 나뉩니다.

 

배송비 설정

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

 

사은품

만약 qty_3번을 구매하거나, 총 구매한 메뉴가 5개 이상이라면 사은품이 지급됩니다.

||는 OR논리기호입니다.

 

3. 실행 화면

프로그램 실행 시
마우스를 구매해보겠습니. 수량은 2개!

 

더 사볼까요? 키보드1개랑 충전기 2개를 추가주문 해볼게요.

 

다 골랐으니 0을 입력해 결제를 해봅시다. 그랬더니 제가 코딩한대로 배송비도 적용됐고 할인 금액도 적용이 됐네요! 뿌듯

 

4. 가장 어려웠던 부분

이번 과제를 하면서 가장 힘들었던 건 코드 길이가 길어진 점이었습니다.

이전 과제들의 코드는 20~30줄 정도였기 때문에 코드의 흐름을 쉽게 파악할 수 있었습니다. 하지만 이번 코드는 100줄이 넘어서, 코드를 얼마나 완성했는지, 그리고 코드를 작성하는 방향이 맞는지 확신이 서지 않는 경우가 많았습니다.

중간에 작은 실수 하나로 결과가 이상하게 나오는 경우가 있었는데, 원인을 찾는 데 시간이 꽤 걸렸습니다.

또 입력값이 다양하다 보니 한 번 실행해서 끝나는 게 아니라 여러 상황을 계속 테스트해야 했고, 이 때문에 예상보다 시간이 훨씬 오래 걸렸습니다.

 

5. 문제 해결 과정

이 문제를 해결하려고 처음부터 한 번에 완성하려고 하기보다는, 기능을 나눠서 하나씩 구현하는 방식으로 접근했습니다.

먼저 메뉴 출력과 입력 부분만 만든 다음, 정상적으로 반복되는지 확인했습니다. 그 다음 switch문으로 상품 선택 기능을 추가하고, 각 상품의 수량이 제대로 누적되는지 직접 입력해보면서 확인했습니다.

이후에는 총 금액 계산 부분을 구현했는데, 이 과정에서 변수 하나가 잘못 들어가면 결과가 완전히 달라질 수 있다는 걸 체감했습니다.

할인과 배송비 조건을 넣을 때는 처음에 조건이 겹치거나 빠지는 문제가 있어서, 여러 금액을 입력해 보면서 테스트를 반복했습니다. 마지막으로 사은품 조건까지 추가한 뒤에는 처음부터 끝까지 여러 번 실행해 보면서 전체 흐름을 점검했습니다.

이렇게 나눠서 작업하다 보니 어디서 문제가 생겼는지 찾기가 훨씬 쉬워졌습니다.

 

6. 깨달은 점

이번 과제를 통해 느낀 점은, 코드를 작성하기 전에 구조를 먼저 생각하는 게 훨씬 중요하다는 것이었습니다.

처음에는 그냥 기능부터 구현하려고 했는데, 중간에 계속 수정이 생기면서 오히려 더 복잡해졌습니다.

하지만 출력해야 할 값이 무엇인지 깨닫고 나서는 코딩 전에 변수를 미리 준비할 수 있었고, 덕분에 나머지 과정을 훨씬 수월하게 마무리할 수 있었습니다.

또 하나는, 한 번에 완성하려고 하기보다는 작은 단위로 나눠서 계속 확인하는 방식이 훨씬 효율적이라는 것입니다. 이번처럼 코드가 길어질수록 이 방식이 더 중요하다고 느꼈습니다.

처음으로 긴 프로그램을 완성해봤다는 점이 의미가 있었던 과제였습니다.

 

7. 과제에 대한 생각

이번 과제는 진짜 어렵다 생각했습니다. 하지만 막상 하나씩 구현해 보니, 지금까지 배웠던 반복문, 조건문, 그리고 switch문만으로도 생각보다 다양한 기능을 만들 수 있다는 것을 알게 되었습니다.

특히 단순한 문법들을 조합하는 것만으로도 실제 키오스크처럼 동작하는 프로그램을 만들 수 있다는 점이 인상 깊었습니다. 이전에는 각각의 문법을 따로 배운다는 느낌이 강했는데, 이번 과제를 통해 그것들을 연결해서 하나의 프로그램으로 완성하는 경험을 할 수 있었습니다.

또한 처음에는 어렵게 느껴졌던 과제도 직접 구현해보면서 점점 이해가 되었고, 완성했을 때는 뿌듯함도 느낄 수 있었습니다. 그래서 이런 형태의 과제를 통해 실습을 더 많이 해보고 싶다는 생각이 들었습니다.