반응형
001: #include <iostream>
002: #include <conio.h>
003: #include <stdlib.h>
004: using namespace std;
005: 
006: class Account{
007: public:
008:         Account();                      //기본생성장
009:         ~Account();                     //소멸자
010:         Account(const Account &copy);   //복사
011:         int PrintMenu();                //메뉴출력
012:         void MakeAccount(Account *);    //계좌개설
013:         void Deposit(Account *);        //입금
014:         void WithDraw(Account *);       //출금
015:         void Remainder(Account *);      //잔액조회
016:         Account* check_customer_count(Account *); //고객수 체크
017: private:
018:         static int customer_count;      //고객 고유 순서
019:         static int MAX_count;           //최대 입력 가능 고객 수
020:         int id;                         //계좌번호
021:         int balance;                    //잔액
022:         char* name;                     //고객이름
023: };
024: int Account::MAX_count=10;          //최대고객수
025: int Account::customer_count=1;      //static 변수를 초기화 합니다.
026:                                     //고객의 수는 하나만 유지하면 되기때문에 
027:                                     //static변수를 씁니다.
028: 
029: Account::Account(){                 //생성자
030:         balance=0;
031:         name=new char[20];              //고객이름을 동적 할당한다.
032:         name[0]=NULL;
033: }
034: Account::~Account(){                //소멸자에서 동적할당한 변수를 해제
035:         delete [] name;
036: }
037: Account::Account(const Account &copy){     //복사생성자이다.
038:         id = copy.id;                          //입력되는 ID를 카피한다.
039:         balance = copy.balance;                //잔액을 복사한다.
040:         name = new char[strlen(copy.name)+1];  //새로운 이름을 저장할 공간을 동적할당한다.
041:         strcpy(name,copy.name);                //이름을 복사한다.
042: }
043: 
044: int Account::PrintMenu(){ //메뉴출력
045:         int selectedmenu;
046:         printf("----------------------------\n");
047:         printf("1. 계좌 개설\n");
048:         printf("2. 입금\n");
049:         printf("3. 출금\n");
050:         printf("4. 전체 고객 잔액조회\n");
051:         printf("5. 종료\n");
052:         printf("----------------------------\n");
053:         printf("Select Menu : ");
054: 
055:         scanf("%d",&selectedmenu);
056:         return selectedmenu;
057: }
058: void Account::MakeAccount(Account *pAccount){   //계좌개설
059:         system("cls");
060:         printf("\n이름을 입력하세요 : ");
061:         scanf("%s",&pAccount->name);
062: 
063:         printf("\n계좌 번호를 입력하세요 : ");
064:         scanf("%d",&pAccount[0].id);
065: 
066:         printf("\n입금 금액을 입력하세요 : ");
067:         scanf("%d",&pAccount[0].balance);
068: 
069:         pAccount[customer_count]=pAccount[0];       //[0]은 임시저장소이다.
070:                                                     //복사생성자를 호출하여 1번부터 저장한다.
071:         customer_count++;                           //고객의 수가 늘었으니 늘려준다.
072: 
073: }
074: void Account::Remainder(Account *pAccount){                 //잔액조회
075:         system("cls");
076:         printf("-------------------------------------------------------\n");
077:         printf("            전체 고객 잔액조회            \n");
078:         printf("-------------------------------------------------------\n");
079:         printf("    이름    |       ID    |       잔액  |   이자 3푼5리\n");
080:         printf("-------------------------------------------------------\n");
081:         for(int i=1;i<customer_count;i++)                        //저장되어 있는 순서대로 출력한다.
082:                 printf("%12s %12d %14d %14.2f\n",&pAccount[i].name, pAccount[i].id, pAccount[i].balance, pAccount[i].balance*0.35);
083:         getch();
084: }
085: void Account::Deposit(Account *pAccount){ //입금
086:         int idtemp, k, money;
087:         system("cls");
088:         printf("고객님의 ID를 입력하여 주셔요 : ");
089:         scanf("%d",&idtemp);
090:         for(k=1;k<customer_count;k++){
091:                 if(idtemp==pAccount[k].id){
092:                         printf("------------------------------------------\n");
093:                         printf("           고객님의 정보 입니다.          \n");
094:                         printf("------------------------------------------\n");
095:                         printf("    이름    |       ID      |       잔액  \n");
096:                         printf("------------------------------------------\n");
097:                         printf("%12s %12d %14d \n",&pAccount[k].name, pAccount[k].id, pAccount[k].balance);
098:                         break;
099:                 }
100:         }
101:         printf("입금액을 입력해 주셔요 : ");
102:         scanf("%d",&money);
103:         pAccount[k].balance+=money;
104: 
105:         printf("\n------------------------------------------\n");
106:         printf("           입금 후  정보 입니다.          \n");
107:         printf("------------------------------------------\n");
108:         printf("    이름    |       ID      |       잔액  \n");
109:         printf("------------------------------------------\n");
110:         printf("%12s %12d %14d \n",&pAccount[k].name, pAccount[k].id, pAccount[k].balance);
111:         getch();
112: }
113: void Account::WithDraw(Account *pAccount){ //출금
114:         int idtemp, k, money;
115:         system("cls");
116:         printf("고객님의 ID를 입력하여 주셔요 : ");
117:         scanf("%d",&idtemp);
118:         for(k=1;k<customer_count;k++){
119:                 if(idtemp==pAccount[k].id){
120:                         printf("------------------------------------------\n");
121:                         printf("           고객님의 정보 입니다.          \n");
122:                         printf("------------------------------------------\n");
123:                         printf("    이름    |       ID      |       잔액  \n");
124:                         printf("------------------------------------------\n");
125:                         printf("%12s %12d %14d \n",&pAccount[k].name, pAccount[k].id, pAccount[k].balance);
126:                         break;
127:                 }
128:         }
129:         printf("출금액을 입력해 주셔요 : ");
130:         scanf("%d",&money);
131:         pAccount[k].balance-=money;
132: 
133:         printf("\n------------------------------------------\n");
134:         printf("           처리 후  정보 입니다.          \n");
135:         printf("------------------------------------------\n");
136:         printf("    이름    |       ID      |       잔액  \n");
137:         printf("------------------------------------------\n");
138:         printf("%12s %12d %14d \n",&pAccount[k].name, pAccount[k].id, pAccount[k].balance);
139:         getch();
140: }
141: Account* Account::check_customer_count(Account *pAccount){ //고객수를 체크하여 저장공간 확보
142:         system("cls");  
143:         printf("----------------------------\n",customer_count-1);
144:         printf("현재 고객수 : %d \n",customer_count-1);
145:         if(customer_count==MAX_count){              //고객 입력 자리가 꽉차면
146:                 MAX_count+=5;                                                   //최대 고객수를 늘리고
147:                 Account *tempaccount = new Account[MAX_count]; //새로운 저장공간을 동적 할당한다.
148:                 for(int e=0;e<customer_count;e++){             
149:                         tempaccount[e]=pAccount[e];                                     //그리고 새로운 저장공간으로 데이타를 옮기고
150:                 }
151:                 return tempaccount;
152:         }
153:         else return pAccount;
154: }
155: 
156: void main (){
157:         Account *myaccount = new Account[10];
158:         while(1){
159:                 myaccount=myaccount[0].check_customer_count(myaccount); //고객수를 체크한다.
160:                 int selectedmenu=myaccount[0].PrintMenu();
161: 
162:                 switch(selectedmenu){
163:                 case 1:
164:                         myaccount[0].MakeAccount(myaccount); //계좌 생성
165:                         break;
166:                 case 2:
167:                         myaccount[0].Deposit(myaccount); //입금
168:                         break;
169:                 case 3:
170:                         myaccount[0].WithDraw(myaccount); //출금
171:                         break;
172:                 case 4:
173:                         myaccount[0].Remainder(myaccount); //잔고확인
174:                         break;
175:                 case 5:
176:                         exit(1);
177:                 default:
178:                         cout<<"잘못된 메뉴를 고르셨습니다.\n프로그램은 종료 됩니다~\n";
179:                         exit(1);
180:                 }
181:         }
182: }
반응형

'C & C++ 관련' 카테고리의 다른 글

UNIX 운영체제 Scheduling 시뮬레이션,  (0) 2007.05.12
realloc 연습  (0) 2007.05.09
형 변환 연산자 사용 방법  (0) 2007.05.05
Posted by Real_G