교통카드 잔액 확인
- 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 |