8.3 도서 추가

이번에는 도서 추가 기능을 구현합시다.

먼저 추가할 도서의 ISBN을 입력받습니다.

만약 입력받은 도서의 ISBN이 있으면 메시지를 출력하고 기능을 종료하세요.

도서를 추가할 장르를 선택합니다. 장르를 선택하는 부분은 별도의 메서드를 작성합시다.

만약 장르를 잘못 선택하면 메시지를 출력하고 기능을 종료하세요.

isbn을 입력 인자로 장르에 도서를 추가하세요. 아직 추가하지 않은 메서드입니다. Genre 클래스에 AddBook 메서드를 추가하세요. Genre의 AddBook 메서드에서는 생성한 도서 개체를 반환해 주어야 합니다. App 에서도 isbn 순으로 도서를 보관해야 하기 때문입니다.

반환받은 도서 개체가 유효하면 맵 bookdic에 설정하세요.

먼저 App 클래스에 장르를 선택하는 SelectGenre 메서드를 추가하세요.

장르를 선택하는 SelectGenre 메서드를 구현합시다.

사용자가 장르를 선택하기 쉽게 장르 목록을 출력하세요.

반복자나 find_if 알고리즘을 이용하여 사용자가 선택한 장르를 찾습니다. 여기에서는 반복자를 사용할게요.

장르의 번호와 사용자가 입력한 장르 번호가 같으면 장르를 반환하세요.

사용자가 입력한 장르 번호를 갖는 장르 개체가 없으면 0을 반환하세요.

Genre 클래스에 도서 추가 AddBook 메서드와 장르 번호 접근자 GetGNum을 추가하세요.

장르 클래스에 도서를 추가하는 AddBook 메서드를 구현합시다.

사용자에게 장르 내 도서 구분자를 입력받습니다.

만약 사용자가 입력한 도서 구분자가 범위를 벗어나면 메시지를 출력하고 0을 반환하세요.

추가할 도서 제목을 입력받습니다.

도서 개체를 생성하여 벡터 books에 보관하세요. 여기에서는 인덱스를 사용하기로 했죠.

생성한 도서 개체를 반환하세요.

장르 번호 접근자에서는 멤버 필드 gnum을 반환하세요.

Book 클래스에 isbn, 도서 번호, 도서 제목을 위한 멤버 필드를 추가하세요.

생성자에 isbn, 도서 번호, 도서 제목을 입력인자로 받게 수정하세요.

도서 개체 내부에는 다른 개체를 생성하여 관리하는 부분이 없으니 소멸자를 지우세요.

도서 생성자에서는 입력 인자로 받은 값들로 멤버 필드를 설정하세요. 특히 isbn은 상수화 멤버이므로 초기 설정해야 합니다.

디폴트로 제공했던 소멸자는 지우세요.