관리 메뉴

프로그램 소스

[C++ 소스] 직접 연관(DIRECTED ASSOCIATION) 관계, 회사와 직원 본문

C++/디딤돌 C++

[C++ 소스] 직접 연관(DIRECTED ASSOCIATION) 관계, 회사와 직원

Only 프로그램 소스 언제나휴일 2016.12.18 22:25

[C++ 소스] 직접 연관(DIRECTED ASSOCIATION) 관계, 회사와 직원


Company.cpp

Company.h

Program.cpp

Worker.cpp

Worker.h

직접 연관 관계 클래스 다이어그램

"회사는 직원의 집합체이며 회사는 직원에게 명령을 내릴 수 있다."

회사와 직원은 집합 관계이면서 직접 연관 관계이다.


//Worker.h

#pragma once

#include <iostream>

#include <string>

using namespace std;

class Worker

{

    string name;

public:

    Worker(string name);

    void Work();   

    string GetName()const;

};


//Worker.cpp

#include "Worker.h"

Worker::Worker(string name)

{

    this->name = name;

}

void Worker::Work()

{

    cout<<name<<" 일하다."<<endl;

}

string Worker::GetName()const

{

    return name;

}


//Company.h

#pragma once

#include "Worker.h"

class Company

{

    Worker **workers;

    size_t capacity;

    size_t count;

    size_t last_wi;//가장 최근에 일한 사원의 인덱스

public:

    Company(size_t capacity);

    ~Company(void);

    bool InWorker(Worker *worker);

    void DoProject(size_t size);

    void List()const;

    size_t GetCount()const;

    Worker *&operator[](size_t index);

};


//Company.cpp

#include "Company.h"

 

Company::Company(size_t capacity):capacity(capacity)

{

    workers = new Worker *[capacity];

    count = 0;

    last_wi=-1;

}

Company::~Company(void)

{

    delete[] workers;

}

bool Company::InWorker(Worker *worker)

{

    if(count>=capacity){    return false;    }

    workers[count] = worker;

    count++;

    return true;

}

void Company::DoProject(size_t size)

{

    cout<<"== 프로젝트 수행 =="<<endl;

    for(size_t i=0; i<size; i++)

    {

        last_wi= (last_wi+1)%count;

        workers[last_wi]->Work();

    }

}

void Company::List()const

{   

    cout<<"=== 직원 목록 ==="<<endl;

    for(size_t i=0;i<count;i++)

    {

        cout<<workers[i]->GetName()<<" ";

    }

    cout<<endl;

}

size_t Company::GetCount()const

{

    return count;

}

Worker *&Company::operator[](size_t index)

{

    if((index<0)||(index>=count))

    {

        throw "유효하지 않은 인덱스입니다.";

    }

    return workers[index];

}


//Program.cpp

#include "Company.h"

int main()

{

    Company *company = new Company(10);   

   

    company->InWorker(new Worker("홍길동"));

    company->InWorker(new Worker("강감찬"));

    company->InWorker(new Worker("을지문덕"));

    company->InWorker(new Worker("한석봉"));

 

    company->List();

 

    company->DoProject(2);

    company->DoProject(7);

 

    size_t count = company->GetCount();

    for(size_t i=0; i<count;++i)

    {

        delete (*company)[i];

    }

    delete company;

    return 0;

}


실행 결과

=== 직원 목록 ===

홍길동 강감찬 을지문덕 한석봉

== 프로젝트 수행 ==

홍길동 일하다.

강감찬 일하다.

== 프로젝트 수행 ==

을지문덕 일하다.

한석봉 일하다.

홍길동 일하다.

강감찬 일하다.

을지문덕 일하다.

한석봉 일하다.

홍길동 일하다.



본문

[디딤돌 C++] 64. 직접 연관(DIRECTED ASSOCIATION) 관계




0 Comments
댓글쓰기 폼