ЗМІСТ ВСТУП……………………………………………………………………...3 РОЗДІЛ 1. ТЕОРЕТИЧНІ ВІДОМОСТІ: ІНСТРУМЕНТАРІЙ ВИКОРИСТОВУВАНИЙ ДЛЯ ВИКОНАННЯ ЗАВДАННЯ………..6 1.1. Додатки Windows Forms………………………………………………6 1.2. Використання dataGridView при роботі з даними файлів………....10 1.3. Створення Windows Forms…………………………..………….…...12 РОЗДІЛ 2. СТВОРЕННЯ ОСНОВНОГО МОДУЛЯ З ПОЯСНЕННЯМИ…………………………………………………..…...14 2.1. Робота з бінарним файлом…………………………………………..14 2.2. Виведення\Видалення даних з бінарного файла за умовою………17 2.3. Формування текстового файлу за умовою………………………….19 РОЗДІЛ 3. СТВОРЕННЯ ДОДАТКОВИХ ФОРМ ТА МЕНЮ……22 3.1. Функції основного модуля для команд меню……………………...22 3.2. Функції для модуля (форми) "Про автора"………………………...23 3.3. Створення модуля (форми) "Завдання"…………………………….24 3.4. Створення модуля (форми) "Заставка"……………………………..26 РОЗДІЛ 4. ЗДОБУТІ РЕЗУЛЬТАТИ У ВИГЛЯДІ ФОРМ ПРОЄКТУ………………………………..……………………………….28 ВИСНОВКИ……………………………………………………………...31 СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ……………………………..32 ДОДАТКИ………………………………………………………………..34 ПРОГРАМУВАННЯ КП 123.031.006 Змн. Арк. № докум. Костюченко Д.О. Розроб. Перевір. Реценз. Н. Контр. Затверд. Сухойваненко Ю. М. Підпис Дата Літ. Арк. Акрушів 2 40 ВСП «Глухівський агротехнічний фаховий коледж Сумського НАУ» ВСТУП C++ був розвинутий з мови програмування C і за дуже малими виключеннями зберігає C як підмножину. Базова мова, C підмножина C++, спроектована так, що існує дуже близька відповідність між його типами, операціями й операторами і комп'ютерними об'єктами, з якими безпосередньо приходиться мати справу: числами, символами й адресами [5, с. 48]. Microsoft VisualC++ містить безліч інтегрованих засобів візуального програмування. Компілятор VisualC++ містить багато нових інструментальних засобів і поліпшених можливостей, надає величезні можливості в плані оптимізації додатків, внаслідок чого можна отримати виграш як відносно розміру програми, так і відносно швидкості її виконання, незалежно від того, що являє собою ваш додаток. Система Microsoft VisualC++ дозволяє створювати як маленькі програми і утиліти для персонального використання, так і корпоративні системи, що працюють з базами даних на різних платформах. У цьому проекті ми намагалися на конкретних прикладах доторкнутися до великих можливостей середовища розробки програмних проектів Visual C++ для створення багатомодульних проектів з опрацювання даних, які зберігають-ся у файлах. Тематика проекту зумовлена тим, що більшість комп'ютерних програм, які розв’язують ті чи інші практичні завдання, зберігають дані у вигляді різнотипних файлів, і тому виникає необхідність програмно створювати, видаляти, записувати читати, відкривати файли. Visual C++ пропонує широкий спектр засобів зі створення бінарних (двійкових) та текстових файлів. На практиці доцільним є створення основного файла (чи файлів) з даними у двійковому форматі, оскільки цей формат не потребує додаткового місця, а, отже, і пам’яті для символів-розділювачів (пробілів, табуляцій та ін.). А вже формування звіт-них документів слід створювати у текстовому форматі (типи файлів txt, rtf, doc тощо). Актуальність теми курсового проекту "Створення багатомодульних програмних проектів для опрацювання даних у файлах засобами Visual C++" Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 3 зумовлена повсюдною практичною затребуваністю програмних проектів, які зберігають дані у файлах. Тобто програма сама має створювати файли того чи іншого формату, записувати у них дані, на вимогу виводити або всі дані файла, або лише ті, які задовольняють певній умові, вміти редагувати і видаляти певні дані файла, надавати можливість створення нових файлів (звітних документів) з певними даними з основного файла та ін. Об'єктом дослідження є технології Visual Studio зі створення багатомодульних проектів та технології опрацювання даних, які зберігаються у файлах. Предмет дослідження – програмні засоби Visual C++ для створення файлів різних форматів, записування у них даних, виведення вмісту цих файлів, відбирання даних за умовою, можливості редагування файла і видалення певних даних з файла, створення нових файлів (звітних документів) з певними даними з основного файла, створення програмних проектів з декількома динамічними формами та взаємодії між ними. Мета курсового проекту полягає у вивченні технологій Visual C++ програмного створення файлів даних з можливістю їх програмного редагування (дописування, змінювання чи видалення даних) та набуття навиків розробки програмних проектів з візуальним інтерфейсом, організованого за допомогою меню, діалогових вікон, декількох взаємодіючих форм та ін. Відповідно до поставленої мети визначено такі завдання: – розкрити сутність технологій Visual Studio зі створення багатомодульних проектів; – вивчити наявні програмні засоби Visual C++, які дозволяють створювати файли різних форматів, записувати у них дані, переглядати вміст цих файлів, відбирати дані за умовою, редагувати дані у файлах; – розробити програмний проект для розв’язання завдання відповідно до індивідуального варіанта, який передбачає створення, заповнення даними, відбір та редагування файлів різних форматів. Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 4 Тема: Створення багатомодульних програмних проектів зі створення та опрацювання даних у файлах засобами Visual C++" (варіант 6). Завдання: Використовуючи середовище програмування Visual С++, створити програмний проект, який реалізує такі завдання: 1) програмне створення бінарного (двійкового) файла та заповнення його даними. 2) програмний перегляд даних створеного файла; 3) можливість редагування та зберігання відредагованого файла; 4) впорядкування (сортування) даних згідно з параметром. 5) відбір даних файла за певною умовою. 6) відбір з бінарного файла даних за умовою, та створення на основі відібраних даних текстового звітного документа; 7) створення трьох форм: 1) про автора, 2) про завдання та 3) формузаставку. Крім того, розробити програмний код для виведення, редагування та форматування параметрів шрифту текстового документа із завданням, виведення даних про розмір файла даних, дату його створення та час останнього редагування тощо. Доступ до цих функцій організувати за допомогою меню; 8) можливість видалення даних з бінарного файла даних за умовою. Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 5 РОЗДІЛ 1. ТЕОРЕТИЧНІ ВІДОМОСТІ: ІНСТРУМЕНТАРІЙ ВИКОРИСТОВУВАНИЙ ДЛЯ ВИКОНАННЯ ЗАВДАННЯ 1.1. Додатки Windows Forms Додатки, що розробляються у візуальному середовищі, фактично є графічними додатками для Windows, і це принципово відрізняє їх від консольних додатків. Характерною особливістю графічних додатків на мові С++ є використання можливостей об’єктно-орієнтованого програмування, і всі елементи програми є об’єктами. При створенні нових об’єктів на візуальній формі вони будуються із уже існуючих об’єктів. Завдяки цьому нові об’єкти наслідують властивості та можливості вихідних об’єктів, і які необхідно тільки доповнити необхідними новими функціями. Додатки із графічним інтерфейсом, що використовують форми, створюються та управляються в середовищі CLR (CommonLanguageRuntime– загальномовне виконуюче середовище). Середовище виконує код та пропонує служби, які полегшують сам процес розробки. Додаток WindowsFormsApplication дозволяє помістити у виконуваний код стандартні графічні елементи управління Windows. В процесі створення додатку у візуальному середовищі програмування MSVisualC++користувачу надається можливість створення графічного інтерфейсу за допомогою Windows Forms. При цьому в ході створення графічного інтерфейсу в додатку на мові С/С++необхідно забезпечити взаємодію користувача із елементами управління інтерфейсу. Для цього необхідно створити додаток, який являє собою повно функціональну програму Forms. Для цього необхідно знати: -можливості використання конструктора форм Form Design для побудови графічного інтерфейсу користувача в додатку; -можливості використання в формі елементів управління; -можливості обробки подій, пов’язаних із елементами управління. В таблиці 1.1. Представлені властивості форми: Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 6 Таблиця 1.1 Властивість Опис Значення по замовчуванню Встановлюється значення кнопки, яка буде спрацьовувати при натисканні AcceptButton None клавіші Enter. Для того, щоби ця властивість була активною, необхідна наявність принаймі однієї кнопки, розміщеної на формі Колір форми. BackColor BackgroundImage Використання зображення в якості Control None фону Задає кнопку, яка буде спрацьовувати при натисненні Esc. Для того, щоби ця CancelButton властивість була активною необхідна None наявність хочаб однієї кнопки на формі Задає наявність чи відсутність трьох ControlBox стандартних кнопок в верхньому правому кутіформи: "Згорнути", "Розгорнути" та" Закрити Cursor Визначає вигляд курсору при його Default розміщенні на формі Задає наявність чи відсутністьсітки, яка допомогає формувати DrawGrid елементиуправління. Сітка True відображається тільки на етапі створення додатку Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 7 Формат шрифту, що використовується Font для відображення тексту на формі в елементах управління Microsoft Sans Serif; 8,25pt Визначає вигляд границь форми. Можливі значення: -None—форма без границь і рядка заголовку; -FixedSingle—тонкі границі без FormBorderStyle можливості зміни розміру Sizable користувачем; -Fixed3D—границі без можливості зміни розміру із тремірним ефектом; -FixedDialog—границі без можливості зміни, без іконки додатку; -Sizable—звичайні границі: користувачможе міняти розмір границь; -FixedToolWindow—фіксовані границі, є тільки кнопка закриття форми. Такий вигляд мають панелі інструментів в додатках; -SizableToolWindow—границііз можливістю зміни розмірів, є тільки кнопка закриття Зображення іконки, що розміщується Icon в заголовку форми. Підтримуються None формати.ico Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 8 Визначає активність стандартної MaximizeBox кнопки "Розгорнути" у верхньому True правому куті форми Максимальний розмір ширини і висоти форми в пікселях. Форма MaximumSize приймає заданий розмір при натисненні на стандартну кнопку 0;0 (Во весь экран) "Розгорнути" Мінімальний розмір ширинии висоти MinimumSize форми в пікселях. Форма приймає 0;0 заданий розмірпри зміні її границь користувачем Windows Formsявляє собою цілий набір засобів створення Wiпdоwsдодатків, що виконуються в середовищі CLR. Форма являє собою головний контейнер, в який поміщаються віртуальні компоненти (кнопки, мітки, таблиці, поля прокрутки і т. д.), за допомогою яких і реалізується алгоритм розв’язку конкретної задачі. До пакету Visual С++ входить стандартний набір понад 60-ти елементів управління, які можна використовувати при створенні форми для взаємодії із користувачем. Кожен із елементів управління має певне призначення та виконує певні функції.Найбільш часто використовуваними елементами управління і компонентами Windows Forms оглянуті нижче Елементи групи Common Controls дозволяють реалізовувати ввід/вивід, відображення та редагування елементів управління. Деякі з них описано нижче: -Button–дозволяє створювати елемент типу «кнопка» для запуску, зупинки чи переривання деякого обчислювального процесу; -Label –відображає текст, який недоступний до редагування користувачем в ході виконання програми; -TextBox–відображає текст, введений в процесі створення форми, який доступний до редагування в процесі виконання програми; Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 9 -ListBox–відображає список текстових елементів;-ComboBox–відображає список, що розкривається; -CheckedListBox–відображає список із полосою прокрутки, який складається із елементів із прапорцями; -CheckBox–відображає прапорець із полем для тексту; -RadioButton-відображає кнопку, що може бути включена або виключена; -RichTextBox–дозволяє задавати текст у звичайному текстовому форматі; -MaskedTextBox–обмежує формат даних, що вводяться користувачем; -WebBrowser–дозволяє переміщатися по веб-сторінці в межах форми; -LinkLabel–дозволяє добавляти веб-посилання на інше вікно чи на вебвузол; -DateTimePicker-відображає графічний календар, який дозволяє користувачу вибирати дату/час; -ProgressBar–дозволяє спостерігати за ходом виконання в часі деякого процесу; -PictureBox–дозволяє відобразити графічне зображення потрібного компонента Елементи управління группи Menus& Toolbars палітри компонентів пов’язані із організацією меню: -MenuStrip –створює головне меню додатку, за допомогою якого здійснюється управління роботою як всього додатку, так і його окремих блоків; -ContextMenuStrip –створює контексні меню; -ToolStrip–дозволяє створювати панелі інструментів із використанням різних стилів та принципів. Елементи управління групи Components палітри компонентів пов’язані із часом: -Timer–задає лічильник часу; 1.2. Розробив Перевірив Використання dataGridView при роботі з даними файлів. Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 10 Елемент dataGridView на формі можна використовувати не лише для введення-виведення матриць, адже цей елемент має широкий спектр налаштовуваних властивостей, завдяки яким можна задавати різні властивості для різних стовпців елемента. Цю можливість доволі зручно використовувати для введення-виведення даних бінарних файлів, поля яких мають різні типи даних: числові, рядкові, логічні, списки та ін. Розглянемо докладніше налаштування dataGridView. Після розміщення такого елемента на формі доцільно почергово створити на ньому необхідну кількість стовпців і при їх створенні відразу задати тип даних, заголовки та інші необхідні значення стовпців, наприклад: – у властивості HeaderText доцільно вписати текст заголовка відповідного стовпця; – у властивості ColumnType замість значення за замовчуванням (DataGridViewTextBoxColumn) для текстових і рядкових даних вибрати зі списку одне з можливих значень: – DataGridViewComboBoxColumn – список з набором можливих текстових значень, для якого у властивості Items доцільно через Enter вписати текст можливих значень, наприклад: назви операторів мобільного зв’язку, назви посад співробітників або назви студентських груп; – DataGridViewCheckBoxColumn – зазвичай відповідає логічному типу (значення true та false); – DataGridViewImageColumn – використовується для виведення зображень; – DataGridViewButtonColumn – використовується для виведення кнопок у клітинках таблиці; – властивість AllowUserToAddRows дозволяє додавати нові рядки таблиці при заповненні значень останнього рядка таблиці (за замовчуванням значення true). Значення false забороняє автоматичне додавання нового рядка; – властивість ColumnHeadersVisible дозволяє приховати заголовки стовпців при значенні false; Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 11 – RowHeadersVisible дозволяє приховати заголовки рядків при значенні false; – властивість RowCount зберігає значення кількості рядків; – властивість ColumnCount зберігає значення кількості стовпців; – властивість Width задає ширину стовпця у пікселях; – властивість ToolTipText містить текст підказки, яка виводитиметься при наведенні покажчика миші на заголовок стовпця; – властивість AutoSizeMode дає можливість вибрати режим автоматичного формування ширини того чи іншого стовпця. Наприклад, значення AllCells задасть автоматичний підбір ширини стовпця за максимальним вмістом стовпця; – властивість ReadOnly вмикає-вимикає дозвіл редагування даних у стовпці; – властивість SortMode надає можливість задавати режим автоматичного сортування даних у стовпці. – Columns – колекція стовпців; – Rows – колекція рядків; – Font – параметри шрифту. 1.1. Створення Windows Forms. Для створення Windows Forms нам знадобиться програмне забезпечення MS Visual Stidio. Спочатку ми створюємо пустий проект СLR, (деталі показані на рис.1.1), потім створюємо елемент Windows Forms (дивись рис. 1.2). Після того як ми створили форму, ми можемо розміщати на ній різні елементи для її графічної візуалізації (рис.1.3), серед простих елементів можна виділити такі: button(кнопка), label(опис), TextBox(дозволяє користувачеві вводити\виводити текст, або редагувати його), PictureBox(дозволяє виводити зображення на формі), СheckBox(має два параметри true\falsh), вигляд форми з розміщеними елементами показаний на рис. 1.4. Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 12 Рис. 1.1 Створення проекту. Рис.1.2 Створення Форми Windows Forms. Рис. 1.3 Створення елементів на формі. Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 13 Рис. 1.4 Приклад реалізації форми, з простими елементами. Для створення Windows Forms нам знадобиться програмне забезпечення MS Visual Stidio. Спочатку ми створюємо пустий проект СLR, (деталі показані на рис.1.1), потім створюємо елемент Windows Forms (дивись рис. 1.2). Після того як ми створили форму, ми можемо розміщати на ній різні елементи для її графічної візуалізації (рис.1.3), серед простих елементів можна виділити такі: button(кнопка), label(опис), TextBox(дозволяє користувачеві вводити\виводити текст, або редагувати його), PictureBox(дозволяє виводити зображення на формі), СheckBox(має два параметри true\falsh), Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 14 РОЗДІЛ 2. СТВОРЕННЯ ОСНОВНОГО МОДУЛЯ З ПОЯСНЕННЯМИ. 2.1. Робота з бінарним файлом. Мій проект буде являти собою: багатомодульну програму, в якій буде створено додаток для магазину електроніки. В ньому будуть використовуватися такі функції, як: - параметр сортування: за зростанням ємності диску; - відбір даних за умовою: ПК з наявним Wi-Fi; - умова на відбір даних з форматуванням документу: PC випущені Lenovo або Acer; - умова на видалення даних: PC з оперативною пам’яттю до 4ГБ. Перед написанням коду спочатку слід розпочати роботу зі створення та налаштування форми. На формі треба розмістити елемент tabControl, він дасть змогу створити на формі декілька вкладок для спрощення роботи. Після розміщення tabControl створюємо 4 вкладки. На першій вкладці ми розміщаємо кнопку button та елемент dataGridview, після розміщення dataGridview слід створити на ньому 5 стовпців: 1) назва 1-го стовпця –«Тип ПК»; 2) назва 2-го стовпця – «Назва»; 3) назва 3-го стовпця – «Фірма-виробник»; 4) назва 4-го стовпця – «Наявність Wi-Fi»; 5) назва 5-го стовпця – «Ємність ОП»; 6) назва 6-го стовпця – «Ємність диску». Тепер можна скопіювати dataGridView1 і вставити його копії на інші вкладки, створивши таким чином вже налаштовані dataGridView2 та dataGridView3, для яких залишилось для властивості AllowUserToAddRows задати значення false. Вигляд створеної форми для першої вкладки можна побачити на рис.2.1., як виглядає друга вкладка показано на рис. 2.2. Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 15 Рис. 2.1 вигляд першої вкладки «Заповнення бінарного файлу». Програмний код для запису даних: private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { BinaryWriter^ fb = gcnew BinaryWriter(File::Open(fname, FileMode::OpenOrCreate));//відкриваємо бінарний файл fb->Seek(0, SeekOrigin::End); try { int k = dataGridView1->Rows->GetRowCount(DataGridViewElementStates::Visible);//пишемо дані в DataGridView for (int i = 0; i < k - 1; i++) { String^ Код = Convert::ToString(dataGridView1[0, i]->Value); String^ Назва = Convert::ToString(dataGridView1[1, i]->Value); String^ Фірма = Convert::ToString(dataGridView1[2, i]->Value); bool Гарантія = Convert::ToBoolean(dataGridView1[3, i]->Value); int year = Convert::ToInt32(dataGridView1[4, i]->Value); double vart = Convert::ToDouble(dataGridView1[5, i]->Value); fb->Write(Код); fb->Write(Назва); fb->Write(Фірма); fb->Write(Гарантія); fb>Write(year); fb->Write(vart); } dataGridView1->Rows->Clear(); } finally { fb->Close(); }}} Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 16 Рис. 2.2 «Виведення бінарного файлу. Програмний код для виведення бінарного файлу: //Переглянути вміст файлу private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { dataGridView2->Rows->Clear(); if (File::Exists(fname) == false) { MessageBox::Show("file not exists"); return; } BinaryReader^ fb = gcnew BinaryReader(File::OpenRead(fname)); try { while (fb->BaseStream->Position < fb->BaseStream->Length) { String^ Код = fb->ReadString(); String^ Назва = fb->ReadString(); String^ Фірма = fb->ReadString(); bool Гарантія = fb->ReadBoolean(); int year = fb->ReadInt32(); double vart = fb->ReadDouble(); dataGridView2->Rows->Add(Код, Назва, Фірма, Гарантія, year, vart); } } finally { fb->Close(); } } 2.2. Виведення\Видалення даних з бінарного файла за умовою. Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 17 У моєму програмному проекті мені треба створити дві умови: - 1 умова - вивести дані на екран про телевізори Sony з гарантією; - 2 умова - видалити товари, яким менше двох років з ціною понад 30000грн. На третій вкладці tabControl ми створюємо дві кнопки button. Перша кнопка буде виводити дані за умовою на екран, друга буде видаляти ті дані, які вказані в умові. Вигляд створеної вкладки можна подивитися на Рис. 2.2. Рис.2.2 Відбір даних за умовою. Програмний код для вкладки «Відбір даних за умовою»: //Видалити телевізори, яким менше двох років з ціною понад 30000грн. private: System::Void button6_Click(System::Object^ sender, System::EventArgs^ e) { int i = 0; dataGridView3->Rows->Clear(); if (File::Exists(fname) == false) { MessageBox::Show("file not exists"); return; } BinaryReader^ fb = gcnew BinaryReader(File::OpenRead(fname)); BinaryWriter^ tmp = gcnew BinaryWriter(File::Open("tmp.bin", FileMode::Create)); try { while (fb->BaseStream->Position < fb->BaseStream->Length) { String^ Код = fb->ReadString(); String^ Назва = fb->ReadString(); String^ Фірма = fb->ReadString(); bool Гарантія = fb->ReadBoolean(); int year = fb->ReadInt32(); Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 18 double vart = fb->ReadDouble(); if (vart>30000.0 && year > 2020 ) { dataGridView3->Rows->Add(Код, Назва, Фірма, Гарантія, year, vart ); dataGridView3->Rows[i]->HeaderCell->Value = (i + 1).ToString(); i++; } else { tmp->Write(Код); tmp->Write(Назва); tmp->Write(Фірма); tmp>Write(Гарантія); tmp->Write(year); tmp->Write(vart); } } tmp->Close(); if (!i) { MessageBox::Show("Таких записів у файлі не існує"); File::Delete("tmp.bin"); } else { if (MessageBox::Show(L"Ви дійсно бажаєте видалити ці записи з файла ?", L"Видалити дані з файла?", System::Windows::Forms::MessageBoxButtons::YesNo) == System::Windows::Forms::DialogResult::Yes) { fb->Close(); File::Replace("tmp.bin", fname, "Copy\\" + fname); dataGridView3->Rows->Clear(); MessageBox::Show("Для перегляду нового вмісту файла перейдіть на другу вкладку."); } else File::Delete("tmp.bin"); } } finally { fb->Close(); } } 2.3 Формування текстового файлу за умовою Створюємо в tabControl вкладку «Формування текстового файлу за умовою». Мені треба створити умову на телевізори, які випущені 3 роки тому. На Рис. 2.3 зображена вкладка з Формуванням текстового файлу за умовою. Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 19 Рис.2.3 Формування текстового файлу за умовою. Програмний код для «Формування текстового файлу за умовою»: / Текстовий файл: телевізори випущені три роки тому private: System::Void button7_Click(System::Object^ sender, System::EventArgs^ e) { int i = 0; dataGridView4->Rows->Clear(); if (File::Exists(fname) == false) { MessageBox::Show("file not exists"); return; } BinaryReader^ fb = gcnew BinaryReader(File::OpenRead(fname)); TextWriter^ ft = gcnew StreamWriter(File::OpenWrite("TV.doc")); try { ft->WriteLine("ТЕЛЕВІЗОРИ випущені три роки тому"); while (fb->BaseStream->Position < fb->BaseStream->Length) { String^ код = fb->ReadString(); String^ назва = fb->ReadString(); String^ фірма = fb->ReadString(); bool гарантія = fb->ReadBoolean(); int year = fb->ReadInt32(); double vart = fb->ReadDouble(); if (year == 2019) { dataGridView4->Rows->Add(код, назва, фірма, гарантія, year, vart); dataGridView4->Rows[i]->HeaderCell->Value = (i + 1).ToString(); i++; String^ s = код + "\t" + назва + "\t" + фірма + "\t" + Convert::ToString(гарантія) + "\t" + Convert::ToString( year) + "\t" + Convert::ToString(vart); ft->WriteLine(s); } } } finally Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 20 { fb->Close(); ft->Close(); } } Структура програмного коду для видалення даних буде такою: 1) при читанні даних з файла у додатковий тимчасовий файл будуть записуватись тільки ті дані, які треба залишити у файлі, а дані, які задовольняють умові видалення, виводитимуться на форму у таблицю (елемент dataGridView3); 2) якщо виявиться, що у файлі не було зазначених в умові даних, про це виведеться відповідне повідомлення, а тимчасовий файл буде знищено. Інакше буде сформовано діалогове вікно із запитом на підтвердження видалення даних і кнопками "Так" і "Ні"; 3) у разі натиснення користувачем кнопки "Так", вихідний файл буде замінений (метод File::Replace) на щойно сформований тимчасовий файл з даними без видалених. Крім того, користувачеві буде запропоновано перейти на другу вкладку, щоб переглянути новий вміст файла; 4) якщо ж користувач натиснув кнопку "Ні", сформований тимчасовий файл буде видалено, тобто вихідний файл залишиться без змін. Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 21 РОЗДІЛ 3. СТВОРЕННЯ ДОДАТКОВИХ ФОРМ ТА МЕНЮ. 3.1. Функції основного модуля для команд меню. На формі програмного проекту слід розмістити елемент-меню: menuStrip1, докладніше показано на рис.3.1. Рис. 3.1. Функції основного модуля для команд. Створення програмного коду для меню: // Робота з файлом – Довідка про файл private: System::Void довідкаПроФайлToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { if (!File::Exists(fname)) { MessageBox::Show("file not exists"); return; } FileInfo^ f = gcnew FileInfo(fname); MessageBox::Show("Повне ім'я файла з даними - " + f->FullName + "\nРозмір файла - " + (f>Length).ToString() + " байтів.\nЧас створення - " + f->CreationTime.ToString() + "\nЧас останньої операції дописування даних - " + f->LastWriteTime.ToString()); } //Про автора private: System::Void проАвтораToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { Avtor^ fr2 = gcnew Avtor(); fr2->ShowDialog(); // Робота з файлом – Резервне копіювання бінарного файла Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 22 private: System::Void резервнеКопіюванняБінарногоФайлуToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { { if (!Directory::Exists("Copy")) Directory::CreateDirectory("Copy"); // Ствoрити каталог FileInfo^ f = gcnew FileInfo(fname); f->CopyTo("Copy\\"+fname,true); } } // Робота з файлом – Очистити бінарний файл private: System::Void очиститиБінарнийФайлToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { BinaryWriter^ fb = gcnew BinaryWriter(File::Open(fname, FileMode::Create)); fb->Close(); dataGridView2->Rows->Clear(); } //про завдання private: System::Void проЗавданняToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { Zavdan^ fr3 = gcnew Zavdan(); fr3->ShowDialog(); } // Вихід з програми private: System::Void вихідЗПрограмиToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { Close(); } 3.2. Функції для модуля (форми) "Про автора" Для створення нового модулю «Про автора», треба створити новий проект(Форма Windows Forms) та задати ім’я форми – Avtor.h. На формі для автора мною було розміщено такі елементи як pictureBox, кнопка button та 3 елеманта label. Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 23 Для того щоб з’єднати дві форми між собою треба повернутися до нашого основного коду, та вписати там після команди #pragma once команду #include "Avtor.h". Програмний код для командної кнопки буде доволі простим: private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { Close(); На рис. 3.3. можна побачити як буду виглядати додаток «Про автора». Рис.3.3. «Про авторку». 3.3. Створення модуля (форми) "Завдання". Створюємо новий проект з ім’ям Zavdan. На формі «Завдання» розміщуємо такі елементи як: - menuString; - fontdialog; - openFileDialog; - saveFileDialog. Програмний код для створення форми: //Показти завдання Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 24 private: System::Void показатиЗавданняToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { openFileDialog1->Filter = "Doc files(*.rtf)|*.rtf"; if (openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK) richTextBox1->LoadFile(openFileDialog1->FileName); } //Замінити шрифт private: System::Void змінитиШрифтToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { fontDialog1->ShowColor = true; fontDialog1->Font = richTextBox1->Font; fontDialog1->Color = richTextBox1->ForeColor; if (fontDialog1->ShowDialog() != System::Windows::Forms::DialogResult::Cancel) { richTextBox1->SelectionFont = fontDialog1->Font; richTextBox1->SelectionColor = fontDialog1->Color; } } //Зберегти файл private: System::Void зберегтиЗміниToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { saveFileDialog1->Filter = "Doc files(*.rtf)|*.rtf"; if (saveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK) richTextBox1->SaveFile(saveFileDialog1->FileName); richTextBox1->Modified = false; } //Вихід private: System::Void вихідToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { // Якщо були зміни, вивести повідомлення з кнопками Да - Нет // Якщо користувач натиснув Да, викликати функцію меню "Зберегти зміни" if (richTextBox1->Modified) if (MessageBox::Show("Текст було змінено.\nЗберегти зміни?", "Закриття форми", MessageBoxButtons::YesNo, MessageBoxIcon::Question) == System::Windows::Forms::DialogResult::Yes) Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 25 зберегтиЗміниToolStripMenuItem_Click(зберегтиЗміниToolStripMenuItem, e); Close(); } }; } Зв’язуємо цей проект з головним проектом, а саме прописуємо на початку головного коду таку команду: #include "Zavdan.h". На рис.3.4 можна побачити як буде виглядати форма «Про завдання». Рис.3.4. форма «Про завдання». 3.4. Створення модуля (форми) "Заставка". Створюємо нову форму з ім’ям Zastavka, та зв’язуємо її з головною формою, для цього прописуємо в головному коді, команду: #include "Zastavka.h" Розміщуємо такі елементи на формі timer, pictureBox. Вигляд заставки показаний на рис. 3.5. Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 26 Рис. 3.5. «Застака». Вигляд програмного коду: //Добавляємо таймер private: System::Void Zastavka_Load(System::Object^ sender, System::EventArgs^ e) { this->timer1->Start(); } // Настройка таймера private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { this->Opacity -= 0.02; // кожної 0,1 секунди прозорість форми зменшуватиметься на 2% if (this->Opacity == 0) Close(); } private: System::Void pictureBox1_Click(System::Object^ sender, System::EventArgs^ e) { } }; Для того щоб запустити цю форму треба дописати в головному коді три оператора: this->Hide(); Zastavka^ fr4 = gcnew Zastavka(); fr4->ShowDialog(); після оператора: String^ fname; // глобальна змінна - ім’я файла Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 27 private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) { fname = "magazin.bin"; Для її створення заставки ми виконали команду Проект / Добавить новый элемент / Форма Windows Forms, ввели ім’я форми – Zastavka та натиснули кнопку Додати. Розмістили на формі елементи timer1 та pictureBox1, зображення до якого завантажити за допомого властивості Image. Подвійним клацанням по таймеру та по формі створили шаблони функції. Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 28 РОЗДІЛ 4. ЗДОБУТІ РЕЗУЛЬТАТИ У ВИГЛЯДІ ФОРМ ПРОЕКТУ. Повний код програми можна переглянути в Додатку А. Рис. 4.1 - Вигляд головної форми після натиснення кнопки "Переглянути бінарний файл" на вкладці "Виведення вмісту файла". Рис. 4.2 – Вигляд головної форми після натиснення кнопки "Сортування за cпаданням вартості" на вкладці "Виведення вмісту файла" Рис.4.3 – Вигляд головної форми після натиснення кнопки «Переглянути вміст файлу» Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 29 Рис. 4.4 – Вигляд головної форми після натиснення кнопки «Телевізори Sony з гарантією» Рис.4.5 – Вигляд головної форми після натиснення кнопки “Телевізори випущені три роки тому" Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 30 Рисунок 4.6 – Вигляд сформованого текстового документа з ім’ям "TV. doc" Використовуючи середовище програмування Visual С++, ми створили програмний проект, який реалізує такі завдання: 1) програмне створення бінарного (двійкового) файла та заповнення його даними. 2) програмний перегляд даних створеного файла; 3) можливість редагування та зберігання відредагованого файла; 4) впорядкування (сортування) даних згідно з параметром. 5) відбір даних файла за певною умовою. 6) відбір з бінарного файла даних за умовою, та створення на основі відібраних даних текстового звітного документа; 7) створення трьох форм: 1) про автора, 2) про завдання та 3) формузаставку. Крім того, розробити програмний код для виведення, редагування та форматування параметрів шрифту текстового документа із завданням, виведення Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 31 даних про розмір файла даних, дату його створення та час останнього редагування тощо. Доступ до цих функцій організувати за допомогою меню; 8) можливість видалення даних з бінарного файла даних за умовою. Поставлені завдання виконані повністю. Розроблений проект можна успішно застосовувати на практиці, наприклад для застосування в різних магазинах електроніки. Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 32 ВИСНОВКИ У даній роботі були вивчені теоретичні відомості додатків програми MSVisualC++, а саме додатки із графічним інтерфейсом, що використовують форми, створюються та управляються в середовищі CLR. Були продемонстровані особливості створення проектів. Показаний спосіб створення Windows Forms, їх особливості. Мною було створено багатомодульний програмний проект. В ньому були реалізовані такі функції, як: заповнення бінарного файлу, виведення вмісту файлу, відбір\видалення даних за умовою та форматування текстового файлу. В процесі створення програмного проекту використовувалися різні елементи Windows Forms, а саме: button(використовувався для створення графічних кнопок), DataGridView(створення графічних стовпців та стеків), menuStrip(cтворення головного меню-додатку), tabControl(створення вкладок), timer(створення форми з інтервалом), pictureBox(створєю зображення), label(опис), fontDialog(заміна шрифту), openFileDialog(дозволяє відкрити файл), saveFileDialog(дозволяє вибрати місцезнаходження для зберігання файлу), RichTextBox(дозволяє вписати\редагувати текст). В проекті було створено додаткові форми та меню, а саме було реалізовано створення додатків «Про автора», «Про завдання» також була створена заставка для проекту. Поставлені завдання виконані повністю. Розроблений проект можна успішно застосовувати на практиці, наприклад для застосування в різних магазинах електроніки. Отже можна сказати, що програмний проект придатний для використання. При необхідності його можна легко модернізувати і допрацювати, так як при розробці програмного коду, мною були записані пояснювальні коментарі для зручного модернізування програмного проекту. Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 33 СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ 1. Библиотека классов платформы .NET Framework [Электронный ресурс]. – Режим доступа: http://msdn.microsoft.com/ru-ru/library/gg145045(v=vs.110).aspx. – Название с экрана. 2. Довбуш Г. Ф. Visual C++ на примерах / Г.Ф. Довбуш, А.Д. Хомоненко ; под ред. проф. А.Д. Хомоненко. – СПб. : БХВ-Петербург, 2007. – 528 с. 3. Дейтел Х. М. Как программировать на С++; пер с англ. / Х. М. Дейтел, П. Дж. Дейтел. – М. : ООО "Бином-Пресс", 2008. – 1456 с. 4. Зиборов В. В. MS Visual C++ 2010 в среде .NET. Библиотека программиста / Зиборов В. В. – СПб. : Питер, 2012. – 320 с. 5. Роберт Лафоре. Объектно-ориентированное программирование в С++, 4е издание, 2018 – 924 ст. 6. Сергеев А.П., Терен А.Н., Программирование в Microsoft Visual C++ 2005. Самоучитель. –С.Пб.: Диалектика, 2006. -352 ст. 7. Солтер Н., Клепер Дж., C++ для профессионалов . –С.Пб.: Диалектика, 2006. -912 ст. 8. Стивен Прата. Язык программирования С++. Лекции и упражнения : учебник ; пер с англ. / Стивен Прата. – СПб.: ООО "ДиаСофтЮП", 2005. – 1104с. 9. Страуструп Б. Язык программирования С++. Специальное издание ; пер. с англ. / Страуструп Б. – М. : ООО "Бином-Пресс", 2006. – 1104 с. 10. C++. Основи програмування. Теорія та практика: підручник / [О. Г. Трофименко, Ю. В. Прокоп, І. Г. Швайко, Л. М. Буката та ін.] ; за ред. О. Г. Трофименко. – Одеса : Фенікс, 2010. – 544 с. 11. C++. Теорія та практика: навч. посіб. з грифом МОНУ/ [О. Г. Трофименко, Ю. В. Прокоп, І. Г. Швайко, Л. М. Буката та ін.] ; за ред. О. Г. Трофименко. – Одеса : ВЦ ОНАЗ, 2011. – 587 с. 12. Трофименко О. Г. Основи програмування. Базові алгоритми: метод. вказівки для лаб. і практ. робіт / О. Г. Трофименко, Ю. В. Прокоп, І. Г. Швайко, Л. М. Буката. – Ч. 1. – Одеса: ВЦ ОНАЗ ім. О. С. Попова, 2014. – 108 с. Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 34 13. Трофименко О. Г. Основи програмування. Опрацювання структурованих типів: метод. вказівки для лаб. і практ. робіт / О. Г. Трофименко, Ю. В. Прокоп, І. Г. Швайко, Л. М. Буката. – Ч. 2. – Одеса: ВЦ ОНАЗ ім. О. С. Попова, 2014. – 130 с. 14. Трофименко О. Г. Основи програмування. Програмне опрацювання файлів: метод. вказівки для лаб. і практ. робіт / О. Г. Трофименко, Ю. В. Прокоп, І. Г. Швайко, Л. М. Буката. – Ч. 3. – Одеса: ВЦ ОНАЗ ім. О. С. Попова, 2015. – 80с. 15. Трофименко О. Г. Створення багатомодульних програмних проектів для опрацювання даних у файлах засобами Visual C++: метод. вказівки для виконання курсової роботи з дисципліни "Основи програмування" / О. Г. Трофименко, Ю. В. Прокоп. – Одеса: ВЦ ОНАЗ ім. О. С. Попова, 2015. – 44 с. 16. Хортон А. Visual C++ 2010: полный курс.; пер. с англ. / Хортон А. – М.: ООО "И.Д. Вильямс", 2011. – 1216 с. 17. Хортон А., Visual C++ 2005: базовый курс. –С.Пб.: Диалектика, 2007. 1152 ст. 18. Шилдт Г. , C++: базовый курс, 3-е издание . -М.: Вильямс, 2005. 624 ст. 19. Visual C++ .NET: пособие для разработчиков C++ / [А. Корера, С. Фрейзер, С. Джентайл и др.]. – М. : ЛОРИ, 2003. – 398 с. Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 35 ДОДАТКИ Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 36 ДОДАТОК А Програмний код: #pragma endregion String^ fname; // глобальна змінна - ім’я файла private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) { fname = "magazin.bin"; this->Hide(); Zastavka^ fr4 = gcnew Zastavka(); fr4->ShowDialog(); } // Записати дані у бінарний файл private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { BinaryWriter^ fb = gcnew BinaryWriter(File::Open(fname, FileMode::OpenOrCreate));//відкриваємо бінарний файл fb->Seek(0, SeekOrigin::End); try { int k = dataGridView1->Rows>GetRowCount(DataGridViewElementStates::Visible);//пишемо дані в DataGridView for (int i = 0; i < k - 1; i++) { String^ Код = Convert::ToString(dataGridView1[0, i]->Value); String^ Назва = Convert::ToString(dataGridView1[1, i]->Value); String^ Фірма = Convert::ToString(dataGridView1[2, i]->Value); bool Гарантія = Convert::ToBoolean(dataGridView1[3, i]->Value); int year = Convert::ToInt32(dataGridView1[4, i]->Value); double vart = Convert::ToDouble(dataGridView1[5, i]->Value); fb->Write(Код); fb->Write(Назва); fb->Write(Фірма); fb>Write(Гарантія); fb->Write(year); fb->Write(vart); } dataGridView1->Rows->Clear(); } finally { fb->Close(); } } //Переглянути вміст файлу private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { dataGridView2->Rows->Clear(); if (File::Exists(fname) == false) { MessageBox::Show("file not exists"); return; } BinaryReader^ fb = gcnew BinaryReader(File::OpenRead(fname)); try { while (fb->BaseStream->Position < fb->BaseStream->Length) { String^ Код = fb->ReadString(); String^ Назва = fb->ReadString(); String^ Фірма = fb->ReadString(); bool Гарантія = fb->ReadBoolean(); int year = fb->ReadInt32(); Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 37 double vart = fb->ReadDouble(); dataGridView2->Rows->Add(Код, Назва, Фірма, Гарантія, year, vart); } } finally { fb->Close(); } } //Зберегти відред файл private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) { BinaryWriter^ fb = gcnew BinaryWriter(File::Open(fname, FileMode::Create)); fb->Seek(0, SeekOrigin::End); try { int kol = dataGridView2->Rows->GetRowCount(DataGridViewElementStates::Visible); for (int i = 0; i < kol-1; i++) { String^ Код = Convert::ToString(dataGridView2[0, i]->Value); String^ Назва = Convert::ToString(dataGridView2[1, i]->Value); String^ Фірма = Convert::ToString(dataGridView2[2, i]->Value); bool Гарантія = Convert::ToBoolean(dataGridView2[3, i]->Value); int year = Convert::ToInt32(dataGridView2[4, i]->Value); double vart = Convert::ToDouble(dataGridView2[5, i]->Value); fb->Write(Код); fb->Write(Назва); fb->Write(Фірма); fb>Write(Гарантія); fb->Write(year); fb->Write(vart); } } finally { fb->Close(); } } //Сортування за зростанням ємності вартості private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) { button2_Click(button2, e); dataGridView2->Sort(dataGridView2->Columns[5], ListSortDirection::Ascending);//Сортування за зростанням вартості } //Телевізори Sony з гарантією private: System::Void button5_Click(System::Object^ sender, System::EventArgs^ e) { dataGridView3->Rows->Clear(); if (File::Exists(fname) == false) { MessageBox::Show("file not exists"); return; } BinaryReader^ fb = gcnew BinaryReader(File::OpenRead(fname)); try { while (fb->BaseStream->Position < fb->BaseStream->Length) { String^ Код = fb->ReadString(); String^ Назва = fb->ReadString(); String^ Фірма = fb->ReadString(); bool Гарантія = fb->ReadBoolean(); int year = fb->ReadInt32(); Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 38 double vart = fb->ReadDouble(); if (Гарантія && Фірма == "Sony") dataGridView3->Rows->Add(Код, Назва, Фірма, Гарантія, year, vart); } } finally { fb->Close(); } } //Видалити телевізори, яким менше двох років з ціною понад 30000грн. private: System::Void button6_Click(System::Object^ sender, System::EventArgs^ e) { int i = 0; dataGridView3->Rows->Clear(); if (File::Exists(fname) == false) { MessageBox::Show("file not exists"); return; } BinaryReader^ fb = gcnew BinaryReader(File::OpenRead(fname)); BinaryWriter^ tmp = gcnew BinaryWriter(File::Open("tmp.bin", FileMode::Create)); try { while (fb->BaseStream->Position < fb->BaseStream->Length) { String^ Код = fb->ReadString(); String^ Назва = fb->ReadString(); String^ Фірма = fb->ReadString(); bool Гарантія = fb->ReadBoolean(); int year = fb->ReadInt32(); double vart = fb->ReadDouble(); if (vart>30000.0 && year > 2020 ) { dataGridView3->Rows->Add(Код, Назва, Фірма, Гарантія, year, vart ); dataGridView3->Rows[i]->HeaderCell->Value = (i + 1).ToString(); i++; } else { tmp->Write(Код); tmp->Write(Назва); tmp->Write(Фірма); tmp>Write(Гарантія); tmp->Write(year); tmp->Write(vart); } } tmp->Close(); if (!i) { MessageBox::Show("Таких записів у файлі не існує"); File::Delete("tmp.bin"); } else { if (MessageBox::Show(L"Ви дійсно бажаєте видалити ці записи з файла ?", L"Видалити дані з файла?", System::Windows::Forms::MessageBoxButtons::YesNo) == System::Windows::Forms::DialogResult::Yes) { fb->Close(); File::Replace("tmp.bin", fname, "Copy\\" + fname); dataGridView3->Rows->Clear(); MessageBox::Show("Для перегляду нового вмісту файла перейдіть на другу вкладку."); } Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 39 else File::Delete("tmp.bin"); } } finally { fb->Close(); } } //------- Вкладка "Формування текстового документу" ---------// Текстовий файл: телевізори випущені три роки тому private: System::Void button7_Click(System::Object^ sender, System::EventArgs^ e) { int i = 0; dataGridView4->Rows->Clear(); if (File::Exists(fname) == false) { MessageBox::Show("file not exists"); return; } BinaryReader^ fb = gcnew BinaryReader(File::OpenRead(fname)); TextWriter^ ft = gcnew StreamWriter(File::OpenWrite("TV.doc")); try { ft->WriteLine("ТЕЛЕВІЗОРИ випущені три роки тому"); while (fb->BaseStream->Position < fb->BaseStream->Length) { String^ код = fb->ReadString(); String^ назва = fb->ReadString(); String^ фірма = fb->ReadString(); bool гарантія = fb->ReadBoolean(); int year = fb->ReadInt32(); double vart = fb->ReadDouble(); if (year == 2019) { dataGridView4->Rows->Add(код, назва, фірма, гарантія, year, vart); dataGridView4->Rows[i]->HeaderCell->Value = (i + 1).ToString(); i++; String^ s = код + "\t" + назва + "\t" + фірма + "\t" + Convert::ToString(гарантія) + "\t" + Convert::ToString( year) + "\t" + Convert::ToString(vart); ft->WriteLine(s); } } } finally { fb->Close(); ft->Close(); } } private: System::Void menuStrip1_ItemClicked(System::Object^ sender, System::Windows::Forms::ToolStripItemClickedEventArgs^ e) { } //Про автора private: System::Void проАвтораToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { Avtor^ fr2 = gcnew Avtor(); Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 40 fr2->ShowDialog(); } // Робота з файлом – Довідка про файл private: System::Void довідкаПроФайлToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { if (!File::Exists(fname)) { MessageBox::Show("file not exists"); return; } FileInfo^ f = gcnew FileInfo(fname); MessageBox::Show("Повне ім'я файла з даними - " + f->FullName + "\nРозмір файла - " + (f>Length).ToString() + " байтів.\nЧас створення - " + f->CreationTime.ToString() + "\nЧас останньої операції дописування даних - " + f->LastWriteTime.ToString()); } // Робота з файлом – Резервне копіювання бінарного файла private: System::Void резервнеКопіюванняБінарногоФайлуToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { { if (!Directory::Exists("Copy")) Directory::CreateDirectory("Copy"); // Ствoрити каталог FileInfo^ f = gcnew FileInfo(fname); f->CopyTo("Copy\\"+fname,true); } } // Робота з файлом – Очистити бінарний файл private: System::Void очиститиБінарнийФайлToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { BinaryWriter^ fb = gcnew BinaryWriter(File::Open(fname, FileMode::Create)); fb->Close(); dataGridView2->Rows->Clear(); } //про завдання private: System::Void проЗавданняToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { Zavdan^ fr3 = gcnew Zavdan(); fr3->ShowDialog(); } // Вихід з програми private: System::Void вихідЗПрограмиToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { Close(); } }; Розробив Перевірив Костюченко Д.О. Сухойваненко Ю. М. Підпис Дата ПРОГРАМУВАННЯ КП 123.031.006 Арк. 41