─━ IT ━─

[C++] 씨쁠쁠 프린터 클래스 구현하기

DKel 2021. 3. 14. 21:39
반응형

Cpp Printer Class 실행 결과

 

요구사항

프린터는 특정 종이 수만큼 인쇄할 수 있어야 한다.

프린터는 모델명, 제조사가 존재한다.

프린터는 잉크젯 프린터와 레이저 프린터가 존재한다.

다른점은 딱히 없지만, 레이저 프린터와 잉크젯 프린터의 출력 결과 네이밍은 서로 다르게 한다.

 

도출된 멤버변수

모델명, 제조사, 인쇄매수, 인쇄종이잔량

 

소스코드

#include <stdio.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

class Printer {
private:
	char* model; // 모델명
	char* manufacturer; // 제조사
	int printedCount = 0; // 인쇄매수
	int availableCount; // 인쇄종이잔량

public:
	void setModel(char* name) {
		model = name;
	}
	char* getModel() {
		return model;
	}

	void setManufacturer(char* name) {
		manufacturer = name;
	}
	char* getManufacturer() {
		return manufacturer;
	}

	void setPrintedCount(int count) {
		printedCount = count;
	}
	int getPrintedCount() {
		return printedCount;
	}

	void setAvailableCount(int count) {
		availableCount = count;
	}
	int getAvailableCount() {
		return availableCount;
	}

	void print(int pages) {
		if (pages < availableCount) {
			printf("[INFO] %s 프린터의 용지를 %d개 사용합니다.\n", getModel(), (availableCount - pages));
			setAvailableCount(availableCount - pages);
			setPrintedCount(getPrintedCount() + pages);
		}
		else {
			printf("[ERROR] 잔여 인쇄종이가 %d개 보다 조금 남아있습니다.\n", pages);
		}
			printf("[INFO] %s 프린터의 현재 용지 수: %d.\n", getModel(), availableCount);
	}
};

class InkJetPrinter : public Printer {
public:
	int availableInk; // 잉크잔량

	// 생성자
	InkJetPrinter(char* model, char* manufacturer, int count) {
		Printer::setModel(model);
		Printer::setManufacturer(manufacturer);
		Printer::setAvailableCount(count);
	}
	~InkJetPrinter() // 소멸자
    {
        delete &availableInk;
    }
    //멤버함수 
    void printInkJet(int pages) {
		if (pages < Printer::getAvailableCount()) {
			printf("[INFO] %s 잉크젯 프린터의 용지를 %d개 사용합니다.\n", getModel(), (Printer::getAvailableCount() - pages));
			Printer::setAvailableCount(Printer::getAvailableCount() - pages);
			Printer::setPrintedCount(Printer::getPrintedCount() + pages);
		}
		else {
			printf("[ERROR] 잔여 인쇄종이가 %d개 보다 조금 남아있습니다.\n", pages);
		}
			printf("[INFO] %s 잉크젯 프린터의 현재 용지 수: %d.\n", getModel(), Printer::getAvailableCount());
	}
};

class LaserPrinter : public Printer {
public:
	int availableToner; // 토너잔량

	// 생성자
	LaserPrinter(char* model, char* manufacturer, int count) {
		Printer::setModel(model);
		Printer::setManufacturer(manufacturer);
		Printer::setAvailableCount(count);
	}
	~LaserPrinter() // 소멸자
    {
        delete &availableToner;
    }
    // 멤버함수 
    void printLaser(int pages) {
		if (pages < Printer::getAvailableCount()) {
			printf("[INFO] %s 레이저 프린터의 용지를 %d개 사용합니다.\n", getModel(), (Printer::getAvailableCount() - pages));
			Printer::setAvailableCount(Printer::getAvailableCount() - pages);
			Printer::setPrintedCount(Printer::getPrintedCount() + pages);
		}
		else {
			printf("[ERROR] 잔여 인쇄종이가 %d개 보다 조금 남아있습니다.\n", pages);
		}
			printf("[INFO] %s 레이저 프린터의 현재 용지 수: %d.\n", getModel(), Printer::getAvailableCount());
	}
};

int main(int argc, char** argv) {
	InkJetPrinter* inkJetPrinter = new InkJetPrinter("HP 8600", "HP", 10);
	LaserPrinter* laserPrinter = new LaserPrinter("HP 8200", "HP", 15);
	
	printf("[INFO] 잉크젯 프린터 생성 [모델명: %s / 제조사: %s / 용지수: %d]\n", inkJetPrinter->getModel(), inkJetPrinter->getManufacturer(), inkJetPrinter->getAvailableCount());
	printf("[INFO] 레이저 프린터 생성 [모델명: %s / 제조사: %s / 용지수: %d]\n", laserPrinter->getModel(), laserPrinter->getManufacturer(), laserPrinter->getAvailableCount());

	inkJetPrinter->printInkJet(3);
	laserPrinter->printLaser(7);
	laserPrinter->printLaser(7);
	
	printf("[INFO] %s 프린터 사용용지수: %d]\n", laserPrinter->getModel(), laserPrinter->getPrintedCount());
	laserPrinter->printLaser(7);
	return 0;

}

 

 

반응형