Algorithm/C++

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

Printemp 2023. 7. 22.
#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)
	{
		if(a==ID)
			return true;
		else
			return false;
	}
	void deposit(int a)
	{
		amount+=a;
	}
	void withdraw(int a)
	{
		amount-=a;
	}
	bool Accountzero()
	{
		if(ID==0)
			return true;
		else
			return false;
	}
	void showAccount()
	{
		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();
};
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()
{
	int i=0;
	for(int r=0; r<acc; r++)
	{
		Account[r]->showAccount();
	}
}

 

 

 

계좌정보와 이를 변경할 수 있는 함수들을 Accounts 클래스에, 이 함수들을 호출하는 함수를 menus 클래스에 각각 캡슐화 하였습니다. 메뉴 인터페이스가 selectmenu 클래스에서 실행되게 만들었습니다. Accounts 클래스는 객체 포인터 배열로 선언하여 동적할당 하였는데, Accounts 클래스에 생성자를 정의하지 않았어서 이번 프로젝트에서 굉장히 헤맸습니다.

 

 

 

 

 

 

객체 배열과 객체 포인터 배열 / 세그멘테이션 오류(segmentation fault)

https://amanteattirance.tistory.com/92

댓글

💲 추천 글