Ім'я файлу: Курсовая ТП.docx
Розширення: docx
Розмір: 397кб.
Дата: 13.02.2023
скачати
Пов'язані файли:
поняття про якість продовольчих товарів.docx
6Матеріали завдань на курсову. Коклюш.doc
-frankln-delano-ruzvelt.pptx
Текст диплома111 (1).docx
Охорона праці-реферат Гудь Ані 21 ХК.docx
446728.pptx


Зміст

1.Вступ

2

2.Теоретична частина

3

2.1 Складовий тип даних – структура

3

2.2 Робота з файлами у C/С++: текстові та бінарні

5

2.3 Робота з датою/годиною у С++

9

2.4 Алгоритми сортування: вставки, вибору, бульбашковий

11

2.5 Обробка виключень у С++

12

3. Курсове завдання

15

4. Блок схема програми

16

5. Розробка програмного коду

18

6. Тестування програми

26

7. Висновки

28

8. Список літератури

29


Вступ

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

C++ передбачений класичний спосіб роботи з файлами, заснований на бібліотеці stdio.h і доступі до даних через структуру FILE. Існує також альтернативний механізм роботи з файлами у мові C++ на основі потоків та бібліотек , , . Проте в даний час є актуальним використання можливостей бібліотеки компонентів Visual Studio для роботи з текстовими файлами, саме вони реалізовані в роботі.

2 Теоритична частина

C++ (Сі-плюс-плюс) — універсальна мова програмування високого рівня з підтримкою кількох парадигм програмування: об'єктно-орієнтованої, узагальненої та процедурної. Розроблена Б'ярном Страуструпом (англ. Bjarne Stroustrup) у AT&T Bell Laboratories (Мюррей-Хілл, Нью-Джерсі) у 1979 році та названа «Сі з класами». Страуструп перейменував мову у C++ у 1983р. Базується на мові Сі. Визначено стандартом ISO/IEC 14882:2003.

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

2.1 Складовий тип даних – структура

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

Якщо ви тільки приступаєте до знайомства зі структурами С++, спочатку, вам необхідно ознайомитися з синтаксисом структур у мові С++ . Розглянемо простий приклад (таблиця 2.1), який допоможе познайомитись із структурами та покаже, як з ними працювати. У цій програмі ми створимо структуру, створимо об'єкт структури, заповнимо значення елементи структури (дані про об'єкт) і виведемо ці значення на екран.

Таблиця 2.1 – Створення структури

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

#include

using namespace std;

struct building // Створюємо структуру!

{

char *owner; //тут зберігатиметься ім'я власника

char * city; //назва міста

int amountRooms; //кількість кімнат

float price; //ціна

};

int main()

{

setlocale (LC_ALL, "rus");

building apartment1; //це об'єкт структури з типом даних, ім'ям структури, building

apartment1.owner = "Деніс"; //Заповнюємо дані про власника і т.д.

apartment1.city = "Сімферополь";

apartment1.amountRooms = 5;

apartment1.price = 150000;

cout << "Власник квартири: " << apartment1.owner << endl;

cout << "Квартира знаходиться в місті: " << apartment1.city << endl;

cout << "Кількість кімнат: " << apartment1.amountRooms << endl;

cout << "Вартість: " << apartment1.price << " $" << endl;

return 0;

}

Коментарі по коду програми:

У рядках 4-10 ми створюємо структуру. Щоб її оголосити використовуємо зарезервоване слово struct і даємо їй будь-яке, бажано логічне ім'я. У нашому випадку – building. З правилами іменування змінних, ви можете ознайомитись у цій статті . Далі відкриваємо фігурну дужку {, перераховуємо 4 елементи структури через крапку з комою; , закриваємо фігурну дужку } і на завершення ставимо крапку з комою;. Це буде наш шаблон (форма) структури.

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

Як заповнити даними (ініціалізувати) елементи структури? Синтаксис такий: Ім'я об'єкта далі оператор точка . та ім'я елемента структури. Наприклад: apartment1.owner. Таким чином, у рядках 18-21 надаємо дані елементам структури.

