Menu
CoddyTech

요약 - 은행 계좌 관리자

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

challenge icon

챌린지

쉬움

이 장에서 배운 모든 클래스 속성 개념, 즉 getter와 setter를 사용하는 private 멤버, const 멤버 함수, mutable 멤버, static 변수와 메서드, friend 함수를 모두 활용하는 완전한 은행 계좌 관리자를 만들어 봅시다.

코드를 정리하기 위해 두 개의 파일을 만듭니다.

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

    클래스 정의 다음에 static 멤버와 friend 함수를 정의합니다.

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

<iomanip>의 std::fixed와 std::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);
    
    // 출력 형식을 소수점 이하 2자리로 설정하기
    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: friend 함수를 사용해 첫 번째 계좌에서 두 번째 계좌로 300.0 이체하기
    
    // TODO: "After transfer:" 출력하기
    
    // TODO: 첫 번째 계좌에 대해 "  <name>: $<balance>" 출력하기(2칸 들여쓰기 유의)
    
    // TODO: 두 번째 계좌에 대해 "  <name>: $<balance>" 출력하기(2칸 들여쓰기 유의)
    
    // TODO: 첫 번째 계정에 대해 "Query count for <name>: <count>"를 출력하세요
    
    return 0;
}

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

직접 연습해 보세요: 온라인 C++ 컴파일러