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 |