3-1. 키오스크 재고 관리 시스템
문제설명
카페 키오스크에는 3가지 메뉴(아메리카노, 라떼, 모카)를 조회하고 주문할 수 있다.
관리자는 메뉴 항목별 재고와 가격을 등록한다. 예를 들어, 각 메뉴 항목의 재고와 가격은 배열에 저장한다.
- 아메리카노: 재고 3개, 가격 3000원
- 라떼: 재고 3개, 가격 4000원
- 모카: 재고 3개, 가격 4500원
사용자가 메뉴를 조회한 뒤 항목 번호와 주문 개수를 입력하면, 주문 내역(항목, 개수, 금액, 전체 금액)을 출력하고 재고를 감소시킨다. 재고보다 많은 수량을 주문하거나 재고가 0이면 "품절"을 출력한다. 이 과정을 사용자가 0을 입력할 때까지 반복한다.
목표
- 전역변수(global), static 변수 사용
- const 상수 사용 (상수 정의 대신 #define MENU_COUNT 3 사용)
- 배열과 반복문과 조건문 함께 사용
- 재고 및 가격 관리
요구사항
- 키오스크 메뉴 항목은 3개로 고정되어 있다.
- 키오스크 메뉴 항목 3개를 입력받고, 각각의 금액과 재고도 입력받는다.
- 메뉴명과 재고는 배열로 받고, 프로그램 전체에서 사용할 수 있다.
- 주문 횟수를 관리하여 재고처리를 한다.
- 메뉴 번호가 1~3이면 아메리카노, 라떼, 모카순으로 주문 처리
- 재고가 0이면 "품절"을 출력하고 주문되지 않음
- 0을 입력하면 종료
출력예시
1. 아메리카노 - 3000원 (재고: 3)
2. 라떼 - 4000원 (재고: 3)
3. 모카 - 4500원 (재고: 3)
0. 종료
선택할 메뉴 번호 입력: 2
주문 개수 입력: 2
주문 내역
항목: 라떼
개수: 2
금액: 8000원
전체금액: 8000원
1. 아메리카노 - 3000원 (재고: 3)
2. 라떼 - 4000원 (재고: 1)
3. 모카 - 4500원 (재고: 3)
0. 종료
선택할 메뉴 번호 입력: 2
주문 개수 입력: 2
품절
선택할 메뉴 번호 입력: 0
프로그램 종료
코드예시
더보기
더보기
#include <stdio.h>
#define MENU_COUNT 3
char menu_names[MENU_COUNT][20];
int prices[MENU_COUNT];
int stock[MENU_COUNT];
void print_menu(void)
{
printf("\n===== 메뉴 =====\n");
for (int i = 0; i < MENU_COUNT; i++) {
printf("%d. %s - %d원 (재고: %d)\n",
i + 1, menu_names[i], prices[i], stock[i]);
}
printf("0. 종료\n");
}
void order_menu(int menu_number, int quantity)
{
static int total_sales = 0;
int index = menu_number - 1;
int cost;
if (stock[index] < quantity) {
printf("품절\n");
return;
}
stock[index] -= quantity;
cost = prices[index] * quantity;
total_sales += cost;
printf("\n주문 내역\n");
printf("항목: %s\n", menu_names[index]);
printf("개수: %d\n", quantity);
printf("금액: %d원\n", cost);
printf("전체금액: %d원\n", total_sales);
}
int main(void)
{
int menu_number;
int quantity;
printf("=== 관리자 메뉴 등록 ===\n");
for (int i = 0; i < MENU_COUNT; i++) {
printf("%d번 메뉴 이름 입력: ", i + 1);
scanf("%s", menu_names[i]);
printf("%d번 메뉴 가격 입력: ", i + 1);
scanf("%d", &prices[i]);
printf("%d번 메뉴 재고 입력: ", i + 1);
scanf("%d", &stock[i]);
}
while (1) {
print_menu();
printf("선택할 메뉴 번호 입력: ");
scanf("%d", &menu_number);
if (menu_number == 0) {
printf("프로그램 종료\n");
break;
}
if (menu_number < 1 || menu_number > MENU_COUNT) {
printf("잘못된 메뉴 번호입니다.\n");
continue;
}
printf("주문 개수 입력: ");
scanf("%d", &quantity);
if (quantity <= 0) {
printf("주문 개수는 1개 이상이어야 합니다.\n");
continue;
}
order_menu(menu_number, quantity);
}
return 0;
}
3-4. 게임 아이템 상점 관리
문제설명
게임 상점에는 아이템이 있다. 관리자는 아이템 이름, 가격, 재고를 입력하여 등록한다. 예를 들어 관리자가 다음과 같이 입력할 수 있다.
1번 아이템: Potion, 300원, 재고 5개
2번 아이템: Sword, 1000원, 재고 2개
3번 아이템: Shield, 800원, 재고 1개
2번 아이템: Sword, 1000원, 재고 2개
3번 아이템: Shield, 800원, 재고 1개
...
사용자는 상점에서 아이템 번호와 구매 개수를 입력하여 아이템을 구매할 수 있다. 구매가 성공하면
- 아이템 이름
- 구매 개수
- 구매 금액
- 전체 누적 구매 금액
을 출력하고, 재고를 감소시킨다. 재고보다 많이 구매하려 하면 "재고 부족"을 출력한다. 이 과정을 사용자가 0을 입력할 때까지 반복하시오.
목표
- 배열에 문자열, 가격, 재고 등록
- 배열 값을 읽고 수정
- 전역변수, static 변수, 반복문, 조건문 활용
- 등록한 정보를 프로그램에서 계속 사용
요구사항
- 아이템 이름, 가격, 재고를 각각 배열에 저장할 것
- 구매가 성공하면 재고를 감소시킬 것
- 총 구매 금액은 함수 안의 static 변수로 관리할 것
- 종료 번호는 0
출력예시
=== 아이템 등록 ===
1번 아이템 이름 입력: Potion
1번 아이템 가격 입력: 300
1번 아이템 재고 입력: 5
2번 아이템 이름 입력: Sword
2번 아이템 가격 입력: 1000
2번 아이템 재고 입력: 2
===== 상점 =====
1. Potion - 300원 (재고: 5)
2. Sword - 1000원 (재고: 2)
3. Shield - 800원 (재고: 1)
0. 종료
구매할 아이템 번호 입력: 2
구매 개수 입력: 1
구매 내역
아이템: Sword
개수: 1
금액: 1000원
전체 구매 금액: 1000원
구매할 아이템 번호 입력: 3
구매 개수 입력: 2
재고 부족
코드예시
더보기
더보기
#include <stdio.h>
#define MAX_MENU 100
#define NAME_SIZE 20
char menu_names[MAX_MENU][NAME_SIZE];
int prices[MAX_MENU];
int stock[MAX_MENU];
int menu_count = 0;
void register_menus(void);
void print_menus(void);
void order_menu(void);
void register_menus(void)
{
int i = 0;
while (1) {
int stop;
printf("\n%d번 메뉴 이름 입력: ", i + 1);
scanf("%s", menu_names[i]);
printf("%d번 메뉴 가격 입력: ", i + 1);
scanf("%d", &prices[i]);
printf("%d번 메뉴 재고 입력: ", i + 1);
scanf("%d", &stock[i]);
i++;
menu_count = i;
if (i >= MAX_MENU) {
printf("더 이상 메뉴를 등록할 수 없습니다.\n");
break;
}
printf("계속 등록하시겠습니까? (1: 계속, 0: 종료): ");
scanf("%d", &stop);
if (stop == 0) {
break;
}
}
}
void print_menus(void)
{
printf("\n===== 메뉴 =====\n");
for (int i = 0; i < menu_count; i++) {
printf("%d. %s - %d원 (재고: %d)\n",
i + 1, menu_names[i], prices[i], stock[i]);
}
printf("0. 종료\n");
}
void order_menu(void)
{
static int total_sales = 0;
int menu_number;
int quantity;
int index;
int cost;
while (1) {
print_menus();
printf("선택할 메뉴 번호 입력: ");
scanf("%d", &menu_number);
if (menu_number == 0) {
printf("프로그램 종료\n");
break;
}
if (menu_number < 1 || menu_number > menu_count) {
printf("잘못된 메뉴 번호입니다.\n");
continue;
}
printf("주문 개수 입력: ");
scanf("%d", &quantity);
if (quantity <= 0) {
printf("주문 개수는 1개 이상이어야 합니다.\n");
continue;
}
index = menu_number - 1;
if (stock[index] < quantity) {
printf("품절\n");
continue;
}
stock[index] -= quantity;
cost = prices[index] * quantity;
total_sales += cost;
printf("\n주문 내역\n");
printf("항목: %s\n", menu_names[index]);
printf("개수: %d\n", quantity);
printf("금액: %d원\n", cost);
printf("전체금액: %d원\n", total_sales);
}
}
int main(void)
{
printf("=== 관리자 메뉴 등록 ===\n");
register_menus();
if (menu_count == 0) {
printf("등록된 메뉴가 없습니다.\n");
return 0;
}
order_menu();
return 0;
}
'[1] 프로그래밍1 및 실습(C언어) > 6주차. 재귀함수, 배열' 카테고리의 다른 글
| [6주차][배열] 2단계 연습문제 (0) | 2026.04.09 |
|---|---|
| [6주차][배열] 1단계 연습문제 (0) | 2026.04.09 |
| [6주차][조건,분기,함수] 3단계 연습문제 (0) | 2026.04.06 |
| [6주차][조건,분기,함수] 2단계 연습문제 (0) | 2026.04.06 |
| [6주차][조건,분기,함수] 1단계 연습문제 (0) | 2026.04.06 |