І так дані ми внесли. Наступне питання: «Як до них звернутися, як працювати та використовувати їх у програмі?» Відповідь - «Дуже просто - так само, як і при ініціалізації, використовуючи точку . та ім'я елемента структури». У рядках 23 - 26 виводимо заповнені елементи структури на екран.

Що ще важливо знати:

Об'єкт структури можна оголосити до функції main (Таблиця 2.2). Це виглядало б так:

Таблиця 2.2 - Оголошення до функції main

1

2

3

4

5

6

7

struct building

{

char *owner

char * city;

int amountRooms;

float price;

} apartment1; //Оголошення об'єкта типу building

2.2 Робота з файлами у C/С++: текстові та бінарні

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

З + + розрізняє два типи файлів (вони не пов'язані з якимись конкретними типами файлів в операційній системі): текстові та бінарні (двійкові). Ці типи умовні: будь-який файл у межах однієї програми може використовуватися як текстовий, і як бінарний.

Програма на С++ може виконувати з файлами ті ж дії, що і користувач, який працює з файлом в операційній системі:

  • відкривати та закривати файли;

  • записувати у файл інформацію;

  • читати інформацію, записану у файлі;

  • редагувати дані у файлі.

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

Вона оголошується у програмі так: FILE * f;

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

#include

Щоб відкрити файл, необхідно скористатися командою fopen_s.

При відкритті файлу змінна f зв'язується із файлом на диску (заданим своїм ім'ям).

errno_t err = fopen_s(&f, fileName, "r"); //#include

це варіант "secure" fopen з кількома додатковими опціями для рядка режиму та іншим методом повернення покажчика потоку та коду помилки. Він був винайдений Microsoft і увійшов до стандарту C 11.

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

errno_t err;

if ((err = fopen_s (&f, filename, "w"))! = 0)

printf("File not open.\n");

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

лише у програмі, а й у будь-якому текстовому редакторі, наприклад, Word, WordPad чи Блокноті.

Послідовність роботи з файлом під час запису даних

така:

відкрити або створити файл для запису (або для читання та

запису) в кінець файлу:

errno_t err;

if ((err= fopen_s(&f, filename, "wt+"))!=0)

printf("File not open.\n");

2) записати дані у файл:

fputs(s,f); або

fprint(f, <дані типу (char *) з форматом чи без>);

3) закрити файл - fclose(f);

Тут filename - змінна (C-рядок), яка містить

фізичне ім'я файлу, а s – рядок, з якого у файл

записуються дані.

Читання даних із файлу виконується в такій

Послідовності:

1) відкрити файл для читання:

errno_t err;

