Algorithm/C++

열혈 C++ 프로그래밍 OOP 단계별 프로젝트 04단계

Printemp 2023. 8. 5.

 

함수를 const로 선언하면 실수로 자신의 의도와 다르게 멤버변수의 값을 변경했을 때, 컴파일 에러를 통해서 이를 확인할 수 있는데 이는 프로그래머의 실수를 최소화하기 위한 매우 의미 있는 선언이다.

Account 클래스의 멤버함수 중 일부를 const로 선언하면서 Banking System의 버전을 0.4로 업그레이드 시킴. const로 선언 가능한 모든 멤버함수를 const로 선언.

 

#include <iostream>
#include <cstring>


const int NAME_LEN=20;
class Accounts
{
	private:
	int ID=0;
	char *name;
	int amount=0;
	public:
	Accounts(const int &ID, char *b, const int &amount) : ID(ID), amount(amount)
	{
		name=new char[strlen(b)+1];
		strcpy(name,b);
	}
	bool Accountcheck(int a) const
	{
		if(a==ID)
			return true;
		else
			return false;
	}
	void deposit(int a)
	{
		amount+=a;
	}
	void withdraw(int a)
	{
		amount-=a;
	}
	bool Accountzero() const
	{
		if(ID==0)
			return true;
		else
			return false;
	}
	void showAccount() const
	{
		std::cout<<"계좌ID: "<<ID<<std::endl;
		std::cout<<"이름: "<<name<<std::endl;
		std::cout<<"잔액: "<<amount<<std::endl<<std::endl;
	}
};

class menus
{
	private:
	//int x=0; //account 개수
	public:
	void MakeAccount();
	void deposit();
	void withdraw();
	void account_fuc() const;
};
Accounts *Account[NAME_LEN];
menus menus;
int acc=0; //Account 번호
class Selectmenu
{
	private:
	int num;
	public:
	void selectmenu()
	{
		while(1)
		{
			std::cout<<"-----Menu_____"<<std::endl;
			std::cout<<"1. 계좌개설"<<std::endl;
			std::cout<<"2. 입  금"<<std::endl;
			std::cout<<"3. 출  금"<<std::endl;
			std::cout<<"4. 계좌정보 전체 출력"<<std::endl;
			std::cout<<"5. 프로그램 종료"<<std::endl;
			std::cout<<"선택: ";
			std::cin>>num;

				if(num==1)
			{
				menus.MakeAccount();

			}
			else if(num==2)
			{
				menus.deposit();
			}
			else if(num==3)
			{
				menus.withdraw();
			}
			else if(num==4)
			{
				menus.account_fuc();
			}
			else if(num==5)
			{
				break;
			}
		}
	}	
};
Selectmenu sm;
int main()
{
	sm.selectmenu();
	
	return 0;
}
void menus::MakeAccount()
{
	int a;
	char b[NAME_LEN];
	int c;
	std::cout<<"[계좌개설]"<<std::endl;
	std::cout<<"계좌ID: ";
	std::cin>>a;
	std::cout<<"이  름: ";
	std::cin>>b;
	std::cout<<"입금액: ";
	std::cin>>c;
	Account[acc]=new Accounts(a,b,c);
	acc++;
}
void menus::deposit()
{
	int acID=0;
	int num=0;
	int am=0;
	std::cout<<"[입  금]";
	std::cout<<"계좌ID: ";
	std::cin>>acID;
	while(1)
	{
		if(Account[num]->Accountcheck(acID)==true)
			break;
		else
			num++;
	}
	std::cout<<"입금액: ";
	std::cin>>am;
	Account[num]->deposit(am);
	std::cout<<"입금완료"<<std::endl;
	
}
void menus::withdraw()
{
	int acID=0;
	int num=0;
	int am=0;
	std::cout<<"[입  금]";
	std::cout<<"계좌ID: ";
	std::cin>>acID;
	while(1)
	{
		if(Account[num]->Accountcheck(acID)==true)
			break;
		else
			num++;
	}
	std::cout<<"출금액: ";
	std::cin>>am;
	Account[num]->withdraw(am);
	std::cout<<"출금완료"<<std::endl;
}
void menus::account_fuc() const
{
	int i=0;
	for(int r=0; r<acc; r++)
	{
		Account[r]->showAccount();
	}
}

댓글

💲 추천 글