1. 문제

 

다음과 같은 상속 관계를 가진 Product, Book, CompactDisk, ConversationBook 클래스를 작성하고 아래 실행 화면과 같이 상품을 관리하는 프로그램을 작성하라.

 

Product 클래스는 상품의 식별자(id), 상품 설명, 생산자, 가격을 나타내는 정보를 포함한다. Book 클래스는 ISBN 번호, 저자, 책 제목 정보를 포함한다. CompactDisc 클래스는 앨범 제목, 가수 이름 정보를 포함한다. ConversationBook은 회화 책에서 다루는 언어 명 정보를 포함한다. 객체 지향 개념에 부합하도록 적절한 접근 지정자, 멤버 변수 및 함수, 생성자 등을 작성하라. main()에서는 최대 100개의 상품을 관리하며, 모든 상품의 정보를 조회할 수 있다. 상품의 식별자는 상품을 등록할 때 자동으로 붙인다.

 

 

2. 결과

 

 

 

 

3. 코드

#include <iostream>
#include <string>
using namespace std;

class Product {
	int id;
	string info;
	string pro;
	string price;
public :
	Product(){;}
	Product(int id, string info, string pro, string price) {  
		this->id = id;
		this->info = info; this->pro = pro; this->price = price; 
	}
	int getId() { return id; }
	string getInfo() { return info; }
	string getPro() { return pro; }
	string getPrice() { return price; }
	virtual void show() = 0;
};

class Book : public Product {
	string ISBN;
	string writer;
	string BName;
public :
	Book(int id, string info, string pro, string price, string IS, string writer, string BN) : Product(id, info, pro, price) {
		ISBN = IS; this->writer= writer; BName= BN; }
	string getISBN() { return ISBN; }
	string getWriter() { return writer; }
	string getBName() { return BName; }
	void show();
};
void Book::show() {
	cout << "--- 상품ID : " << getId() << endl;
	cout << "상품설명 : " << getInfo() << endl;
	cout << "생산자 : " << getPro() << endl;
	cout << "가격 : " << getPrice() << endl;
	cout << "ISBN : " << ISBN << endl;
	cout << "책제목 : " << BName << endl;
	cout << "저자 : " << writer << endl;
}

class CompactDisc : public Product {
	string AName;
	string singer;
public :
	CompactDisc(int id, string info, string pro, string price, string AN, string singer) : Product(id, info, pro, price) {
		AName = AN; this->singer = singer; }
	void show();
};
void CompactDisc::show() {
	cout << "--- 상품ID : " << getId() << endl;
	cout << "상품설명 : " << getInfo() << endl;
	cout << "생산자 : " << getPro() << endl;
	cout << "가격 : " << getPrice() << endl;
	cout << "앨범제목 : " << AName << endl;
	cout << "가수 : " << singer << endl;
}

class ConversationBook : public Book {
	string lan;
public :
	ConversationBook(int id, string info, string pro, string price, string IS, string writer, string BN, string lan) 
		: Book(id, info, pro, price, IS, writer, BN)
	{ this->lan = lan; }
	void show();
};
void ConversationBook::show() {
	cout << "--- 상품ID : " << getId() << endl;
	cout << "상품설명 : " << getInfo() << endl;
	cout << "생산자 : " << getPro() << endl;
	cout << "가격 : " << getPrice() << endl;
	cout << "ISBN : " << getISBN() << endl;
	cout << "책제목 : " << getBName() << endl;
	cout << "저자 : " << getWriter() << endl;
	cout << "언어 : " << lan << endl;
}

int main() {
	
	int num;
	int id=-1;
	string info, pro, price, AN, singer, BN, writer, lan, ISBN;
	Product* p[100];
	bool exit = true;

	cout << "***** 상품 관리 프로그램을 작동합니다 *****" << endl;
	while( exit ) {
		cout << "상품 추가(1), 모든 상품 조회(2), 끝내기(3) ? ";
		cin >> num;
		switch( num ) 
		{
		case 1 :
			cout << "상품 종류 책(1), 음악CD(2), 회화책(3) ? ";
			cin >> num;
			cin.ignore(1);
			id++;
			if( id >= 100 ) break;
			if( num == 1) {
				cout << "상품설명>>"; getline(cin, info );
				cout << "생산자>>"; getline(cin, pro );
				cout << "가격>>"; getline(cin, price );
				cout << "책제목>>"; getline(cin, BN );
				cout << "저자>>"; getline(cin, writer );
				cout << "ISBN>>"; getline(cin, ISBN );
				Book* b = new Book(id, info, pro, price, BN, writer, ISBN);
				p[id] = b;
			}
			if( num == 2) {
				cout << "상품설명>>"; getline(cin, info);
				cout << "생산자>>"; getline(cin, pro );
				cout << "가격>>"; getline(cin, price );
				cout << "앨범제목>>"; getline(cin, AN);
				cout << "가수>>"; getline(cin, singer);
				CompactDisc* d = new CompactDisc(id, info, pro, price, AN, singer);
				p[id] = d;
			}
			if( num == 3) {
				cout << "상품설명>>"; getline(cin, info );
				cout << "생산자>>"; getline(cin, pro );
				cout << "가격>>"; getline(cin, price );
				cout << "책제목>>"; getline(cin, BN );
				cout << "저자>>"; getline(cin, writer );
				cout << "언어>>"; getline(cin, lan);
				cout << "ISBN>>"; getline(cin, ISBN );
				ConversationBook* cb = new ConversationBook(id, info, pro, price, BN, writer, ISBN, lan);
				p[id] = cb;
			}
			cout << endl;
			break;
		case 2 :
			for(int i=0; i<=id; i++)
				p[i]->show();
			cout << endl;
			break;
		case 3 : 
			exit = false;
			break;
		}
	}
}



 

4. 설명

 

 

show() 함수를 순수 가상 함수로 만들었습니다.

 

순수 가상 함수는 9장에서 배우지만 코드를 간단히 하기 위하여 사용하였습니다.

 

순수 가상 함수를 간단히 설명하자면 부모 클래스에는 선언만 한 후 자식 클래스에서 구현부를 입력하여 다른 자식 클래스에서는 각각 서로가 구현한 show()함수를 실행 시킵니다.

 

+ Recent posts