8.4 전체 도서 보기 및 전체 보기

이번에는 전체 도서 보기와 전체 보기 기능을 구현합시다. 앞에서 도서 추가 기능을 구현하였는데 이를 확인할 수 있기 때문에 먼저 구현하는 것이 개발하기 편합니다.

먼저 정체 도서 보기 기능을 구현합시다.

void App::ListBook() //전체 도서 보기
{

isbn을 키, 도서 개체를 값으로하는 bookdic의 반복자를 이용하여 전체를 순회합니다.

    BDIter seek = bookdic.begin();
    BDIter last = bookdic.end();
    Book *book=0;

    for(  ;seek != last; ++seek)
    {

map에 보관한 것은 isbn키와 도서 개체를 값으로 하는 pair입니다. 도서 개체를 구하려면 반복자에 간접 연산하여 보관한 pair에 접근한 후에 멤버 second를 사용해야죠.

        book = (*seek).second;

map을 인덱스 연산으로 사용할 때 값이 0인지 확인하고 사용해야죠.

        if(book)
        {
            book->View();
        }
    }
}

이제 Book 클래스에 View메서드를 추가하세요.

class Book
{
    ...중략...    
    void View()const;
};

도서 정보를 출력하세요.

void Book::View()const
{
    cout<<isbn<<" ,No."<<bnum<<", 제목:"<<title<<endl;
}

이제 전체 보기 기능을 구현합시다.

void App::ViewAll() //전체 보기
{

리스트 genres의 반복자를 이용해서 전체 장르를 순회하세요.

    GIter seek = genres.begin();
    GIter last = genres.end();
    Genre *genre = 0;
    for(   ;seek != last ; ++seek)
    {
        genre = *seek;

장르에 ViewAll 메서드를 추가한 후에 호출하세요.

        genre->ViewAll();
    }    
}
class Genre
{
    ...중략...
    void ViewAll()const;
};

장르 클래스의 ViewAll 메서드를 구현합시다.

void Genre::ViewAll()const
{

먼저 장르의 기본 정보를 출력하세요.

    View();

장르에 보관한 도서를 반복해서 출력합니다. 인덱스를 사용하여 보관하므로 인덱스 0에서 최대 인덱스까지 순차적으로 출력하세요.

    for(int index=0; index<max_book;++index)
    {
        if(books[index])
        {

인덱스 연산 결과가 0일 수 있으니 0이 아닌지 확인하는 코드가 필요합니다.

            books[index]->View();
        }
    }
}