출금 로직
Coddy C 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 61개 중 25번째.
챌린지
쉬움은행 계좌 기능이 확장되고 있습니다! 이제 출금 기능을 추가해 보겠습니다. 입금과 달리 출금에는 추가적인 제약 조건이 있습니다. 즉, 잔액보다 더 많은 돈을 인출할 수 없습니다. withdraw 함수는 거래를 허용하기 전에 잔액을 확인해야 합니다.
기존의 은행 계좌 프로젝트를 바탕으로 출금 기능을 추가하여 모듈을 확장합니다. 여기서 캡슐화의 진가가 드러납니다. 함수는 외부 코드에서는 직접 접근할 수 없는 숨겨진 잔액에 접근하여 충분한 자금이 있는지 확인할 수 있습니다.
세 개의 파일로 작업하게 됩니다:
account.h: 새로운 함수 프로토타입인withdraw를 추가합니다. 이 함수는 Account 포인터와double타입의 금액을 인자로 받으며,int를 반환합니다 (성공 시 1, 출금 실패 시 0).create_account,destroy_account,deposit에 대한 기존 선언을 모두 유지하세요.account.c:withdraw함수를 구현합니다. 출금은 두 가지 조건이 충족될 때만 성공해야 합니다: 금액이 양수(0보다 큼)여야 하며, 계좌에 충분한 잔액(balance >= amount)이 있어야 합니다. 두 조건이 모두 충족되면 잔액에서 금액을 차감하고 1을 반환합니다. 그렇지 않으면 잔액을 수정하지 않고 0을 반환합니다.main.c: 전체 입금 및 출금 워크플로우를 보여줍니다. 계좌를 생성하고, 잔액을 만들기 위해 입금을 한 다음, 성공적인 출금과 실패한 출금을 모두 테스트합니다.
네 개의 입력을 받게 됩니다: 계좌 ID (정수), 입금액 (초기 자금 설정용), 성공할 출금액 (입금된 금액보다 작거나 같음), 실패할 출금액 (남은 잔액보다 많음).
메인 파일에서 계좌를 생성하고 확인 메시지를 출력하세요. 초기 자금을 입금하고 결과를 출력합니다. 그런 다음 성공적인 출금을 수행하고 성공 여부를 출력합니다. 마지막으로 실패해야 하는 출금(잔액 부족)을 시도하고 그 결과를 출력합니다. 계좌를 소멸시키고 정리가 되었음을 확인합니다.
출력은 다음 형식으로 하세요:
Account 1001 created
Deposit 500.00: 1
Withdraw 200.00: 1
Withdraw 400.00: 0
Account destroyed여기서 1001은 계좌 ID, 500.00은 입금액, 200.00은 성공한 출금액, 400.00은 실패한 출금액(첫 번째 출금 후 300.00만 남았기 때문)입니다. 모든 금액은 %.2f를 사용하여 소수점 둘째 자리까지 표시하세요.
작성한 withdraw 함수는 캡슐화의 힘을 보여줍니다. 외부 코드에서 유효성 검사를 우회하거나 잔액을 직접 엿볼 수 없는 반면, 함수 내부에서는 숨겨진 잔액을 확인하여 결정을 내릴 수 있습니다.
직접 해보기
#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;
}