이번에는 전체 도서 보기와 전체 보기 기능을 구현합시다. 앞에서 도서 추가 기능을 구현하였는데 이를 확인할 수 있기 때문에 먼저 구현하는 것이 개발하기 편합니다.
먼저 정체 도서 보기 기능을 구현합시다.
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(); } } }