IT 프로그래밍/객체지향프로그래밍

객체지향프로그래밍 6 과제

기술1 2024. 6. 21. 18:41
반응형

 

 

PlayList 클래스에 추가할 메서드

 

1. 플레이리스트의 재생 시간 합산

int PlayList::get_total_duration() {
    int total_duration = 0;
    for (auto song_ptr : tracks) {
        total_duration += song_ptr->get_duration();
    }
    return total_duration;
}

 

 

2. 플레이리스트 내 특정 아티스트의 노래 목록

vector<Song*> PlayList::find_songs_by_artist(string artist_name) {
    vector<Song*> result;
    for (auto song_ptr : tracks) {
        if (song_ptr->get_artist() == artist_name) {
            result.push_back(song_ptr);
        }
    }
    return result;
}

 

3. 플레이리스트 내 특정 앨범의 노래 목록

vector<Song*> PlayList::find_songs_by_album(string album_name) {
    vector<Song*> result;
    for (auto song_ptr : tracks) {
        if (song_ptr->get_album() == album_name) {
            result.push_back(song_ptr);
        }
    }
    return result;
}

 

MusicManager 클래스에 추가할 메서드들

1. 모든 플레이리스트의 재생 시간 합산

int MusicManager::get_total_duration() {
    int total_duration = 0;
    for (auto plist : playlists) {
        total_duration += plist->get_total_duration();
    }
    return total_duration;
}

 

2. 모든 플레이리스트 내 특정 아티스트의 노래 목록

vector<Song*> MusicManager::find_all_songs_by_artist(string artist_name) {
    vector<Song*> result;
    for (auto plist : playlists) {
        vector<Song*> songs = plist->find_songs_by_artist(artist_name);
        result.insert(result.end(), songs.begin(), songs.end());
    }
    return result;
}

 

 

3. 모든 플레이리스트 내 특정 앨범의 노래 목록

vector<Song*> MusicManager::find_all_songs_by_album(string album_name) {
    vector<Song*> result;
    for (auto plist : playlists) {
        vector<Song*> songs = plist->find_songs_by_album(album_name);
        result.insert(result.end(), songs.begin(), songs.end());
    }
    return result;
}

 

4. 노래 정보를 업데이트하는 메서드

void MusicManager::update_song_info(int song_id, string new_title, string new_artist, string new_album, string new_mv_url) {
    auto it = find_playlist("All");
    Song* song_ptr = (*it)->find_song_by_id(song_id);
    if (song_ptr != nullptr) {
        song_ptr->set_title(new_title);
        song_ptr->set_artist(new_artist);
        song_ptr->set_album(new_album);
        song_ptr->set_mv_url(new_mv_url);
        cout << "Song information updated." << endl;
    } else {
        cout << "Song not found." << endl;
    }
}

 

 

Song 클래스에 필요한 메서드

1. 노래 시간 가져오기

int Song::get_duration() {
    return duration; // duration 멤버 변수가 있다고 가정
}

 

 

2. 노래 정보 설정 메서드

void Song::set_title(string new_title) {
    title = new_title;
}

void Song::set_artist(string new_artist) {
    artist = new_artist;
}

void Song::set_album(string new_album) {
    album = new_album;
}

void Song::set_mv_url(string new_mv_url) {
    mv_url = new_mv_url;
}
반응형