1.

#include <iostream>
#include <cstring>

using namespace::std;


const int NAME_LEN=20;

typedef struct _Account
{
    int id;
    int balance;
    char name[NAME_LEN];
}Account;

Account pArray[100];
int index=0;

void PrintMenu();
void MakeAccount();
void Deposit();
void Withdraw();
void Inquire();

enum{MAKE=1, DEPOSIT, WITHDRAW, INQUIRE, EXIT};

int main(void)
{
    int choice;
    
    while(1)
    {
        PrintMenu();
        cout <<" 선택 : ";
        cin>>choice;

        switch(choice)
        {
            case MAKE:
                MakeAccount();
                break;
            case DEPOSIT:
                Deposit();
                break;
            case WITHDRAW:
                Withdraw();
                break;
            case INQUIRE:
                Inquire();
                break;
            case EXIT:
                return 0;
            default:
                cout<<"Illegal selection. Try again."<<endl;
                break;
        }
        
    }
    return 0;
}

void PrintMenu()
{
    cout<<"-----Menu-----"<<endl;
    cout<<"1. 계좌개설"<<endl;
    cout<<"2. 입    금"<<endl;
    cout<<"3. 출    금"<<endl;
    cout<<"4. 계좌정보 전체 출력"<<endl;
    cout<<"5. 프로그램 종료"<<endl;
}

void MakeAccount()
{
    int id;
    char name[NAME_LEN];
    int balance;

    cout<<"[계좌개설]"<<endl;
    cout<<"계좌ID: "; cin>>id;
    cout<<"이  름: "; cin>>name;
    cout<<"입금액: "; cin>>balance;

    pArray[index].id=id;
    pArray[index].balance=balance;
    strcpy(pArray[index].name, name);
    index++;
}

void Deposit()
{
    int money;
    int id;
    cout<<"[입    금]"<<endl;
    cout<<"계좌ID: "; cin>>id;
    cout<<"입금액: "; cin>>money;
    
    for(int i=0; i<index; i++)
    {
        if(pArray[i].id==id)
        {
            pArray[i].balance+=money;
            cout<<"입금완료"<<endl;
            return;
        }
    }
    cout<<"유효하지 않은 ID 입니다."<<endl;
}

void Withdraw()
{
    int money;
    int id;
    cout<<"[출    금]"<<endl;
    cout<<"계좌ID: "; cin>>id;
    cout<<"출금액: "; cin>>money;
    
    for(int i=0; i<index; i++)
    {
        if(pArray[i].id==id)
        {
            if(pArray[i].balance<money)
            {
                cout<<"잔액부족"<<endl;
                return;
            }
            pArray[i].balance-=money;
            cout<<"출금완료"<<endl;
            return;
        }
    }
    cout<<"유효하지 않은 ID 입니다."<<endl;
}

void Inquire()
{
    for(int i=0; i<index; i++)
    {
        cout<<"계좌ID: "<<pArray[i].id<<endl;
        cout<<"이  름: "<<pArray[i].name<<endl;
        cout<<"잔  액: "<<pArray[i].balance<<endl<<endl;
    }
}
image 17

#. 이론

1. 오버 로딩

함수의 이름이 같아도 매개 변수의 타입 및 개수가 다르면 문제 되지 않으며, 이를 가리켜 “함수가 오버로딩 되었다.” 라고 표현
-> 함수의 이름은 같지만 매개 변수의 타입이나 개수가 달라야 한다.

2. using

using namespace std;

위 코드 보다는

using std::cout;
using std::cin;
using std::endl;

이 코드가 적절하다. 이름 공간 std 안에는 다양한 종류의 선언이 존재 하는데 첫 번째 코드와 같은 선언을 넣어버리면 프로그래밍 하기에는 편리하지만 이름 충돌이 발생할 확률이 상대적으로 높아지기 때문이다.

3. 전역변수 접근

#include <numeric>
#include <iostream>
#include <iterator>

namespace A_COM
{
    void function(void)
    {
        std::cout<<"A. com 에서 정의한 함수" << std::endl;
    }
}

namespace B_COM
{
    void function(void)
    {
        std::cout<<"B. com에서 정의한 함수 " << std::endl;
    }
}

namespace C_COM
{
    void function1(void)
    {
        std::cout<<"C. com에서 1번 정의한 함수" << std::endl;
    }
}

using C_COM::function1;
using std::cout;
using std::cin;
using std::endl;

int val= 100;

int main() {

    int val=100;
    ::val+=1;

    cout << "val: " << val << endl;
    cout << "::val: " << ::val << endl;

    A_COM::function();
    B_COM::function();
    function1();

    return 0;
}

전역 변수로 선언되어 있는 변수 val 에 접근하려고 할 때 지역 변수로 같은 이름의 변수가 있어 가려질 때, :: 를 이용해 접근 가능


0 Comments

Leave a Reply