/
GlebM
/
labprog3sem
Обзор
Документация
Войти
/
GlebM
/
labprog3sem
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
prog6.cpp
434 строки
9 KB
GlebM
upload files
06 дек 2024, 01:17
06 дек 2024, 01:17
477145d
Код
Авторство
О чём код?
#include<iostream> using namespace std; class Track { public: string name; string song; int time; }; class Playlist { public: std::string name; int size = 0; Track mas[50]; bool play = 0; }; class Memory { public: std::string name; int band; int gain; }; class AudioPlayer { public: virtual void play(Track A) = 0; virtual void pause() = 0; virtual int stop() = 0; virtual int nextTrack(int Trackplay) = 0; virtual int previousTrack(int Trackplay) = 0; virtual ~AudioPlayer() = default; }; class Playlistable { public: virtual Playlist createPlaylist() = 0; virtual void addTrackToPlaylist(Track track, std::string playlistName) = 0; virtual void removeTrackToPlaylist(Track track, std::string playlistName) = 0; virtual void clearPlaylist(std::string playlistName) = 0; virtual void loadPlaylist(std::string playlistName) = 0; virtual ~Playlistable() = default; }; class Shuffleable { public: virtual void shuffleOn() = 0; virtual void shuffleOff() = 0; virtual ~Shuffleable() = default; }; class Equalizer { public: virtual void setFrequencyBandGain(int bandIndex, int gain) = 0; virtual void resetEqualizer() = 0; virtual void savePreset(std::string name) = 0; virtual void loadPreset(std::string name) = 0; virtual ~Equalizer() = default; }; class LyricsDisplayable { public: virtual void showLirics(Track track) = 0; virtual void hideLyrics(Track track) = 0; virtual void scrollLyrics(Track track) = 0; virtual ~LyricsDisplayable() = default; }; class SleepTimer { public: virtual void setTimer(int minutes) = 0; virtual void cancelTimer() = 0; virtual ~SleepTimer() = default; }; class BasicAudioPlayer : public AudioPlayer, Playlistable { private: int playlistcreate = 1; Playlist mas[50]; int playlistplay = 0; int Trackplay = 0; public: void play(Track A)override { cout << A.name << endl; cout << A.song << endl; cout << A.time << endl; } void pause()override { mas[playlistplay].play = 0; } int stop()override { return 100; }; int nextTrack(int Trackplay)override { if (Trackplay == 49) Trackplay = 0; Trackplay++; return Trackplay; } int previousTrack(int Trackplay)override { if (Trackplay == 0) Trackplay = 49; Trackplay--; return Trackplay; } Playlist createPlaylist()override { Playlist A; return A; } void addTrackToPlaylist(Track track, std::string playlistName)override { int i = 0; while (true) { if (playlistName == mas[i].name) break; if (i == 49) break; i++; } mas[i].mas[mas[i].size] = track; mas[i].size++; } void removeTrackToPlaylist(Track track, std::string playlistName)override { int i = 0; while (true) { if (playlistName == mas[i].name) break; if (i == 49) break; i++; } int g = 0; while (true) { if (track.name == mas[g].mas[g].name) break; if (i == 49) break; g++; } Playlist buf; buf.name = mas[i].name; buf.size = mas[i].size; int k = 0; for (k; k < g; k++) { buf.mas[k] = mas[i].mas[k]; } k++; for (k; k < mas[i].size; k++) { buf.mas[k - 1] = mas[i].mas[k]; } mas[i] = buf; } void clearPlaylist(std::string playlistName)override { Playlist buf; int i = 0; while (true) { if (playlistName == mas[i].name) break; if (i == 49) break; i++; } buf.name = mas[i].name; buf.size = mas[i].size; mas[i] = buf; } void loadPlaylist(std::string playlistName)override { int i = 0; while (true) { if (playlistName == mas[i].name) break; if (i == 49) break; i++; } playlistplay = i; } BasicAudioPlayer(Playlist mas[50]) { this->mas[50] = mas[50]; } BasicAudioPlayer() {}; ~BasicAudioPlayer() {}; }; class AdvancedAudioPlayer :public AudioPlayer, Playlistable, Equalizer { private: int playlistcreate = 1; Playlist mas[50]; Memory buf[50]; int memory = 0; int playlistplay = 0; int Trackplay = 0; int band = 0, gain = 0; public: void play(Track B) override { cout << B.name << endl; cout << B.song << endl; cout << B.time << endl; } void pause()override { mas[playlistplay].play = 0; } int stop()override { return 100; }; int nextTrack(int Trackplay)override { if (Trackplay == 49) Trackplay = 0; Trackplay++; return Trackplay; } int previousTrack(int Trackplay)override { if (Trackplay == 0) Trackplay = 49; Trackplay--; return Trackplay; } Playlist createPlaylist()override { Playlist A; cout << "введите название песни и размер плейлиста" << endl; cin >> A.name; cin >> A.size; for (int i = 0; i < A.size; i++) { cout << "введите название песни, песню и время" << endl; cin >> A.mas[i].name; cin >> A.mas[i].song; cin >> A.mas[i].time; } return A; } void addTrackToPlaylist(Track track, std::string playlistName)override { int i = 0; while (true) { if (playlistName == mas[i].name) break; if (i == 49) break; i++; } mas[i].mas[mas[i].size] = track; mas[i].size++; } void removeTrackToPlaylist(Track track, std::string playlistName)override { int i = 0; while (true) { if (playlistName == mas[i].name) break; if (i == 49) break; i++; } int g = 0; while (true) { if (track.name == mas[g].mas[g].name) break; if (i == 49) break; g++; } Playlist buf; buf.name = mas[i].name; buf.size = mas[i].size; int k = 0; for (k; k < g; k++) { buf.mas[k] = mas[i].mas[k]; } k++; for (k; k < mas[i].size; k++) { buf.mas[k - 1] = mas[i].mas[k]; } mas[i] = buf; } void clearPlaylist(std::string playlistName)override { Playlist buf; int i = 0; while (true) { if (playlistName == mas[i].name) break; if (i == 49) break; i++; } buf.name = mas[i].name; buf.size = mas[i].size; mas[i] = buf; } void loadPlaylist(std::string playlistName)override { int i = 0; while (true) { if (playlistName == mas[i].name) break; if (i == 49) break; i++; } playlistplay = i; } void setFrequencyBandGain(int bandIndex, int gain)override { band = bandIndex; this->gain = gain; } void resetEqualizer()override { band = 0; this->gain = 0; } void loadPreset(std::string name)override { int i = 0; while (true) { if (name == buf[i].name) break; if (i == 49) break; i++; } this->band = buf[i].band; this->gain = buf[i].gain; } void savePreset(std::string name)override { buf[memory].name = name; buf[memory].band = band; buf[memory].gain = gain; memory++; } AdvancedAudioPlayer(Playlist mas[50]) { this->mas[50] = mas[50]; } AdvancedAudioPlayer() {}; ~AdvancedAudioPlayer() {}; }; int main() { setlocale(LC_ALL, "RUS"); Playlist A[100] = { {"album1",2,{{"song1","abcd",2},{"song2","12345",34}},1},{"album2",3,{{"song3","dlkff",38},{"song2","12345",34},{"song4","92803",29}},1} }; BasicAudioPlayer basicaudio; AdvancedAudioPlayer advaudio; string name; int key=-1; int key2 = -1; int key1; while (key != 0) { int index = -1; cout << "выберите действие: 0-выйти 1-выбрать альбом 2-создать альбом" << endl; cin >> key; switch (key) { case 1: cout << "введите название альбома" << endl; cin >> name; for (int i = 0; i < 100; i++) { if (name == A[i].name) index = i; } basicaudio.play(A[key + 1].mas[key + 1]); break; case 2: for (int i = 0; i < 100; i++) if (A[i].size < 100 and A[i].size >0) { A[i] = advaudio.createPlaylist(); index = i; } break; }; if (index != -1) cout << "выберите 1 - прослушать плейлист целиком 2 - выбрать песню" << endl; cin >> key1; if (key1 == 1) { cout<<A[index].name<<endl; for (int i = 0; i < A[index].size; i++) { basicaudio.play(A[index].mas[i]); } } else { cout << A[index].name << endl; int i = 0; while (i != 0) { cout << "1-предыдущий 2-следующий 0-закончить" << endl; cin >> key2; advaudio.play(A[index].mas[i]); if (key2==2) i = advaudio.nextTrack(i); if (key2 == 1) i = advaudio.previousTrack(i); } } } }