PlaylistNode.cpp (lab 9) | C++

austinleath

October 30th, 2020 05:28:38 PM

					
#include <string> #include <iostream> #include "PlaylistNode.h" using namespace std; PlaylistNode::PlaylistNode() { uniqueID = "none"; songName = "none"; artistName = "none"; songLength = 0; nextNodePtr = 0; } PlaylistNode::PlaylistNode(string uniqueID_, string songName_, string artistName_, int songLength_) { uniqueID = uniqueID_; songName = songName_; artistName = artistName_; songLength = songLength_; nextNodePtr = 0; } void PlaylistNode::InsertAfter(PlaylistNode* ptr) { this->SetNext(ptr->GetNext()); ptr->SetNext(this); } void PlaylistNode::SetNext(PlaylistNode* ptr) { nextNodePtr = ptr; } string PlaylistNode::GetID() { return uniqueID; } string PlaylistNode::GetSongName() { return songName; } string PlaylistNode::GetArtistName() { return artistName; } int PlaylistNode::GetSongLength() { return songLength; } PlaylistNode* PlaylistNode::GetNext() { return nextNodePtr; } void PlaylistNode::PrintPlaylistNode() { cout << "Unique ID: " << uniqueID << endl; cout << "Song Name: " << songName << endl; cout << "Artist Name: " << artistName << endl; cout << "Song Length (in seconds): " << songLength << endl; } Playlist::Playlist() { head = tail = 0; } void Playlist::AddSong(string id, string songname, string artistname, int length) { PlaylistNode* n = new PlaylistNode(id, songname, artistname, length); if (head == 0) { head = tail = n; } else { n->InsertAfter(tail); tail = n; } } bool Playlist::RemoveSong(string id) { if (head == NULL) { cout << "Playlist is empty" << endl; return false; } PlaylistNode* curr = head; PlaylistNode* prev = NULL; while (curr != NULL) { if (curr->GetID() == id) { break; } prev = curr; curr = curr->GetNext(); } if (curr == NULL) { cout << "\"" << curr->GetSongName() << "\" is not found" << endl; return false; } else { if (prev != NULL) { prev ->SetNext(curr->GetNext()); } else { head = curr->GetNext(); } if (tail == curr) { tail = prev; } cout << "\"" << curr->GetSongName() << "\" removed." << endl; delete curr; return true; } } bool Playlist::ChangePosition(int oldPos, int newPos) { if (head == NULL) { cout << "Playlist is empty" << endl; return false; } PlaylistNode* prev = NULL; PlaylistNode* curr = head; int pos; if (head == NULL || head == tail) { return false; } for (pos = 1; curr != NULL && pos < oldPos; pos++) { prev = curr; curr = curr->GetNext(); } if (curr != NULL) { string currentSong = curr->GetSongName(); if (prev == NULL) { head = curr->GetNext(); } else { prev->SetNext(curr->GetNext()); } if (curr == tail) { tail = prev; } PlaylistNode* curr1 = curr; prev = NULL; curr = head; for (pos = 1; curr != NULL && pos < newPos; pos++) { prev = curr; curr = curr->GetNext(); } if (prev == NULL) { curr1->SetNext(head); head = curr1; } else { curr1->InsertAfter(prev); } if (curr == NULL) { tail = curr1; } cout << "\"" << currentSong << "\" moved to position " << newPos << endl; return true; } else { cout << "Song's current position is invalid" << endl; return false; } } void Playlist::SongsByArtist(string artist) { if (head == NULL) { cout << "Playlist is empty" << endl; } else { PlaylistNode* curr = head; int i = 1; while (curr != NULL) { if (curr->GetArtistName() == artist) { cout << endl << i << "." << endl; curr->PrintPlaylistNode(); } curr = curr->GetNext(); i++; } } } int Playlist::TotalTime() { int total = 0; PlaylistNode* curr = head; while (curr != NULL) { total += curr->GetSongLength(); curr = curr->GetNext(); } return total; } void Playlist::PrintList() { if (head == NULL) { cout << "Playlist is empty" << endl; } else { PlaylistNode* curr = head; int i = 1; while (curr != NULL) { cout << endl << i++ << "." << endl; curr->PrintPlaylistNode(); curr = curr->GetNext(); } } }

Featured Posts