은행계좌프로그램 실습 4단계

2024. 4. 15. 15:46[C++]/C++ 언어 기초

프로젝트 04 단계의 도입

여러 Chapter를 통해서 const에 대해 설명하였으니, 우리가 진행하는 프로젝트에도 const 선언을 추가해서 코드의 안전성을 높여보겠다.

 

프로그램 설명

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

 

04단계 코드

#include "stdafx.h"
#include <iostream>
#include <cstring>

using namespace std;

void ShowMenu(void);
void MakeAcc(void);
void DepositMoney(void);
void WithdrawMoney(void);
void ShowAccInfo(void);

enum {Make = 1, Deposit, Withdraw, ShowAcc, EXIT};

class Accounts{ //Account 클래스 정의
private:
	int accId;
	int money;
	char *cusName;
public:
	Accounts(int Id, int mymoney, char *name):accId(Id), money(mymoney){
		cusName = new char[strlen(name)+1];
		strcpy_s(cusName,strlen(name)+1, name);
	}

	//복사 생성자 추가
	Accounts(const Accounts &copy):accId(copy.accId), money(copy.money){
		cusName = new char[strlen(cusName + 1)];
		strcpy(cusName, copy.cusName);
	}

	int GetAccId() const {return accId;}
	
	void Deposit(int mymoney){
		money +=  mymoney;
	}

	int Withdraw(int mymoney){
		if(money < mymoney)
			return 0;
		money -= mymoney;
		return mymoney;
	}

	const char* GetCusName() const {
		return cusName;
	}
	int GetMoney() const {
		return money;
	}

	void ShowAccInfo() const{

		cout<<"계좌Id: "<<accId<<endl;
		cout<<"이름: "<<cusName<<endl;
		cout<<"잔액: "<<money<<endl<<endl;
	}
	~Accounts(){
		delete []cusName;
	}
};

Accounts * accArr[100];
int accNum = 0;

int main(void)
{
	while(1){
		ShowMenu();
	}   
}

void ShowMenu(void){

	int select;
	cout<<"-------Menu-------"<<endl<<"1. 계좌개설"<<endl<<"2. 입 금"<<endl<<"3. 출 금"<<endl<<"4. 계좌정보 전체 출력"<<endl<<"5. 프로그램 종료"<<endl;
	cout<<"번호를 입력하세요. : ";cin>>select;
	cout<<endl;

	switch(select){
	case Make:
		MakeAcc();
		break;
	case Deposit:
		DepositMoney();
		break;
	case Withdraw:
		WithdrawMoney();
		break;
	case ShowAcc:
		ShowAccInfo();
		break;
	case EXIT:
		for(int i; i<accNum; i++){
			delete accArr[i];
		}
		exit(0);
	default:
		cout<<"유효하지 않은 번호입니다."<<endl<<endl;
	}
}

void MakeAcc(void){
	int id, money;
	char name[20];

	cout<<"[계좌개설]"<<endl;
	cout<<"계좌ID: ";
	while (!(cin >> id)) {      
		cin.clear();      
		cin.ignore(INT_MAX,'\n');      
		cout << "잘못된 값을 입력하셨습니다. 정수로 입력해주세요 \n";
		cout <<"계좌 ID: ";
	}
	cout<<"이름(최대 20자): "; cin>>name;
	cout<<"입금액: "; cin>>money; cout<<endl;

	accArr[accNum++] = new Accounts(id, money, name);
}

void DepositMoney(void){
	int id, money;
	cout<<"[입   금]"<<endl;
	cout<<"계좌ID: ";
	while (!(cin >> id)) {      
		cin.clear();      
		cin.ignore(INT_MAX,'\n');      
		cout << "잘못된 값을 입력하셨습니다. 정수로 입력해주세요 \n";
		cout <<"계좌 ID: ";
	}
	cout<<"입금액: ";cin>>money;

	for(int i = 0; i<accNum; i++){
		if(accArr[i] -> GetAccId() == id){
			accArr[i] -> Deposit(money);
			cout<<"입금완료"<<endl;
			cout<<accArr[i]->GetCusName()<<"고객님의 입금 후 잔액 : "<<accArr[i]->GetMoney()<<endl;
			return;
		}
	}
	cout<<"아이디가 없습니다."<<endl;
}

void WithdrawMoney(void){
	int id, money;
	cout<<"[출   금]"<<endl;
	cout<<"계좌ID: ";
	while (!(cin >> id)) {      
		cin.clear();      
		cin.ignore(INT_MAX,'\n');      
		cout << "잘못된 값을 입력하셨습니다. 정수로 입력해주세요."<<endl;
		cout <<"계좌 ID: ";
	}
	cout<<"출금액: ";
	while (!(cin >> money)) {      
		cin.clear();      
		cin.ignore(INT_MAX,'\n');      
		cout << "잘못된 값을 입력하셨습니다."<<endl;
		cout <<"출금액: ";
	}   

	for(int i = 0; i<accNum; i++){
		if(accArr[i] -> GetAccId() == id){

			if(accArr[i] ->Withdraw(money) == 0){
				cout<<"잔액부족"<<endl<<endl;
				return ;
			}

			cout<<"출금완료"<<endl;
			cout<<accArr[i]->GetCusName()<<"고객님의 출금 후 잔액 : "<<accArr[i]->GetMoney()<<endl;

			return;
		}
	}

	cout<<"아이디가 없습니다."<<endl;
}

//계좌정보 전체 출력
void ShowAccInfo(void){

	for(int i = 0; i<accNum;i++){
		cout<<"["<<i+1<<"번째 계좌정보]"<<endl;
		accArr[i] -> ShowAccInfo();
		if(i+1 == accNum){
			cout<<"-------전체 계좌 출력 완료-------"<<endl<<endl;
		}
	}

}

 

 

friend, const


기존 코드

01 단계 코드

https://kjy1ho.tistory.com/337

 

01-06 은행계좌프로그램 실습 1단계

프로그램 설명 우리가 구현하고자 하는것은 "은행계좌 관리 프로그램"이다. 1단계에서는 C스타일로 구현하는 것을 목표로 한다. 구현할 기능은 다음과 같다. 기능 1. 계좌개설 기능 2. 입 금 기능

kjy1ho.tistory.com

02단계 코드

https://kjy1ho.tistory.com/351

 

04-05 은행계좌문제 2단계

01단계 코드 #include "stdafx.h" #include using namespace std; using namespace System; void ShowMenu(void); void MakeAcc(void); void DepositMoney(void); void WithdrawMoney(void); void ShowAccInfo(void); enum {Make = 1, Deposit, Withdraw, ShowAcc}; typed

kjy1ho.tistory.com

03단계 코드

https://kjy1ho.tistory.com/355

 

05-4 은행계좌프로그램 실습 3단계

프로젝트 03단계의 도입 깊은 복사를 원칙으로 한다면, 클래스의 생성자만 봐도 복사 생성자의 필요성을 판단할 수 있다. 실제 복사 생성자의 호출 여부는 중요하지 않다. 클래스는 그 자체로 완

kjy1ho.tistory.com

 

반응형