Базові принципи об'єктно-орієнтованого програмування

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКТА
Факультет:
КН
Кафедра:
Не вказано

Інформація про роботу

Рік:
2023
Тип роботи:
Курсова робота
Предмет:
Програмування алгоритмів цифрової обробки сигналів та зображень
Варіант:
1 10 13

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» Курсова робота з дисципліни «Програмування, частина 2 (Об’єктно-орієнтоване програмування) на тему: «Базові принципи об’єктно-орієнтованого програмування» Індивідуальне завдання : «Книгарня» Анотація Курсова робота на тему: «Базові принципи об’єктно-орієнтованого програмування». даній курсовій роботі було розроблено програму з використанням мови програмування С++ та підходу об'єктно-орієнтованого програмування. Програма включала роботу з файлами, використання класів, обробку числової інформації, а також маніпуляції з векторами та об'єктами. Курсова робота містить опис виконання задачі, включаючи вибір технологій об'єктно-орієнтованого програмування, аналіз та розробку алгоритму, програмну реалізацію, відлагодження та тестування програми, аналіз продуктивності, висновки та лістинг програми. 2 Зміст Анотація 2 Завдання на курсову роботу 4 Огляд та обґрунтовування вибору технологій об'єктно-орієнтованого програмування 5 Переваги мови C++ 7 Недоліки мови C++ 7 2. Аналіз та розробка алгоритму згідно індивідуального завдання 10 2.5. Опис алгоритму у псевдокоді 14 3.1.1. Опис структур даних програми 18 3.1.3. Опис реалізації основних функцій/методів 18 Відлагодження та тестування реалізованої програми згідно індивідуального завдання 19 4.1. Опис структури програми 19 4.2. Відлагодження та тестування програми в цілому 19 19 Список використаної літератури 25 Опис програмної реалізації алгоритму 26 3 Завдання на курсову роботу Тема курсової роботи – «Книгарня». Для розробки курсової роботи не використовувалися зовнішні дані з Інтернету, а були створені власноруч. При підготовці вхідних даних були враховані вимоги, що висуваються до курсової роботи. Аналіз та розробка алгоритму згідно індивідуального завдання Головне меню програми, що включає такі можливості: Ввійти Зареєструватися Вихід Якщо користувач вибере “Ввійти” , то повинен буде увести раніше створені “Логін” та “Пароль”. Якщо користувач вибере “Зареєструватися” , то з’явиться можливість увести “Логін” та “Пароль”. Якщо користувач вибере “Вихід” , то програма закінчить свою роботу. Після входу в акаунт у користувача постає вибір: (всього їх 3) Переглянути каталог Перегляд корзини Customer Детальний розгляд подальшої програми знаходиться на сторінці () 4 Огляд та обґрунтовування вибору технологій об'єктно-орієнтованого програмування англ. Object-oriented programming, OOP) . Мову С розробив Деніс Рітчі у 1972 році для програмування в операційній системі Linux. ЯКІ Є ОБ'ЄКТНО-ОРІЄНТОВАНІ МОВИ ПРОГРАМУВАННЯ: Об’єктно-орієнтовані мови програмування є потужним інструментом в руках будь-якого девелопера. Використовуючи об’єкти, класи та структури даних, інженери створюють надійні, ефективні та практичні програми. Найкращими об’єктно-орієнтованими мовами програмування ввжаються Java, C++ і Python. З ними розробники можуть створювати більш чутливі та інтерактивні додатки, що, своєю чергою, дозволяє користувачам мати приємніший і продуктивніший досвід з програмою. Також популярними мовами ООП є Ruby, C# і PHP. ПЕРЕВАГИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ: Об’єктно-орієнтоване програмування революціонізувало спосіб написання коду. Від великомасштабних корпоративних програм до невеликих додатків — ООП забезпечує потужний і гнучкий підхід до розробки. З ним девелопери мислять в термінах об’єктів, класів і методів, роблячи код більш інтуїтивно зрозумілим і простішим в обслуговуванні. Окрім того, ООП дає змогу розробникам створювати ефективний і «багаторазовий» код, скорочуючи час і вартість розробки в цілому, а також додавати нові функції до існуючого коду. ОСНОВНІ ПРИНЦИПИ ООП: цьому світі будь-що є об’єктом, чи не так? Ну, майже все. Однак, саме ствердження про те, що все є об’єктом, лежить в основі ООП. Вся парадигма об'єктноорієнтованого програмування — це концепція об'єктів. Ці об’єкти містять дані, які ми також називаємо атрибутами або властивостями, і методи. Об'єкти можуть взаємодіяти один з одним за чотирма принципами: інкапсуляція, наслідування, поліморфізм та абстракція. 5 1.2 Фундаментальні поняття Ключові терміни: глобальні змінні, коментар, локальні змінні, параметри за замовчуванням, перевантажені функції, перевизначення функцій, перекриття функцій, покажчик, посилання, прототип функції, структури, функції, ідентифікатори. Інкапсуляція (Encapsulation) Інкапсуляція — це принцип ООП, який полягає в приховуванні деталей реалізації об'єктів від «зовнішнього світу». Цей принцип стверджує, що вся важлива інформація міститься всередині об’єкта, а назовні доступна тільки вибрана інформація. Реалізація та стан кожного об’єкта приватно зберігаються всередині визначеного класу. Інші об'єкти не мають доступу до цього класу або повноважень вносити зміни. Вони ладні взаємодіяти лише з певною кількістю відкритих функцій або методів. Подібне приховування даних гарантує безпеку програми та контроль над зміною стану об’єкта, знижує ризик помилок та робить програму більш зрозумілою. Наслідування (Inheritance) Наслідування — це принцип, який дозволяє створювати нові класи на основі наявних (батьківських класів), з можливістю перевизначення або доповнення їх властивостей та методів. Програми можуть містити тисячі рядків коду, який часто складно підтримувати. Ще одна проблема, з якою часто стикаються девеловпери, полягає в тому, що у програмах є схожі об'єкти. Вони можуть мати спільний код або логіку, але вони не зовсім однакові. Якби щоразу доводилося створювати абсолютно новий об’єкт для кожного об’єкта, який використовується в програмі, це призвело б до збільшення та ускладнювання коду. Щоб запобігти цьому, використовуються принцип наслідування. З його допомогою розробник може використати логіку батьківського класу у дочірньому. Це спрощує розробку та зменшує кількість дублювального коду. Поліморфізм (Polymorphism) Поліморфізм — це принцип, який в певному сенсі доповнює наслідування. Тобто об'єкти різних класів можуть виконувати дії з однаковою назвою, використовуючи різний код. Наприклад, метод «показати інформацію» може відображати різні дані про об'єкти типу «автомобіль», «літак» або «корабель». Окрім того, поліморфізм допомагає створювати більш гнучкі та модульні програми, й в цілому спрощує процес розробки, оскільки можна створювати загальні методи та функції, які можуть використовуватися для різних типів об'єктів. Абстракція (Abstraction) 6 Абстракція допомагає зосередитися на головних аспектах системи та ігнорувати менш важливі деталі, які не впливають на головні функції. Це дозволяє створювати більш зрозумілі програми. Абстракцію можна розглядати як розширення до інкапсуляції. Знову ж таки, візьмемо програми, що містять тисячі рядків коду. Завдяки принципу абстракції кожен об’єкт відкриває лише певний механізм для використання. Таким чином, код всередині значною мірою стає нерелевантним для інших об’єктів. Наприклад, у програмі для зберігання інформації про кіно можна створити клас «Фільм», який надає доступ тільки до найбільш важливих деталей про ту чи іншу стрічку, скажімо, до назви, року випуску та жанру, приховуючи менш важливі деталі, як от кадри чи технічні параметри. 1.3 Переваги та недоліки С++ Переваги мови C++ Стандартизація. C++ визначається міжнародним стандартом а отже не контролюється якоюсь одною фірмою чи людиною. Швидкодія. Швидкість роботи програм на С++ практично не поступається програмам на С, хоча програмісти отримали в свої руки нові можливості і нові засоби. Ефективність. Рішення розроблені на С++ можуть використовувати мінімальну необхідну кількість ресурсів таких як пам'ять, ЦПУ, енергія та інші. Масштабованість. На мові C++ розробляють програми для найрізноманітніших платформ і систем, які варіюються за розміром від кількох до мільйонів рядочків коду. Можливість роботи на низькому рівні з пам'яттю, адресами, портами. (Що, при необережному використанні, може легко перетворитися на недолік.) Можливість створення узагальнених алгоритмів для різних типів даних, їхня спеціалізація, і обчислення на етапі компіляції, з використанням шаблонів. Підтримуються різні стилі та технології програмування, включаючи традиційне процедурне програмування, ООП, узагальнене програмування, метапрограмування (шаблони, макроси). Недоліки мови C++ Наявність безліч можливостей, що порушують принципи типобезпеки приводить до того, що в С++ програми може легко закрастися важковловима помилка. Замість контролю з боку компілятора розробники вимушені дотримуватися вельми нетривіальних правил кодування. По суті, ці правила обмежують С++ рамками якоїсь безпечнішої підмови. Більшість проблем типобезпеки С++ успадкована від С, але важливу роль в цьому питанні грає і відмова автора мови від ідеї 7         використовувати автоматичне управління пам'яттю (наприклад, збірку сміття). Так візитною карткою С++ стали вразливості типу «переповнювання буфера». Погана підтримка модульності. Підключення інтерфейсу зовнішнього модуля через препроцесорну вставку заголовного файлу (#include) серйозно уповільнює компіляцію, при підключенні великої кількості модулів. Для усунення цього недоліку, багато компіляторів реалізують механізм прекомпіляції заголовних файлів (англ. Precompiled Headers). Недостача інформації про типи даних під час компіляції (CTTI). Мова C++ є складною для вивчення і для компіляції. Деякі перетворення типів неінтуїтивні. Зокрема, операція над беззнаковим і знаковим числами видає беззнаковий результат. Препроцесор С++ (успадкований від C) дуже примітивний. Це приводить з одного боку до того, що з його допомогою не можна (або важко) здійснювати деякі завдання метапрограмування, а з іншого, внаслідок своєї примітивності, він часто приводить до помилок і вимагає багато дій з обходу потенційних проблем. Деякі мови програмування (наприклад, Scheme і Nemerle) мають набагато могутніші і безпечніші системи метапрограмування (також звані макросами, але макроси С/С++ вони мало нагадують). кінця 1990-х в спільноті С++ набуло поширення так зване метапрограмування на базі шаблонів. По суті, воно використовує особливості шаблонів C++ в цілях реалізації на їхній базі інтерпретатора примітивної функціональної мови програмування, що виконується під час компіляції. Сама по собі ця можливість вельми приваблива, але, внаслідок вищезгаданого, такий код вельми важко сприймати і зневаджувати. Мови Lisp/Scheme, Nemerle і деякі інші мають могутніші і водночас простіші для сприйняття підсистеми метапрограмування. Крім того, в мові D реалізована порівнянна за потужністю, але значно простіша в застосуванні підсистема шаблонного метапрограмування. Хоча декларується, що С++ мультипарадигмена мова, реально в мові відсутня підтримка функціонального програмування. Частково, даний пропуск усувається різними бібліотеками (Loki, Boost) що використовують засоби метапрограмування для розширення мови функціональними конструкціями (наприклад, підтримкою лямбд/анонімних методів), але якість подібних рішень значно поступається якості вбудованих у функціональні мови рішень. Такі можливості функціональних мов, як зіставлення зі зразком взагалі украй складно емулювати засобами метапрограмування. 8 1.4 Теорія про діаграми Діаграма прецедентів (англ. Use case diagram) — в UML, діаграма, на якій зображено відношення між акторами та прецедентами в системі. Діаграма прецедентів показує різні варіанти використання та різні типи користувачів системи і часто супроводжується іншими типами діаграм. Варіанти використання представлені колами або еліпсами. Актори (дійові особи) часто зображуються у вигляді паличок. Діагама послідовності (англ. sequence diagram) — різновид діаграми в UML. Діаграма послідовності відображає взаємодії об'єктів впорядкованих за часом. Зокрема, такі діаграми відображають задіяні об'єкти та послідовність  надісланих повідомлень.    Діаграма класів (англ. Class diagram) — статичне представлення структури моделі в UML. Відображає статичні (декларативні) елементи, такі як: класи, типи даних, їх зміст та відношення. Діаграма класів може містити позначення для пакетів та може містити позначення для 9 вкладених пакетів. Також, діаграма класів може містити позначення деяких елементів поведінки, однак їх динаміка розкривається в інших типах діаграм. Діаграми об’єктів (англ. Object diagram) — в UML, діаграма, що відображає об'єкти та їх зв'язки в певний момент часу.[1] Діаграма об'єктів може розглядатись як окремий випадок діаграми класів, на якій можуть бути представлені як класи, так і екземпляри (об'єкти) класів. Схожою за змістом є діаграма взаємодії (англ. Collaboration diagram). Аналіз та розробка алгоритму згідно індивідуального завдання Основний алгоритм моєї програми розташований у файлі класу головного вікна програми. Хоча це не є найкращим рішенням, у зв'язку з моїм обмеженим досвідом у розробці програм з інтерфейсом, я був змушений прийняти таке рішення для спрощення завдання. Проте, це призвело до проблем зі складністю розробки алгоритму. Сами по собі методи та функції програми не є складними, але їх поєднання програмному коді створило дуже зв'язаний і багатофункціональний код, який можна вважати складним через його багаторівневу структуру. У цьому алгоритмі використовуються оператори циклу (for, while), умовний оператор (if), функції для роботи з класами та функції для обробки користувацьких дій у меню. Для роботи з класами також створені окремі вікна меню, що допомагають у обробці різних типів даних. Під час виконання маніпуляцій з кодом дані в об'єктах змінюються динамічно в залежності від потреб користувача. 10 2.2 Структурний аналіз предметної області Рис.1.1 Вигляд предметної галузі Рис.2 Діаграма прецедентів 11 2.3 Аналіз об’єктно-орієнтованої моделі проекту Рис.3 Діаграма класів Розглянемо гілку класів: Клас Customer містить інформацію про користувача і наступні властивості: Зареєструвати користувача (потрібно ввести логін та пароль, а також дані з класу Address і Card). Вхід (тобто ввести логін і пароль, які користувач попередньо зареєстрував). Вихід (здійснює вихід із програми). 12 Клас Book містить інформацію про книги, та містить наступні властивості: Назва, жанр, автор і ціна книги, котрі користувач може обрати. Клас Cart містить: Методи для додавання, видалення і виводу корзини у консоль. Клас Address містить: Регіон, місто, вулицю та ZIP code. Клас Card містить: Номер карти, CVV, валідність та пінкод. Клас Order містить: Метод розміщення товару, переглянути деталі та валідності. 2.4 Вибір інтерфейсу проекту та пунктів меню, які він реалізовує Після запуску програми в консолі з’являється головне меню, за допомогою якого ми можемо перейти в 4 інші підменю та вибрати дію, що хочемо зробити: Ввійти bool login(); Вкажіть логін: Вкажіть пароль: Зареєструватися void registerNewUser(); 1) Вкажіть логін: Вкажіть пароль: Вкажіть область: Вкажіть місто: 13 Вкажіть вулицю: Вкажіть почтовий індекс: Бажаєте ввести дані карти зараз? Так Ні Вийти Якщо обрати операцію “Зареєструватися”, то у консолі з’явиться операція, яку узагальнено можна назвати “Повна реєстрація”. Введені данні зберігаються всередині програми і надалі. Якщо обрати операцію «Ввійти», то у консолі з’явиться операція «Вкажіть логін:», а після операція «Введіть пароль:». Дані для цієї операції беруться з попередньо зарезервованих в панелі ’’Зареєструватися’’. Якщо обрати операцію «Вийти», то користувач вийде з програми. Після операції “Ввійти”, з’являється меню, котре дозволяє вибрати книги, переглянути корзину, дані про користувача, та вихід. Якщо обрати операцію “Вибрати книги”, то у користувача з’явиться можливість додати книгу, котру користувач хоче купити, до кошика. Якщо обрати операцію “Переглянути корзину”, то у користувача з'явиться можливість видалити книгу з кошика, або оформити замовлення. Якщо обрати операцію “Вихід”, то користувач вийде з програми. Усі введені дані з консолі зберігаються в файлі. Потім ці дані зчитуються з файлу і піддаються обробці залежно від вибраної користувачем дії. 2.5. Опис алгоритму у псевдокоді Головне меню Вхід 14 Реєстрація Вихід Випадок 1: { Вхід Ввести логін Ввести пароль Реєстрація Ввести логін Ввести пароль Вкажіть область Вкажіть місто Вкажіть вулицю Вкажіть почтовий індекс Бажаєте ввести дані карти зараз? Так Ні Вибір 1 Введіть номер карти Введіть CVV карти Введіть термін дії карти(місяць) Введіть термін дії карти(рік) Введіть пінкод Вибір 2 Перемикач: Обрати книги, корзину або інформацію Перемикач: Додати книгу Вести номер книги Переглянути товар Видалити товар Ввівши номер книги Вийти } Випадок 2: 15 { Ввійти Ввести неправильне логін Ввести неправильний пароль На екрані виведе неправильний логін або пароль Вийти з програми } 2.6. Розробка граф-схеми алгоритму 16 Рис. 4 Блок-схема проєкту 17 Програмна реалізація алгоритму згідно індивідуального завдання 3.1. Опис послідовної програмної реалізації алгоритму 3.1.1. Опис структур даних програми Log – Логін. Password – Пароль. totalPrice – загальна ціна всіх книг. Title/author/price/genre – опис книг. placeOrder – розміщення замовлення. printRewiew – виведення відгук. addRewiew – додавання огляду. registerNewUser – реєстрація нового користувача. getBooksInfo – отримати інформацію про книги. searchBooks – пошук книг по жанрах. 3.1.3. Опис реалізації основних функцій/методів getBooksInfo(); - Заповнити вектор книг з файлу  writeBooksToFile(); - Записати книгу у файл  printBooks(vector<Book> books); - Вивести книги  searchBooks(); - Знайти книгу  addToCart(vector<Book> books); - Добавити книги в кошик  removeFromCart(); - Забрати книгу з кошика  getTotal(); - Отримати загальну ціну  showCart(); - Вивести кошик  registerNewUser(); - Реєстрація нового користувача  bool& login(); - Вхід у програму  printRewiew(); - Вивести огляд  addRewiew(Customer customer); - Написати огляд   18 getOrderDetails(Customer customer);  - Вивести деталі замовлення validCardCheck(Customer& customer);  - Перевірка карти за пінкодом Відлагодження та тестування реалізованої програми згідно індивідуального завдання 4.1. Опис структури програми Основна відмінність мови програмування C++ від інших мов, таких як Java чи C#, полягає у поєднанні класичної мови C з можливістю використання об'єктно-орієнтованого підходу. Структура звичайної консольної програми на C++ має наступний вигляд: Препроцесор Процедури та функції main() Препроцесор - це програмне забезпечення, яке виконується перед компіляцією програми і містить набір інструкцій. Директива #include використовується для включення вмісту іншого файлу у поточний файл програми. При використанні цієї директиви, вміст включеного файлу замінює директиву #include у поточному файлі. Директива #define використовується для заміни певної послідовності символів на іншу послідовність, що визначена користувачем. Ця заміна відбувається в усіх місцях коду програми, де зустрічається вказана послідовність. Основною функцією, яку виконує програма на C++, є `main()`. Однак, для використання будь-якої іншої функції, потрібно її оголосити перед її використанням. У C++ неможливо оголосити функцію всередині іншої функції. На відміну від цього, компілятори С мають можливість розділити оголошення функції від її реалізації. Це означає, що перед використанням функції ви можете описати її, а саму реалізацію написати в іншому місці програми. 4.2. Відлагодження та тестування програми в цілому 19 Результат перевірки правильності функціонування програми в цілому. Як видно на рисунку, всі тести пройшли успішно. Кожна функція виконується моментально без затрати часу. Результати роботи програми: Рис. 5.1 Відображення початкового меню програми. цього меню програми користувачу дається можливість зареєструватися, або увійти в аккаунт для подальшої роботи. (рис.5.1) Рис. 5.2 Вхід у програму Рис. 5.3 Реєстрація нового користувача 20 Рис. 5.4 Відображення головного меню У даному підменю користувачу надається можливість: Переглянути каталог наявних книг. Корзина з книгами. Меню “Customer”. З інформацією про користувача. Користувач може обрати один із пропонованих варіантів для подальшої роботи.(Рис.5.4.) Рис. 5.5 Відображення кількості наявних книг. Включаючи: Назву, Жанр (по якому здійснюється пошук книг), Автор та Ціну. Наступні можливі дії: Додавання власної книги. Якщо ви маєте книгу, котру хотіли б бачити у нашій програмі , за допомогою цій операції у вас є така можливість. Здійснити пошук по жанрах. За допомогою цієї функції здійснюється пошук залежно від введеного жанру користувачем. Для додавання книги до кошика. 21 Здійснюється додавання бажаних книг до файлу (залежить від № книги). Для виходу у головне меню. Здійснюється вихід у головне меню. (рис 5.4) Рис. 5.6 Додавання книг до кошика Рис. 5.7 Пошук книг по жанру Рис. 5.8 Кошик Видалення з кишика. Вилучення з файлу небажаної книги. Бажаєте оформити замовлення. Для повернення до пошуку книг Перехід у головне меню (рис. 5.4) 22 Рис. 5.9 Меню “Customer” Оформити замовлення. Здійснюється оформлення замовлення. Переглянути відгуки про книги. Надається можливість перед покупкою дізнатися відгуки про книгу. Додати відгук про книги. Можливість залишити відгук про прочитану книгу. Переглянути доступні адреси. Переглянути адресу, котра була введена при реєструванні користувачем. Повернутися до головного меню. Перехід у головне меню (рис. 5.4) Рис 5.10 Вибір №2 Рис 5.11 Оформлення замовлення 23 Рис 5.12 Розміщення замовлення 24 Висновок Під час написання моєї курсової роботи я практично використовувала мої знання з об'єктно-орієнтованого програмування та глибше осмислила основні принципи цієї парадигми програмування. Я зрозуміла, що ООП є дуже гнучким інструментом, який ідеально підходить для розробки складних програм, які потребують опису об'єктів та їх поведінки. освоїла всі правила використання класів, визначення та основні концепції ООП. Я провела детальний аналіз предметної області і вивчила проблеми та актуальність розробки програмного забезпечення. Під час написання програми виникло багато проблем, але я набула знань і навичок для їх вирішення. Також я поліпшила свої знання англійської мови, оскільки використовувала англомовну документацію, і покращила свої навички у виправленні помилок у коді завдяки пошуковим системам і веб-сайтам. Виникли труднощі зі створенням файлів. Натомість, я вважаю неправильним розподіл часу через що весь процес написання роботи відбувався в останній момент. Тому в майбутньому я буду докладніше планувати свій час. Список використаної літератури Cplusplus.com: Цей веб-сайт містить документацію, приклади коду, питання і відповіді, статті та форуми, пов'язані з мовою програмування C++. Доусон Майкл "Изучаем C++ через программирование игр" Відео уроки на youtube 25 Додаток Опис програмної реалізації алгоритму BookStore.cpp #include "Book.h" #include "Order.h" int main() { Customer customer; Order order; Book book; SetConsoleCP(1251); SetConsoleOutputCP(1251); char en[120] = " = *= *= = = = = = = = = = = = = = = = = *= *= "; cout << "Вітаємо вдома)" << endl; cout << "Ввійти - 1" << endl; cout << "Зареєструватися - 2" << endl; int choice; cin >> choice; if (choice == 1) { vector<Customer> customerList = order.CustomersGetInfo(); bool enter = customer.login(); } else { Sleep(1000); customer.registerNewUser(); cout << "Реєстрація пройшла успішно" << endl; } system("cls"); cout << "\t\t Книгарня *Під Сонцем* " << endl; int menuChoice = 0; int submenuChoice = 0; while (menuChoice != 4) { system("cls"); 26 mainMenu: menuChoice = menu(); // Assuming menu() is defined and displays the main menu options switch (menuChoice) { case 1: { system("cls"); submenuChoice = menu1(); // Assuming menu1() is defined and displays the submenu options for book operations switch (submenuChoice) { case 1: { bool foundBooksUse = false; vector<Book> foundBooks; int number = 1; int button; HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); COORD firstPos, lastPos; system("cls"); cout << "\t\t Книгарня *Під Сонцем* " << endl; book.printBooks(book.getBooksInfo()); firstPos.X = 0; firstPos.Y = order.getYcoord(); lastPos.X = firstPos.X; lastPos.Y = firstPos.Y; while (true) { order.consoleCLS(firstPos, lastPos); if (number == 1) { cout << " >Для додавання власної книги " << endl; } else { cout << " Для додавання власної книги " << endl; } if (number == 2) { cout << " >Здійснити пошук по жанрах " << endl; } else { cout << " Здійснити пошук по жанрах " << endl; } 27 if (number == 3) { cout << " >Для додавання книги до кошика " << endl; } else { cout << " Для додавання книги до кошика " << endl; } if (number == 4) { cout << " >Для виходу у головне меню " << endl; } else { cout << " Для виходу у головне меню " << endl; } cout << endl; button = _getch(); if (button == 224) { button = _getch(); switch (button) { case 72: if (number > 1) { number--; } break; case 80: if (number < 4) { number++; } break; } } else if (button == 13) { switch (number) { case 1: { book.writeBooksToFile(); Sleep(5000); 28 system("cls"); firstPos.Y = order.getYcoord(); break; } case 3: { if (foundBooksUse) { order.addToCart(foundBooks); foundBooksUse = false; } else { order.addToCart(book.getBooksInfo()); } system("cls"); order.showCart(); Sleep(5000); system("cls"); firstPos.Y = order.getYcoord(); break; } case 2: { system("cls"); foundBooks = book.searchBooks(); firstPos.Y = order.getYcoord(); foundBooksUse = true; break; } case 4: { goto mainMenu; } } lastPos.X = 0; lastPos.Y = order.getYcoord(); } 29 } } } system("cls"); break; } case 2: { system("cls"); cout << "\t\t Книгарня *Під Сонцем* " << endl; int submenuChoice = 1; int button; HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); COORD firstPos, lastPos; system("cls"); cout << "\t\t Книгарня *Під Сонцем* " << endl; cout << "\nВаша корзина бажань*" << endl; order.showCart(); firstPos.X = 0; firstPos.Y = order.getYcoord(); lastPos.X = firstPos.X; lastPos.Y = firstPos.Y; while
Антиботан аватар за замовчуванням

02.10.2024 20:10-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!