#include <iostream>
using namespace::std;
const int NAME_LEN=20;
/***********Account Class**********/
class Account
{
int id; //계좌번호
int balance; //잔액
char* name; //이름
public:
Account(){}
Account(int id, char* name, int balance);
Account(const Account& acc);
~Account();
int GetID() const; //계좌번호 조회
int GetBalance() const; //잔액조회
virtual void AddMoney(int val); //입금
void MinMoney(int val); //출금
const char* GetName() const;
virtual void ShowAllData();
};
Account::Account(int id, char* name, int balance) // 생성자
{
this->id=id;
this->balance=balance;
this->name=new char[strlen(name)+1];
strcpy(this->name, name);
}
Account::Account(const Account& acc) // 복사 생성자
{
this->id=acc.id;
this->balance=acc.balance;
this->name=new char[strlen(acc.name)+1];
strcpy(this->name, acc.name);
}
Account::~Account(){ //소멸자
delete []name;
}
int Account::GetID() const{
return id;
}
int Account::GetBalance() const{
return balance;
}
void Account::AddMoney(int val){
balance+=val;
}
void Account::MinMoney(int val){
balance-=val;
}
const char* Account::GetName() const{
return name;
}
void Account::ShowAllData(){
cout<<"계좌ID: "<<id<<endl;
cout<<"이 름: "<<name<<endl;
cout<<"잔 액: "<<balance<<endl;
}
/*********FaithAccount Class ********/
class FaithAccount : public Account
{
public:
FaithAccount(int id, char* name, int balance)
:Account(id,name, balance+balance*0.01) //balance를 받아서 계산한 값을 인자로 전달
{}
virtual void AddMoney(int val){
Account::AddMoney(val+val*0.01);
}
};
/*********ContriAccount Class ********/
class ContriAccount : public Account
{
int contribution; //기부금 총액
public:
ContriAccount(int id, char* name, int balance)
: Account(id , name, balance-balance*0.01)
{
contribution=balance*0.01;
}
virtual void AddMoney(int val){
Account::AddMoney(val-val*0.01);
contribution+=val*0.01;
}
virtual void ShowAllData(){
Account::ShowAllData();
cout<<"총 기부액: "<<contribution<<endl;
}
};
/********** AccManager Class **********/
class AccManager
{
Account* pArray[100]; //Account 저장을 위한 배열
int index;
public:
AccManager();
void PrintMenu();
void MakeAccount(); //계좌 개설을 위한 함수
void Deposit(); // 입 금
void Withdraw(); // 출 금
void Inquire(); //잔액 조회
};
AccManager::AccManager(){
index=0;
}
void AccManager::PrintMenu()
{
cout<<"---Menu-----"<<endl;
cout<<"1. 계좌 개설"<<endl;
cout<<"2. 입금 " <<endl;
cout<<"3. 출금 " <<endl;
cout<<"4. 잔액 조회"<<endl;
cout<<"5. 프로그램 종료"<<endl;
}
void AccManager::MakeAccount()
{
int id;
char name[NAME_LEN];
int balance;
int sel;
cout<<"개설할 계좌의 종류-----"<<endl;
cout<<"1. 일반 계좌. "<<endl;
cout<<"2. 신용 계좌. "<<endl;
cout<<"3. 기부 계좌. "<<endl;
cout<<">>";
cin>>sel;
cout<<"계좌 개설------"<<endl;
cout<<"계좌 ID: "; cin>>id;
cout<<"이 름: "; cin>>id;
cout<<"입금액: "; cin>>balance;
if(sel==1) //일반 계좌 개설 시
pArray[index++]=new Account(id, name, balance);
else if(sel==2) // 신용 계좌 개설 시
pArray[index++]=new FaithAccount(id,name,balance);
else if(sel==3) // 기부 계좌 개설 시
pArray[index++]=new ContriAccount(id,name,balance);
else
cout<<"선택 요류! "<<endl;
}
void AccManager::Deposit() // 입 금
{
int money;
int id;
cout<<"계좌 ID: "; cin>>id;
cout<<"입금액: "; cin>>money;
for(int i=0; i<index; i++)
{
if(pArray[i]->GetID()==id)
{
pArray[i]->AddMoney(money);
cout<<"입금 완료"<<endl;
return;
}
}
cout<<"유효하지 않은 ID입니다."<<endl;
}
void AccManager::Withdraw() // 출금
{
int money;
int id;
cout<<"계좌 ID: "; cin>>id;
cout<<"출금액: "; cin>>money;
for(int i=0; i<index; i++)
{
if(pArray[i]->GetID()==id)
{
if(pArray[i]->GetBalance()<money)
{
cout<<"잔액 부족"<<endl;
return;
}
pArray[i]->MinMoney(money);
cout<<" 출금 완료" <<endl;
return;
}
}
cout<<" 유효하지 않은 ID입니다."<<endl;
}
void AccManager::Inquire() // 전체 잔액 조회
{
for(int i=0; i<index; i++)
pArray[i]->ShowAllData();
}
/********main function ************/
enum{MAKE=1, DEPOSIT, WITHDRAW, INQUIRE,EXIT};
int main(void)
{
int choice;
AccManager manager;
while(1)
{
manager.PrintMenu();
cout<<"선택: ";
cin>>choice;
switch(choice)
{
case MAKE:
manager.MakeAccount();
break;
case DEPOSIT:
manager.Deposit();
break;
case WITHDRAW:
manager.Withdraw();
break;
case EXIT:
return 0;
default:
cout<<"Illegal selection.."<<endl;
break;
}
}
return 0;
}
'C++ > 열혈 C++' 카테고리의 다른 글
열혈 C++ 연습문제 10-2(cin 객체 <<연산자 오버로딩) (0) | 2018.04.08 |
---|---|
열혈 C++ 연습문제 10-1-3(+=연산자 오버로딩) (0) | 2018.04.08 |
열혈 C++ 연습문제 10-1-2(!=연산자 오버로딩) (0) | 2018.04.08 |
열혈 C++ 연습문제 10-1-1 (-연산자 오버로딩) (0) | 2018.04.08 |
열혈 C++ 연습문제 8-3 (0) | 2018.04.08 |
댓글