Advertisement
Tvor0zhok

Наследование

Apr 8th, 2021 (edited)
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.90 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <iomanip>
  4. #include <string>
  5. #include <vector>
  6. using namespace std;
  7.  
  8. class CD
  9. {
  10. //структура песни: имя песни, ее автор и длительность
  11. struct Song
  12. { string name, author, length; };
  13.  
  14. //элементы, передаваемые классу Catalog
  15. protected:
  16.  
  17. //вектор disk всех песен на диске
  18. vector <Song> disk;
  19.  
  20. //вспомогательная функция для вывода на экран
  21. string space (int i) { return (i / 10)? " ": " "; }
  22.  
  23. public:
  24.  
  25. //имя диска
  26. string name;
  27.  
  28. //конструктор по умолчанию
  29. CD() {}
  30.  
  31. //еще один конструктор
  32. CD (string n) : name(n) {}
  33.  
  34. //перегрузка функции push: добавление песни в конец диска или добавление песни в конкретную позицию
  35. void push (string name, string author, string length)
  36. {
  37. Song s = { name, author, length };
  38.  
  39. disk.push_back(s);
  40. }
  41.  
  42. void push (string name, string author, string length, int pos)
  43. {
  44. Song s = { name, author, length };
  45.  
  46. disk.insert(disk.begin() + pos, s);
  47. }
  48.  
  49. //удаление песни из диска
  50. void erase (int pos) { disk.erase(disk.begin() + pos); }
  51.  
  52. //просмотр диска
  53. void view ()
  54. {
  55. cout << name << "\n\n";
  56.  
  57. cout << left << setw(4) << "No." << setw(26) << "Title" << setw(45) << "Artists" << setw(6) << "Length\n";
  58.  
  59. for (int i = 0; i < disk.size(); ++i)
  60. cout << i + 1 << '.' << space(i + 1) << setw(26) << disk[i].name << setw(45) << disk[i].author << setw(6) << disk[i].length << '\n';
  61. }
  62.  
  63. //просмотр всех песен данного автора
  64. void check (string artist, int &count)
  65. {
  66. for (int i = 0; i < disk.size(); ++i)
  67. if (disk[i].author.find(artist) != string :: npos)
  68. {
  69. ++count;
  70.  
  71. if (count == 1) cout << '\n' << left << setw(4) << "No." << setw(17) << "CD name" << setw(26) << "Title" << setw(45) << "Artists" << setw(6) << "Length\n";
  72.  
  73. cout << left << count << "." << space(i + 1) << setw(17) << name << setw(26) << disk[i].name << setw(45) << disk[i].author << setw(6) << disk[i].length << '\n';
  74. }
  75. }
  76. };
  77.  
  78. class Catalog: public CD
  79. {
  80. //вектор компакт-дисков
  81. vector <CD> disks;
  82.  
  83. void checkName (string name, bool &b, int &pos)
  84. {
  85. for (int i = 0; i < disks.size(); ++i)
  86. if (disks[i].name == name) { pos = i; b = 1; break; }
  87. }
  88.  
  89. public:
  90.  
  91. //конструктор по умолчанию
  92. Catalog() {}
  93.  
  94. //перегрузка функции push: добавление диска в конец вектора, добавление песни в диск с именем n
  95. void push (CD disk) { disks.push_back(disk); }
  96.  
  97. void push (string n, string name, string author, string length)
  98. {
  99. bool b = 0; int pos; checkName(n, b, pos);
  100.  
  101. if (b) disks[pos].push(name, author, length);
  102. else cout << "Error : there are no CD with that name\n\n";
  103. }
  104.  
  105. //перегрузка функции erase: удаление диска из вектора по названию диска и удаление песни из диска
  106. void erase (string name)
  107. {
  108. bool b = 0; int pos; checkName(name, b, pos);
  109.  
  110. if (b) disks.erase(disks.begin() + pos);
  111. else cout << "Error : there are no CD with that name\n\n";
  112. }
  113.  
  114. void erase (string name, int p)
  115. {
  116. bool b = 0; int pos; checkName(name, b, pos);
  117.  
  118. if (b) disks[pos].erase(p);
  119. else cout << "Error : there are no CD with that name\n\n";
  120. }
  121.  
  122. //перегрузка функции view: просмотр конкретного компакт-диска по номеру позиции или по названию диска
  123. //или просмотр целого диапазона дисков
  124. void view (int pos)
  125. {
  126. disks[pos - 1].view();
  127. cout << '\n';
  128. }
  129.  
  130. void view (string name)
  131. {
  132. if (name == "all") { view(1, disks.size()); return; }
  133. else
  134. {
  135. for (int i = 0; i < disks.size(); ++i)
  136. if (disks[i].name == name) { disks[i].view(); cout << '\n'; return; }
  137.  
  138. cout << "Your search - " << name << " - did not match any CD\n\n";
  139. }
  140. }
  141.  
  142. void view (int pos1, int pos2)
  143. {
  144. for (int i = pos1 - 1; i < pos2; ++i, cout << '\n')
  145. disks[i].view();
  146. }
  147.  
  148. //просмотр всех песен данного автора
  149. void check (string author)
  150. {
  151. cout << "Showing results for " << author << ":\n";
  152.  
  153. int count = 0;
  154.  
  155. for (int i = 0; i < disks.size(); ++i)
  156. disks[i].check(author, count);
  157.  
  158. if (count == 0) cout << "There are no results for your search\n\n";
  159. else cout << '\n';
  160. }
  161. };
  162.  
  163. int main()
  164. {
  165. ifstream fin ("input.txt");
  166.  
  167. Catalog database;
  168.  
  169. while(fin.peek() != EOF)
  170. {
  171. string s; fin >> s;
  172.  
  173. CD disk(s);
  174.  
  175. for (int i = 0; i < 5; ++i)
  176. {
  177. string n, a, l;
  178.  
  179. fin >> n >> a >> l;
  180.  
  181. disk.push(n, a, l);
  182. }
  183.  
  184. database.push(disk);
  185.  
  186. }
  187.  
  188. fin.close();
  189.  
  190. cout << "Первоначальный каталог компакт-дисков:\n\n";
  191.  
  192. database.view("all"); //или database.view(1, 6);
  193.  
  194. cout << "Просмотрим содержимое компакт-дисков с заданными именами: Top_Songs_2016 и Top_Songs_2021:\n\n";
  195.  
  196. database.view("Top_Songs_2016");
  197. database.view("Top_Songs_2021");
  198.  
  199. cout << "Удалим из каталога компакт-диск Top_Songs_2010 и вместо него добавим диск Top_Songs_2020:\n\n";
  200.  
  201. database.erase("Top_Songs_2010");
  202.  
  203. CD disk("Top_Songs_2020");
  204.  
  205. cout << "Введите песни из диска Top_Songs_2020:\n";
  206. //Top_Songs_2020 (Ctrl + Shift + V)
  207. //Blinding_Lights The_Weeknd 3:22
  208. //Circles Post_Malone 3:34
  209. //The_Box Roddy_Ricch 3:16
  210. //Don't_Start_Now Dua_Lipa 3:03
  211. //Rockstar DaBaby_ft._Roddy_Ricch 3:01
  212. for (int i = 0; i < 5; ++i)
  213. {
  214. string n, a, l;
  215.  
  216. cin >> n >> a >> l;
  217.  
  218. disk.push(n, a, l);
  219. }
  220.  
  221. database.push(disk);
  222.  
  223. cout << "\nВ диск Top_Songs_2019 добавим еще 5 песен:\n";
  224. //Happier Marshmello_&_Bastille 3:34
  225. //7_Rings Ariana_Grande 2:58
  226. //Talk Khalid 3:17
  227. //Sicko_Mode Travis_Scott 5:12
  228. //Sucker Jonas_Brothers 3:01
  229. for (int i = 0; i < 5; ++i)
  230. {
  231. string n, a, l;
  232.  
  233. cin >> n >> a >> l;
  234.  
  235. database.push("Top_Songs_2019", n, a, l);
  236. }
  237.  
  238. cout << "\nИз диска Top_Songs_2017 удалим 2 последние песни\n\n";
  239. database.erase("Top_Songs_2017", 4);
  240. database.erase("Top_Songs_2017", 3);
  241.  
  242. cout << "Теперь наш каталог компакт-дисков выглядит так:\n\n";
  243.  
  244. database.view("all");
  245.  
  246. cout << "Найдем все песни исполнителей Drake и Post_Molone:\n\n";
  247.  
  248. database.check("Drake");
  249. database.check("Post_Molone");
  250.  
  251. return 0;
  252. }
  253.  
  254. //input.txt
  255. Top_Songs_2015
  256. Uptown_Funk! Mark_Ronson_ft._Bruno_Mars 4:30
  257. Thinking_Out_Loud Ed_Sheeran 4:41
  258. See_You_Again Wiz_Khalifa_ft._Charlie_Puth 3:49
  259. Trap_Queen Fetty_Wap 3:35
  260. Sugar Maroon_5 3:55
  261.  
  262. Top_Songs_2016
  263. Love_Yourself Justin_Bieber 3:53
  264. Sorry Justin_Bieber 3:20
  265. One_Dance Drake_ft._WizKid_&_Kyla 2:54
  266. Work Rihanna_ft._Drake 3:39
  267. Stressed_Out twenty_one_pilots 3:22
  268.  
  269. Top_Songs_2017
  270. Shape_Of_You Ed_Sheeran 3:53
  271. Despacito Luis_Fonsi_&_Daddy_Yankee_ft._Justin_Bieber 3:47
  272. That's_What_I_Like Bruno_Mars 3:26
  273. Humble. Kendrick_Lamar 2:57
  274. Something_Just_Like_This The_Chainsmokers_&_Coldplay 4:07
  275.  
  276. Top_Songs_2010
  277. TiK_ToK Ke$ha 3:20
  278. Need_You_Now Lady_Antebellum 4:37
  279. Hey,_Soul_Sister Train 3:37
  280. California_Gurls Katy_Perry_ft._Snoop_Dogg 3:56
  281. OMG Usher_ft._will.i.am 4:45
  282.  
  283. Top_Songs_2018
  284. God's_Plan Drake 3:18
  285. Perfect Ed_Sheeran 4:23
  286. Meant_To_Be Bebe_Rexha_&_Florida_Georgia_Line 2:43
  287. Havana Camila_Cabello_ft._Young_Thug 3:36
  288. Rockstar Post_Malone_ft._21_Savage 3:38
  289.  
  290. Top_Songs_2019
  291. Old_Town_Road Lil_Nas_X_ft._Billy_Ray_Cyrus 1:53
  292. Sunflower Post_Malone_&_Swae_Lee 2:39
  293. Without_Me Halsey 3:22
  294. Bad_Guy Billie_Eilish 3:14
  295. Wow. Post_Malone 2:29
  296.  
  297. //untitled.txt
  298. Blinding_Lights The_Weeknd 3:22
  299. Circles Post_Malone 3:34
  300. The_Box Roddy_Ricch 3:16
  301. Don't_Start_Now Dua_Lipa 3:03
  302. Rockstar DaBaby_ft._Roddy_Ricch 3:01
  303.  
  304. Happier Marshmello_&_Bastille 3:34
  305. 7_Rings Ariana_Grande 2:58
  306. Talk Khalid 3:17
  307. Sicko_Mode Travis_Scott 5:12
  308. Sucker Jonas_Brothers 3:01
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement