요약 - 은행 계좌 관리자
Coddy C++ 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 104개 중 33번째.
챌린지
쉬움이 장에서 배운 모든 클래스 속성 개념(프라이빗 멤버와 게터/세터, const 멤버 함수, mutable 멤버, 정적 변수 및 메서드, 프렌드 함수)을 하나로 모으는 완전한 은행 계좌 관리자(Bank Account Manager)를 만들어 봅시다.
코드를 정리하기 위해 두 개의 파일을 생성합니다:
BankAccount.h: 적절한 캡슐화를 통해 계좌 데이터를 관리하는BankAccount클래스를 정의합니다. 클래스에는 다음이 포함되어야 합니다:- 프라이빗 멤버:
accountNumber(string),ownerName(string),balance(double), 그리고 잔액이 조회된 횟수를 추적하기 위한mutable int queryCount - 존재하는 총 계좌 수를 추적하기 위한 프라이빗 정적 멤버
totalAccounts - 계좌 번호, 소유자 이름, 초기 잔액을 인자로 받는 생성자. 이 생성자는
queryCount를0으로 초기화하고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::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);
// 소수점 둘째 자리까지 출력 형식 설정
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;
}