[C++] 7-5. OOP 단계별 프로젝트 05단계

2024. 11. 10. 13:47·공부/C++
728x90

*윤성우의 열혈 C++ 프로그래밍 교재로 학습하며 정리하였습니다.

 

컨트롤 클래스의 특징

  • 프로그램 전체의 기능을 담당한다. 따라서 기능적 성격이 강한 클래스이다.
  • 컨트롤 클래스만 봐도 프로그램의 전체 기능과 흐름을 파악할 수 있어야한다.

컨트롤 클래스가 아닌 대부분의 클래스를 가리켜 'Entuty 클래스'라 한다.

 

Entity 클래스의 특징

  • 데이터적 성격이 강하다. 따라서 파일 및 데이터 베이스에 저장되는 데이터를 소유하고 있다.
  • 프로그램의 기능을 파악하는데 도움을 주지는 못한다.
  • 그러나 프로그램상에서 관리되는 데이터의 종류를 파악하는 데는 도움이 된다.

 


프로그램 설명

  • AccountHandler라는 이름의 컨트롤 클래스를 정의하고, 앞서 정의한 전역 함수들을 이 클래스의 멤버함수에 포함시킨다.
  • Account 객체의 저장을 위해 선언한 배열과 변수도 이 클래스의 멤버에 포함시킨다.
  • AccountHandler 클래스 기반으로 프로그램이 실행되도록 main 함수를 변경한다.

 

작성 답안

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>

using namespace std;

class Account {
private:
	int id;//계좌번호
	char* name;//이름
	int money;//잔액

public:
	Account(int pid, char* pname, int pmoney)//생성자
		:id(pid), money(pmoney)
	{
		name = new char[strlen(pname) + 1];
		strcpy(name, pname);
	}
	Account(const Account& ref)//복사 생성자
		:id(ref.id), money(ref.money)
	{
		name = new char[strlen(ref.name) + 1];
		strcpy(name, ref.name);
	}
	int GetID() {
		return id;
	}
	char* GetName() {
		return name;
	}
	int GetMoney() {
		return money;
	}
	int Withdraw(int num) {
		if (num > money) {
			return 0;
		}
		money -= num;
		return money;
	}
	void Deposit(int num) {
		money += num;
	}
	~Account() {//소멸자
		delete[]name;
	}
};

class AccountHandler {
private:
	Account* AccountArr[100];
	int accNum = 0;
public:
	void Delete() {
		for (int i = 0; i < accNum; i++)
			delete AccountArr[i];
	}
	void ShowMenu() {
		cout << "-----Menu-----" << endl;
		cout << "1. 계좌 개설" << endl;
		cout << "2. 입     금" << endl;
		cout << "3. 출     금" << endl;
		cout << "4. 계좌정보 전체 출력" << endl;
		cout << "5. 프로그램 종료" << endl;
		cout << " " << endl;
	}

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

		cout << "[계좌개설]" << endl;
		cout << "계좌ID: ";
		cin >> id;
		cout << "이름: ";
		cin >> name;
		cout << "입금액: ";
		cin >> money;
		//객체 생성
		AccountArr[accNum++] = new Account(id, name, money);
		cout << " " << endl;
	}
	void DepositHandler() {
		int id;
		int money;
		cout << "[입   금]" << endl;
		cout << "계좌ID: ";
		cin >> id;
		cout << "입금액: ";
		cin >> money;
		//입금 처리
		for (int i = 0; i < accNum; i++) {
			if (AccountArr[i]->GetID() == id) {
				AccountArr[i]->Deposit(money);
				cout << "입금 완료. " << endl << endl;
				return;
			}
		}
		cout << "유효하지 않은 ID 입니다." << endl << endl;
		return;
	}

	void WithDrawHandler() {
		int id;
		int money;
		cout << "[출   금]" << endl;
		cout << "계좌ID: ";
		cin >> id;
		cout << "출금액: ";
		cin >> money;
		//출금 처리
		for (int i = 0; i < accNum; i++) {
			if (AccountArr[i]->GetID() == id) {
				if (AccountArr[i]->Withdraw(money) == 0) {
					cout << "잔액부족" << endl << endl;
					return;
				}
				cout << "출금 완료. " << endl << endl;
				return;
			}
		}
		cout << "유효하지 않은 ID 입니다." << endl << endl;
		return;
	}
	void PrintAll() {
		for (int i = 0; i < accNum; i++) {
			cout << "계좌ID: " << AccountArr[i]->GetID() << endl;
			cout << "이름: " << AccountArr[i]->GetName() << endl;
			cout << "잔액: " << AccountArr[i]->GetMoney() << endl;
			cout << " " << endl;
		}
	}
};

int main() {
	int insert_num;

	AccountHandler handler;

	while (true) {
		handler.ShowMenu();
		cout << "선택: ";
		cin >> insert_num;
		cout << " " << endl;
		switch (insert_num) {
		case 1: handler.CreateAccount();
			break;
		case 2: handler.DepositHandler();
			break;
		case 3: handler.WithDrawHandler();
			break;
		case 4: handler.PrintAll();
			break;
		case 5:
			handler.Delete();
			return 0;
		default:
			cout << "다시 입력하세요.." << endl;
		}
	}
	return 0;
}
728x90

'공부 > C++' 카테고리의 다른 글

[C++] 8-2. 가상함수(Virtual Function)  (1) 2024.11.12
[C++] 8-1. 객체 포인터의 참조 관계  (0) 2024.11.11
[C++] 7-4. 상속을 위한 조건  (0) 2024.11.08
[C++]7-3. protected 선언과 세가지 형태의 상속  (0) 2024.11.07
[C++] 7-2. 상속의 문법적인 이해  (0) 2024.11.06
'공부/C++' 카테고리의 다른 글
  • [C++] 8-2. 가상함수(Virtual Function)
  • [C++] 8-1. 객체 포인터의 참조 관계
  • [C++] 7-4. 상속을 위한 조건
  • [C++]7-3. protected 선언과 세가지 형태의 상속
knhoo
knhoo
  • knhoo
    &*
    knhoo
  • 전체
    오늘
    어제
    • 전체 (141) N
      • Unity 개발일지 (1)
        • [Unity2D]졸업프로젝트 (17)
        • [Unity3D]VR프로젝트 (2)
      • 공부 (116) N
        • 부트캠프 (12)
        • C++ (39)
        • Unity & C# (8)
        • 데이터베이스 (2)
        • 컴퓨터비전 (0)
        • 컴퓨터구조 (0)
        • python (7)
        • BAEKJOON (37) N
        • 개발 (2)
        • 자료구조 (9)
      • 일상 (2)
  • 블로그 메뉴

    • Github
    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 📖README
  • 인기 글

  • 태그

    구간합
    패널파워
    C++
    비트버니
    티스토리챌린지
    머니워크
    unity
    오블완
    백준
    캐시워크
    Python
    Cpp
    c#
    야핏무브
    멋쟁이사자처럼후기
    unity2d
    자료구조
    앱테크
    백준 #python
    til
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
knhoo
[C++] 7-5. OOP 단계별 프로젝트 05단계
상단으로

티스토리툴바