Advertisement
Guest User

Untitled

a guest
Aug 18th, 2019
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.27 KB | None | 0 0
  1.  
  2. #include <iostream>
  3. #include <fstream>
  4. #include <string>
  5. #include <vector>
  6. #include <map>
  7. #include <set>
  8. #include <algorithm>
  9. #include <iterator>
  10. #include <conio.h>
  11. #include <stack>
  12. #include <stdlib.h>
  13.  
  14.  
  15.  
  16. using namespace std;
  17.  
  18.  
  19. class Music_Player
  20. {
  21. private:
  22.  
  23.     struct track
  24.     {
  25.     private:
  26.  
  27.         int YearConvertFromString(string a)
  28.         {
  29.             int res = 0;
  30.             int crt = 0;
  31.             if (a[0] == '+')
  32.                 crt++;
  33.  
  34.             for (int i = crt; i < a.size(); i++)
  35.                 if (isdigit(a[i]))
  36.                     res = (res * 10) + (a[i] - '0');
  37.                 else
  38.                     return -1;
  39.             return res;
  40.         };
  41.         string convertToString(int i)
  42.         {
  43.             string res;
  44.             res.clear();
  45.             stack <char> digit;
  46.  
  47.             if (i < 0)
  48.             {
  49.                 res = "-";
  50.                 i = -i;
  51.             }
  52.             else
  53.                 if (i == 0)
  54.                 {
  55.                     res = '0';
  56.                     return res;
  57.                 }
  58.  
  59.             i = abs(i);
  60.  
  61.             while (i > 0)
  62.             {
  63.                 digit.push(i % 10 + 48);
  64.                 i = i / 10;
  65.             }
  66.  
  67.             while (!digit.empty())
  68.             {
  69.                 res += digit.top();
  70.                 digit.pop();
  71.             }
  72.             return res;
  73.         }
  74.  
  75.     public:
  76.  
  77.         string track_name;
  78.         int year_of_execution;
  79.         string performer;
  80.  
  81.         track()
  82.         {
  83.             performer = "unknown";
  84.             track_name = "unknown";
  85.             year_of_execution = -1;
  86.         };
  87.  
  88.         track(string default)
  89.         {
  90.             performer = "unknown";
  91.             track_name = default;
  92.             year_of_execution = -1;
  93.         };
  94.  
  95.         track(int in_year_of_execution)
  96.         {
  97.             performer = "unknown";
  98.             track_name = "unknown";
  99.             year_of_execution = in_year_of_execution;
  100.         };
  101.  
  102.         track(string default, int in_year_of_execution)
  103.         {
  104.             performer = "unknown";
  105.             track_name = default;
  106.             year_of_execution = in_year_of_execution;
  107.         }
  108.  
  109.         track(string in_performer, string in_track_name)
  110.         {
  111.             performer = in_performer;
  112.             track_name = in_track_name;
  113.             year_of_execution = -1;
  114.         };
  115.  
  116.         track(string in_performer, string in_track_name, int in_year_of_execution)
  117.         {
  118.             performer = in_performer;
  119.             track_name = in_track_name;
  120.             year_of_execution = in_year_of_execution;
  121.         };
  122.  
  123.         void getTrackFromString(string strInTrackList)
  124.         {
  125.             string prsm;
  126.             int i = 0;
  127.             int end = strInTrackList.length();
  128.             int gapFlag = 1;
  129.             performer.clear();
  130.             track_name.clear();
  131.             while ((gapFlag == 1) && (i < end))
  132.             {
  133.  
  134.                 if ((strInTrackList[i] == ' ') && (strInTrackList[i + 1] == '-'))
  135.                 {
  136.                     gapFlag = 2;
  137.                     i += 3;
  138.                     break;
  139.                 }
  140.  
  141.                 if ((strInTrackList[i] == ' ') && (strInTrackList[i + 1] == '['))
  142.                 {
  143.                     gapFlag = 3;;
  144.                     i += 2;
  145.                     break;
  146.                 }
  147.                 performer += strInTrackList[i];
  148.                 i++;
  149.             }
  150.  
  151.             while ((gapFlag == 2) && (i < end))
  152.             {
  153.  
  154.                 if ((strInTrackList[i] == ' ') && (strInTrackList[i + 1] == '['))
  155.                 {
  156.                     gapFlag = 3;;
  157.                     i += 2;
  158.                     break;
  159.                 }
  160.                 track_name += strInTrackList[i];
  161.                 i++;
  162.             }
  163.  
  164.             while ((gapFlag == 3) && (i < end))
  165.             {
  166.  
  167.                 if (strInTrackList[i] == ']')
  168.                 {
  169.                     if (prsm == "")
  170.                         year_of_execution = -1;
  171.                     else /*newTrack.year_of_execution = atoi(prsm); выдает ошибку,
  172.                          пришлось вставлять свой конвертер*/
  173.                         year_of_execution = YearConvertFromString(prsm);
  174.                 }
  175.                 prsm += strInTrackList[i];
  176.                 i++;
  177.             }
  178.  
  179.  
  180.             if (track_name == "")
  181.             {
  182.                 track_name = performer;
  183.                 performer = "unknown";
  184.             }
  185.  
  186.             //showTrack();
  187.         }
  188.  
  189.         string trackInString()
  190.         {
  191.             string track;
  192.             track += performer + " - " + track_name + " [";
  193.             if (year_of_execution != -1)
  194.                 track += convertToString(year_of_execution) + "] ";
  195.             else
  196.                 track += "unknown] ";
  197.  
  198.             return track;
  199.         }
  200.  
  201.         void showTrack()
  202.         {
  203.             cout << trackInString() << '\n';
  204.         }
  205.  
  206.     };
  207.  
  208.     multimap <string, track> track_list;
  209.  
  210.     set <string> performers_set;
  211.  
  212. public:
  213.  
  214.     void get_track_list_in_multimap()
  215.     {
  216.  
  217.         string strTrack;
  218.         track test = track();
  219.         ifstream in_track_list("track_list.txt");
  220.         while (in_track_list.peek() != EOF)
  221.         {
  222.             getline(in_track_list, strTrack);
  223.             test.getTrackFromString(strTrack);
  224.             track_list.insert(pair <string, track>(test.performer, test));
  225.             performers_set.insert(test.performer);
  226.         }
  227.  
  228.         in_track_list.close();
  229.  
  230.     }
  231.  
  232.     void show_track_list(string name)
  233.     {
  234.         auto iterPair = track_list.equal_range(name);
  235.         if (iterPair.first == iterPair.second)
  236.         {
  237.             cout << "No this musician";
  238.             cout << '\n';
  239.         }
  240.         else
  241.         {
  242.             for (auto music_treck = iterPair.first; music_treck != iterPair.second; ++music_treck)
  243.             {
  244.                 music_treck->second.showTrack();
  245.                 //cout << '\n';
  246.             }
  247.         }
  248.     }
  249.  
  250.     void show_track_list()
  251.     {
  252.  
  253.         for (auto iter = performers_set.begin(); iter != performers_set.end(); ++iter)
  254.         {
  255.             auto iterPair = track_list.equal_range(*iter);
  256.             if (iterPair.first == iterPair.second)
  257.                 cout << "Not found";
  258.             else
  259.             {
  260.                 for (auto music_treck = iterPair.first; music_treck != iterPair.second; ++music_treck)
  261.                 {
  262.                     music_treck->second.showTrack();
  263.                     //cout << '\n';
  264.                 }
  265.             }
  266.         }
  267.  
  268.     }
  269.  
  270.     void show_performers_set()
  271.     {
  272.         for (auto iter = performers_set.begin(); iter != performers_set.end(); ++iter)
  273.         {
  274.             cout << *iter << '\n';
  275.         }
  276.     }
  277.  
  278.     void add_performer(track in)
  279.     {
  280.        
  281.         track_list.insert(pair <string, track>(in.performer, in));
  282.         performers_set.insert(in.performer);
  283.  
  284.     }
  285.  
  286.     void delete_musician(string name)
  287.     {
  288.         string strTrack;
  289.         track test = track();
  290.         ifstream in("track_list.txt");
  291.         ofstream out("river_chest.txt");
  292.         while (in.peek() != EOF)
  293.         {
  294.             getline(in, strTrack);
  295.             test.getTrackFromString(strTrack);
  296.             if (test.performer != name)
  297.                 out << strTrack << "\n";
  298.         };
  299.  
  300.         in.close();
  301.         out.close();
  302.  
  303.         ifstream in2("river_chest.txt");
  304.         ofstream out2("track_list.txt");
  305.  
  306.         while (in2.peek() != EOF)
  307.         {
  308.             getline(in2, strTrack);
  309.             out2 << strTrack << "\n";
  310.         };
  311.  
  312.         in2.close();
  313.         out2.close();
  314.  
  315.         out.open("river_chest.txt", ios_base::trunc);
  316.         out.close();
  317.  
  318.         track_list.clear(); //multimap
  319.         performers_set.clear(); //set
  320.  
  321.         get_track_list_in_multimap();
  322.     }
  323.  
  324.     void rename_musician(string oldname, string newname)
  325.     {
  326.         string strTrack;
  327.         track test = track();
  328.         ifstream in("track_list.txt");
  329.         ofstream out("river_chest.txt");
  330.         while (in.peek() != EOF)
  331.         {
  332.             getline(in, strTrack);
  333.             test.getTrackFromString(strTrack);
  334.             if (test.performer != oldname)
  335.                 out << test.trackInString() << "\n";
  336.             else
  337.             {
  338.                 test.performer = newname;
  339.                 out << test.trackInString() << "\n";
  340.             }
  341.         };
  342.  
  343.         in.close();
  344.         out.close();
  345.  
  346.         ifstream in2("river_chest.txt");
  347.         ofstream out2("track_list.txt");
  348.  
  349.         while (in2.peek() != EOF)
  350.         {
  351.             getline(in2, strTrack);
  352.             out2 << strTrack << "\n";
  353.         };
  354.  
  355.         in2.close();
  356.         out2.close();
  357.  
  358.         out.open("river_chest.txt", ios_base::trunc);
  359.         out.close();
  360.  
  361.         track_list.clear(); //multimap
  362.         performers_set.clear(); //set
  363.  
  364.         get_track_list_in_multimap();
  365.     }
  366.  
  367.     void reset_list_from_multimap()
  368.     {
  369.         ofstream out("track_list.txt");
  370.  
  371.         for (auto iter = performers_set.begin(); iter != performers_set.end(); ++iter)
  372.         {
  373.             auto iterPair = track_list.equal_range(*iter);
  374.             if (iterPair.first == iterPair.second)
  375.                 cout << "No track";
  376.             else
  377.             {
  378.                 for (auto music_treck = iterPair.first; music_treck != iterPair.second; ++music_treck)
  379.                 {
  380.                     out << music_treck->second.trackInString() << "\n";
  381.                 }
  382.             }
  383.         }
  384.     }
  385.  
  386.     void console_getline(string &get)
  387.     {
  388.         string ts;
  389.         cin >> get;
  390.         getline(cin, ts);
  391.         get += ts;
  392.     }
  393.  
  394.     bool interface_player()
  395.     {      
  396.        
  397.         cout << "enter the number of the action:" << "\n";
  398.         cout << "1. show artist list" << "\n";
  399.         cout << "2. show track list" << "\n";
  400.         cout << "3. show artist songs" << "\n";
  401.         cout << "4. change the stage name of the musician" << "\n";
  402.         cout << "5. remove the artist and his music" << "\n";
  403.         cout << "6. add artist or track" << "\n";
  404.         cout << "7. exit" << "\n";
  405.        
  406.         char key;
  407.         cin >> key;
  408.  
  409.         switch (key)
  410.         {
  411.  
  412.         case '1':
  413.         {
  414.            
  415.             system("CLS");
  416.             show_performers_set(); 
  417.             cout << "\n";
  418.             return 1;
  419.         }
  420.         case '2':
  421.         {
  422.            
  423.             system("CLS");
  424.             show_track_list();
  425.             cout << "\n";
  426.             return 1;
  427.         }
  428.         case '3':
  429.         {
  430.            
  431.             system("CLS");
  432.             string name;
  433.             show_performers_set();
  434.             cout << "\n";
  435.             cout << "enter the name of the musician: ";            
  436.             console_getline(name);
  437.             cout << "\n";
  438.             show_track_list(name);
  439.             cout << "\n";
  440.             return 1;
  441.         }
  442.         case '4':
  443.         {
  444.            
  445.             system("CLS");
  446.             string oldname, newname;
  447.             show_performers_set();
  448.             cout << "\n";
  449.             cout << "enter the old name of the musician: ";        
  450.             console_getline(oldname);
  451.             cout << "\n";
  452.             cout << "enter the new name of the musician: ";        
  453.             console_getline(newname);
  454.             cout << "\n";
  455.             rename_musician(oldname, newname);
  456.             return 1;
  457.         }
  458.         case '5':
  459.         {
  460.            
  461.             system("CLS");
  462.             string name;
  463.             show_performers_set();
  464.             cout << "\n";
  465.             cout << "enter the name of the musician: ";
  466.            
  467.             console_getline(name);
  468.             cout << "\n";
  469.             delete_musician(name);
  470.             return 1;
  471.         }
  472.         case '6':
  473.         {
  474.             system("CLS");
  475.             string addString;
  476.             track addTrack;;
  477.             cout << "enter the track name in this format:" << "\n";        
  478.             cout << "<<artist name>> - <<track name>> [<<year of creation>>]" << "\n";
  479.             cout << "If there is no information about the artist or song title, please write \"unknown\"" << "\n";
  480.             cout << "If you do not know the year, it is possible to write nothing or to put \"[]\"" << "\n";
  481.             cout << "for example:" << "\n" <<"Edguy - King of Fools [2004]" << "\n";
  482.             cout << "unknown - Get Lucky []" << "\n\n";
  483.            
  484.             console_getline(addString);
  485.             addTrack.getTrackFromString(addString);
  486.             add_performer(addTrack);
  487.             return 1;
  488.         }
  489.         case '7':
  490.         {
  491.             return 0;
  492.         }
  493.  
  494.         default: //пользователь ввёл несуществующие вариант
  495.            
  496.             system("CLS");
  497.             cout << "Invalid input" << '\n';
  498.             return 1;
  499.  
  500.         }
  501.     }
  502.  
  503. };
  504.  
  505. int main()
  506. {
  507.     Music_Player myPlayer;
  508.     myPlayer.get_track_list_in_multimap();
  509.     //myPlayer.show_performers_set();
  510.     //system("pause");
  511.     //system("CLS");
  512.     //myPlayer.show_track_list();
  513.    
  514.     while (myPlayer.interface_player())
  515.     {
  516.         if (!myPlayer.interface_player())
  517.             return 0;      
  518.     }
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.     //mciSendString("play D:\\Arch Enemy - Nemesis.mp3 wait", NULL, 0, NULL);
  526.  
  527.     //mciSendString("open \"D:\music2\my music\Arch Enemy - Nemesis.mp3\" type mpegvideo alias mp3", NULL, 0, NULL);
  528.  
  529.     //#include<stdlib.h>
  530.     //...
  531.     // 
  532.     //
  533.  
  534.  
  535.  
  536.     //_getch();
  537.    
  538.     return 0;
  539.  
  540. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement