본문 바로가기

C++ 언어/Project

은행계좌 관리 프로그램 버전5

프로그램 추가 조건

조건1) AccountHandler라는 이름의 컨트롤 클래스를 정의하고, 앞서 정의한 전역함수들을 이 클래스의 멤버함수에 포함시킨다.
조건2) Account 객체의 저장을 위해 선언한 배열과 변수도 이 클래스의 멤버에 포함시킨다.
조건3) AccountHandler 클래스 기반으로 프로그램이 실행되도록 main 함수를 변경한다.
조건4) 버전4의 코드를 가져와서 변경한다.

 

실행결과

개좌개설 예시
입금기능 및 계좌정보 전체 출력 기능 예시

 

코드

#include <iostream>
#include<cstring>

using namespace std;
const int NAME_LEN = 20;

enum { MAKE = 1, DEPOSIT, WITHDRAW, INQUIRE, EXIT };

/*
* 클래스 이름: Account
* 클래스 유형: Entity 클래스
*/

class Account
{
private:
	int accID;
	int balance;
	char* cusName;
public:
	Account(int id, int money, char* name);
	Account(const Account& ref);
	int GetaccID() const;
	void Deposit(int money);
	int Withdraw(int money);
	void ShowInfo() const;
	~Account();
};

Account::Account(int id, int money, char* name)
	:accID(id), balance(money)
{
	cusName = new char[strlen(name) + 1];
	strcpy(cusName, name);
}

Account::Account(const Account& ref)
	:accID(ref.accID), balance(ref.balance)
{
	cusName = new char[strlen(ref.cusName) + 1];
	strcpy(cusName, ref.cusName);
}

int Account::GetaccID() const
{
	return accID;
}

void Account::Deposit(int money)
{
	balance += money;
}

int Account::Withdraw(int money)
{
	if (balance < money)
		return 0;

	balance -= money;
	return money;
}

void Account::ShowInfo() const
{
	cout << "계좌ID: " << accID << endl;
	cout << "이 름: " << cusName << endl;
	cout << "잔 액: " << balance << endl;
}

Account::~Account()
{
	delete[]cusName;
}

/*
* 클래스 이름: AccountHandler
* 클래스 유형: 컨트롤(Control) 클래스
*/

class AccountHandler
{
private:
	Account* accArr[100];		//Account 저장을 위한 배열
	int accNum;					//저장된 Account 수
public:
	AccountHandler();
	void ShowMenu(void)	const;			//메뉴출력
	void MakeAccount(void);				//계좌개설을 위한 함수
	void DepositMoney(void);			//입    금
	void WithdrawMoney(void);			//출    금
	void ShowAllAccInfo(void) const;	//잔액조회
	~AccountHandler();
};

AccountHandler::AccountHandler() :accNum(0)
{	}

void AccountHandler::ShowMenu(void)	const
{
	cout << endl;
	cout << "-----Menu-----" << endl;
	cout << "1. 계좌개설" << endl;
	cout << "2. 입 금" << endl;
	cout << "3. 출 금" << endl;
	cout << "4. 계좌정보 전체 출력" << endl;
	cout << "5. 프로그램 종료" << endl;
}
void AccountHandler::MakeAccount(void)
{
	int id, balance;
	char name[NAME_LEN];

	cout << "[계좌개설]" << endl;
	cout << "계좌ID: ";	cin >> id;
	cout << "이 름: ";	cin >> name;
	cout << "입금액: ";	cin >> balance;
	cout << endl;

	accArr[accNum++] = new Account(id, balance, name);
}
void AccountHandler::DepositMoney(void)
{
	int id, money;

	cout << "[입  금]" << endl;
	cout << "계좌ID: ";	cin >> id;
	cout << "입금액: "; cin >> money;

	for (int i = 0; i < accNum; i++)
	{
		if (accArr[i]->GetaccID() == id)
		{
			accArr[i]->Deposit(money);
			cout << "입금완료" << endl;
			return;
		}
	}
	cout << "유효하지 않은 ID 입니다." << endl;
}
void AccountHandler::WithdrawMoney(void)
{
	int id, money;

	cout << "[출  금]" << endl;
	cout << "계좌ID: ";	cin >> id;
	cout << "출금액: ";	cin >> money;

	for (int i = 0; i < accNum; i++)
	{
		if (accArr[i]->GetaccID() == id)
		{
			if (accArr[i]->Withdraw(money) == 0)
			{
				cout << "잔액부족" << endl;
				return;
			}
			cout << "출금완료" << endl;
			return;
		}
	}
	cout << "유효하지 않은 ID 입니다." << endl;
}
void AccountHandler::ShowAllAccInfo(void)	const
{
	for (int i = 0; i < accNum; i++)
	{
		accArr[i]->ShowInfo();
		cout << endl;
	}
}
AccountHandler::~AccountHandler()
{
	for (int i = 0; i < accNum; i++)
		delete accArr[i];
}

int main(void)
{
	AccountHandler manager;
	int choice;

	while (1)
	{
		manager.ShowMenu();
		cout << "선택: ";
		cin >> choice;
		cout << endl;

		switch (choice)
		{
		case MAKE:
			manager.MakeAccount();
			break;
		case DEPOSIT:
			manager.DepositMoney();
			break;
		case WITHDRAW:
			manager.WithdrawMoney();
			break;
		case INQUIRE:
			manager.ShowAllAccInfo();
			break;
		case EXIT:
			return 0;
		default:
			cout << "Illegal selection.." << endl;
		}
	}
	return 0;
}

 

<참고>

윤성우의 열혈 C++ 프로그래밍