본문 바로가기

강의자료/Class

010. 연습문제 - 부서클래스를 작성하시오.

◈ 이 글은 강의를 위하여 제가 직접 작성한 내용입니다. 따라서 퍼가실 경우, 출처를 명확히 해주시기 바랍니다!!
◈ This ariticle was written by me for teaching. So if you want to copy this article, please clarify the source!!


문제편 - 아래와 같은 부서클래스를 작성하시오.
직원을 관리하는 부서(Department)클래스를 작성하시오.
1. 직원은 정규직(Permanent)과 계약직(PartTime)의 2가지 타입이 존재하도록 한다.
2. 직원이 가져야할 속성은 타입(정규직 or 계약직), 이름, 월급 이다.
3. 정규직은 생성자에서 이름과 월급을 입력받는다.
4. 계약직은 생성자에서 이름과 하루근무시간과 시간당보수를 입력받는다.(월 근무시간은 무조건 20시간으로 설정.)
5. 인사부서에 10명의 직원(정규직 5명, 계약직 5명)을 추가하고 그 리스트를 출력하시오.
6. 한 부서에서 수용가능한 최대 인원수는 100명이다.
#include 
#include 
using namespace std;

// 직원을 관리하는 부서(Department)클래스를 작성하시오.
// 1. 직원은 정규직(Permanent)과 계약직(PartTime)의 2가지 타입이 존재하도록 한다.
// 2. 직원이 가져야할 속성은 타입(정규직 or 계약직), 이름, 월급 이다.
// 3. 정규직은 생성자에서 이름과 월급을 입력받는다.
// 4. 계약직은 생성자에서 이름과 하루근무시간과 시간당보수를 입력받는다.(월 근무시간은 무조건 20시간으로 설정.)
// 5. 인사부서에 10명의 직원(정규직 5명, 계약직 5명)을 추가하고 그 리스트를 출력하시오.
// 6. 한 부서에서 수용가능한 최대 인원수는 100명이다.

void main()
{
	Department insa("인사부서");
	insa.AddEmployee(new Permanent("KIM", 500));
	insa.AddEmployee(new PartTime("Lee", 10, 1));
	insa.AddEmployee(new Permanent("PARK", 450));
	insa.AddEmployee(new PartTime("SONG", 5, 2));
	insa.AddEmployee(new Permanent("JEONG", 300));
	insa.AddEmployee(new PartTime("CHOI", 7, 1));
	insa.AddEmployee(new Permanent("JOO", 520));
	insa.AddEmployee(new PartTime("CHA", 6, 2));
	insa.AddEmployee(new Permanent("MOON", 470));

	insa.ShowEmployee();
}

출력 화면
[ 인사부서 ]
타입     이름    월급
정규직  KIM     500
계약직  Lee     200
정규직  PARK    450
계약직  SONG    200
정규직  JEONG   300
계약직  CHOI    140
정규직  JOO     520
계약직  CHA     240
정규직  MOON    470

해답편 - 클래스 작성.
#include 
#include 
using namespace std;

// 직원을 관리하는 부서(Department)클래스를 작성하시오.
// 1. 직원은 정규직(Permanent)과 계약직(PartTime)의 2가지 타입이 존재하도록 한다.
// 2. 직원이 가져야할 속성은 타입(정규직 or 계약직), 이름, 월급 이다.
// 3. 정규직은 생성자에서 이름과 월급을 입력받는다.
// 4. 계약직은 생성자에서 이름과 하루근무시간과 시간당보수를 입력받는다.(월 근무시간은 무조건 20시간으로 설정.)
// 5. 인사부서에 10명의 직원(정규직 5명, 계약직 5명)을 추가하고 그 리스트를 출력하시오.
// 6. 한 부서에서 수용가능한 최대 인원수는 100명이다.

class Employee
{
private:
	string _name;

public:
	Employee(char* name)
		: _name(name)
	{
	}

	virtual string& getName() { return _name; } 
	virtual char* getType() = 0;
	virtual int getPay() = 0;
};

class Permanent : public Employee
{
private:
	int _salary;

public:
	Permanent(char* name, int salary)
		: Employee(name), _salary(salary)
	{
	}

	char* getType() { return "정규직"; }
	int getPay() { return _salary; }
};

class PartTime : public Employee
{
private:
	enum { MONTH_TIME = 20 };

	int _time;
	int _pay;

public:
	PartTime(char* name, int time, int pay)
		: Employee(name), _time(time), _pay(pay)
	{
	}

	char* getType() { return "계약직"; }
	int getPay() { return MONTH_TIME*_time*_pay; }
};

class Department
{
private:
	string name;				// 부서명.
	Employee* employee[100];	// 직원리스트.
	int count;					// 직원수.

public:
	Department(char* name) : name(name), count(0) {}
	~Department()
	{
		for(int i=0; i < count; i++)
		{
			delete employee[i];
		}
	}

	void AddEmployee(Employee* emp)
	{
		employee[count] = emp;
		count++;
	}

	void ShowEmployee()
	{
		cout << "[ " << name << " ]" << endl;
		cout << "타입 \t 이름 \t 월급" << endl;
		for(int i=0; i < count; i++)
		{
			cout << employee[i]->getType() << "\t" << employee[i]->getName() << "\t" << employee[i]->getPay() << endl;

		}
	}
};


void main()
{
	Department insa("인사부서");
	insa.AddEmployee(new Permanent("KIM", 500));
	insa.AddEmployee(new PartTime("Lee", 10, 1));
	insa.AddEmployee(new Permanent("PARK", 450));
	insa.AddEmployee(new PartTime("SONG", 5, 2));
	insa.AddEmployee(new Permanent("JEONG", 300));
	insa.AddEmployee(new PartTime("CHOI", 7, 1));
	insa.AddEmployee(new Permanent("JOO", 520));
	insa.AddEmployee(new PartTime("CHA", 6, 2));
	insa.AddEmployee(new Permanent("MOON", 470));

	insa.ShowEmployee();
}