이이프
IeF 제멋대로 세상
이이프
전체 방문자
오늘
어제

공지사항

  • ✔ Info
  • 전체 글보기 (56)
    • 💻프로그래밍 내용 정리 (55)
      • C (0)
      • C++17 (55)
    • 💻게임메이커 (0)
    • 💻언리얼엔진 (0)
    • 💻유니티 (0)
    • 🎈[팀&자작]게임소개 (0)
    • 📃게임제작기술 (0)
    • 🎨그림놀이 (0)
    • 📒대학생활 (0)
    • 😃잡담 (1)
    • 🕹게임성과 (0)
    • 💷자격증 (0)

블로그 메뉴

  • 방명록

최근 글

최근 댓글

티스토리

hELLO · Designed By 정상우.
이이프

IeF 제멋대로 세상

[C++ 1.6.3] Database 클래스
💻프로그래밍 내용 정리/C++17

[C++ 1.6.3] Database 클래스

2022. 8. 18. 23:50
728x90

Database 클래스는 표준 라이브러리에서 제공하는 std::vrctor 클래스를 이용하여 employee 객체를 저장한다.

 

1. Database.h

새로 채용한 직원에 대한 직원 번호는 데이터베이스에서 자동으로 할당한다.

#pragma once
#include <iostream>
#include <vector>
#include "Employee.h"

namespace Records {
	const int kFirstEmployeeNumber = 1000;

이를 위해 직원 번호의 시작값을 상수로 정의한다.

 

이 데이터는 성과 이름을 입력하는 것만으로 신입직원에 대한 정보를 쉽게 추가하는 기능을 제공한다.

    class Database
    {
    public:
    	Employee& addEmployee(const std::string& firstName,
    		                  const std::string& lastName);
    	Employee& getEmployee(int employeeNumber);
    	Employee& getEmployee(const std::string& firstName,
    		                  const std::string& lastName);

편의를 위해 이 메서드는 신입직원 객체에 대한 레퍼런스를 리턴한다.

다른 코드에서도 getEmployee() 메서드를 호출해서 직원 객체에 대한 레퍼런스를 구할 수 있다.

 

이 데이터베이스는 모든 직원에 대한 중앙 저장소이기 때문에

전체 직원 정보, 현재 재직 중인 직원 정보, 퇴사한 직원 정보를 출력하는 메서드를 제공한다.

		void displayAll() const;
		void displayCurrent() const;
		void displayFormer() const;

 

mEmployees는 Employee 객체를 가지고 있다.

    private:
    	std::vector<Employee> mEmployees;
    	int mNextEmployeeNumber = kFirstEmployeeNumber;
    };
}

mNextEmployeeNumber 데이터 멤버는 신입직원에 할당된 직원 번호를 기록하며,

kFirstEmployeeNumber 상수로 초기화한다.

 

 


 

2. Database.h

addEmployee() 메서드는 새로운 Employee 객체를 생성하고, 정보를 채우고 이를 vector에 추가한다.

mNextEmployeeNumber 데이터 멤버는 한 번 사용하면 값을 하나 증가시키는데,

그래야 다음 직원이 새 번호를 받을 수 있기 때문이다.

#include <iostream>
#include <stdexcept>
#include "Database.h"

using namespace std;

namespace Records {
	Employee& Database::addEmployee(const string& firstName,
		const string& lastName)
	{
		Employee theEmployee(firstName, lastName);
		theEmployee.setEmployeeNumber(mNextEmployeeNumber++);
		theEmployee.hire();
		mEmployees.push_back(theEmployee);
		return mEmployees[mEmployees.size() - 1];
	}

 

여기서 getEmployee()의 한 가지 버전만 보여준다.

두 버전 모두 작동 방식은 비슷하다.

    Employee& Database::getEmployee(int employeeNumber)
    {
    	for (auto& employee : mEmployees) {
    		if (employee.getEmployeeNumber() == employeeNumber) {
    			return employee;
    		}
    	}
    	throw logic_error("No employee found.");
    }

둘다 범위 기반 for 문을 사용해서 mEmployees에 있는 모든 직원에 대해 루프를 돌면서 메서드에 전달된 정보와 일치하는 Employee가 있는지 확인한다. 이 과정에서 일치하는 직원이 없으면 익셉션을 발생시킨다.

 

display 메서드들에서 사용하는 알고리즘은 모두 비슷하다.

    void Database::displayAll() const
    {
    	for (const auto& employee : mEmployees) {
    		employee.display();
    	}
    }

    void Database::displayCurrent() const
    {
    	for (const auto& employee : mEmployees) {
    		if (employee.isHired())
    			employee.display();
    	}
    }

모든 직원에 대해 루프를 돌면서 일정한 조건에 만족하는 직원의 정보를 콘솔에 출력한다.

displayFormer()는 displayCurrent()와 비슷하다.

 

 


 

3. DatabaseTest.cpp

지금까지 정의한 데이터베이스의 기본 기능을 테스트하는 코드는 다음과 같다.

#include <iostream>
#include "Database.h"

using namespace std;
using namespace Records;

int main()
{
	Database myDB;
	Employee& emp1 = myDB.addEmployee("Greg", "Wallis");
	emp1.fire();

	Employee& emp2 = myDB.addEmployee("Marc", "White");
	emp2.setSalary(100000);

	Employee& emp3 = myDB.addEmployee("John", "Doe");
	emp3.setSalary(10000);
	emp3.promote();

	cout << "all employees: " << endl << endl;
	myDB.displayAll();

	cout << endl << "curent employees: " << endl << endl;
	myDB.displayCurrent();

	cout << endl << "former employees: " << endl << endl;
	myDB.displayFormer();
}

결과

'💻프로그래밍 내용 정리 > C++17' 카테고리의 다른 글

[C++ 2.1.1] 동적 스트링(C 스타일 스트링), strlen, strcpy, strcat  (0) 2022.08.19
[C++ 1.6.4] 사용자 인터페이스  (0) 2022.08.19
[C++ 1.6.2] Employee 클래스  (0) 2022.08.18
[C++ 1.6.1] C++ 프로그램 만들기(직원 관리 시스템)  (0) 2022.08.18
[C++ 1.5.1] 표준 라이브러리  (0) 2022.08.18
    '💻프로그래밍 내용 정리/C++17' 카테고리의 다른 글
    • [C++ 2.1.1] 동적 스트링(C 스타일 스트링), strlen, strcpy, strcat
    • [C++ 1.6.4] 사용자 인터페이스
    • [C++ 1.6.2] Employee 클래스
    • [C++ 1.6.1] C++ 프로그램 만들기(직원 관리 시스템)
    이이프
    이이프
    게임 프로그래머 지망생 / Since 2022.08.14

    티스토리툴바