덜덜 떨던 과목 하나가 생각보다 점수가 잘 나와서 기쁜 마음으로 글 올립니다. :)
클래스는 2개 작성했습니다.
1. 기본 단위가 될 Restaurant 클래스 작성
이 클래스에 담을 정보는 각 점수별 개수 저장을 위한 int scoreCount[5],
그리고 가게의 이름을 저장할 std::string name,
이렇게 두가지입니다.
그리고 이 클래스의 핵심 기능으로는
점수를 받아서 개수를 +1 해줄 int addScore(int score);
가게의 평균 점수를 알려줄 float score(void);
가게의 정보를 화면에 출력해줄 void printInfo(void);
이렇게 작성했습니다.
2. 레스토랑 클래스들을 관리할 RestaurantManager 클래스 작성
이 클래스에 담을 정보는 레스토랑들의 목록인 std::vector<Restaurant> restaurantList 하나입니다.
그리고 핵심 기능으로는 새로운 레스토랑을 추가할 수 있는 void addRestaurant(const char* name, int score=0);
그리고 기존 레스토랑에 점수를 추가할 수 있는 void addRestaurantScore(const char* name, int score);
특정 점수 이상의 가게를 랜덤으로 하나 출력해주는 void pickOneRestaurant(float score);
입출력을 위해 가게 이름 목록을 들고 오는 std::vector<std::string> restaurantNameList(void);
이렇게 네가지입니다.
문제풀이 과정에서 가게 이름의 중복은 고려하지 않았습니다. 중복이 없다는 전제 하에 이름으로만 찾아서 처리한 거죠. -.-;
포인터 사용은 거의 없이 작성했습니다. 실제 코드는 여기에 작성한 것과 조금 다릅니다. 생성자부터 해서 메소드가 더 많이 있습니다.
#1 프로그램에서 RestaurantManager 의 인스턴스를 하나 만들어서 씁니다. manager 라 지칭하겠습니다.
#2 가게를 추가할 필요가 있을 경우 manager.addRestaurant(이름, 점수)를 호출합니다. 점수 안 넣으면 디폴트로 0이 들어갑니다.
#3 가게 목록을 보여줄 때는 manager.restaurantNameList() 를 호출해서 데이터를 들고 와 화면에 보여줍니다.
#4 선택한 가게의 점수를 추가할 때는 manager.addRestaurantScore(이름, 점수)를 호출합니다.
#5 무작위로 가게를 하나 추천할 때는 manager.pickOneRestaurant(0)을 호출합니다. 0점 이상의 가게니까 모든 가게 중에서 하나를 고릅니다.
#6 평점 3점 이상의 우수 가게를 추천할 때는 manager.pickOneRestaurant(3)을 호출합니다.
std::vector 를 사용해서 Restaurant 들을 들고 있는 이유는 std::vector 는 push_back 을 통해 새로운 가게를 추가하면 알아서 저장공간을 늘려주기 때문입니다. 마찬가지로 std::string 으로 가게 이름을 저장하는 것도 길이가 길든 짧든 자동으로 맞추어 주기 때문입니다.
과제가 뭔지 잊으셨을까 해서 이미지 첨부합니다.