Menu
Coddy logo textTech

요약 - 은행 계좌 관리자

Coddy C++ 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 104개 중 33번째.

challenge icon

챌린지

쉬움

이 장에서 배운 모든 클래스 속성 개념(프라이빗 멤버와 게터/세터, const 멤버 함수, mutable 멤버, 정적 변수 및 메서드, 프렌드 함수)을 하나로 모으는 완전한 은행 계좌 관리자(Bank Account Manager)를 만들어 봅시다.

코드를 정리하기 위해 두 개의 파일을 생성합니다:

  • BankAccount.h: 적절한 캡슐화를 통해 계좌 데이터를 관리하는 BankAccount 클래스를 정의합니다. 클래스에는 다음이 포함되어야 합니다:
    • 프라이빗 멤버: accountNumber (string), ownerName (string), balance (double), 그리고 잔액이 조회된 횟수를 추적하기 위한 mutable int queryCount
    • 존재하는 총 계좌 수를 추적하기 위한 프라이빗 정적 멤버 totalAccounts
    • 계좌 번호, 소유자 이름, 초기 잔액을 인자로 받는 생성자. 이 생성자는 queryCount0으로 초기화하고 totalAccounts를 증가시켜야 합니다.
    • Const 게터: getAccountNumber(), getOwnerName(), getBalance() — 잔액 게터는 호출될 때마다 queryCount를 증가시켜야 합니다.
    • 잔액이 조회된 횟수를 반환하는 const 게터 getQueryCount()
    • 금액이 양수인 경우에만 잔액에 추가하는 deposit(double amount) 메서드
    • 금액이 양수이고 현재 잔액을 초과하지 않는 경우에만 잔액에서 차감하는 withdraw(double amount) 메서드
    • 생성된 총 계좌 수를 반환하는 정적 메서드 getTotalAccounts()
    • 계좌 간에 돈을 이동시키는 프렌드 함수 transfer(BankAccount& from, BankAccount& to, double amount) 선언 — 금액이 양수이고 출금 계좌에 충분한 잔액이 있는 경우에만 이체해야 합니다.

    클래스 정의 뒤에 정적 멤버와 프렌드 함수를 정의하세요.

  • main.cpp: 이 모든 기능이 함께 작동하는 것을 보여줍니다. 입력에서 두 명의 소유자 이름과 두 개의 초기 잔액을 읽습니다(총 4줄: name1, balance1, name2, balance2). 그 후 다음을 수행합니다:
    • 계좌 번호가 "ACC001""ACC002"인 두 개의 BankAccount 객체를 생성합니다.
    • "Total accounts: <count>"를 출력합니다.
    • 첫 번째 계좌에 대해 "<name>: ": $"lt;balance>"를 출력합니다.
    • 두 번째 계좌에 대해 "<name>: ": $"lt;balance>"를 출력합니다.
    • 첫 번째 계좌에 500.0을 입금합니다.
    • 첫 번째 계좌에 대해 "After deposit - <name>: "After deposit - : $"lt;balance>"를 출력합니다.
    • 프렌드 함수를 사용하여 첫 번째 계좌에서 두 번째 계좌로 300.0을 이체합니다.
    • "After transfer:"를 출력합니다.
    • 첫 번째 계좌에 대해 " <name>: " : $"lt;balance>"를 출력합니다.
    • 두 번째 계좌에 대해 " <name>: " : $"lt;balance>"를 출력합니다.
    • 첫 번째 계좌에 대해 "Query count for <name>: <count>"를 출력합니다.

<iomanip>std::fixedstd::setprecision(2)를 사용하여 모든 잔액 값을 소수점 둘째 자리까지 형식화하세요. std::stod()를 사용하여 잔액 입력을 문자열에서 double로 변환하세요.

헤더 파일에 헤더 가드를 잊지 말고, 필요한 곳에 <string><iostream>을 포함하세요.

직접 해보기

#include <iostream>
#include <string>
#include <iomanip>
#include "BankAccount.h"

int main() {
    // 입력 읽기
    std::string name1, name2;
    std::string balance1Str, balance2Str;
    
    std::getline(std::cin, name1);
    std::getline(std::cin, balance1Str);
    std::getline(std::cin, name2);
    std::getline(std::cin, balance2Str);
    
    double balance1 = std::stod(balance1Str);
    double balance2 = std::stod(balance2Str);
    
    // 소수점 둘째 자리까지 출력 형식 설정
    std::cout << std::fixed << std::setprecision(2);
    
    // TODO: 계좌 번호가 "ACC001" 및 "ACC002"인 BankAccount 객체 두 개 생성
    
    // TODO: "Total accounts: <count>" 출력
    
    // TODO: 첫 번째 계좌에 대해 "<name>: $<balance>" 출력
    
    // TODO: 두 번째 계좌에 대해 "<name>: $<balance>" 출력
    
    // TODO: 첫 번째 계좌에 500.0 입금
    
    // TODO: 첫 번째 계좌에 대해 "After deposit - <name>: $<balance>" 출력
    
    // TODO: 프렌드 함수를 사용하여 첫 번째 계좌에서 두 번째 계좌로 300.0 이체
    
    // TODO: "After transfer:" 출력
    
    // TODO: 첫 번째 계좌에 대해 "  <name>: $<balance>" 출력 (공백 2개 들여쓰기 주의)
    
    // TODO: 두 번째 계좌에 대해 "  <name>: $<balance>" 출력 (공백 2개 들여쓰기 주의)
    
    // TODO: 첫 번째 계좌에 대해 "Query count for <name>: <count>" 출력
    
    return 0;
}

객체 지향 프로그래밍의 모든 레슨