112. 도서 관리 프로그램 – 장르 삭제

장르 삭제 시퀀스 다이어그램을 작성하기로 해요.
여기에서도 장르를 선택하는 부분까지는 같아요.
장르를 선택하였으면 선택한 장르를 소멸하는 함수를 호출하세요.
그리고 장르를 소멸하는 함수에서는 내부에서 생성하여 배열에 보관한 도서도 소멸해야 하는 것을 잊지 마세요.

Book을 소멸하는 함수는 이미 구현한 것과 차이가 없어요.

Genre를 소멸하는 함수에서는 보관한 모든 도서를 소멸하는 부분을 추가하세요.
Genre에서는 소멸할 때 해제화 작업을 GenreTGenre에서 수행하므로 이 함수를 수정하세요.

void GenreTGenre(Genre *genre)
{
    Book *book=0;
    Iterator seek= EHArrayBegin(genre->books);
    Iterator end= EHArrayEnd(genre->books);
    for(  ;seek != end; ++seek)
    {
        book = (Book *)(*seek);
        DeleteBook(book);
    }
    DeleteEHArray(genre->books);
}

App에서는 장르를 선택하여 Genre를 소멸하는 함수를 호출하세요.
그리고 시퀀스 다이어그램에서는 표시하지 않았지만 장르를 보관하는 배열에서 장르를 삭제하세요.

void AppRemoveGenre(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);
    DeleteGenre(genre);
    EHArrayErase(app->genres,seek);
}

그리고 AppTApp에서 프로그램 종료 전에 모든 장르를 삭제하는 부분도 작성합시다.

void AppTAppGenre(App *app)
{
    Iterator seek= EHArrayBegin(app->genres);  
    Iterator end= EHArrayEnd(app->genres);
    Genre *genre = 0;
    for(  ;seek != end; ++seek)
    {
        genre = (Genre *)(*seek);
        DeleteGenre(genre);
    }
    DeleteEHArray(app->genres);
}