클래스를 이용한 계좌 관리 프로그램 연습
C & C++ 관련 :
2007. 5. 9. 15:38
반응형
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 ©); //복사 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 ©){ //복사생성자이다. 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 |