C언어

[C언어] 교통카드, 카페 주문하기 예제

yujin0517 2021. 8. 2. 12:48

교통카드 잔액 확인

 

  • while 반복문을 사용하여 잔액이 부족할 경우 종료
  • if 조건문을 사용하여 나이에 따라 요금을 다르게 설정
  • 요금을 지불하고 교통카드에 남은 금액 출력

 

#include<stdio.h>

void main() {
	int childrenMaxAge = 13;
	int teenagerMaxAge = 19;
	int adultmaxAge = 150;
	int cMoney = 500;
	int tMoney = 1000;
	int aMoney = 1200;
	int money = 10000;
	int age = 0;

	while (1) {
		printf("나이를 입력하세요 : ");
		scanf_s("%d", &age);

		if (age <= childrenMaxAge && age > 0) {
			printf("어린이 입니다.\n");
			money -= cMoney;
			if (money <= 0) {
				printf("잔액이 부족합니다.");
				break;
			}
			printf("남은 금액은 %d원 입니다.\n", money);
		}
		else if (age <= teenagerMaxAge && age > childrenMaxAge) {
			printf("청소년 입니다.\n");
			money -= tMoney;
			if (money <= 0) {
				printf("잔액이 부족합니다.");
				break;
			}
			printf("남은 금액은 %d원 입니다.\n", money);
		}
		else if (age <= adultmaxAge && age > teenagerMaxAge) {
			printf("성인 입니다.\n");
			money -= aMoney;
			if (money <= 0) {
				printf("잔액이 부족합니다.");
				break;
			}
			printf("남은 금액은 %d원 입니다.\n", money);
		}
		else {
			printf("잘못 입력했습니다.\n");
		}
	}
}

이 예제에서는 변수사용이 중요하다고 생각합니다.

조건식을 작성할 때, "age <= 13 && age > 0" 이렇게 작성하여도 논리적으로 맞습니다.

하지만 위의 코드처럼 'childrenMaxAge'라는 변수에 13을 초기값으로 넣어 사용하면 MaxAge가 변경되었을 때, 조건식을 하나씩 바꿔주지 않고 변수의 초기값만 변경해주면 되기에 더욱 편리합니다. 

콘솔창

 

 

카페 주문하기

 

  • switch - case 문을 사용하여 입력한 값에 따라 조건문 실행
  • if 조건문을 사용하여 카드 잔액이 메뉴 가격보다 많이 남아 있을 경우  결제 완료 출력
  • noMoneyCheck, errCheck 변수는 잔액이 부족하거나 메뉴에 없는 번호를 입력할 경우 사용
  • 마지막에는 카드 잔액과 카페 수익 출력

 

#include<stdio.h>
/*
	<스타벅스>
	-메뉴-
	아메리카노 4000
	카페라떼 4500
	레몬에이드 5500
	샌츠위치 5000
	하나씩 주문한다고 가정!
*/

void main() {

	int amePrice = 4000;
	int lattePrice = 4500;
	int lemonPrice = 5500;
	int swPrice = 5000;
	int choice = 0;
	int cardMoney = 5000;  //내 카드 잔액
	int income = 0;  //카페 수익
	int noMoneyCheck = 0;
	int errCheck = 0;

	printf("어서오세요. 스타벅스 입니다.\n");
	printf( "========Menu=========");
	printf("\n1.아메리카노(4000)\n2.카페라떼(4500)\n3.레몬에이드(5500)\n4.샌츠위치(5000)\n");
	printf("=====================\n");

	printf("직원 : 주문하시겠습니까?\n");
	scanf_s("%d", &choice);

	switch(choice) {
	case 1:
		if (cardMoney - amePrice >= 0) {     //먼저 계산을 한 후에 비교를 한다. 
			printf("손님 : 아메리카노 주세요.\n");
			printf("직원 : %d원 입니다.\n", amePrice);
			cardMoney -= amePrice;
			printf("%d원 결제완료!\n", amePrice);
			income += amePrice;
			noMoneyCheck = 1;
		}
		break;
	case 2:
		if (cardMoney - lattePrice >= 0) {
			printf("손님 : 카페라떼 주세요.\n");
			printf("직원 : %d원 입니다.\n", lattePrice);
			cardMoney -= lattePrice;
			printf("%d원 결제완료!\n", lattePrice);
			income += lattePrice;
			noMoneyCheck = 1;
		}
		break;
	case 3:
		if (cardMoney - lemonPrice >= 0) {
			printf("손님 : 레몬에이드 주세요.\n");
			printf("직원 : %d원 입니다.\n", lemonPrice);
			cardMoney -= lemonPrice;
			printf("%d원 결제완료!\n", lemonPrice);
			income += lemonPrice;
			noMoneyCheck = 1;
		}
		break;
	case 4:
		if (cardMoney - swPrice >= 0) {
			printf("손님 : 샌드위치 주세요.\n");
			printf("직원 : %d원 입니다.\n", swPrice);
			cardMoney -= swPrice;
			printf("%d원 결제완료!\n", swPrice);
			income += swPrice;
			noMoneyCheck = 1;
		}
		break;
	default:
		printf("메뉴에 없는 음식입니다...\n");
		noMoneyCheck = 1;
		errCheck = 1;
	}

	if (noMoneyCheck != 1 && errCheck != 1) {
		printf("잔액이 부족합니다.\n");
	}
	else if (errCheck != 1){
		printf("카드 현재 잔액 : %d\n", cardMoney);
		printf("카페 현재 수익 : %d\n", income);
	}
}

