[01-6] OOP 단계별 프로젝트 01단계

김민성·2022년 7월 10일
post-thumbnail

프로그램 설명

'은행계좌 관리 프로그램'

프로젝트 01단계에서는 C 스타일로 구현하는 것을 목표로 한다. 구현할 기능은 다음과 같다.

기능 1. 계좌개설
기능 2. 입   금
기능 3. 출   금
기능 4. 전체고객 잔액조회

그리고 프로그램의 간결성을 위해 몇가지 가정을 하겠다.

- 통장의 계좌번호는 중복되지 아니한다
  (중복검사 하지 않겠다는 뜻).
- 입금 및 출금액은 무조건 0보다 크다
  (입금 및 출금액의 오류검사 안겠다는 뜻).
- 고객의 계좌정보는 계좌번호, 고객이름,
   고객의 잔액, 이렇게 세가지만 저장 및 관리한다.
- 둘 이상의 고객 정보 저장을 위해 배열을 사용한다.
- 계좌번호는 정수의 형태이다.

실행의 예

-----Menu------
1. 계좌개설
2. 입     금
3. 출     금
4. 계좌정보 전체 출력
5. 프로그램 종료
선택: 1

[계좌개설]
계좌ID: 428
이 름: 김민성
입금액: 15000

-----Menu------
1. 계좌개설
2. 입     금
3. 출     금
4. 계좌정보 전체 출력
5. 프로그램 종료
선택: 2

[입    금]
계좌ID: 428
입금액: 70
입금완료

-----Menu------
1. 계좌개설
2. 입     금
3. 출     금
4. 계좌정보 전체 출력
5. 프로그램 종료
선택: 4

계좌ID: 428
이  름: 김민성
잔  액: 15070

자 이제 구현해보자!!

구현과정

메뉴를 위한 함수를 선언해보자!

void ShowMenu(void);       // 메뉴출력
void MakeAccount(void);    // 계좌개설을 위한 함수
void DepositMoney(void);       // 입     금
void WithdrawMoney(void);      // 출     금
void ShowAllAccInfo(void);     // 잔액조회

각 메뉴 선택을 위해 enum 함수를 이용해보자.

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

고객의 계좌정보를 저장하기 위한 구조체와 이에 대한 배열을 만들어보자.

typedef struct 
{
	int accID;      // 계좌번호
	int balance;    // 잔     액
	char cusName[NAME_LEN];   // 고객이름
} Account;

Account accArr[100];   // Account 저장을 위한 배열
int accNum=0;        // 저장된 Account 수

메뉴를 출력하기 위한 함수를 정의해보자

void ShowMenu(void)
{
	cout<<"-----Menu------"<<endl;
	cout<<"1. 계좌개설"<<endl;
	cout<<"2. 입     금"<<endl;
	cout<<"3. 출     금"<<endl;
	cout<<"4. 계좌정보 전체 출력"<<endl;
	cout<<"5. 프로그램 종료"<<endl;
}

계좌 개설을 위한 함수를 정의해보자

void MakeAccount(void) 
{
	int id;
	char name[NAME_LEN];
	int balance;
	
	cout<<"[계좌개설]"<<endl;
	cout<<"계좌ID: ";	cin>>id;
	cout<<"이 름: ";	cin>>name;
	cout<<"입금액: ";	cin>>balance;
	cout<<endl;
	
	accArr[accNum].accID=id;
	accArr[accNum].balance=balance;
	strcpy(accArr[accNum].cusName, name);
	accNum++;
}

입금을 위한 함수를 정의해보자

void DepositMoney(void)
{
	int money;
	int id;
	cout<<"[입    금]"<<endl;
	cout<<"계좌ID: ";	cin>>id;
	cout<<"입금액: ";	cin>>money;
	
	for(int i=0; i<accNum; i++)
	{
		if(accArr[i].accID==id)
		{
			accArr[i].balance+=money;
			cout<<"입금완료"<<endl<<endl;
			return;
		}
	}
	cout<<"유효하지 않은 ID 입니다."<<endl<<endl;
}

출금을 위한 함수를 정의해보자

void WithdrawMoney(void)
{
	int money;
	int id;
	cout<<"[출    금]"<<endl;
	cout<<"계좌ID: ";	cin>>id;
	cout<<"출금액: ";	cin>>money;
	
	for(int i=0; i<accNum; i++)
	{
		if(accArr[i].accID==id)
		{
			if(accArr[i].balance<money)
			{
				cout<<"잔액부족"<<endl<<endl;
				return;
			}

			accArr[i].balance-=money;
			cout<<"출금완료"<<endl<<endl;
			return;
		}
	}
	cout<<"유효하지 않은 ID 입니다."<<endl<<endl;
}

계좌정보 전체 출력을 위한 함수를 정의해보자

void ShowAllAccInfo(void)	
{
	for(int i=0; i<accNum; i++)
	{
		cout<<"계좌ID: "<<accArr[i].accID<<endl;
		cout<<"이  름: "<<accArr[i].cusName<<endl;
		cout<<"잔  액: "<<accArr[i].balance<<endl<<endl;
	}
}

자 이제 마지막으로 main함수를 작성해보자.

int main(void)
{
	int choice;
	
	while(1)
	{
		ShowMenu();
		cout<<"선택: "; 
		cin>>choice;
		cout<<endl;
		
		switch(choice)
		{
		case MAKE:
			MakeAccount(); 
			break;
		case DEPOSIT:
			DepositMoney(); 
			break;
		case WITHDRAW: 
			WithdrawMoney(); 
			break;
		case INQUIRE:
			ShowAllAccInfo(); 
			break;
		case EXIT:
			return 0;
		default:
			cout<<"Illegal selection.."<<endl;
		}
	}
	return 0;
}

while함수와 switch-case를 이용해 메뉴선택을 구현했다.

profile
다양한 활동을 통해 인사이트를 얻는 것을 즐깁니다. 저 또한 인사이트를 주는 사람이 되고자 합니다.

0개의 댓글