if ((err= fopen_s(&f, filename, “rt+"))!=0)

printf("File not open.\n");

2) здійснити читання даних із файлу:

fscanf(f, <форматовані дані>)

або

fgets(s,80,f);

3) закрити файл: fclose (f);

Для читання послідовно всіх даних із файлу

необхідно організувати цикл доки не досягли кінця файлу,

використовуючи або функцію feof(f), яка повертає значення

true при досягненні кінця файлу:

Бінарні (двійкові) файли зберігають дані в тому ж форматі, в якому вони були оголошені, а їх вигляд є таким самим, як і в пам'яті комп'ютера. Тому відпадає потреба у використанні роздільників: прогалини, керуючих послідовностей, а також, розмір пам'яті, що використовується порівняно з текстовими файлами з аналогічною інформацією значно менше. Крім того, немає потреби у використанні функцій перетворення числових даних. Що саме і в якій послідовності лежить у бінарному файлі, має знати програма. З двійковими файлами можна виконувати ті ж дії, що й текстові. Для відкриття бінарного файлу використовується та ж команда fopen_s, тільки в модифікаторі відкриття файлу – замість літери t потрібно вказати букву b.

Приклад використання функції fread:

FILE *f;

double buff[100];

size_t res;

f = fopen("tmp.dat", "rb");

// Відкриваємо файл

if (f == 0) { cout<<“File not open“<
exit(1);

//Завершити роботу з кодом 1

//Намагаємося прочитати 100 дійсних чисел із файлу

res = fread(buff, sizeof(double), 100, f);

//res дорівнює реальній кількості прочитаних чисел

У цьому прикладі файл "tmp.dat" відкривається як бінарний, з нього читаються 100 дійсних чисел розміром 8 байт кожне. Функція fread повертає реальну кількість прочитаних чисел, яка менша або дорівнює 100.

2.3 Робота з датою/часом у С++

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

Існує чотири типи часу: clock_t, time_t, size_t та tm. Типи - clock_t, size_t і time_t можуть представляти системний час і дату як ціле число.

Тип структури tm містить дату та час у вигляді структури C, що має такі елементи:

struct tm {
int tm_sec; // Seconds of minutes from 0 to 61
int tm_min; // Minutes of hour from 0 to 59
int tm_hour; // Hours of day from 0 to 24
int tm_mday; // day of month from 1 to 31
int tm_mon; // month of year from 0 to 11
int tm_year; // рік since 1900
int tm_wday; // days since sunday
int tm_yday; // days since January 1st
int tm_isdst; // Hours of daylight savings time
}

Нижче наведено важливі функції, які ми використовуємо під час роботи з датою та часом на C або C++. Всі ці функції є частиною стандартної бібліотеки C та C++ (таблиця 2.3), і ви можете перевірити їх деталі, використовуючи посилання на стандартну бібліотеку C++, наведену нижче.

Таблиця 2.3 - Функції під час роботи з датою та часом

time_t time (time_t * time);

Це повертає поточний час календаря системи у кількості секунд, що минули 1 січня 1970 року. Якщо система немає часу, повертається .1.

char * ctime (const time_t * time);

Це повертає покажчик на рядок форми день місяць рік: хвилини: секунди рік \ n \ 0 .

struct tm*localtime (const time_t*time);

Це повертає покажчик на структуру tm, що становить локальний час.

clock_t clock (void);

Це повертає значення, яке приблизно відповідає часу, протягом якого програма була запущена. Значення, що дорівнює .1, повертається, якщо час недоступний.

char * asctime (const struct tm * time);

Це повертає покажчик на рядок, що містить інформацію, що зберігається в структурі, на яку вказує час, перетворений на форму: day month date hours: minutes: seconds year \ n \ 0

struct tm*gmtime (const time_t*time);

Це повертає покажчик тимчасово як структури tm. Час представлений у скоординованому універсальному часі (UTC), який, по суті, є середнім часом за Грінвічем (GMT).

time_t mktime (struct tm*time);

Це повертає еквівалент календарного часу часу, знайденого у структурі, яку вказує час.

double difftime (time_t time2, time_t time1);

Ця функція обчислює різницю в секундах між часом 1 та 2.

size_t strftime();

Ця функція може використовуватися для форматування дати та часу у певному форматі.

2.4 Алгоритми сортування: вставки, вибору, бульбашковий

Сортування вибором (Selection sort)

Для того, щоб відсортувати масив у порядку зростання, слід на кожній ітерації знайти елемент із найбільшим значенням. З ним необхідно поміняти місцями останній елемент. Наступний елемент з найбільшим значенням стає на передостаннє місце. Так має відбуватися, поки елементи, що знаходяться на перших місцях у масиві, не виявляться в належному порядку. Приклад наведено у малюнку 2.1.



Малюнок 2.1 – Сортування вибором

Бульбашкове сортування (Bubble sort)

При бульбашковому сортуванні порівнюються сусідні елементи і змінюються місцями, якщо наступний елемент менший за попередній. Потрібно кілька проходів за даними. Під час першого проходу змагаються перші два елементи в масиві. Якщо вони не в порядку, вони змінюються місцями, а потім порівнюються елементи в наступній парі. За тієї ж умови вони також міняються місцями. Таким чином сортування відбувається в кожному циклі, поки не буде досягнутий кінець масиву. Приклад наведено у малюнку 2.2.



Малюнок 2.2 - Бульбашкове сортування

Сортування вставками (Insertion sort)

При сортуванні вставками масив розбивається на дві області: впорядковану та невпорядковану. Спочатку весь масив є невпорядкованою областю. При першому проході перший елемент з невпорядкованої області вилучається та міститься у правильному положенні у впорядкованій області.

На кожному проході розмір упорядкованої області зростає на 1, а розмір невпорядкованої зони скорочується на 1.

Основний цикл працює у інтервалі від 1 до N-1. На j ітерації елемент [i] вставлений у правильне положення в упорядкованій області. Це зроблено шляхом зсуву всіх елементів упорядкованої області, які більші, ніж [i], на одну позицію вправо. [i] вставляється в інтервал між тими елементами, які менше [i], і тими, що більше [i]. Приклад наведено у малюнку 2.3.



Малюнок 2.3 - Сортування вставками

2.5 Обробка виключень у С++

Винятком є проблема, що виникає під час виконання програми. Виняток C ++ - це у відповідь виняткове обставина, що виникає під час роботи програми, наприклад спроба поділу на нуль.

Винятки забезпечують спосіб передачі контролю з однієї частини програми до іншої. Обробка винятків C++ побудована на трьох ключових словах: try, catch та throw.

throw – програма видає виняток, коли виникає проблема. Це робиться з використанням ключового слова throw.

catch - програма вихоплює виняток із обробником винятків у місці у програмі, де ви хочете впоратися з цією проблемою. Ключове слово catch вказує на вилов виключення.

try – блок try ідентифікує блок коду, для якого будуть активовані певні винятки. За ним слідує один або кілька блоків catch.

Припускаючи, що блок викликає виняток, метод зловить виняток, використовуючи комбінацію ключових слів try і catch . Блок try/catch міститься навколо коду, який може генерувати виняток. Код усередині блоку try/catch називається захищеним кодом та синтаксисом для використання try/catch наступним чином:

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

Таблиця 2.4 - Список стандартних винятків

std::exception

Виняток та батьківський клас усіх стандартних винятків C++.

std::bad_alloc

Це може бути кинуте new

std::bad_cast

Це може бути викликано dynamic_cast .

std::bad_exception

Це корисний пристрій для обробки несподіваних винятків у програмі C++.

std::bad_typeid

Це може бути викликано typeid .

std::logic_error

Виняток, який теоретично можна виявити, прочитавши код.

std::domain_error

Це виняток, що виник при використанні математично неприпустимого домену.

std::invalid_argument

Це спричинено неправильними аргументами.

std::length_error

Це генерується при створенні надто великої std::string.

std::out_of_range

Це може бути викликано методом «at», наприклад, std::vector і std::bitset<>::operator[]().

std::runtime_error

Виняток, який теоретично неможливо виявити, прочитавши код.

std::overflow_error

Це кидається, якщо відбувається математичне переповнення.

std::range_error

Це відбувається, коли ви намагаєтеся зберегти значення, що виходить за межі допустимого діапазону.

std::underflow_error

Це кидається, якщо відбувається математичне недоповнення.

У нашому випатку достатньо буде виключення типу:

try{

if (strcmp(z.Sina, "0") == 0)

throw "ERROR! RESTART WRITE FILE"; }

catch (const char * m)

{printf(m);

exit(1); }

Яке виводитиме ERROR! RESTART WRITE FILE при введенні 0 до пункту Ціни.

3. Курсове завдання

Вміст бінарного файлу: Прайс-лист планшетів у магазині: фірма-виробник, модель, діагональ екрану в дюймах, ціна, дата поставки, наявність 3G-модуля (так/ні).

Параметри

Сортування: За спаданням значень розміру діагоналі екрану (вибору).

Відбір даних за умовою: Планшети Apple із 3G-модулем.

4. Блок схема програми

У цьому пункті ми швидко пройдемося по програмі і подивимося, що вона буде робити в цілому. Це показано у таблиці 4.1.

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

if ((err = fopen_s(&f, name, "ab")) != 0)

throw "file not open";

Введення даних у бінарний файл

for (int i = 0; i < 2; i++)

add_record(name);


Виведення файлу на екран

view_file(name);

Перевіряємо успішність відкриття файлу

if ((err = fopen_s (&f, name, "ab"))! = 0)

printf("File not open.\n");

якщо ні, то виводимо

File not open.


Визначення кількості записів у файлі

int kol = number_of_records2(name);

Перевіряємо успішність відкриття файлу

if ((err = fopen_s (&f, name, "ab"))! = 0)

printf("File not open.\n");

Якщо ні, то виводимо

File not open.


Заповнення динамічного масиву значеннями

create_array(a, kol, name);

Перевіряємо успішність відкриття файлу

if ((err = fopen_s (&f, name, "ab"))! = 0)

printf("File not open.\n");

Якщо ні, то виводимо

File not open.


Виведення динамічного масиву на екран

cout <<"Array:" << endl;

view_array (a, kol);



Сортування масиву та виведення динамічного масиву на екран

sort_array(a, kol);

На кожній ітерації знайти елемент із найбільшим значенням. З ним необхідно поміняти місцями останній елемент. І так поки що масив не буде відсортований.


Повернення відсортованих даних до бінарного файлу

array_to_file(a, kol, name);


Очищення пам'яті з-під масиву

delete [] a;


Створення текстового файлу з бінарного

create_text_file(name, tname);

Перевіряємо успішність відкриття файлу

if ((err = fopen_s (&f, name, "ab"))! = 0)

printf("File not open.\n");

Якщо ні, то виводимо

File not open.


Виведення текстового вмісту

view_text_file(tname);

Перевіряємо успішність відкриття файлу

if ((err = fopen_s (&f, name, "ab"))! = 0)

printf("File not open.\n");

Якщо ні, то виводимо

File not open.


system("pause");


Таблиця 4.1 – Схема програми

5. Розробка програмного коду

Ось ми і дійшли до створення програми на С++ за заданим завданням.

#include

#include

#include

#include

#include

using namespace std;

//Объявление типа employee

struct employee

{

char Firma[20];

char Model[20];

char Modul[20];

char Sina[20];

char start_date[11];

float Diagonal;

};

//Добавление одной записи в бинарный файл. Параметры – указатель на файл и имя файла

void add_record(char* name)

{

employee z; FILE* f;

//Открыть файл и проверить успешность открытия

errno_t err;

if ((err = fopen_s(&f, name, "ab")) != 0)

throw "file not open";

//Считать запись с клавиатуры (данные вводятся в строку через табуляцию)

scanf_s("%s\t%s\t%s\t%s\t%s\t%f", z.Firma, 20, z.Model, 20, z.Modul, 20,z.Sina, 20, z.start_date, 11, &z.Diagonal);

//Обработка исключений в том случае если сумма буде равна нулю.

//Записать запись в файл

fwrite(&z, sizeof(employee), 1, f);

//закрыть файл

fclose(f);

}

//Просмотр файла. Параметры – указатель на файл и имя файла

void view_file(char* name)

{

employee z; FILE* f;

errno_t err;

if ((err = fopen_s(&f, name, "rb")) != 0)

printf("File not open.\n");

cout << "\nView file" << endl;

cout << "Firma\tModel\tPatronymic\tSina\tStart date\tDiagonal\n" << endl;

//Считывать последовательно записи из файла, пока они не закончатся

while (fread(&z, sizeof(employee), 1, f))

{

//Вывести запись на экран в строку через табуляцию

printf("%s\t%s\t%s\t%s\t%s\t%6.1f\n", z.Firma, z.Model, z.Modul,

z.Sina, z.start_date, z.Diagonal);

}

fclose(f);

}

//Определения количества записей в файле.

int number_of_records2(char* name)

{

int n = 0; employee z; FILE* f;

errno_t err;

if ((err = fopen_s(&f, name, "rb")) != 0)

printf("File not open.\n");

//Считывать по очереди все записи и увеличивать счётчик на 1

while (fread(&z, sizeof(z), 1, f))

n++;

fclose(f);

return n;

}

//Заполнение (создание) массива из бинарного файла.

//Параметры – массив, указатель на файл, имя файла.

void create_array(employee* a, int kol, char* name)

{

FILE* f;

errno_t err;

if ((err = fopen_s(&f, name, "rb")) != 0)

printf("File not open.\n");

//Считать kol записей из файла в массив а одной командой

fread(a, sizeof(employee), kol, f);

fclose(f);

}

//Сортировка массива

void sort_array(employee* a, int kol)

{

int i; employee x; bool f;

//Цикл пока массив не отсортирован. Признаком того, что массив уже отсортирован будет

//значение переменной f, равное 0, после очередного прохода по массиву

for (int i = 0; i < kol; ++i) {

int f = i;

for (int j = i + 1l; j < kol; ++j)

if (a[f].Diagonal < a[j].Diagonal)

f = j;

if (f != i) {

x = a[i]; a[i] = a[f]; a[f] = x;

}

}

}

//Вывод динамического массива на экран

void view_array(employee* a, int kol)

{

cout << "Firma\tModel\tModul\tSina\tStart date\tDiagonal\n" << endl;

for (int i = 0; i < kol; i++)

printf("%s\t%s\t%s\t%s\t%s\t%10.1f\n", a[i].Firma, a[i].Model, a[i].Modul,

a[i].Sina, a[i].start_date, a[i].Diagonal);

}

//Создание бинарного файла из динамического массива (возвращение данных в файл)

void array_to_file(employee* a, int kol, char* name)

{

FILE* f;

errno_t err;

if ((err = fopen_s(&f, name, "wb")) != 0)

printf("File not open.\n");

fwrite(a, sizeof(employee), kol, f);

fclose(f);

}

//Вывод данных по условию

void select_data(char* name)

{

employee z; FILE* f;

errno_t err;

if ((err = fopen_s(&f, name, "rb")) != 0)

printf("File not open.\n");

cout << "\nSelect records" << endl;

cout << "Firma\tModel\tModul\tSina\tStart date\tDiagonal\n" << endl;

while (fread(&z, sizeof(employee), 1, f))

{

//Если должность - Firma "Apple" и Modul "yes"

if (strcmp(z.Firma, "Apple") == 0 && strcmp(z.Modul, "yes") == 0)

//Выводим запись на экран

printf("%s\t%s\t%s\t%s\t%s\t%6.1f\n", z.Firma, z.Model, z.Modul,z.Sina,z.start_date, z.Diagonal);

}

fclose(f);

}

//Создание текстового файла

void create_text_file(char* bname, char* tname)

{

employee z; float sum = 0; FILE* fb; FILE* ft;

int k = number_of_records2(bname);

//Открываем бинарный файл для чтения

errno_t err;

if ((err = fopen_s(&fb, bname, "rb")) != 0)

printf("File not open.\n");

fseek(fb, 0, 0);

//Открываем текстовый файл для записи

if ((err = fopen_s(&ft, tname, "wt")) != 0)

printf("File not open.\n");

//Идём по бинарному файлу и считываем записи

while (fread(&z, sizeof(employee), 1, fb))

{

//Если должность - Firma "Apple" и Modul "yes"

if (strcmp(z.Firma, "Apple") == 0 && strcmp(z.Modul, "yes") == 0)

fprintf(ft, "%s\t%s\t%s\t%s\t%s\t%g\n", z.Firma, z.Model, z.Modul,z.Sina, z.start_date, z.Diagonal);

}

fclose(ft); fclose(fb);

}

//Просмотр текстового файла

void view_text_file(char* name)

{

employee z; FILE* f;

errno_t err;

if ((err = fopen_s(&f, name, "rt")) != 0)

printf("File not open.\n");

cout << "\nView text file" << endl;

cout << "Firma\tModel\tModul\tSina\tStart date\tDiagonal\n" << endl;

while (!feof(f))

{

fscanf_s(f, "%s\t%s\t%s\t%s\t%s\t%f\n", z.Firma, 20, z.Model, 20, z.Modul, 20, z.Sina, 20,z.start_date, 11, &z.Diagonal);

printf("%s\t%s\t%s\t%s\t%s\t%6.1f\n", z.Firma, z.Model, z.Modul,z.Sina, z.start_date, z.Diagonal);

}

fclose(f);

}

//Главная функция

int main()

{

try {

char name[] = "kursfile.txt";

char tname[] = "textfile.txt"; //имена файлов

//Ввод данных в бинарный файл

cout << "Input information about employee:" << endl;

cout << "Firma\tModel\tModul\tSina\tStart date\t Diagonal \n" << endl;

for (int i = 0; i < 2; i++)

add_record(name);

//Вывод файла на экран

view_file(name);

//Определение количества записей в файле

int kol = number_of_records2(name);

cout << endl << "Number of records in the file: " << kol << endl;

//Объявление динамического массива

employee* a = new employee[kol];

//Заполнение динамического массива значениями

create_array(a, kol, name);

//Вывод динамического массива на экран

cout << "Array:" << endl;

view_array(a, kol);

//Сортировка массива

sort_array(a, kol);

//Вывод динамического массива на экран

cout << "\nSorted array:" << endl;

view_array(a, kol);

//Возвращение отсортированных данных в бинарный файл

array_to_file(a, kol, name);

//Очистка памяти из-под массива

delete[]a;

//Вывод файла на экран

view_file(name);

//Вывод данных из фала на экран по условию

select_data(name);

//Создание текстового файла из бинарного

create_text_file(name, tname);

//Вывод содержимого текстового

view_text_file(tname);

system("pause");

}

catch (const char* m)

{

printf(m);

char name[] = "kursfile2.txt";

char tname[] = "textfile.txt"; //имена файлов

//Ввод данных в бинарный файл

cout << endl << "Input information about employee:" << endl;

cout << "Firma\tModel\tModul\tSina\tStart date\t Diagonal \n" << endl;

for (int i = 0; i < 5; i++)

add_record(name);

//Вывод файла на экран

view_file(name);

//Определение количества записей в файле

int kol = number_of_records2(name);

cout << endl << "Number of records in the file: " << kol << endl;

//Объявление динамического массива

employee* a = new employee[kol];

//Заполнение динамического массива значениями

create_array(a, kol, name);

//Вывод динамического массива на экран

cout << "Array:" << endl;

view_array(a, kol);

//Сортировка массива

sort_array(a, kol);

//Вывод динамического массива на экран

cout << "\nSorted array:" << endl;

view_array(a, kol);

//Возвращение отсортированных данных в бинарный файл

array_to_file(a, kol, name);

//Очистка памяти из-под массива

delete[]a;

//Вывод файла на экран

view_file(name);

//Вывод данных из фала на экран по условию

select_data(name);

//Создание текстового файла из бинарного

create_text_file(name, tname);

//Вывод содержимого текстового

view_text_file(tname);

system("pause");

}

return 0;

}

6 Тестування програми

Результат роботи програми приведення на (рисунку 6.1).



Малюнок 6.1 - Тестування програми

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



Малюнок 6.1 - текстовий файл відсортованого масиву.

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



Малюнок 6.3- спрацьовування винятка

7. Висновки

Таким чином, у мові C++ відсутні оператори для роботи з файлами. Усі необхідні дії виконуються за допомогою функцій, включених до стандартної бібліотеки.

Таким чином, результатом виконання курсової роботи є додаток для відсортування структурних даних, який містить Прайс-лист планшетів у магазині: фірма-виробник, модель, діагональ екрану в дюймах, ціна, дата поставки, наявність 3G-модуля (так/ні), а також приклад роботи з винятком.

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

8 Список літератури

1) Робота з файлами у MS Visual C++ [Електронний ресурс]. – 2012. – Режим доступу до ресурсу: https://www.evkova.org/kursovye-raboty/rabota-s-fajlami-v-ms-visual-c-#ЗАКЛЮЧЕНИЕ .

2) C++ - Обробка винятків [Електронний ресурс]. – 2021. – Режим доступу до ресурсу: https://unetway.com/tutorial/c-obrabotka-isklucenij .

3) Алгоритми сортування: реалізація на С++ [Електронний ресурс]. - 2011. - Режим доступу до ресурсу: https://function-x.ru/cpp_algoritmy_sortirovki.html#paragraph1 .

4) Мова програмування С++ [Електронний ресурс] - Режим доступу до ресурсу: https://stud-baza.ru/mova-programuvannya-s-diplomnaya-rabota-informatika-programmirovanie.

5) Структури С++ [Електронний ресурс]. - 2011. - Режим доступу до ресурсу: http://cppstudio.com/post/7008/ .

6) Структури [Електронний ресурс]. – 2014. – Режим доступу до ресурсу: https://ravesli.com/urok-61-struktury/ .

скачати

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