/*
BankAccount 클래스의 멤버함수 중 일부를 const로 선언하면서 Banking System의 버전을 0.3에서 0.4으로 업그레이드 시키겠다.
const로 선언이 가능한 모든 멤버함수를 const로 선언하자
*/
#include <iostream>
#include <cstring>
using namespace::std;
int Menu(void); //메뉴
void MakeBankAccount(void); //계좌 개설
void Deposit(int money); //입금
void Withdraw(int money); //출금
void ShowAccountInfo(void); //전체고객 잔액조회
class BankAccount
{
private:
int AccountNumber; //계좌 번호
char *Name; //고객 이름
int Money; //고객의 잔액
public:
BankAccount(int num, char *name, int money) :AccountNumber(num), Money(money) //생성자
{
Name = new char[strlen(name) + 1];
strcpy(Name, name);
}
BankAccount(const BankAccount ©) :AccountNumber(copy.AccountNumber), Money(copy.Money) //추가된 복사생성자(나름 간단), const 추가
{
Name = new char[strlen(copy.Name) + 1];
strcpy(Name, copy.Name);
}
int GetNumber() const //const 추가
{
return AccountNumber;
}
void Deposit(int money)
{
Money += money;
}
int Withdraw(int money)
{
if (Money < money)
return 0;
Money -= money;
return money;
}
void ShowAccountInfo() const //const 추가
{
cout << "이름:" << Name << endl;
cout << "계좌번호:" << AccountNumber << endl;
cout << "잔고:" << Money << endl;
}
~BankAccount() //소멸자
{
delete[]Name;
}
};
BankAccount *Arr[10]; //계좌 포인터 배열
int AccountNum = 0; //계좌 개수
int main(void)
{
int money;
while (1)
{
int sel = Menu();
switch (sel)
{
case 1:
MakeBankAccount();
break;
case 2:
cout << "입금할 금액:";
cin >> money;
Deposit(money);
break;
case 3:
cout << "출금할 금액:";
cin >> money;
Withdraw(money);
break;
case 4:
ShowAccountInfo();
break;
case 5:
for (int i = 0; i < AccountNum; i++) //포인터배열을 동적할당했으므로
delete Arr[i];
return 0;
default:
cout << "잘못된 번호를 입력하셨습니다" << endl;
}
}
return 0;
}
int Menu(void)
{
int sel;
cout << "-----Menu-----" << endl;
cout << "1.계좌개설" << endl << "2.입금" << endl << "3.출금" << endl << "4.계좌정보 전체 출력" << endl << "5.프로그램 종료" << endl;
cout << "선택";
cin >> sel;
return sel;
}
void MakeBankAccount()
{
int accountNumber;
char name[30];
int money;
cout << AccountNum + 1 << "사람 정보 입력" << endl;
cout << "계좌번호 입력:";
cin >> accountNumber;
cout << "이름 입력:";
cin >> name;
cout << "잔액 입력:";
cin >> money;
cout << endl;
Arr[AccountNum++] = new BankAccount(accountNumber, name, money); //계좌개설 완료 후 다음 사람으로
}
void Deposit(int money)
{
int number;
cout << "고객님의 계좌번호를 입력해주세요:";
cin >> number;
for (int i = 0; i <= AccountNum; i++)
{
if (Arr[i]->GetNumber() == number) //계좌번호가 같으면
{
Arr[i]->Deposit(money);
cout << "입금이 완료되었습니다" << endl;
return;
}
}
cout << "없는 계좌번호입니다" << endl;
}
void Withdraw(int money)
{
int number;
cout << "고객님의 계좌번호를 입력해주세요:";
cin >> number;
for (int i = 0; i <= AccountNum; i++)
{
if (Arr[i]->GetNumber() == number) //계좌번호가 같으면
{
if (Arr[i]->Withdraw(money) == 0)
{
cout << "잔액이 부족합니다" << endl;
return;
}
cout << "출금이 완료되었습니다" << endl;
return;
}
}
cout << "없는 계좌번호입니다" << endl;
}
void ShowAccountInfo(void)
{
for (int i = 0; i < AccountNum; i++)
{
Arr[i]->ShowAccountInfo();
cout << endl;
}
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
[참고] 열혈 C++ 프로그래밍 윤성우 저
'C++ > 열혈 C++ 프로그래밍(윤성우 저)' 카테고리의 다른 글
열혈 C++ 프로그래밍 7-2 문제 (0) | 2017.06.05 |
---|---|
열혈 C++ 프로그래밍 7-1 문제 (0) | 2017.06.05 |
OOP 단계별 프로젝트 3 (0) | 2017.05.31 |
열혈 C++ 프로그래밍 5-1 문제 (0) | 2017.05.31 |
OOP 단계별 프로젝트 2 (0) | 2017.05.30 |