출금 로직
Coddy C 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 25번째.
챌린지
쉬움여러분의 Bank Account가 성장하고 있습니다! 이제 자금을 인출하는 기능을 추가해 봅시다. 입금과 달리 인출에는 추가 제약 조건이 있습니다. 보유한 금액보다 더 많은 돈을 인출할 수는 없습니다. withdraw 함수는 거래를 허용하기 전에 balance를 확인해야 합니다.
기존 Bank Account 프로젝트를 기반으로 모듈을 확장하여 인출 기능을 추가합니다. 여기서 캡슐화의 진가가 드러납니다. 함수는 숨겨진 balance에 접근하여 충분한 자금이 있는지 확인할 수 있지만, 외부 코드는 이를 직접 수행할 수 없습니다.
다음 세 파일을 작업합니다:
account.h: 새로운 함수 프로토타입인withdraw를 추가합니다. 이 함수는 Account 포인터와doubleamount를 인수로 받고,int를 반환합니다(성공하면 1, withdrawal이 실패하면 0). 기존의create_account,destroy_account,deposit선언은 모두 유지하세요.account.c:withdraw함수를 Implement합니다. withdrawal은 두 가지 조건이 충족될 때만 성공해야 합니다. amount는 양수여야 하며(0보다 커야 함), AND account에 충분한 자금이 있어야 합니다(balance >= amount). 두 조건이 모두 충족되면 balance에서 amount를 subtract하고 1을 반환합니다. 그렇지 않으면 balance를 modifying하지 않고 0을 반환합니다.main.c: 완전한 deposit 및 withdraw workflow를 보여 줍니다. account를 생성하고, balance를 설정하기 위해 deposit한 다음, 성공한 withdrawal과 실패한 withdrawal을 모두 테스트합니다.
네 개의 입력을 받습니다: account ID(정수), deposit amount(초기 자금 설정용), successful withdrawal amount(입금된 amount 이하), 그리고 failed withdrawal amount(남은 balance보다 큼)입니다.
main 파일에서 account를 생성하고 확인 메시지를 출력합니다. 초기 자금을 deposit하고 그 결과를 출력합니다. 그런 다음 successful withdrawal을 수행하고 성공 여부를 출력합니다. 마지막으로 실패해야 하는 withdrawal(자금 부족)을 시도하고 그 결과를 출력합니다. account를 destroy_account하고 정리가 완료되었음을 확인합니다.
출력 형식은 다음과 같습니다:
Account 1001 created
Deposit 500.00: 1
Withdraw 200.00: 1
Withdraw 400.00: 0
Account destroyed여기서 1001은 account ID, 500.00은 deposit, 200.00은 successful withdrawal, 400.00은 failed withdrawal입니다(첫 번째 withdrawal 후에는 300.00만 남기 때문입니다). 모든 amount는 %.2f를 사용하여 소수점 이하 두 자리로 형식화하세요.
withdraw 함수는 캡슐화의 강력함을 보여 줍니다. 함수는 내부적으로 숨겨진 balance를 확인하여 결정할 수 있지만, 외부 코드는 이 검증을 우회하거나 balance를 직접 확인할 방법이 없습니다.
직접 해보기
#include <stdio.h>
#include "account.h"
int main() {
int account_id;
scanf("%d", &account_id);
double valid_amount;
scanf("%lf", &valid_amount);
double invalid_amount;
scanf("%lf", &invalid_amount);
Account* account = create_account(account_id);
printf("Account %d created\n", account_id);
int result_invalid = deposit(account, invalid_amount);
printf("Deposit %.2f: %d\n", invalid_amount, result_invalid);
int result_valid = deposit(account, valid_amount);
printf("Deposit %.2f: %d\n", valid_amount, result_valid);
destroy_account(account);
printf("Account destroyed\n");
return 0;
}객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 C 컴파일러