110.도서관리 프로그램 – 도서 번호로 검색

이번에는 도서 번호로 검색 시퀀스 다이어그램을 작성해 보아요.
도서 번호로 검색에서도 장르 목록을 보여주고 장르를 선택하게 하세요.
장르를 선택한 후에 도서 번호를 입력하게 하고 장르의 도서 번호로 검색 기능을 호출하세요.
장르의 도서 번호로 검색 기능에서는 장르 내 배열에 보관한 도서 중에 입력한 도서 번호와 일치하는 도서를 찾아 반환하세요.
App에서는 반환받은 도서의 정보 출력 함수를 호출하세요.

Book 헤더 파일에 도서 번호를 반환하는 함수를 선언하고 소스 파일에 구현하세요.

int BookGetNum(Book *book)
{
    return book->bnum;
}

Gerne 헤더 파일에 번호로 도서 검색 함수를 선언하고 소스에 구현하세요.
배열에 보관한 도서의 번호가 입력받은 도서 번호와 같은지 확인하여 일치하는 도서가 있으면 반환하세요.

Book *GenreFindBookByNum(Genre *genre,int bnum)
{
    Iterator seek;
    Iterator end;
    Book *book=0;

    seek= EHArrayBegin(genre->books);
    end= EHArrayEnd(genre->books);

    GenreView(genre);

    for(  ;seek != end; ++seek)
    {
        book = (Book *)(*seek);

        if(BookGetNum(book) == bnum)
        {
            return book;
        }
    }

    return 0;
}

App에서 도서 번호로 검색 기능을 구현하기로 해요.
먼저 장르 목록을 보여준 다음 장르를 선택하게 하세요.
그리고 도서 번호를 입력받아 선택한 장르에게 도서를 검색하라고 요청하세요.
반환받은 도서 정보를 출력하세요.

void AppFindBookByNum(App *app)
{
    char gname[MAX_GNAME_LEN+1]="";
    int bnum=0;
    Iterator seek = 0;
    Genre *genre = 0;
    Book *book = 0;
    AppListGenre(app);
    printf("검색할 장르명을 입력하세요.\n");
    gets_s(gname,MAX_GNAME_LEN);
    seek = AppFindGenre(app,gname);
    if(seek == EHArrayEnd(app->genres))
    {
        printf("잘못 선택하였습니다.\n");
        return;
    }
    printf("도서 번호를 입력하세요.\n");
    scanf_s("%d", &bnum);
    genre = (Genre *)(*seek);
    book = GenreFindBookByNum(genre,bnum);
    if(book)
    {
         BookView(book);
    }
    else
    {
        printf("도서를 찾지 못했습니다.\n");
    }
}