3 minute read

🔭프로그램 설명

  • 컨트롤 클래스를 정의해보고자 한다.

  • 컨트롤 클래스 특징
    1. 프로그램 전체의 기능을 담당한다. 따라서 기능적 성격이 강한 클래스이다.
    2. 컨트롤 클래스만 봐도 프로그램의 전체 기능과 흐름을 파악할 수 있다.
  • Entity 클래스 : 컨트롤 클래스가 아닌 대부분의 클래스
    1. 데이터적 성격이 강하다.
    2. 프로그램 기능을 파악하는 데 도움을 주지는 못하지만 프로그램상에서 관리되는 데이터의 종류를 파악하는 데 도움이 된다.

🖥️구현

  • 교재에서는 AccountHandler라는 클래스를 정의했지만, 본인은 앞서 이미 BankSystem이라는 컨트롤 클래스를 정의해놓았기 때문에 새로운 클래스를 정의할 필요는 없었다.

  • 그러나 Account클래스에 입금, 출금, 잔액확인 함수를 새로 만들어 BankSystem의 멤버함수에서 중복되는 코드를 줄이고 좀 더 간결하게 수정했다.

  • 또한 헤더파일과 소스파일을 나누어 길어진 코드를 정리했다.

//Stage_5.h
#pragma once
class Account
{
public:
	Account(int id, char* name, int balance);
	Account(const Account& ref);
	~Account();

private:
	int m_Id;			// 계좌번호
	char* m_cpName;		// 이름
	int m_Balance;		// 잔고

public:
	int getID() const;
	int Deposit(int monyey);
	int Withdraw(int money);
	void ShowAccInfo() const;
};

class BankSystem
{
public:
	BankSystem();
	~BankSystem();

private:
	int m_NumOfAcc;				// 계좌 개수
	Account* m_pAccs[50];		// 계좌 배열

public:
	void AnnounceSys();			// 시스템 안내
	void CreateAccount();		// 계좌 개설
	void DepositMoney();		// 입금
	void WithdrawMoney();		// 출금
	void InquiryAcc() const;	// 잔액조회
};

/*
 * Banking System Ver 0.5
 * author : YEJIN LEE
 * contents : 컨트롤 클래스
 */

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstring>
#include "Stage_5.h"

using namespace std;

enum { DEPOSIT = 1, WITHDRAW, CREATE, INQUIRY, EXIT };
const int NAME_LEN = 10;

///////////////////// 계좌 /////////////////////////
Account::Account(int id, char* name, int balance) : m_Id(id), m_Balance(balance)
{
	m_cpName = new char[strlen(name) + 1];
	strcpy(m_cpName, name);
}

Account::Account(const Account& ref)
	: m_Id(ref.m_Id), m_Balance(ref.m_Balance) {
	m_cpName = new char[strlen(ref.m_cpName) + 1];
	strcpy(m_cpName, ref.m_cpName);
}

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

int Account::getID() const {
	return m_Id;
}

int Account::Deposit(int money) {
	m_Balance += money;
	return money;
}

int Account::Withdraw(int money) {
	if (m_Balance - money < 0) {
		return -1;
	}

	m_Balance -= money;
	return money;
}

void Account::ShowAccInfo() const {
	cout << "계좌번호 : " << m_Id << endl; 
	cout << "이    름 : " << m_cpName << endl; 
	cout << "잔    액 : " << m_Balance << endl; 
}


//////////////////// 은행 //////////////////////

BankSystem::BankSystem() : m_NumOfAcc(0)
{
}

BankSystem::~BankSystem()
{
	delete[]m_pAccs;
}

void BankSystem::AnnounceSys() {

	cout << "----- Menu -----" << endl;
	cout << "1. 입    금" << endl;
	cout << "2. 출    금" << endl;
	cout << "3. 개    설" << endl;
	cout << "4. 계좌정보" << endl;
	cout << "5. 종    료" << endl;

}

void BankSystem::CreateAccount() {

	int id;
	char name[NAME_LEN];
	int money;

	cout << "계좌번호 : " << endl; cin >> id;
	cout << "이    름 : " << endl; cin >> name;
	cout << "잔    액 : " << endl; cin >> money;

	m_pAccs[m_NumOfAcc++] = new Account(id, name, money);

}

void BankSystem::DepositMoney() {

	int id;
	int money;

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

	for (int i = 0; i < m_NumOfAcc; i++) {
		if (m_pAccs[i]->getID() == id) {
			int retMoney = m_pAccs[i]->Deposit(money);
			
			cout << "잔액 : " << retMoney << endl << endl;
			return;
		}
	}

	cout << "해당 계좌가 존재하지 않습니다" << endl << endl;
	return;
}

void BankSystem::WithdrawMoney() {
	int id;
	int money;

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

	for (int i = 0; i < m_NumOfAcc; i++) {
		if (m_pAccs[i]->getID() == id) {
			int retMoney = m_pAccs[i]->Deposit(money);

			if (retMoney < 0) {
				cout << "잔액이 부족합니다" << endl << endl;
			}

			cout << "잔액 : " << retMoney << endl << endl;
			return;
		}
	}
	cout << "해당 계좌가 존재하지 않습니다" << endl << endl;
	return;
}

void BankSystem::InquiryAcc() const {
	int id;

	cout << "[계좌조회]" << endl;
	cout << "계좌번호 : "; cin >> id;
	cout << endl << endl;

	for (int i = 0; i < m_NumOfAcc; i++) {
		if (m_pAccs[i]->getID() == id) {
			cout << "--------------------" << endl;
			m_pAccs[i]->ShowAccInfo();
			return;
		}
	}

	cout << "해당 계좌가 존재하지 않습니다" << endl << endl;

}

int main(void) {
	int option;
	BankSystem shinhan;

	while (true)
	{
		shinhan.AnnounceSys();
		cout << "선택 : ";
		cin >> option;
		cout << endl;

		switch (option)
		{
		case DEPOSIT:
			shinhan.DepositMoney();
			break;

		case WITHDRAW:
			shinhan.WithdrawMoney();
			break;

		case CREATE:
			shinhan.CreateAccount();
			break;

		case INQUIRY:
			shinhan.InquiryAcc();
			break;

		case EXIT:
			return 0;

		default:
			cout << "Illegal selection" << endl;

		}
	}
	return 0;
}

Tags: ,

Categories:

Updated: