midoking

SongPlayer.cpp

Oct 13th, 2022
632
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.01 KB | None | 0 0
  1. #include <iostream>
  2. #include "Song.h"
  3. #include <list>
  4. #include <iomanip>
  5.  
  6. std::ostream& operator<<(std::ostream& os, const Song& s) {
  7.     os << "Song [" << s.name << "] - Artist: [" << s.artist << "]\n";
  8.  return os;
  9. }
  10.  
  11. void showMenu() {
  12.     std::cout << std::endl << std::setw(3) << std::left << "F" << "-" << std::setw(18) << std::right << "Play First Song\n"
  13.         << std::setw(3) << std::left << "N" << "-" << std::setw(17) << std::right << "Play Next Song\n"
  14.         << std::setw(3) << std::left << "P" << "-" << std::setw(21) << std::right << "Play Previous Song\n"
  15.         << std::setw(3) << std::left << "A" << "-" << std::setw(46) << std::right << "Add and play a new song at current location\n"
  16.         << std::setw(3) << std::left << "L" << "-" << std::setw(28) << std::right << "List the current playlist\n";
  17. }
  18.  
  19. void showPlaylist(std::list<Song>& playList) {
  20.  
  21.     std::cout << "========================================================================\n"<< std::setw(35) << std::right << "Songs" << "\n========================================================================\n";
  22.     std::cout << std::setw(30) << std::left << "Song Name" << std::setw(30) << std::left << "Artist" << "Rating" << std::endl;
  23.     for (const auto &s : playList) {
  24.         std::cout << std::setw(30) << std::left << s.getName() << std::setw(30) << std::left << s.getArtist() <<  s.getRating() << std::endl;
  25.     }
  26. }
  27.  
  28. void displayCurrSong(const Song & s) {
  29.     std::cout << "\n========================================================================\n" << std::setw(40) << std::right << "Current Song" << "\n========================================================================\n";
  30.     std::cout << std::setw(30) << std::left << s.getName() << std::setw(30) << std::left << s.getArtist() << s.getRating() << std::endl;
  31. }
  32.  
  33. void addSong(std::list<Song>::iterator& i, std::list<Song> &pl, Song s) {
  34.     pl.emplace(i, s);
  35.     i++;
  36.     std::cout << s << std::endl;
  37.     showPlaylist(pl);
  38. }
  39.  
  40. int main()
  41. {
  42.     char input{};
  43.     std::list<Song> playList{
  44.         Song{"Einaya Bethebak","Tamer Hosny",5},
  45.         Song{"Arrab Kaman","Tamer Hosny",5},
  46.         Song{"Baeed 3an Einy","Tamer Hosny",5},
  47.         Song{"Ana Ayesh","Amr Diab",5},
  48.         Song{"Wahashteny","Amr Diab",3}
  49.     };
  50.     std::list<Song>::iterator currSong{playList.begin()};
  51.     showPlaylist(playList);
  52.     displayCurrSong(*currSong);
  53.     showMenu();
  54.     while (std::cin >> input) {
  55.         switch (toupper(input)) {
  56.         case 'F':
  57.         {
  58.             displayCurrSong(*currSong);
  59.             break;
  60.         }
  61.         case 'N':
  62.         {
  63.             currSong++;
  64.             if (currSong == playList.end())
  65.                 currSong = playList.begin();
  66.             displayCurrSong(*currSong);
  67.             showMenu();
  68.             break;
  69.         }
  70.         case 'P':
  71.         {
  72.             if (currSong == playList.begin()) {
  73.                 currSong = playList.end();
  74.                 currSong--;
  75.                 displayCurrSong(*currSong);
  76.             }
  77.             else {
  78.                 currSong--;
  79.                 displayCurrSong(*currSong);
  80.             }
  81.             showMenu();
  82.             break;
  83.         }
  84.         case 'A':
  85.         {
  86.             std::string name;
  87.             std::string artist;
  88.             int rating;
  89.             std::cin.clear();
  90.             std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  91.             std::cout << "Enter Song Name: " << std::endl;
  92.             getline(std::cin, name);
  93.             std::cout << "Enter Song Artist: " << std::endl;
  94.             getline(std::cin, artist);
  95.             std::cout << "Enter Song rating: " << std::endl;
  96.             std::cin >> rating;
  97.             addSong(currSong, playList, Song{ name,artist, rating });
  98.             break;
  99.         }
  100.         case 'L':
  101.         {
  102.             std::cout << "L" << std::endl;
  103.             break;
  104.         }
  105.         default: {
  106.             std::cout << "DEFAULT" << std::endl;
  107.             break;
  108.         }
  109.         }
  110.     }
  111.    
  112. }
  113.  
Advertisement
Add Comment
Please, Sign In to add comment