이번 장에서는 STL에서 제공하는 vector, list, map을 사용하여 장르별 도서 관리 프로그램을 만들어 보아요.
실습할 프로그램에서는 도서를 장르별로 관리합니다. 장르에 도서는 vector를 이용하여 보관합니다. 응용에서는 장르를 list에 보관합니다. 그리고 App에는 모든 도서를 isbn(문자열 형식으로 정의)을 키로 값을 도서인 map에 보관합시다.
주의할 점은 하나의 도서 개체를 장르와 App에 보관할 것입니다. 똑같은 정보를 갖는 두 개의 도서 개체를 만들어서 보관할 것이 아님을 주의합시다.
시나리오는 다음과 같습니다.
주제: 장르별 도서 관리 프로그램
장르별 도서 관리 프로그램은 콘솔에서 동작하는 응용 프로그램입니다. 프로그램은 크게 초기화, 사용자와 상호 작용, 해제화 과정으로 수행합니다.
초기화 과정에서는 프로그램 시작에서 수행해야 할 초기 작업을 수행합니다. 필요한 작업이 없으면 생략하세요.
해제화 과정에서는 프로그램 종료할 때 수행해야 할 작업을 수행합니다. 필요한 작업이 없으면 생략하세요.
사용자 상호 작용에서는 메뉴를 출력하고 사용자가 메뉴를 선택하여 기능을 수행하는 것을 반복합니다. 사용자가 선택할 수 있는 메뉴는 장르 추가, 전체 장르 보기, 도서 추가, 도서 삭제, ISBN으로 도서 검색, 특정 장르 선택 후 도서 검색, 특정 장르 보기, 전체 도서 보기, 전체 보기가 있습니다.
- 장르 추가
생성할 장르의 일련 번호(1부터 순차 부여)를 보여주고 장르 이름을 입력받아 장르를 생성합니다.
장르는 응용 내의 장르 보관 리스트에 순차적으로 보관합니다.
- 전체 장르 보기
장르 번호 순서대로 모든 장르의 정보를 출력합니다.
- 도서 추가
도서 추가에서는 먼저 도서의 ISBN(주요 키, 문자열)을 입력받습니다.
같은 ISBN의 도서가 있으면 에러 문구를 출력하고 기능을 종료합니다.
추가할 장르를 선택한 후에 장르 내에 도서 구분자(1~100 사이의 정수)를 입력받습니다.
선택한 장르에 이미 추가한 도서의 구분자일 때는 에러 문구를 출력하고 기능을 종료합니다.
도서 제목을 입력받아 도서를 생성합니다.
생성한 도서는 장르 내의 벡터에 인덱스(도서 구분자 -1) 연산을 이용합니다.
그리고 응용 내의 도서 보관 맵에 ISBN 순으로 보관합니다.
- 도서 삭제
먼저 삭제할 도서가 있는 장르를 선택합니다.
그리고 장르 내 도서 구분자를 입력받습니다.
장르 내의 벡터에 인덱스(도서 구분자 -1) 연산을 이용하여 0으로 변경합니다.
응용 내의 도서 보관 맵에서 보관한 도서를 지웁니다.
그리고 도서 개체를 소멸합니다.
- ISBN으로 도서 검색
검색할 도서의 ISBN을 입력합니다.
응용 내의 도서 보관 맵에서 도서를 검색하여 검색한 도서 정보를 출력합니다.
- 특정 장르 선택 후 도서 검색
장르를 선택합니다. 그리고 장르 내 도서 구분자를 입력받아 도서 정보를 출력합니다.
- 특정 장르 보기
먼저 장르를 선택합니다.
그리고 장르의 정보를 출력합니다.
장르 정보에는 장르 일련 번호, 장르 명과 장르 내에 보관한 모든 도서 정보입니다.
- 전체 도서 보기
응용 내의 도서 보관 맵에 보관한 모든 도서 정보를 출력합니다.
ISBN 순으로 도서 정보를 출력하였다면 정상적으로 작성한 것입니다.
- 전체 보기
모든 장르의 정보를 출력합니다. 여기에서는 장르 내에 보관한 도서 정보도 모두 출력합니다.