108.도서 관리 프로그램-도서 목록

특정 장르 내 도서 목록 보기에서는 먼저 장르 목록을 보여주고 최종 사용자가 장르를 선택하게 하세요.
이 부분은 도서 추가부분을 참고하세요.
그리고 선택한 장르의 모든 도서 정보를 보여주는 함수를 호출하기로 해요.

먼저 Book에 View 함수를 구현하세요.
Genre에서 호출해서 사용하므로 Book 헤더 파일에 선언문을 작성하고 소스 파일에 함수를 구현하세요.

void BookView(Book *book)
{
    printf("제목:%s\n",book->title);
    printf("\t도서번호:%d 저자명:%s\n",book->bnum,book->author);
}

Genre에 ViewAll을 구현하세요.
App에서 호출해서 사용하므로 Genre 헤더 파일에 선언문을 작성하고 소스 파일에 구현하세요.
ViewAll 함수에서는 먼저 자신의 정보를 출력하는 View 함수를 호출하세요.
그리고 배열에 보관하고 있는 모든 도서를 순차적으로 얻어와서 도서 정보를 출력하는 Book의 View 함수를 호출하세요.

void GenreViewAll(Genre *genre)
{
    Iterator seek= EHArrayBegin(genre->books);
    Iterator end= EHArrayEnd(genre->books);
    Book *sbook=0;
    GenreView(genre);
    for(  ;seek != end; ++seek)
    {
        sbook = (Book *)(*seek);
        BookView(sbook);
    }
}

App의 특정 장르 내 도서 보기를 구현하세요.
여기에서는 장르를 선택한 후에 선택한 장르의 ViewAll 함수를 호출하세요.
장르를 선택하는 부분은 도서 추가와 같은 논리예요.

void AppListBookAtGenre(App *app)
{
    char gname[MAX_GNAME_LEN+1]="";
    Iterator seek = 0;
    Genre *genre = 0;
    AppListGenre(app);
    printf("도서 목록을 확인할 장르명을 입력하세요.\n");
    gets_s (gname,MAX_GNAME_LEN);
    seek = AppFindGenre(app,gname);
    if(seek == EHArrayEnd(app->genres))
    {
        printf("잘못 선택하였습니다.\n");
        return;
    }
    genre = (Genre *)(*seek);
    GenreViewAll(genre);
}