- 이 코드를 사용할 때, if문을 사용해도 되지만 위의 코드는 입력한 값이 일치하는지 그렇지 않은지만 확인하면 되기에 switch - case문을 사용하였습니다.

- 프로그램을 실행하는 동작은 실제 카페에서 카드 결제를 하는 경우이고, 콘솔창을 닫는 동작은 카드 결제를 마친 경우입니다. 

 

결제 완료 콘솔창

 

잔액 부족 콘솔창

 

없는 음식 주문 콘솔창

 

 

========================================================================================================================================

↓수정 및 추가 코드

카페 주문하기 - while 반복문 사용

 

  • while문을 사용하여 5번을 선택하기 전까지 무한 반복
  • 각 case마다 if-else문을 사용하여 잔액이 남아있을 때만 주문 가능 (위 코드에서는 else문 없음) 
  • else문을 추가하여 잔액이 부족할 때, noMoneyCheck의 값을 0으로 넣어주어 "잔액이 부족합니다."를 출력

 

#include<stdio.h>
/*
	<스타벅스>

	-메뉴-
	아메리카노 4000
	카페라떼 4500
	레몬에이드 5500
	샌츠위치 5000

	하나씩 주문한다고 가정!
*/

void main() {

	int amePrice = 4000;
	int lattePrice = 4500;
	int lemonPrice = 5500;
	int swPrice = 5000;
	int choice = 0;
	int cardMoney = 10000;  //내 카드 잔액
	int income = 0;  //카페 수익
	int noMoneyCheck = 0;
	int errCheck = 0;

	while (1) {
		printf("어서오세요. 스타벅스 입니다.\n");
		printf("========Menu=========");
		printf("\n1.아메리카노(4000)\n2.카페라떼(4500)\n3.레몬에이드(5500)\n4.샌츠위치(5000)\n5.종료\n");
		printf("=====================\n");

		printf("직원 : 주문하시겠습니까?\n");
		scanf_s("%d", &choice);

		if (choice == 5) {
			printf("안녕히 가세요.");
			break;
		}

		switch (choice) {

		case 1:
			if (cardMoney - amePrice >= 0) {     //먼저 계산을 한 후에 비교를 한다. 
				printf("손님 : 아메리카노 주세요.\n");
				printf("직원 : %d원 입니다.\n", amePrice);
				cardMoney -= amePrice;
				printf("%d원 결제완료!\n\n", amePrice);
				income += amePrice;
				//printf("수익은 %d원 입니다.\n", income);
				noMoneyCheck = 1;
			}
			else
				noMoneyCheck = 0;
			break;

		case 2:
			if (cardMoney - lattePrice >= 0) {
				printf("손님 : 카페라떼 주세요.\n");
				printf("직원 : %d원 입니다.\n", lattePrice);
				cardMoney -= lattePrice;
				printf("%d원 결제완료!\n\n", lattePrice);
				income += lattePrice;
				noMoneyCheck = 1;
			}
			else
				noMoneyCheck = 0;
			break;

		case 3:
			if (cardMoney - lemonPrice >= 0) {
				printf("손님 : 레몬에이드 주세요.\n");
				printf("직원 : %d원 입니다.\n", lemonPrice);
				cardMoney -= lemonPrice;
				printf("%d원 결제완료!\n\n", lemonPrice);
				income += lemonPrice;
				noMoneyCheck = 1;
			}
			else
				noMoneyCheck = 0;
			break;

		case 4:
			if (cardMoney - swPrice >= 0) {
				printf("손님 : 샌드위치 주세요.\n");
				printf("직원 : %d원 입니다.\n", swPrice);
				cardMoney -= swPrice;
				printf("%d원 결제완료!\n\n", swPrice);
				income += swPrice;
				noMoneyCheck = 1;
			}
			else
				noMoneyCheck = 0;
			break;

		default:
			printf("메뉴에 없는 음식입니다...\n");
			noMoneyCheck = 1;
			errCheck = 1;
		}

		if (noMoneyCheck != 1 && errCheck != 1) {
			printf("잔액이 부족합니다.\n\n");
		} 
		else if (errCheck != 1) {
			printf("카드 현재 잔액 : %d\n", cardMoney);
			printf("카페 현재 수익 : %d\n", income);
		}
	}
}

 

콘솔창

 

 

감사합니다!

 

2021.08.02

'C언어' 카테고리의 다른 글

[자료구조 - C언어] 정렬(Sort) - Bubble, Insertion, Selection  (0) 2021.08.30
[C언어] 로또 번호 뽑기  (0) 2021.08.17
[C언어] 구조체(2) - 예제  (0) 2021.08.08
[C언어] 구조체(1)  (0) 2021.08.07
[C언어] 1차원 배열  (0) 2021.08.03