이번에는 장르 추가 및 전체 장르 보기를 구현합시다.
시나리오를 보면 장르 추가에서 장르의 일련 번호는 1부터 순차 부여합니다. 이를 위해 App 개체는 가장 최근에 생성한 장르 번호를 기억하고 있어야 합니다. 멤버 필드로 가장 최근에 장르 번호를 추가하세요.
class App { ...중략... int last_gnum; ...중략... };
App 생성자에서는 last_gnum을 초기값을 설정하세요.
App::App(void) { last_gnum = 0; }
장르를 추가하는 AddGenre 메서드를 구현합시다.
void App::AddGenre() //장르 추가 {
장르 추가에서는 부여할 장르 번호를 위해 last_gnum을 1 증가하세요.
last_gnum++;
사용자로부터 추가할 장르 이름을 입력받습니다.
cout<<last_gnum<<"번째 추가할 장르 이름:"<<endl; string gname = ehglobal::getstr();
장르 번호와 장르 이름을 입력 인자로 장르 개체를 생성한 후에 리스트 멤버 genres에 순차 보관하세요.
genres.push_back(new Genre(last_gnum,gname)); }
Genre 클래스에 장르 일련 번호와 장르 이름을 멤버 필드로 추가하고 생성자를 수정하세요. 그리고 장르 내에서 도서를 vector에 인덱스를 사용하여 보관할 것이며 도서 번호는 1~100입니다. 장르 내 최대 도서 번호를 정적 상수 멤버 필드로 추가하세요.
class Genre { const int gnum; string name; Books books; static const int max_book; public: Genre(int gnum,string name); ~Genre(void); };
정적 멤버 max_book은 Genre.cpp 파일에 선언해야겠죠.
const int Genre::max_book = 100;
그리고 Genre의 생성자를 구체적으로 구현합시다. 먼저 상수 멤버 필드 gnum을 초기 설정하세요.
Genre::Genre(int gnum,string name):gnum(gnum) {
장르 이름을 설정하세요.
this->name = name;
장르에서 도서는 vector에 인덱스를 사용하여 보관할 것입니다. max_book 만큼 0으로 설정하세요.
books.resize(max_book,0); }
이번에는 전체 장르 보기 기능을 구현합시다.
void App::ListGenre() //전체 장르 보기 {
반복자를 이용하여 리스트 genres에 보관한 모든 장르를 접근해야겠죠.
GIter seek = genres.begin(); GIter last = genres.end(); Genre *genre = 0; for( ;seek != last ; ++seek) {
반복자에 간접 연산으로 장르 개체를 구하여 장르 정보를 출력하세요.
genre = *seek; genre->View(); } }
Genre 클래스에 View 메서드를 추가하세요.
class Genre { ...중략... void View()const; };
View 메서드에서는 장르 번호와 이름을 출력하세요.
void Genre::View()const { cout<<"No."<<gnum<<" , 장르 이름:"<<name<<endl; }
작성한 코드는 모든 기능에 관한 설명을 한 후에 기재하기로 할게요.