본문 바로가기

언어/C++

프린터 상속 잉크젯/ 레이저 프린터로 프린터 하기 !

#include <iostream>
#include <string>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

class printer {
	string model;
	string manufacturer;
	int printedCount;
	int availableCount;	
public:
	printer(string m, string ma, int a){
		model=m;
		manufacturer=ma;
		availableCount=a;
	}
	string getModel(){
		return model;
	}
	string getManu(){
		return manufacturer;
	}
	int getAvail(){
		return availableCount;
	}
	bool print(int pages){
		printedCount=pages;
		if(availableCount >= printedCount){
			availableCount -=printedCount;
			return true;
		}
		else{
			cout << "용지가 부족하여 프린트 할 수 없습니다. " << endl;
			return false;
		}
	}
};

class Ink : public printer{
	int availableInk;
public :
	Ink(string m, string ma, int a, int aInk) : printer (m, ma, a){
		availableInk = aInk;
	}
	void printInkJet(int pages){
		if(print(pages)){
			if(availableInk >= pages){
				availableInk -=pages;
				cout << "프린트 하였습니다." << endl;
			}
		}
	}
	void show(){
		cout << getModel() << " , " << getManu() << " , 남은 종이 " << getAvail() << "장, 남은 잉크 " << availableInk << endl; 
	}
};

class Laser : public printer{
	int availableToner;
public:
	Laser(string m, string ma, int a, int aToner) : printer(m , ma, a){
		availableToner=aToner;
	}
	void printLaser(int pages){
		if(print(pages)){
			if(availableToner >= pages){
				availableToner -=pages;
				cout << "프린트하였습니다. " << endl;
			}
		}
	}
	
	void show(){
		cout << getModel() << ", " << getManu() << ", 남은 종이 " << getAvail() << "장, 남은 토너" << availableToner<< endl;
	}
};



int main(int argc, char** argv) {
	
	Ink* IP= new Ink("Officejet V40","HP", 5, 10);
	Laser* LP= new Laser ("SCX-6x45", "삼성전자", 3, 20);
	int n1;
	int n2;
	char a;
	
	cout << "현재 작동 중인 2대의 프린터는 아래와 같다 " << endl;
	cout << "잉크젯 : "; IP ->show();
	cout << "레이져 : "; LP ->show(); 
	
	while(1){
		
		cout << endl << "프린터(1: 잉크젯, 2: 레이져)와 매수 입력 >> ";
		cin >> n1 >> n2;
		
		if(n1 ==1){
			
			IP->printInkJet(n2);
			IP->show();
			LP->show();
		}
		
		if(n1==2){
			
			LP->printLaser(n2);
			IP->show();
			LP->show();
		}
		
		cout << "계속 프린트 하시겠습니까 ? (y/n) >> ";
		cin >> a;
		
		if(a=='n') break;		
	}
	
	return 0;
}