C++ Chapter 04. 클래스의 완성. 04-5 OOP 단계별 프로젝트 02단계
C,C++/CONCEPT 2018. 3. 4. 17:50 |1.
버전 0.1의 Account 구조체는 char형 배열을 멤버로 둬서 고객의 이름을 저장했는데,
버전 0.2의 Account 클래스에서는 이를 동적 할당의 형태로 구현하기로 하자.
즉, Account 클래스는 멤버변수로 문자열 포인터(char형 포인터)를 지니고 있어야 한다
2.
객체 배열을 선언하지 말고, 객체 포인터 배열을 선언해서 객체를 저장한다
버전 0.1에서는 구조체 배열을 선언하였으니, 이를 포인터 배열로 변경해야 한다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 | /* * Banking System Ver 0.2 * 작성자: 윤성우 * 내 용: Account 클래스 정의, 객체 포인터 배열 적용 */ #include <iostream> #include <cstring> using namespace std; const int NAME_LEN=20; void ShowMenu(void); // 메뉴출력 void MakeAccount(void); // 계좌개설을 위한 함수 void DepositMoney(void); // 입 금 void WithdrawMoney(void); // 출 금 void ShowAllAccInfo(void); // 잔액조회 enum {MAKE=1, DEPOSIT, WITHDRAW, INQUIRE, EXIT}; class Account { private: int accID; // 계좌번호 int balance; // 잔 액 char * cusName; // 고객이름 public: Account(int ID, int money, char * name) : accID(ID), balance(money) { cusName=new char[strlen(name)+1]; strcpy(cusName, name); } int GetAccID() { return accID; } void Deposit(int money) { balance+=money; } int Withdraw(int money) // 출금액 반환, 부족 시 0 { if(balance<money) return 0; balance-=money; return money; } void ShowAccInfo() { cout<<"계좌ID: "<<accID<<endl; cout<<"이 름: "<<cusName<<endl; cout<<"잔 액: "<<balance<<endl; } ~Account() { delete []cusName; } }; Account * accArr[100]; // Account 저장을 위한 배열 int accNum=0; // 저장된 Account 수 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; } } for(int i=0; i<accNum; i++) delete accArr[i]; return 0; } 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++]=new Account(id, balance, name); } 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]->GetAccID()==id) { accArr[i]->Deposit(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]->GetAccID()==id) { if(accArr[i]->Withdraw(money)==0) { cout<<"잔액부족"<<endl<<endl; return; } cout<<"출금완료"<<endl<<endl; return; } } cout<<"유효하지 않은 ID 입니다."<<endl<<endl; } void ShowAllAccInfo(void) { for(int i=0; i<accNum; i++) { accArr[i]->ShowAccInfo(); cout<<endl; } } | cs |
'C,C++ > CONCEPT' 카테고리의 다른 글
C 포인터에 대해서 (0) | 2018.03.05 |
---|---|
C++ std:setw() (1) | 2018.03.05 |
C++ Chapter 01. C언어 기반의 C++. 01-6 OOP 단계별 프로젝트 01 단계 (0) | 2018.03.01 |
C++ Chapter 16. C++의 형 변환 연산자와 맺는 글. 16-2 '윤성우의 열혈 C++ 프로그래밍'을 맺는 글 (0) | 2018.03.01 |
C++ Chapter 16. C++의 형 변환 연산자와 맺는 글. 16-1 C++에서의 형 변환 연산 (0) | 2018.03.01 |