Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include "Song.h"
- #include <list>
- #include <iomanip>
- std::ostream& operator<<(std::ostream& os, const Song& s) {
- os << "Song [" << s.name << "] - Artist: [" << s.artist << "]\n";
- return os;
- }
- void showMenu() {
- std::cout << std::endl << std::setw(3) << std::left << "F" << "-" << std::setw(18) << std::right << "Play First Song\n"
- << std::setw(3) << std::left << "N" << "-" << std::setw(17) << std::right << "Play Next Song\n"
- << std::setw(3) << std::left << "P" << "-" << std::setw(21) << std::right << "Play Previous Song\n"
- << std::setw(3) << std::left << "A" << "-" << std::setw(46) << std::right << "Add and play a new song at current location\n"
- << std::setw(3) << std::left << "L" << "-" << std::setw(28) << std::right << "List the current playlist\n";
- }
- void showPlaylist(std::list<Song>& playList) {
- std::cout << "========================================================================\n"<< std::setw(35) << std::right << "Songs" << "\n========================================================================\n";
- std::cout << std::setw(30) << std::left << "Song Name" << std::setw(30) << std::left << "Artist" << "Rating" << std::endl;
- for (const auto &s : playList) {
- std::cout << std::setw(30) << std::left << s.getName() << std::setw(30) << std::left << s.getArtist() << s.getRating() << std::endl;
- }
- }
- void displayCurrSong(const Song & s) {
- std::cout << "\n========================================================================\n" << std::setw(40) << std::right << "Current Song" << "\n========================================================================\n";
- std::cout << std::setw(30) << std::left << s.getName() << std::setw(30) << std::left << s.getArtist() << s.getRating() << std::endl;
- }
- void addSong(std::list<Song>::iterator& i, std::list<Song> &pl, Song s) {
- pl.emplace(i, s);
- i++;
- std::cout << s << std::endl;
- showPlaylist(pl);
- }
- int main()
- {
- char input{};
- std::list<Song> playList{
- Song{"Einaya Bethebak","Tamer Hosny",5},
- Song{"Arrab Kaman","Tamer Hosny",5},
- Song{"Baeed 3an Einy","Tamer Hosny",5},
- Song{"Ana Ayesh","Amr Diab",5},
- Song{"Wahashteny","Amr Diab",3}
- };
- std::list<Song>::iterator currSong{playList.begin()};
- showPlaylist(playList);
- displayCurrSong(*currSong);
- showMenu();
- while (std::cin >> input) {
- switch (toupper(input)) {
- case 'F':
- {
- displayCurrSong(*currSong);
- break;
- }
- case 'N':
- {
- currSong++;
- if (currSong == playList.end())
- currSong = playList.begin();
- displayCurrSong(*currSong);
- showMenu();
- break;
- }
- case 'P':
- {
- if (currSong == playList.begin()) {
- currSong = playList.end();
- currSong--;
- displayCurrSong(*currSong);
- }
- else {
- currSong--;
- displayCurrSong(*currSong);
- }
- showMenu();
- break;
- }
- case 'A':
- {
- std::string name;
- std::string artist;
- int rating;
- std::cin.clear();
- std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- std::cout << "Enter Song Name: " << std::endl;
- getline(std::cin, name);
- std::cout << "Enter Song Artist: " << std::endl;
- getline(std::cin, artist);
- std::cout << "Enter Song rating: " << std::endl;
- std::cin >> rating;
- addSong(currSong, playList, Song{ name,artist, rating });
- break;
- }
- case 'L':
- {
- std::cout << "L" << std::endl;
- break;
- }
- default: {
- std::cout << "DEFAULT" << std::endl;
- break;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment