Задачи за упражнение
Вариант 2
A) Да се дефинира клас Song, описващ песен с характеристики:
име на изпълнител – символен низ с произволна дължина, записан в динамичната памет;
идентификационен номер на албум, в който ще бъде включена – точно 7 различни символа, съответстващи на цифри и поне 3 главни латински букви;
място в албума – положително число.
място в музикална класация -цяло число от 1 до 100.
Да се дефинират подходящи конструктори, селектори и мутатори и др.. Да се направи проверка за валидност на данните.
Б) Да се дефинира клас MusicAlbum, описващ албум с характеристики:
идентификационен номер на албум – точно 7 различни символа, съответсващи на цифри и поне 3 главни латински букви;
дата и час на издаване – символен низ с дължина точно 16, записан във формат “yyyy-mm-dd hh:mm”.
масив от песни, участващи в албума. Броят на песните, които могат да участват е <= 20.
Да се дефинират следните член-функции:
Приятелска функция bool newSong (const Song& ...), която проверява дали указаната като аргумент песен е за текущия албум. За сравнение да се използва номерът на албума. Ако условието е изпълнено, песента се записва в масива от песни на албума. Позицията, на която трябва да бъде записана песента се определя от полето място в албума. Ако песента не е за текущия албум, функцията връща лъжа.
int getSongCount () const, която връща като резултат броя на песните, които са включени в албума.
Да се дефинира функция main(), в която:
да се създаде албум с номер 679ADZ8, за дата 05-07-2019 в 19:30;
да се регистрират 2 песни от Поли Генова и Владимир Ампов - Графа, съответно на места 6 и 2;
да се изведе информация за броя на песните, които са в албума.
В) Един албум от песни е с по-висок ранг от друг, ако сумата от местата на песните в музикалната класация, участващи в него е по-малък от сумата на местата на песните в другия албум.
Да се дефинира operator>, който определя дали един албум е с по-висок ранг от друг.
Да се дефинира operator*, който слива два албума като създава и връща нов. Сливането е възможно само ако няма регистрирана песен с един и същ номер в двата албума. Идентификационният номер на новия албум взима първите 4 символа от първия албум и останалите 3 символа от номера на втория албум.
Да се дефинира динамичен масив от музикални албуми. Да се намери поредният номер на песента с най-висок ранг в дефинирания масив.
==========================================
* Решенията на всички задачи трябва да спазват ООП парадигмата вкл. константност на методите, абстракция, енкапсулация. Заделянето и освобождаването на памет (ако има такова) са ваша отговорност. Можете да дефинирате произволен брой помощни функции, спазвайки правилата за достъп.
Задача 1. Дефинирайте клас Time за работа с часове, минути и секунди. Класът трябва да включва:
Два конструктора - по подразбиране, който задава стойност 00:00:00 (0 часа, 0 минути и 0 секунди) и конструктор със съответните параметри.
Метод, който увеличава часа с 1 секунда.
Метод isPartyTime(), който връща истина, само ако часът е между 22:30 и 01:00,
Метод, който връща обект от тип Time, който съдържа колко време остава до 24:00.
Задача 2. Да се дефинира клас Item, който пази информация за име (символен низ с произволна дължина) и цена (реално число) на дадена стока. Да се реализират съответните конструктори, методи за достъпване и промяна на полетата.
Да се дефинират методи за извеждане на информацията за дадена стока и за проверка на това дали две стоки са еквивалентни (сравнение се извършва по двете полета).
* Допуска се предефиниране на << и ==.
Реализирайте клас Shop, който съдържа динамичен масив от стоки.
Класът има следните методи:
bool addItem(const Item&) - добавя стока в магазина и връща истина, ако добавянето е успешно и лъжа в противен случай.
Не се изисква преоразмеряване на масива.bool findItem(const Item&) - търси дадена стока в магазина.
void saveToFile(const char* fileName) - записва информацията за стоките в магазина, подредени по цена в намаляващ ред, в текстов файл с последователен достъп и име fileName.
Конструктор с един параметър от тип fstream, който по подаден файл с последователен достъп (fileName) създава магазин със стоките, които са записани във файла. Разделението между полетата на една стока е <точка>.
Реализирайте клас Supermarket, който представлява магазин с определено име (бранд) и брой служители.