1   2   3
Ім'я файлу: Курсова 2022.docx
Розширення: docx
Розмір: 186кб.
Дата: 01.07.2022
скачати

Форма № Н-6.01

ВСП Заліщицький ФК імені Є.Храпливого НУБіП України

Циклова комісія комп’ютерно-інженерних дисциплін

Курсова робота

з системного програмування
на тему: Розробка програми обліку товарів в магазині
Студента 4 курсу 41-К групи

Спеціальності 123 «Комп’ютерна індженерія»

Рудик С.О

Керівник Міщук Т.В

Національна шкала ________________

Кількість балів: __________Оцінка: ECTS _____
Члени комісії

________________ ___________________________

(підпис) (прізвище та ініціали)

________________ ___________________________

(підпис) (прізвище та ініціали)

________________ ___________________________

(підпис) (прізвище та ініціали

м. Заліщики - 2022рік

Зміст


Вступ 2

Розділ 1. Основні теоретичні відомості. 4

Розділ 2. Хід проекту 14

Висновок 29

Література 32















Вступ


В умовах ринкової економіки інформація виступає як один з основних товарів.Успіх комерційної та підприємницької діяльності пов'язаний з муніципальними,банківськими, біржовими інформаційними системами. Без інформації практично неможливо прийняти об'єктивного управлінського рішення, яке виступає в сучасних умовах як одним з найважливіших факторів функціонування і розвитку.

Зміни умов виробничої діяльності, необхідність адекватного пристосування до неї системи управління, позначаються не тільки на удосконалюванні організації, алеі на перерозподілі функцій управління по рівнях відповідальності, формам їхньої взаємодії і т. д. Все це вимагає від фірм адаптації до нових умов, подолання виникаючих протиріч в економічних і науково-технічних процесах.

Програми обліку товарів для магазину, яка б забезпечувала наступні можливості: додавання нового товару до списку, видалення товару зі списку, пошук товару за кодом товару у списку, перегляд списку товарів, збереження списку товарів у файл та отримання списку товарів із файлу, інтерфейс користувача та відображення результатів на екрані. програма автоматизація маг

Отже темою моє курсової роботи є «Розробка програми обліку товарів в магазині».

Мета дослідження

Для досягнення мети були поставлені і вирішені наступні завдання:

  • Закріпити теоретичні знання про статичні та динамічні структури, організацію односпрямованих та двоспрямованих списків даних, динамічний розподіл пам’яті та обробку файлів мови С++.

  • Оволодіти практичними навичками розробки, тестування та налагодження програмного забезпечення, створеного мовою високого рівня С++.

  • Виконати розробку програми обліку товарів

Об’єкт дослідження ­ – мова програмування С++.

Предмет дослідження – Об’єктом дослідження є інформаційні технології та процеси обробки інформаційних ресурсів

Курсова робата складається з двох розділів.

Перший розділ присвячений основним теоретичним відомостям. Другий розділ практична частина.
.

магазин інтерфейс












Розділ 1. Основні теоретичні відомості.


Структура даних – програмна одиниця, яка дозволяє зберігати та обробляти множину логічно зв’язаних даних одного або різних типів в обчислювальній техніці. В програмуванні та комп’ютерних науках структури даних - це способи та методи організації даних. В мовах програмування часто разом зі структурою даних часто пов'язується і специфічний перелік операцій, що можуть бути виконаними над даними, організованими в ту чи іншу структуру.

Правильний підбір структур даних є надзвичайно важливим для ефективного функціонування алгоритмів (програм) їх обробки. Правильно підібрані і побудовані структури даних дозволяють оптимізувати час виконання програми та використання пам'яті комп'ютера.

Підтримка базових структур даних, які використовуються в програмуванні, входить в комплекти стандартних бібліотек С++.

Термін «структура даних» може мати декілька близьких, але тим не менш відмінних значень:

  • Абстрактний тип даних – тип даних, який надає для роботи з елементами цього типу визначений набір функцій та можливість створювати елементи цього типу з допомогою спеціальних функцій. Вся внутрішня структура цього типу прихована від розробника програмного забезпечення – у цьому суть абстракції. Різницю між абстрактними типами даних і структурами даних, котрі реалізують абстрактні типи найкраще демонструвати на прикладі: абстрактний тип даних «список» може бути реалізований за допомогою масиву або лінійного списку, з використанням різних методів динамічного виділення пам’яті. Однак, кожна реалізація визначає один і той же набір функцій, який має працювати однаково (за результатом, а не по швидкості) для усіх реалізацій.

  • Реалізація якого-небудь абстрактного типу даних.

  • Екземпляр типу даних, наприклад, лінійний односпрямований список, як структура даних, яка складається з елементів одного типу,послідовно зв’язаних між собою за допомогою вказівників. Лінійний список зазвичай визначається як абстрактний тип даних.

  • В контексті функціонального програмування – унікальна порція інформації, яка зберігається при змінах. Про неї неформально говорять як про одну структуру даних, не дивлячись на можливу наявність різних версій.

Структури даних формуються за допомогою типів даних, посилань і операцій над ними у вибраній мові програмування (наприклад С++). Тип даних визначає можливі значення змінних, констант, функцій і виразів, внутрішню форму представлення даних в ЕОМ, операції і функції, які дозволено застосовувати до величин, що належать даному типу. Фундаментальними блоками для більшості структур даних в С++ є масиви, записи, розмічені об’єднання, посилання і вказівники:

  • Масив – структура (набір) одно типових компонентів (елементів масиву), розташованих у пам’яті безпосередньо один за одним та об’єднаних одним єдиним ім’ям. Доступ до кожного елементу здійснюється по індексу. Розмірність масиву – кількість індексів необхідних для однозначного доступу до елементу. Фактично багатовимірний масив – це одномірний масив одномірних масивів, кожний з яких, у свою чергу, є масивом одномірних масивів, і т.д. Ім’я масиву є вказівником. Структура масиву (кількість розмірностей і розмір) для кожної розмірності може бути представлена одномірним масивом.

  • Строки (рядки) – послідовність символів, представлена масивом або вказівниками на змінні типу char. Для полегшення роботи зі строками в С++ введено спеціальний клас «string», який дозволяє використовувати новий тип змінних (динамічний масив символів), без початкового визначення розміру та надає базовий набір основних функцій для роботи з даними такого типу.

  • Розмічені об’єднання забезпечують збереження значень, які можуть відноситись до одного із множини іменованих варіантів, з різними значеннями і типами. Що досить зручно для різнорідних даних, коли можливі різні випадки, включаючи допустимі та помилкові; даних, типи яких відрізняються для різних випадків; і в якості альтернативи ієрархії невеликих об’єктів. Дані, що зберігаються як значення, не являються фіксованими, вони можуть бути одним з декількох визначених варіантів.

  • Посилання – це об’єкт, який вказує на певні дані, але не зберігає їх. Посилання не являється вказівником – це просто інша назва (псевдонім) для змінної, на яку воно ссилається. Посилання ініціалізується при оголошені і не може бути змінено.

  • Вказівник – це змінна, яка представляє собою адресу іншої змінної. Змінній типу вказівник можна присвоїти адресу будь-якої змінної, тип якої співпадає з типом вказівника.

В С++ також використовуються поняття: об’єкт – деяка сутність в ЕОМ, яка характеризується певним станом і поведінкою, має визначений набір властивостей (атрибутів) та операцій над ними (методів), і екземпляр – певний стан об’єкту. Наприклад, якщо об’єкт – це лише тип даних, то сутності, що зберігають реальні дані і створені на основі цього об’єкту, називаються його екземплярами.

Змінні і структури в мовах програмування, наприклад в С++, характеризуються також розміром і методом виділення пам’яті для збереження даних. В С++ об’єкти (змінні, інші структури даних) можуть розміщуватись статично – під час компіляції, або динамічно – під час виконання програми за допомогою виклику функцій стандартних бібліотек. Процес зв’язування властивостей об’єкта (змінної), не є одномоментним. Наприклад, зв’язування змінної з її типом завжди відбувається при трансляції програми, а от зв’язування адресу пам’яті і значення може відбуватися по різному:

  • Глобальні (зовнішні) змінні розміщуються в загальному сегменті даних і отримують у ньому свої адреси вже при трансляції. Аналогічно відбувається їх ініціалізація (присвоєння значень).

  • Локальні змінні розміщуються у стеку. Оскільки дані в стеку адресуються відносно поточного положення вказівника стеку, при трансляції визначається зміщення в поточному фреймі (кадрі) стеку, сформованому при виклику функції. Відповідно, виділення пам’яті, розміщення змінних і їх ініціалізація відбувається під час виконання при вході і функцію.

В С++ використовується ще одне поняття статичної змінної:

  • Загалом звичайні типи змінних, незалежно від того глобальними чи локальними вони є, являються статичними, оскільки тип змінної і її розмірність визначаються при трансляції і в майбутньому не змінюються. Кожний тип даних має фіксовану розмірність, а отже компілятор здійснює статичний розподіл пам’яті, закріплюючи за кожною змінною адреси або зміщення у відповідних сегментах пам’яті. У тому числі і локальні змінні, хоча вони створюються в стеку при виконані програми, але їх кількість і розмірність не може бути змінено.

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

Тим не менш, при розробці багатьох програм розмірність оброблюваних даних наперед не відома. У таких випадках, для статичних даних, існує єдиний вихід – виділяти пам’ять по максимуму. Для вирішення таких проблем на рівні бібліотек С++ створено механізм породження і знищення змінних працюючою програмою. Такі змінні називають динамічними, а область пам’яті, в якій вони створюються – динамічною або «кучою». Куча організовується в одному або декількох сегментах пам’яті, які виділяються програмі операційною системою. Основні властивості динамічних змінних:

  • Створюються і знищуються програмою за допомогою спеціальних операторів і функцій.

  • Кількість змінних, інших структур даних може змінюватись в процесі роботи програми.

  • Не мають імені, доступ до даних можливий лише за допомогою вказівників.

  • Функція розміщення динамічної змінної шукає у пам’яті необхідне місце для розміщення змінної і повертає вказівник (адрес).

  • Функція знищення динамічної змінної отримує вказівник і знищує дані (звільняє пам’ять).

Окрім змінних динамічне виділення пам’яті може застосовуватися і для більш складних структур даних. Та насправді можливість створити масив чи іншу структуру даних заданого розміру не завжди дозволяє вирішити поставлену задачу.

Щоб в процесі виконання програми довільно додавати та видаляти дані, потрібно більш гнучке представлення даних. В таких випадках застосовують дані особливої структури, які представляють собою окремі елементи, зв’язані за допомогою вказівників. Таким чином створюється структурний елемент даних і вказівник (вказівники) на нього.

Кожний елемент динамічної структури даних (списку) складається з даних та одного або декількох вказівників, які посилаються на аналогічні елементи (вузли даних). Що дозволяє додавати в структуру нові дані або видаляти існуючі, не чіпаючи при цьому інші елементи. До того ж структури дозволяють організовувати дані так, щоб їх представлення в програмі було максимально наближеним до реальності.

Для визначення останнього елементу в такій структурі використовують нульові вказівники (NULL).

При додаванні нового вузла даних в таку структуру виділяється новий блок пам’яті для збереження даних (полів структури) і, за допомогою вказівників встановлюється зв’язок нового елементу з вже існуючими, або присвоюємо вказівнику адресу, по якій розташована тільки-но створена структура (вказівник на наступний елемент, якщо такий передбачено, при цьому дорівнює NULL). В результаті при запуску програми пам’ять виділяється лише на вказівники, а решта пам’яті виділяється лише при додаванні елементів. Якщо динамічні дані більше не потрібні, необхідно просто звільнити пам’ять.

Елемент динамічної структури даних представляє собою структуру (struct), яка містить щонайменше два поля – для збереження даних і для вказівника. Поле даних може бути довільного типу, у тому числі структурою.

Динамічні структури даних (списки) бувають лінійні і нелінійні. У лінійних структурах дані зв’язуються в послідовний ланцюжок. До лінійних динамічних структур відносять списки (односпрямовані, двоспрямовані, кільцеві), стеки, черги (односпрямовані, двоспрямовані, черги з пріоритетами). Організація нелінійних структур більш складна і представляється, як правило, у вигляді дерева (кожний елемент має деяку кількість зв’язків), наприклад, у бінарному дереві кожний елемент додатково має вказівник на лівий і правий елемент.

Лінійний односпрямований список – динамічна структура даних, кожний елемент котрої, за допомогою вказівника, зв’язаний з наступним елементом. Кожний елемент списку має поле даних (простої або складної структури) і поле вказівника на наступний елемент. Така структура зручна для швидкої вставки елементів.

У двоспрямованому списку кожний елемент має поле даних і два вказівника, де один вказівник зберігає адресу попереднього елементу, а другий – наступного. Таким чином, для роботи з двоспрямованим списком використовують два вказівники, котрі зберігають адреси початку і кінця списку:

Для пустого списку обидва вказівники початку і кінця, так само я і вказівник попереднього елементу для першого елементу і вказівник наступного для останнього, дорівнюють NULL. Якщо вказівник на останній елемент є вказівником на попередній елемент для першого елементу списку, а вказівник наступного елементу для останнього вказує на перший елемент списку, такий список називають циклічним. У циклічному списку для єдиного елементу вказівники попереднього і наступного елементу будуть вказувати на сам елемент. При роботі з таким списком кінець списку визначається фактом повернення до початку.

Динамічні структури широко використовують як для більш ефективної роботи з даними, розмір яких не відомий, так і для вирішення завдань сортування. Сортування елементів зв’язаного списку виконується методом переміщення вказівників, а не переміщенням елементів.

Оскільки динамічні структури даних як і решта змінних зберігають дані лише доки працює програма, при створені програм роботи з даними виникає необхідність використання файлів для збереження даних (інформації). Файли дають можливість зчитувати та зберігати дані безпосередньо з/на диску/диск. Існує два основних типи файлів: текстові і двійкові. Текстовими називають файли, які складаються з будь-яких символів. Вони організовуються строками, кожна з яких закінчується символом «кінця строки». Кінець файлу помічається символом «кінець файлу». При запису інформації в текстовий файл всі дані перетворюються в символьний тип і зберігаються у символьному типі. Перегляд текстового файлу можна виконати у будь-якому текстовому редакторі. У двійкових (бінарних) файлах інформація зчитується і записується у вигляді блоків визначеного розміру, в яких можуть зберігатися дані будь-якого типу і структури. В бінарному файлі дані представляються в такій самій формі, в якій вони зберігаються у внутрішній пам’яті (основній/оперативній) ЕОМ. У текстовому файлі інформація (текстова) представлена у вигляді кодів текстових символів, визначених кодовою таблицею (ASCII, Unicode). Так, ціле без знакове число у текстовому і бінарному файлі буде представлене у різних формах. Наприклад число 123 у текстовому файлі буде представлене побайтно (посимвольно): 00110001b (31h), 00110010b (32h), 00110011b (33h), а в бінарному файлі: 01111011b, де b вказує на двійкову систему числення, а h – на шістнадцятиричну. Символи цифр в таблиці ASCII починаються зі зміщення 30h. Отже, у текстовому файлі n-знакове десяткове число займатиме n байтів, а в бінарному десь у два рази менше. Хоча насправді, будь-який файл по своїй природі – двійковий (бінарний), так як на фізичному рівні у пам’яті ЕОМ являє собою масив байтів.

Для роботи з файлами С++ підтримує множину функцій стандартних бібліотек, які складають основу заготовочного файлу стандартної бібліотеки . У більшості випадків при роботі зі списками в С++ для збереження/зчитування даних в/з файл/файлу зручно використовувати спеціальні типи даних, які називаються потоками. С++ абстрагує файлові операції, перетворюючи їх в операції з потоками байтів, які можуть бути як потоками вводу так і потоками виводу. Для операцій з файлами існує три класи: ifstream, ofstream и fstream. Ці класи є похідними від istream, ostream и iostream. Оскільки останні, в свою чергу, є похідними від класу ios, класи файлових потоків наслідують всі функціональні можливості батьківських (функції і прапорці форматування, маніпулятори та інші). Для реалізації файлового вводу-виводу потрібно включити у програму заголовочний файл fstream.h. Файловий потік повинен бути зв’язаний з файлом перш, ніж його буде можливо використовувати. З іншого боку, передумовлені потоки можуть використовуватися одразу після запуску програми, у конструкторах статичних класів, які виконуються навіть раніше виклику функції main(). Файловий потік можливо позиціонувати у довільну позицію в файлі. Для створення файлового потоку ці класи передбачають наступні форми конструктора:

  • створити потік, не зв’язуючи з файлом: ifstream(), ofstream(), fstream();

  • створити потік, відкрити файл і зв’язати потік з файлом: ifstream(constchar*name, ios::openmode mode=ios::in), ofstream(constchar*name, ios::openmode mode=ios::outios::trunc); fstream(constchar*name, ios::openmode mode = ios::in | ios::out), виводу, або fstreamfs("FileName.dat"). Тут name – ім’я файлу, mode – режим відкриття файлу. Параметр mode може приймати значення, наведені в таблиці:


Таблиця 1

Режим відкриття

Призначення

ios::in

Відкрити файл для читання

ios::out

Відкрити файл для запису

ios::ate

Початоко виводу- в кінець файлу

ios::app

Відкрити файл для додавання в кінець

ios::trunc

Видалитивміст файлу

ios::binary

Двійковий режим операцій


Режими відкриття файлу представляють собою бітові маски, тому можливо задавати два чи більше режимів, об’єднуючи їх по бітах операцією «ИЛИ». За замовчуванням режим відкриття файлу відповідає типу файлового потоку. В потоці вводу або виводу прапорець режиму завжди встановлений неявно.

Файли, які відкриваються для виводу, створюються, якщо вони не існують.

Якщо відкриття файлу закінчилось невдачею, об’єкт, який відповідає потоку, буде повертати 0 (нуль).

Якщо при відкритті файлу не вказаний режим ios::binary, файл відкривається в текстовому режимі і після того, як файл успішно відкритий для виконання операцій вводу-виводу, можна використовувати оператори отримання і вставки в потік. Для перевірки, на кінець файлу, можна використовувати функцію ios::eof().

Завершивши операції вводу-виводу, необхідно закрити файл, визвавши функцію-член close() з прототипом void close(). Закриття файлу відбувається автоматично при виході потокового об’єкту з області існування, коли викликається деструктор потоку.


  1   2   3

скачати

© Усі права захищені
написати до нас