МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ АВІАЦІЙНИЙ УНІВЕРСИТЕТ Науково-навчальний інститут комп’ютерних інформаційних технологій Кафедра комп’ютеризованих систем управління ДОПУСТИТИ ДО ЗАХИСТУ Завідувач кафедри Литвиненко О.Є. « » 2018 р. ДИПЛОМНА РОБОТА (ПОЯСНЮВАЛЬНА ЗАПИСКА) ВИПУСКНИКА ОСВІТНЬО–КВАЛІФІКАЦІЙНОГО РІВНЯ "БАКАЛАВР" Тема: Програмна система багатокритеріального підбору постачальників товарів і послуг Виконавець: Фурсаєва А.С. Керівник: Артамонов Є.Б. Нормоконтролер: Тупота Є.В. Київ 2018 НАЦІОНАЛЬНИЙ АВІАЦІЙНИЙ УНІВЕРСИТЕТ Науково-навчальний інститут комп’ютерних інформаційних технологій Кафедра комп’ютеризованих систем управління Освітньо-кваліфікаційний рівень бакалавр Напрям (спеціальність) 6.050102 “Комп’ютерна інженерія” (шифр, найменування) ЗАТВЕРДЖУЮ Завідувач кафедри Литвиненко О. Є. «____»_______________2017 р. ЗАВДАННЯ на виконання дипломної роботи (проекту) Фурсаєвої Аліси Сергіївни (прізвище, ім'я, по батькові випускника в родовому відмінку) 1. Тема проекту (роботи): Програмна система багатокритеріального підбору постачальників товарів і послуг затверджена наказом ректора від " хх " хххххххх 2018 року № ххх/ст. 2. Термін виконання роботи: з 18.03.2018 до 28.05.2018 3. Вихідні дані до роботи: системна програмна документація, документація до бібліотек 4.Зміст пояснювальної записки: 1) Характеристика та аналіз об’єкта дослідження 2) Вибір методу проектування архітектури та моделі функціонування системи 3) Програмна реалізація системи багатокритеріального підбору постачальників 5.Перелік обов’язкового графічного матеріалу: 1) Рис.1.1. Класифікація електронних магазинів. 2) Рис. 2.1. Cхема вибору постачальника на основі багатокритеріального підбору. 3) Рис.2.2. Алгоритм розв’язку задачі. 4) Рис.3.3. Алгоритм роботи програми. 5) Рис.3.4. Алгоритм роботи програми. 6. Календарний план № Етапи виконання дипломного проекту п/п 1 Провести огляд літератури за темою дипломної роботи та аналіз існуючих систем. 2 Зробити вибір компонентів системи. Розробити структуру програмних засобів системи. Розробити програмні засоби. 3 4 6 Провести відладку програмних засобів на модельному зразку. Написати пояснювальну записку. 7. Підготувати графічний матеріал. 8. Підготувати доповідь та презентацію 5 Термін виконання етапів Примітка 18.11.17-19.11.17 20.11.17-22.11.17 23.11.17-25.11.17 26.11.17-02.12.17 03.12.17-04.12.17 05.12.17-14.12.17 15.12.17-20.12.17 7. Дата видачі завдання Керівник дипломного проекту (підпис керівника) Завдання прийняв до виконання Є. Артамонов А. Фурсаєва (підпис випускника) РЕФЕРАТ Пояснювальна записка до дипломної роботи на тему “Програмна система багатокритеріального підбору постачальників товарів і послуг”: 54 с., 5 рис., 10 табл., 15 літературних джерел, 2 додатки. ПІДБІР ПОСТАЧАЛЬНИКА, ЕЛЕКТРОННА КОМЕРЦІЯ, МОДЕЛЬ ВЗАЄМОДІЇ ПОКУПЦЯ ТА КОМЕРЦІЙНОГО ПІДПРИЄМСТВА Об’єкт дослідження – пошук найкращого постачальника товарів і послуг. Мета дипломного проекту – дослідження методу багатокритеріального підбору та розробка програмного продукту для його реалізації. Методи дослідження – аналіз літературних джерел та документації щодо електронної комерції, визначення основних методів пошуку найкращого постачальника, розробка алгоритмів розв’язку задачі багатокритеріального пошуку. Прогнозні припущення щодо розвитку об’єкта дослідження – системи багатокритеріального підбору можуть бути впроваджені не лише для моделі взаємодії покупця та комерційного підприємства, а й у будь-яку іншу сферу життя задля полегшення вирішень задач вибору з великої кількості можливих варіантів, тому розробка даних систем є перспективним завданням, над яким працюють фахівці у всьому світі. Результати дипломного проекту можна розділити на дві групи: теоретичні (методи багатокритеріального підбору) та практичні (програмна реалізація системи). Теоретичні результати можна використовувати при розробці програмного забезпечення для вирішення задач підбору, практичні – можна використовувати як вузькоспеціалізовану альтернативу програмному забезпеченню типу Microsoft Exel для операційної системи MS Windows. 4 Вик ЗМІСТ ПЕРЕЛІК УМОВНИХ ПОЗНАЧЕНЬ, СКОРОЧЕНЬ, ТЕРМІНІВ ............................ 7 ВСТУП 8 РОЗДІЛ 1 ХАРАКТЕРИСТИКА ТА АНАЛІЗ ОБ’ЄКТА ДОСЛІДЖЕННЯ .......... 10 1.1. Функції електронного магазину .......................................................... 10 1.2. Класифікація електронних магазинів.................................................. 12 1.3. Аналіз літературних джерел та практичного досвіду використання ІС і технологій в електронній комерції ...................... 18 1.4. Проблематика об’єкту дослідження .................................................... 19 1.5. Висновки до розділу ............................................................................. 21 РОЗДІЛ 2 ВИБІР МЕТОДУ ПРОЕКТУВАННЯ АРХІТЕКТУРИ ТА МОДЕЛІ ФУКЦІОНУВАННЯ СИСТЕМИ ............................................................. 22 2.1. Розкриття поняття багатокритеріального підбору ............................ 22 2.2. Побудова математиної моделі задачі багатокритеріального підбору ................................................................................................... 25 2.2.1. Порівняння цінності якостей елементів ........................................... 25 2.2.2. Математичний опис задачі ................................................................. 25 2.3. Визначення вагових коефіцієнтів критеріїв ....................................... 29 2.4. Розв’язання задачі методом адитивного згортання векторного критерію ............................................................................. 31 2.5. Висновки до розділу ............................................................................. 33 РОЗДІЛ 3 ПРОГРАМНА РЕАЛІЗАЦІЯ СИСТЕМИ БАГАТОКРИТЕРІАЛЬНОГО ПІДБОРУ ПОСТАЧАЛЬНИКІВ .............................................................. 34 3.1. Вибір середовища розробки та мови програмування ........................ 34 3.2. Вхідні та вихідні дані програми .......................................................... 35 3.3. Опис роботи програми .......................................................................... 36 5 3.3.1. Нормалізація значень вагомості ........................................................ 36 3.3.2. Зчитування чисельних вхідних даних .............................................. 37 3.3.3. Зчитування якісних вхідних даних ................................................... 38 3.3.4. Нормалізація отриманих значень ...................................................... 39 3.3.5. Отримання нормалізованого коефіцієнту ........................................ 41 3.3.6. Порівняння отриманих результатів .................................................. 41 3.3.7. Графічне представлення отриманих результатів ............................. 42 3.3.8. Збереження результату ....................................................................... 43 3.4. Реалізація задачі .................................................................................... 45 3.5. Реалізація програмного продукту для багатокритеріального підбору постачальників товарів і послуг ............................................ 47 3.6. Висновки до розділу ............................................................................. 51 ВИСНОВКИ ................................................................................................................. 52 СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ ................................................................... 54 ДОДАТОК А ................................................................................................................ 55 ДОДАТОК В ................................................................................................................. 80 6 ПЕРЕЛІК УМОВНИХ ПОЗНАЧЕНЬ, СКОРОЧЕНЬ, ТЕРМІНІВ GUI – Graphical User Interface (графічний інтерфейс користувача) ТІС(ІС) – торгівельна інтернет-система ОС – операційна система ЕК – електронна комерція ІС – інформаційна система БД – база даних 7 ВСТУП Інформаційне середовище сучасного бізнесу досить різноманітне. Розглянемо ряд ключових компонентів її зовнішньої складової, стимульованих проникненням інтернет-технологій у бізнес. Найбільш значущим чинником прискорення є методи та засоби електронної комерції. Крім того, розвитку бізнесу суттєво сприяють нові інформаційно-аналітичні рішення та продукти, такі, як інтернет-портали та інтернет-сайти, електронні видавництва і бібліотеки, довідково-інформаційні та аналітичні системи і рейтингові системи бізнесу. Особливе місце займають освітні технології, включаючи дистанційні методи навчання на базі Інтернету і насамперед бізнес-освіта. Незважаючи на економічний спад у країнах з розвиненою економікою, в тому числі викликаний переоцінкою можливостей розвитку HighTech та інформаційних технологій, триває подальше зростання частки послуг електронної комерції (ЕК, e-commerce). Це зростання прогнозується як у секторі міжфірмових відносин (В2В - Business to Business), так і в секторі роботи з клієнтами (В2С - Business to Consumer). Враховуючи, що більшість сучасних організацій є клієнтоорієнтованими, обидва напрямки є однаково важливими для успішного розвитку. Технології електронної комерції В2В дають можливість з використанням Інтернету скоротити витрати, виявити нові канали збуту, створити нові форми взаємодії з постачальниками, дистриб'юторами і клієнтами, забезпечують підтримку високого професійного рівня співробітників і рівномірне розповсюдження корпоративних стандартів на віддалені офіси. Вони сприяють підвищенню швидкості прийняття рішень на всіх рівнях управління, а також високого ступеня узгодженості прийнятих рішень. Іншими словами, ЕК - це 8 підвищення ефективності бізнесу, засноване на використанні інформаційних технологій для забезпечення його рентабельності, конкурентоспроможності та керованості, що підтверджується досвідом найбільших компаній світу. Наприклад, у корпорації Cisco, яка працює в 115 країнах світу, 74% замовлень і 8,3 млрд. дол. доходу йдуть через Інтернет. Дякуючи переходу на електронний бізнес корпорації вдалося істотно збільшити доходи при незначному зростанні персоналу. У дипломному проекті окрім проведення аналізу передбачено програмну реалізацію основних методів виявлення прихованих процесів на основі власнруч розроблених алгоритмів. Об’єктом дослідження обрано пошук найкращого постачальника для інтернет-магаизну на основі багатокритеріального підбору. Метою є дослідження методу багатокритеріального підбору та розробка програмного продукту для використання в сфері електронної комерції. Прогнозні припущення щодо розвитку об’єкта дослідження – системи багатокритеріального підбору можуть бути впроваджені не лише для моделі взаємодії покупця та комерційного підприємства, а й у будь-яку іншу сферу життя задля полегшення вирішень задач вибору з великої кількості можливих варіантів, тому розробка даних систем є перспективним завданням, над яким працюють фахівці у всьому світі. Результати дипломного проекту можна розділити на дві групи: теоретичні (методи та алгоритми багатокритеріального підбору) та практичні (програмна реалізація системи пошуку найкращого постачальника). Теоретичні результати можна використовувати при розробці програмного забезпечення для вирішення задач вибору серед великої кількості можливих варіантів, практичні – можна використовувати як вузькоспеціалізовану альтернативу програмному забезпеченню типу Microsoft Exel для операційної системи MS Windows. 9 РОЗДІЛ 1 ХАРАКТЕРИСТИКА ТА АНАЛІЗ ОБ’ЄКТА ДОСЛІДЖЕННЯ Електронний магазин – спеціалізований сайт, з допомогою якого можна в інтерактивному режимі купувати чи продавати товари і послуги, попередньо ознайомившись з інформацією про ці товари (послуги). 1.1. Функції електронного магазину На відміну від традиційних магазинів, електронний магазин може запропонувати значно ширший асортимент товарів і послуг та надати споживачам більш детальну інформацію про властивості товарів. Електронні магазини з кожним днем стають ближче до нашого повсякденного життя завдяки своїй зручності та легкості і тому насамперед привертають увагу. Окрім цього, їх наявність створює ряд безумовних переваг, як для власника магазина, так і для покупця. Електронний магазин дозволяє власнику: 1) створювати електронний каталог товарів чи послуг, який є постійно доступним у мережі Інтернет; 2) організовувати цілодовий канал збуту; 3) самостійно управляти роботою магазина, оперативно оновлюючи інформацію про товари і послуги, що пропонуються; 4) автоматизувати систему прийому замовлень (e-mail – повідомлення про операції із замовленням надаються покупцю автоматично); Кафедра КСУ Виконав Фурсаєва А. Керівник Артамонов Є.Б. Консульт. Норм. контр. Тупота Є.В. Зав. Каф. Литвиненко О.Є. НАУ 17 20 34 000 ПЗ Характеристика та аналiз об’єкта дослiдження Літера Д Аркуш Аркушів 10 54 СП-424 6.050102 5) вести мультивалютну виписку документів (долари, євро, гривні), використовуючи при цьому внутрішній валютний курс перерахунку; 6) задавати режим автоматичного визначення категорії покупця (гуртовий чи роздрібний покупець, тощо); 7) організовувати роботу в системі “бізнес – бізнес” для обслуговування віддалених філіалів та бізнес – партнерів; 8) забезпечити зворотній зв’язок (опитування, анкети, розіграші, поштові розсилання, тощо) для маркетингових досліджень на ринку та створення клієнтської бази даних; 9) проводити аналіз роботи магазину на основі статистики, що автоматично формується в процесі роботи магазину; 10) отримати ефективну рекламну підтримку своєму бізнесу; 11) підключити одну або кілька онлайнових платіжних систем для здійснення швидких платежів; 12) організувати службу доставки товарів покупцю; 13) підключити онлайнового гіда (можливість спілкування з покупцем в реальному часі); 14) підключити систему ведення новин на сайті; 15) створення e-mail – розсилання, яке повідомляє покупцям про новинки, що з’являються в магазині; 16) провести інтеграцію магазина з торговими системами, такими як склад і бухгалтерія, для автоматизації процесу перенесення інформації в бази даних електронного магазина. Електронний магазин дозволяє покупцю: - вибрати товар в каталозі та здійснити його on-line-замовлення, використовуючи Web – інтерфейс; - здійснити угоду купівлі – продажу в будь-який зручний час; - провести оплату одним із доступних на данний момент способів; 11 - отримати за допомогою e-mail підтвердження про розміщення замовлення; - постійно відслідковувати поточний стан розміщеного замовлення в режимі on-line чи e-mail. 1.2. Класифікація електронних магазинів Електронні магазини класифікують за трьома основними ознаками, наведеними на рис.1.1: - за рівнем використання технологій; - за запропонованим асортиментом; - за способом створення. Рис.1.1. Класифікація електронних магазинів. В залежності від рівня технологій, що використовуються для організації торговельного процесу, а, значить, і функцій, що виконуються, виділяють: - електронну вітрину; - автоматизований магазин; - торгівельну Інтернет-систему (ІС). 12 Електронна вітрина – спеціалізований Web-сайт, що містить вичерпну (детальну) інформацію про товари, що пропонуються до продажу, і який пропонує розмістити замовлення, котре потім надходить в звичайний офіс електронною поштою. Основу електронної вітрини складає каталог товарів з указівкою цін. Він структурований різними способами (за товарними групами, категоріями, виробниками, тощо). Для покупця цей вид електронного магазину незручний, оскільки передбачає здійснення цілого ряду додаткових дій. Автоматизований магазин – це Web-сайт, який не тільки надає інформацію про товари, але і автоматично взаємодіє з базами даних. Функціональні можливості цього магазина значно вищі, ніж електронної вітрини. Він має два входи: один для покупців, інший – для продавцівменеджерів. Покупці бачать віртуальну вітрину магазина, де виставлені товари (у вигляді графічної, текстової інформації), розміщена реклама, інформація про розпродажі, тощо. Електронна вітрина автоматизованого магазина виконує такі функції, як: - надання інтерфейса до бази даних товарів, що продаються, у вигляді каталогу, прайс-листа; - робота з електронним кошиком покупця; - реєстрація покупця; - оформлення замовлень з вибором методу оплати та доставки; - надання інтерактивної допомоги покупцю; - забезпечення безпеки особистої інформації покупця; - автоматизована передача інформації в торгову систему. Електронна вітрина автоматизованого магазина містить каталог товарів, кошик покупця, додаткові атрибути. 13 Основними функціями кошика є: - включення товару (додавання) в кошик; - виведення списку всіх товарів, що знаходяться в кошику, з кількістю замовлених одиниць; - зміна кількості замовлених одиниць товару в будь-якій позиції кошика; - видалення деяких позицій із кошика користувачем; - видалення із кошика всіх відібраних товарів, тобто повне очищення кошика. У кожному кошику є список товарів, що в нього входять. Інформація з цього списку використовується при оформленні замовлення. Кошик містить наступні дані: назва відібраного товару, кількість замовлених одиниць товару, ціна товару на момент включення в кошик, додаткові атрибути (колір, розмір), загальна вартість покупки. Для ефективної діяльності електронного магазина, окрім каталогу товарів з прайс-листом та кошика покупця, необхідними є і такі атрибути, як: - засоби пошуку товару за назвами; - активні поля, форми та кнопки для вибору товару, введення його кількості; - поля введення даних про покупця, спосіб доставки, адресу доставки товару; - засоби оплати покупки. Внутрішня частина автоматизованого магазина – це повнофункціональний бек-офіс (back-office), в якому здійснюються всі необхідні торгово-господарські операції: ведення бази даних товарів і клієнтів; робота з рахунками, накладними, складом; формування замовлень, закупівель у постачальників; ведення статистики, тощо. 14 Програмне забезпечення електронного магазину має надавати як найбільше інформації для відвідувача з метою прийняття ним рішення щодо купівлі товару. Очевидно, що клієнту постійно потрібно пропонувати наступну інформацію: - асортимент товарів; - ціни на товари; - наявність товару - повну інформацію про товари та послуги; - сервісну підтримку; - вибір способів оплати; - порядок та своєчасність постачання. Таким чином, відвідувач електронного магазину повинен легко знайти відповідь на всі запитання, які стосуються товарів та послуг, їх характеристик, способів купівлі, оплати та доставки. З цими питаннями допоможе розібратися торгівельна інтернет-система. Торгівельна Інтернет-система (ТІС) - найбільш складна і повноцінна система для організації торгівлі через Інтернет. ТІС притаманне те, чого немає у автоматизованого електронного магазина: вона безпосередньо зв’язана із внутрішньою автоматизованою торгівельною системою комерційної організації. Це є дуже важливим, оскільки при організації електронного магазина завжди виникають проблеми ув’язки електронного магазина зі звичайним. Створення будь-якої ТІС займає три-чотри місяці. В результаті у комерційної організації виникає повнофункціональна інтегрована система, в якій електронна торгівля органічно поєднується зі звичайною. Інтегрованість виникає за всіма параметрами: по складах, по фінансах, по потоку товарів, по звітності. Торгівельні Інтернет-системи зменшують вартість однієї транзакції на півтора-два порядки, тоді як магазини зменшують її в кілька раз. 15 В залежності від асортименту товарів, що пропонуються (тобто від спеціалізації), електронні магазини бувають: - вузькоспеціалізовані; - спеціалізовані; - комбіновані; - універсальні. Вузькоспеціалізовані магазини мають в своєму асортименті частину товарної групи або підгрупи (наприклад, дитяче взуття, жіночі сумки тощо). Спеціалізовані магазини здійснюють продажі товарів однієї товарної групи (наприклад, меблі, канцтовари, електротовари). Комбіновані магазини поєднують в своєму асортименті споріднені групи товарів, пов’язані стабільністю попиту (наприклад, галантерея-парфумерія). Універсальні магазини реалізують всі групи продовольчих та непродовольчих товарів для всіх груп населення (наприклад, універмаг, супермаркет). В залежності від способу створення електронного магазина виділяють наступні варіанти: - оренда вже готового магазина; - придбання “коробкового” програмного забезпечення; - замовлена розробка; - самостійна розробка проекту. При оренді електронного магазина серверна частина знаходиться на сервері компанії-орендодавця, магазин підтримують її спеціалісти. В оренду входить надання: - спеціалізованого програмного забезпечення та повного комплекту документів; - необхідного дискового простору; - високошвидкісного каналу доступу без обмеження трафіка; 16 - стандартного оформлення електронного магазина; - доменного імені <ваше_ім’я.орендодавець_>; - інформації про комерційну організацію на сайті орендодавця; - безкоштовних консультацій спеціалістів орендодавця. Орендодавець несе витрати на адаптацію своєї системи до вимог замовника та підтримку робото здатності електронного магазина. При покупці електронного магазина серверна частина установлюється на сервері замовника. При покупці комплексу замовнику передається програмне забезпечення, яке дозволяє створювати один або кілька електронних магазинів для власного використання чи здавання в оренду. Йому також надаються наступні послуги: - передача комплексу програмного забезпечення “Електронний магазин”; - стандартний дизайн електронного магазина. Послуги по абонентському обслуговуванню та технологічній підтримці оговорюються окремо. “Коробкове” програмне забезпечення виглядає достатньо привабливим варіантом. Замовник отримує типовий інтерфейс (набір правил для передачі інформації на межі двох різних засобів). Однак при цьому виникає потреба в додаткових витратах на доробку. Розробка на замовлення передбачає укладання угоди зі спеціалістами, що мають достатній досвід. При виборі цього варіанту необхідно відповісти на ряд організаційних та технічних питань перед тим, як укладати угоду з розробником. Питання можуть бути найрізноманітнішими: - які категорії товарів передбачається розповсюджувати через електронний магазин; - скільки позицій буде представлено і який обсяг буде необхідно для їх опису; 17 - яка інфраструктура (канали зв’язку, сервери, персонал) використовується в організації в даний момент і чи можна при необхідності її змінити; - які витрати необхідні для модифікації уже існуючих у комерційній організації бізнес-процесів; - яку передбачається використовувати систему оплати і доставки товару та ін. Самостійна розробка потребує менших витрат, але при цьому існує ймовірність провалу проекту у випадку помилки. Для контролю над електронним магазином достатньо звичайного комп’ютера та браузера. Управління магазином зазвичай здійснює один спеціально навчений менеджер. 1.3. Аналіз літературних джерел та практичного досвіду використання ІС і технологій в електронній комерції Покупці на електронному ринку дещо відрізняються від покупців на традиційних фізичних ринках. Оскільки доступ до Internet пов'язаний із придбанням обладнання та наявністю певного рівня освіти, користувачі мережі характеризуються вищим рівнем доходів та освіти, ніж середній покупець на реальному ринку. За даними досліджень компаній Media Metrix и McKinsey on-line близько 15 % користувачів Internet постійно шукають, де можна купити товари за дешевшими цінами. Близько половини усіх on-line покупців відносяться саме до цієї категорії. Також близько 35% користувачів звертає увагу на знайомі у "реальному режимі" торгові марки. "Прихильники принципу полегшення життя" укладають понад половину усіх on-line угод. їх основний принцип - купувати безпосередньо "з рук в руки" та економити при цьому час. 18 Основними труднощами у сфері електронної комерції, згідно з даними закордонних джерел, є недостатня безпека даних, що передаються через Internet, яка зводиться до двох загроз - комп'ютерні підробки і шахрайство та порушення таємниці особистого життя в умовах можливості чіткої фіксації хто, що, коли і в кого купував. У вітчизняному електронному бізнесі мало поширені автоматизовані системи управління виробничою, торговельною, фінансовою діяльністю корпоративного рівня. Також проблемою розвитку електронної комерції можна вважати невизначеність реального існування контрагента, незнання правил ведення іноземного бізнесу і т. п. та відсутність в окремих випадках універсальних стандартів взаємодії та сумісності при роботі в глобальній мережі. 1.4. Проблематика об’єкту дослідження Характерною рисою Internet-магазину є повна автоматизація системи обробки замовлень, завдяки чому можна працювати індивідуально з кожним зареєстрованим клієнтом, а також можливість здійснювати повний торговий цикл у режимі підключення до мережі. При цьому торгова інтернет система додатково інтегрована в систему внутрішнього документообігу компанії. В таблиці 1.2 приведені порівняння торговельних інтернет-систем Таблиця 1.2. Порівняння торговельних інтернет-систем. osCommerce OpenCart Magento PrestaShop + + + + MySQL MySQL MySQL MySQL Операційна система UNIX Windows, UNIX UNIX UNIX Веб-сервер Apache Apache, IIS, nginx Apache Apache, nginx Фіксація дій користувача + + + - Гарантія обслуговування Постійна Постійна Невідомо Невідомо Безкоштовна ліцензія База даних: 19 Можливість придбання - + + - + + - + Багатосайтовість + + + - Підтримка RSS + - + + Банери + + + + Веб-статистика + + + + Система документообігу + + - + Блоги + - - + Чат + - - + Форум + - - - F.A.Q + - + - Вакансії + - - - Обмін посиланнями + - - - Неструктуровані + - - - Фотогалерея + + - - Голосування + + - - Каталог продукції + + + + Інтернет магазин + + + + Пошук по сайту + + + + Платіжні системи + + + + Підписка + + + + Вибір постачальника - - - - системи окремо від проекту Мультимовність інтерфейсу форми зворотного зв'язку З приведеної таблиці 1.2. видно, що жодна з торгівельних інтернет-систем не може обирати найкращого постачальника. Саме ця проблема взята за основу в даній роботі. 20 1.5. Висновки до розділу Даний розділ присвячено розкриттю поняття електронний магазин, розглянуто базові функціі та види електронних магазинів, детально роз’яснено особливості торгівельних інтернет-систем. Розглянуто способи створення інтернет-магазину, на основі яких можна зробити висновок, що вибір способу залежить від готовності керівника удосконалювати вже готовий проект або створювати свій власний з самого початку. Створення якісної системи Інтернет-торгівлі неможливе без вивчення споживачів. Саме тому технічні можливості електронного магазину повинні надавати можливість для ідентифікації відвідувачів та отримання статистики. На жаль, результати порівняння чотирьох найрозповсюдженіших торгівельних інтернет-систем показали, що на цей день не існує жодної системи підбору найвигіднішого постачальника для інтернет-магазину, що в свою чергу викликає ряд проблем: - власнику інтернет-магазину необхідно забезпечувати додаткові робочі місця для менеджерів, що викликає недоцільне використання коштів; - від менеджерів потребується пошук та аналіз значної кількості інформації, представленої у вигляді математичних формул; - монотонний процес пошуку та порівняння постачальників може викликати проблеми зі станом здоров'я відповідаючого за це питання персоналу, що в свою чергу негативно позначиться на ефективності праці; - відсутність автоматизованого програмного забезпечення призводить до збільшення часу вирішення задачі. 21 РОЗДІЛ 2 ВИБІР МЕТОДУ ПРОЕКТУВАННЯ АРХІТЕКТУРИ ТА МОДЕЛІ ФУКЦІОНУВАННЯ СИСТЕМИ В даній дипломній роботі для успішного функціонування електронного магазина пропонується така схема вибору постачальника на основі багатокритеріального підбору, представлена на рис. 2.1. Рис. 2.1. Cхема вибору постачальника на основі багатокритеріального підбору. 2.1. Розкриття поняття багатокритеріального підбору Багатокритеріальний підбір - це процес одночасної оптимізації двох або більше конфліктуючих цільових функцій в заданій області визначення. Кафедра КСУ Виконав Фурсаєва А.. Керівник Артамонов Є.Б. Консульт. Норм. контр. Тупота Є.В. Зав. Каф. Литвиненко О.Є. НАУ 17 20 34 000 ПЗ Вибiр методу проектування архiтектури та моделi функцiонування Літера Д Аркуш Аркушів 22 54 СП-424 6.050102 Задача формулюється таким чином: де це ( ) цільових функцій. Вектори розв'язків належать до не порожньої області визначення . Задача багатокритеріального підбору полягає у пошуку вектора цільових змінних, який задовольняє накладеним обмеженням та оптимізує векторну функцію, елементи якої відповідають цільовим функціям. Ці функції утворюють математичне описання критерію задовільності та, зазвичай, взаємно конфліктують. Звідси, «оптимізувати» означає знайти такий розв'язок, за якого значення цільових функцій були б прийнятними для постановника задачі. Загальний алгоритм розв’язку задачі показано на рис.2.2. 23 Рис.2.2. Алгоритм розв’язку задачі. 24 2.2. Побудова математиної моделі задачі багатокритеріального підбору 2.2.1. Порівняння цінності якостей елементів В таблиці 2.1. наведено порівняння цінності якостей елементів, тобто їх важливість для конкретного інтернет-магазину. Таблиця 2.1. Порівняння цінності якостей елементів. Відносна важливість (бали) 1 Визначення Пояснення однакова важливість 3 незначна перевага 5 суттєва перевага 7 значна перевага 9 абсолютна перевага одного над другим однаковий вклад один елемент трохи вище за інший безумовна перевага одного над другим один елемент є практично значимим перевага підтверджується більшістю 2,4,6,8 проміжні оцінки між сусідніми твердженнями може бути компроміс 2.2.2. Математичний опис задачі Нехай X=(x1, x2, . . . , xn) — вектор керованих параметрів, n 1,6 Y=(y1, y2, . . . , ym)— вектор вихідних параметрів, n 1,7 . D — область допустимих рішень. D x | g k ( x) 0, k 1, K . (1) Тоді цільова функція має вигляд: Y F1 ( x),...Fi ( x) max; xD (2) D (x1,...,x j ); i 1,7, j 1,6 25 Fi ( x) , то математична модель задачі Оскільки Y=(y1, y2, . . . , ym), y i max xD прийняття рішення становить задачу багатокритеріальної оптимізації: y1 y2 y3 y4 y5 y6 y7 max F1 ( x) , max F2 ( x) , min F3 ( x) , min F4 ( x), x{x1 ,... x j ,... x6} x{x1 ,... x j ,... x6} x{x1 ,... x j ,... x6} x{x1 ,... x j ,... x6} max x{x1 ,... x j ,... x6} (3.2) F5 ( x), max F6 ( x), max F7 ( x), x{x1 ,... x j ,... x6} x{x1 ,... x j ,... x6} (3) ) i 1,7 , j 1,6 , де Fi (x) — шкали вимірів критеріїв оптимальності; i — кількість критеріїв; j — кількість альтернатив; xj — альтернативи. В таблиці 2.2. наведені оцінки альтернатив. Таблиця 2.2. Оцінки альтернатив за критеріями. Max/ Постачальник 1 Постачальник 2 Постачальник 3 X1 X2 X3 max 10 15 20 max Ні Так Ні мin y1 Знижка Безготівкова y2 форма оплати Оцінки альтернатив по критеріям y3 Доставка min В той же день 1-2 дні 3-5 днів y4 Ціна min 1000 5000 40000 y5 Відгуки max Негативні Середні Позитивні y6 Гарантія max Місяць Квартал Рік y7 Асортимент max Вузький Обмежений Широкий 26 Усі критерії необхідно перевести до одного типу (наприклад, максимуму) і до єдиного інтервалу, наприклад [1,2], здійснивши нормалізацію за формулою: F i ( x) Fi ( x) Fi Fi Fi ( ) ; (4) (3.2) Fi Fi , i 1, n . F³ max Fi ( x) xD Fi min Fi ( x) xD — найкраще значення з множини значень; (5) ) (3.2) (6) (3.2) — найгірше значення з множини значень; )(7) [α, β] — інтервал, до якого потрібно перетворити критерії. ) (3.2) Критерії 3, 5, 6, 7 мають якісний характер, і їх значення можуть кількісно ) вимірятися в балах. Бальні оцінки відображають уявлення стосовно якості цих критеріїв. Критерій 2 (Безготівкова форма оплати) теж якісний, але він може бути легко перетворений на кількісний (0-Готівкова,1-Безготівкова). В таблиці 2.3. представлено шкалу переведення якісних критеріїв у кількісні. Таблиця 2.3. Шкала переведення якісних критеріїв у кількісні значення. Відгуки Бальна оцінка Позитивні 2 Середні 1 Негативні 0 Гарантія Бальна оцінка Більш за рік 3 Рік 2 Квартал 1 Місяць 0 Доставка Бальна оцінка В той же день 4 1-2 дні 3 3-5 днів 2 Тиждень 1 27 Більш за тиждень 0 Асортимент Бальна оцінка Широкий 2 Обмежений 1 Вузький 0 Кількісні оцінки альтернатив за критеріями показано в табл. 2.4. Таблиця 2.4. Кількісні оцінки альтернатив за критеріями. Оцінки альтернатив за критеріями 1 Знижка Постачальник 1 Постачальник 2 Постачальник 3 1 2 3 10 15 20 0 1 0 Безготівкова 2 форма оплати 3 Доставка 4 3 2 4 Ціна 1000 5000 40000 5 Відгуки 0 1 2 6 Гарантія 0 1 2 7 Асортимент 0 1 2 Отже, отримання для нормалізованої здійснюється розрахунок за формулою: оцінки, наприклад, знижки, (4) (3.2) 1 F max F1 ( x) max{10,15,20} 20 F1 min F1 ( x) min{ 10,15,20} 10 (8) ) (3.2) (9) ) Постачальник 1: F1( x) 10 10 (2 1) 1 1 20 10 (3.2) ) 28 Постачальник 2: F1( x) 15 10 (2 1) 1 1,5 20 10 Постачальник 3: F1( x) 20 10 (2 1) 1 2 20 10 (10) Результати нормалізації всіх оцінок представлено в таблиці 2.5. Таблиця 2.5. Нормалізовані значення всіх оцінок. Оцінки альтернатив за критеріями Постачальник 1 Постачальник 2 Постачальник 3 1 Знижка 2 Безготівкова форма 1 2 3 1 1,5 1 2 1 оплати 3 Доставка 2 1,75 1,5 4 Ціна 1 1,25 1,1025 5 Відгуки 1 1,5 2 6 Гарантія 1 1,333 1,666 7 Асортимент 1 1,5 2 2.3. Визначення вагових коефіцієнтів критеріїв Після визначення методу розв’язання задачі та приведення її до узагальненого вигляду можна призначити вагові коефіцієнти для кожного критерію. Найпоширеніші методи призначення вагових коефіцієнтів — це: - впорядкування критеріїв за важливістю; - визначення відношення вагових коефіцієнтів, причому ЛПР задає відношення wi wj в числовому вигляді; 29 - побудова таблиць на основі попарного порівняння критеріїв за важливістю; - метод визначення важливості за допомогою сукупності послідовних порівнянь (метод Черчмена-Акоффа); - методи, які використовують інформацію щодо якості оптимальних значень локальних критеріїв; - метод SWING (найважливішому коефіцієнту дається значення 100, інші порівнюються з найважливішим); - теоретико-ігрові методи визначення вагових коефіцієнтів тощо. Крім перелічених методів призначення вагових коефіцієнтів, існують способи задавання області допустимих значень вагових коефіцієнтів: - оцінки переваги варіантів; - застосування принципу гарантованого результату; - методи, при яких значення коефіцієнтів важливості оцінюються на основі інформації про порівняння «контрольних» векторних оцінок, потім складається система нерівностей і вибираються коефіцієнти за принципом гарантованого результату, тощо. Вагові коефіцієнти w (w 1 ,..., w7 ) можна визначати в довільній формі, але в подальшому їх потрібно перетворити на вигляд: 7 w i 1 i 1, wi 0, i 1,7 . Введемо вагові коефіцієнти для задачі (табл. 2.6) та розрахуємо нормалізований коефіцієнт вагомості так, щоб вони відповідали формулі (1). Для визначення нормалізованого w i потрібно скористатися формулою: wi wi/ n w i 1 де / i , wi/ — ненормалізоване значення вагомості. (11) (3.2) ) 30 Наприклад, для визначення нормалізованого коефіцієнта вагомості для критерію знижки одержимо: w1 w1/ 7 wi/ 25 0,25 25 10 20 10 15 5 15 (12) (3.2) i 1 ) Для критерію Безготівкова форма оплати така: w2 w2/ 7 w i 1 / i 10 0,1 100 (13) (3.2) ) Результати визначення нормалізованих коефіцієнтів критеріїв подано в табл. 2.6. Таблиця 2.6. Нормалізовані коефіцієнти критеріїв. Нормалізований Найменування критерію Вагомість 1 Знижка 25 0,25 2 Безготівкова форма оплати 10 0,1 3 Доставка 20 0,20 4 Ціна 10 0,1 5 Відгуки 15 0,15 6 Гарантія 5 0,05 7 Асортимент 15 0,15 коефіцієнт 2.4. Розв’язання задачі методом адитивного згортання векторного критерію Метод згортання векторного критерію є найбільш розповсюдженим, адже він використовує відносну важливість окремих критеріїв за допомогою побудови скалярної функції Q, що є узагальненим критерієм відносно векторного критерію F(x) і рішенням однокритеріальної задачі оптимізації: 31 max Q w, F ( x) xD , де w={ w1 ,..., wn } — вагові коефіцієнти критеріїв. В якості узагальненого критерію можуть бути використані функції Q такого вигляду: — адитивний критерій оптимальності: Q w, ( F ( x) wi Fi ( x) max (14) n i 1 ; (3.2) ) — мультиплікативний критерій оптимальності: Q w, F ( x) wi Fi ( x) max n i 1 (15) ; (3.2) — узагальнені логічні критерії оптимальності: ) Q max w, F ( x) max {wi Fi ( x)}; (16) 1 i n Q min w, F ( x) min {wi Fi ( x)} 1 i n (3.2) (17) ) (3.2) ; — середньостепеневий узагальнений критерій оптимальності:) 1 1 n p Qp w, F ( x) ( wi Fi ( x)) p , p 0 n i 1 (18) (3.2) При розв’язанні задачі з урахуванням вагомості критеріїв потрібно ) нормалізоване значення критерію помножити на нормалізоване значення вагомості цього критерію. Так, для Постачальник 1 у нормалізоване значення критерію знижка — 1, вагомість критерію — 0,25. Тоді значення критерію з урахуванням вагомості буде: 1 х 0,25 = 0,25. Результати розрахунків критеріїв з урахуванням вагомості представлено в табл. 2.7. Таблиця 2.7. Значення узагальненого критерію з урахуванням вагомості. Оцінки альтернатив за критеріями Постачальник 1 Знижка Постачальник 2 Постачальник 3 1 2 3 0,25 0,375 0,5 32 Безготівкова 0,1 0,2 0,1 Доставка 0,4 0,3 0,2 Ціна 0,2 0,189 0,1 Відгуки 0,15 0,225 0,3 Гарантія 0,05 0,075 0,1 Асортимент 0,15 0,225 0,3 1,3 1,589 1,6 форма оплати Усього n F ( x) i 1 i З таблиці 2.7 видно, що з урахуванням вагомості найкращим став Постачальник 3, його оцінка — 1,6, другий за ним — Постачальник 2 (1,589), а Постачальник 1— (1,3) посів лише третє місце. 2.5. Висновки до розділу В другому розділі досліджуються математичні методи і принципи розв’язання задачі. Кожен критерій в даній моделі має свою цінність якості, що в подальшому впливає на вагові коефіцієнти (останні задаються довільно). Математична модель побудована таким чином, що спершу усі дані нормалізуються, зводячись до єдиних одиниць вимірювання, потім визначаються вагові коефіцієнти, а кінцевий розрахунок представляє собою перемноження нормалізованих значень на нормалізовані значення вагомості. Результатами обчислень є оцінка, що визначає найкращого постачальника. 33 РОЗДІЛ 3 ПРОГРАМНА РЕАЛІЗАЦІЯ СИСТЕМИ БАГАТОКРИТЕРІАЛЬНОГО ПІДБОРУ ПОСТАЧАЛЬНИКІВ 3.1. Вибір середовища розробки та мови програмування Visual Studio 2015 – це інтегроване середовище розробки програмного забезпечення, що дозволяє створювати як консольні додатки, так і програми з графічним інтерфейсом. Для даної дипломної роботи було обрано саме це середовище розробки, так як воно дозволяє: - швидко виявляти помилки та недоліки в коді; - надійно та якісно відлагоджувати та компілювати код; - створювати додатки як для комп’ютерів, так і для мобільних платформ; - можливість створювати не лише консольні додатки, а й високорівневі програми з GUI. В якості мови програмування обрано мову С# - об'єктно-орієнтовану мову програмування, що має ряд значних переваг, а саме: - можливість розпочати розробку значно швидше в порівнянні, наприклад, з С++; - зручність відладки програм; - інтуітивно зрозумілий синтаксис, що дозволяє швидко і легко писати та аналізувати створений код; - доступ до усіх класових бібліотек .NET Framework; Кафедра КСУ Виконав Фурсаєва А. Керівник Артамонов Є.Б. Консульт. Норм. контр. Тупота Є.В. Зав. Каф. Литвиненко О.Є. НАУ 17 20 34 000 ПЗ Програмна реалiзацiя системи багатокритерiального пiдбору постачальникiв Літера Д Аркуш Аркушів 34 54 98 СП-424 6.050102 3.2. Вхідні та вихідні дані програми Дані в програмі представлено у вигляді множин змінних, що викликаються та зчитуються з полів в процесі виконання програми. Вихідні дані програми представлено у таблиці 3.1. Таблиця 3.1. Вихідні дані програми. Назва Ідентифікатор Форма подання Термін видання Постачальники Множини (А,В,С) Стовбці даних Відразу за БД запитом Поля критеріїв Відразу за БД запитом Критерії Множини (1…7) Користувач інформації Графік Form3 Нова форма Відразу за Користувач запитом Сумарний коефіцієнт Множини Поле (sumA,sumB,sumC) даних Відразу за Користувач запитом Вхідні дані представлено в таблиці 3.2. Таблиця 3.2. Вхідні дані програми. Назва Ідентифікатор Множини (ves_1…ves_7) Множини Постачальники (А,В,С) Множини Критерії (1…7) Вагомість критеріїв Форма подання Термін надходження По мірі Поле ваги надходження Стовбці По мірі даних надходження Електронни По мірі й документ надходження Джерело Користувач Користувач Користувач 35 3.3. Опис роботи програми При запуску програми відкривається початкова форма, де за замовчуванням вказані дані, що використані для тестового запуску в даній дипломній роботі. Форма містить множину полів даних, таких як: - множина значень вагомості; - множина критеріїв; - множина постачальників; - поля для виводу кінцевого результату. Користувач вводить з клавіатури чисельні значення вагомості критеріїв та кількісні величини, та натискає кнопку запуску обррахунків. 3.3.1. Нормалізація значень вагомості Отримавши команду, програма зчитує множини змінних вагомості критеріїв та зводить їх до зручного для розрахунків вигляду за допомогою події button1_Click: private void button1_Click(object sender, EventArgs e) { ves_1 = Convert.ToDouble(ves1.Text); Form2.ves1.Text = Convert.ToString(ves_1); ves_1 = ves_1/ 100; //ves1.Text = Convert.ToString(ves_1); ves_2 = Convert.ToDouble(ves2.Text); Form2.ves2.Text = Convert.ToString(ves_2); ves_2 = ves_2/ 100; //ves2.Text = Convert.ToString(ves_2); ves_3 = Convert.ToDouble(ves3.Text); 36 Form2.ves3.Text = Convert.ToString(ves_3); ves_3 =ves_3/ 100; //ves3.Text = Convert.ToString(ves_3); ves_4 = Convert.ToDouble(ves4.Text); Form2.ves4.Text = Convert.ToString(ves_4); ves_4 = ves_4/ 100; //ves4.Text = Convert.ToString(ves_4); ves_5 = Convert.ToDouble(ves5.Text); Form2.ves5.Text = Convert.ToString(ves_5); ves_5 = ves_5/ 100; //ves5.Text = Convert.ToString(ves_5); ves_6 = Convert.ToDouble(ves6.Text); Form2.ves6.Text = Convert.ToString(ves_6); ves_6 = ves_6/ 100; // ves6.Text = Convert.ToString(ves_6); ves_7 = Convert.ToDouble(ves7.Text); Form2.ves7.Text = Convert.ToString(ves_7); ves_7 = ves_7/ 100; //ves7.Text = Convert.ToString(ves_7); 3.3.2. Зчитування чисельних вхідних даних Наступним кроков виконання програми є зчитування чисельних вхідних даних з полів критеріїв для кожного постачальника: double a_1 = Convert.ToDouble(a1.Text); Form2.a1.Text = Convert.ToString(a_1); double a_3 = Convert.ToDouble(a3.Text); Form2.a3.Text = Convert.ToString(a_3); 37 double b_1 = Convert.ToDouble(b1.Text); Form2.b1.Text = Convert.ToString(b_1); double b_3 = Convert.ToDouble(b3.Text); Form2.b3.Text = Convert.ToString(b_3); double c_1 = Convert.ToDouble(c1.Text); Form2.c1.Text = Convert.ToString(c_1); double c_3 = Convert.ToDouble(c3.Text); Form2.c3.Text = Convert.ToString(c_3); 3.3.3. Зчитування якісних вхідних даних Так як в програмі багато критеріїв задано у вигляді якісних величин (форма оплати, доставка, гарантія, відгуки, асортимент), для подальших розрахунків їх потрібно звести до чисельного вигляду у відповідності з таблицею 2.3. В даній програмі переведення реалізовано однаково для всіх критеріїв за допомогою оператора case: //Форма оплати постачальника А switch (a7.SelectedIndex) { case 0: a_7 = 1; break; case 1: a_7 = 2; break; default: a_7 = 0;break; } Form2.a7.Text = Convert.ToString(a7.Text); //Форма оплати постачальника B 38 switch (b7.SelectedIndex) { case 0: b_7 = 1; break; case 1: b_7 = 2; break; default: b_7 = 0; break; } Form2.b7.Text = Convert.ToString(b7.Text); //Форма оплати постачальника C switch (c7.SelectedIndex) { case 0: c_7 = 1; break;//Наличный case 1: c_7 = 2; break;//Безналичный default: c_7 = 0; break; } Form2.c7.Text = Convert.ToString(c7.Text); Даний фрагмент коду представляє переведення якісного значення форми оплати кожного з постачальників у чисельне. 3.3.4. Нормалізація отриманих значень Так як для розрахунків необхідно, щоб всі значення були представлені в єдиному інтервалі значень, для кожного критерію виконано нормалізацію значень: double[] F1m = { a_1, b_1, c_1 }; double maxF1 = F1m.Max(); double minF1 = F1m.Min(); if (a_1 == b_1 && b_1 == c_1) { 39 a_1 = 0; b_1 = 0; c_1 = 0; } else { a_1 = ((maxF1 - a_1) / (maxF1 - minF1)) * (2 - 1) + 1; b_1 = ((maxF1 - b_1) / (maxF1 - minF1)) * (2 - 1) + 1; c_1 = ((maxF1 - c_1) / (maxF1 - minF1)) * (2 - 1) + 1; } Даний фрагмент коду представляє нормалізацію для значення ціни. В даній програмі обрахунки виконані таким чином, що найбільш доцільним є використання мінімального значення ціни. Для значень, що прямують до максимуму, нормалізація має наступний вигляд (для прикладу представлено функцію нормалізаціі значення критерію асортименту, для якого найкращим значенням буде максимальне): double[] F2m = { a_2, b_2, c_2 }; double maxF2 = F2m.Max(); double minF2 = F2m.Min(); if (a_2 == b_2 && b_2 == c_2) { a_2 = 0; b_2 = 0; c_2 = 0; } else { a_2 = ((a_2 - minF2) / (maxF2 - minF2)) * (2 - 1) + 1; b_2 = ((b_2 - minF2) / (maxF2 - minF2)) * (2 - 1) + 1; c_2 = ((c_2 - minF2) / (maxF2 - minF2)) * (2 - 1) + 1; } 40 3.3.5. Отримання нормалізованого коефіцієнту Після зведення усіх критеріїв до єдиної шкали виміру виконується перемноження зі значеннями вагомості: c_1 = c_1 * ves_1; c1.Text = Convert.ToString(c_1); c_2 = c_2 * ves_2; c2.Text = Convert.ToString(c_2); c_3 = c_3 * ves_3; c3.Text = Convert.ToString(c_3); c_4 = c_4 * ves_4; c4.Text = Convert.ToString(c_4); c_5 = c_5 * ves_5; c5.Text = Convert.ToString(c_5); c_6 = c_6 * ves_6; c6.Text = Convert.ToString(c_6); c_7 = c_7 * ves_7; c7.Text = Convert.ToString(c_7); sumC = c_1 + c_2 + c_3 + c_4 + c_5 + c_6 + c_7; c_sum.Text = Convert.ToString(sumC); Даний фрагмент коду представляє перемноження критеріїв на вагомість для постачальника С. 3.3.6. Порівняння отриманих результатів Після перемноження даних на вагомість виконується порівняння отриманих результатів для визначення найкращого постачальника: 41 double[] Res = {sumA, sumB, sumC}; double maxValue = Res.Max(); res.Text = "Лучший коефициент ="+Convert.ToString(maxValue); if(sumA>sumB && sumA > sumC) { Form3.label1.Text = "Лучший поставщик 1. С индексом " + Convert.ToSingle(maxValue); Form3.chart1.Series[0].Color = Color.Red; Form3.chart1.Series[1].Color = Color.Blue; Form3.chart1.Series[2].Color = Color.Blue; } else if (sumB > sumA && sumB > sumC) { Form3.label1.Text = "Лучший поставщик 2. С индексом " + Convert.ToSingle(maxValue); Form3.chart1.Series[0].Color = Color.Blue; Form3.chart1.Series[1].Color = Color.Red; Form3.chart1.Series[2].Color = Color.Blue; } else if (sumC > sumA && sumC > sumB) { Form3.label1.Text = "Лучший поставщик 3. С индексом " + Convert.ToSingle(maxValue); Form3.chart1.Series[0].Color = Color.Blue; Form3.chart1.Series[1].Color = Color.Blue; Form3.chart1.Series[2].Color = Color.Red; } 3.3.7. Графічне представлення отриманих результатів Отримані результати подаються у вигляді графіку, що дозволяє наглядно проілюструвати доцільність вибору постачальника: Form3.name = this.Text; //Передача названия файла 42 Form3.chart1.Series[0].Points.AddXY(0, sumA); Form3.chart1.Series[1].Points.AddXY(1, sumB); Form3.chart1.Series[2].Points.AddXY(2, sumC); Form2.Show(); Form3.Show(); 3.3.8. Збереження результату Для зручності використання функціонал програми дозволяє зберегти отримані результати. Так як вихідних форм дві, а саме форма з графіком та форма з вихідними даними, кожна з них зберігається окремо. Нижче наведено функцію збереження графіку, результатом якої є отримання зображення в форматі jpg або png: private void изображениеToolStripMenuItem_Click(object sender, EventArgs e) { SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "PNG Image|*.png|JPeg Image|*.jpg"; saveFileDialog.Title = "Save Chart As Image File"; saveFileDialog.FileName = this.Text + ".png"; DialogResult result = saveFileDialog.ShowDialog(); saveFileDialog.RestoreDirectory = true; if (result == DialogResult.OK && saveFileDialog.FileName != "") { try 43 { if (saveFileDialog.CheckPathExists) { if (saveFileDialog.FilterIndex == 2) { Form3.chart1.SaveImage(saveFileDialog.FileName, System.Windows.Forms.DataVisualization.Charting.ChartImageFormat.Jpeg); MessageBox.Show("Файл сохранен"); } else if (saveFileDialog.FilterIndex == 1) { Form3.chart1.SaveImage(saveFileDialog.FileName, System.Windows.Forms.DataVisualization.Charting.ChartImageFormat.Png); MessageBox.Show("Файл сохранен"); } } else { MessageBox.Show("Путь не найден"); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } } 44 3.4. Реалізація задачі Для реалізації програми побудовано алгоритм, за допомогою якого створено код. Алгоритм представлено на рис.3.3. та рис.3.4. Рис.3.3. Алгоритм роботи програми. 45 Рис.3.4. Алгоритм роботи програми. 46 3.5. Реалізація програмного продукту для багатокритеріального підбору постачальників товарів і послуг В розробленій програмі реалізовано алгоритм (рис.3.3. та 3.4.) для пошуку найкращого з трьох постачальників. Додатково у програмі надано можливість зберегти отримані результати у вигляді текстового файлу та зображення. Рис. 3.5. Початкове вікно програми. 47 Рис. 3.6. Вікно програми після запуску обрахунків. Рис. 3.7. Графічне представлення результату. 48 Для наглядності в програмі також є окрема форма, що представляє початкові введені дані. Рис. 3.8. Представлення початковимх вхідних даних. Отримані результати можна зберегти в окремий текстовий файл (чи зображення при збереженні графіку), що продемонстровано на рис.3.9. та 3.10. Вихідний текстовий файл представлено на рис.3.11. Рис.3.9. Можливість збереження результатів. 49 3.10. Збереження зображення в дввох форматах. Рис. 3.11. Вихідний текстовий файл. 50 3.6. Висновки до розділу Багато хто з користувачів вважає, що пошук найкращого постачальника є простою задачею, що швидко вирішується. Насправді ж це складний та багаторівневий процес, який потребує від користувача високого рівня знання математичних формул або володіння персональним комп’ютером. Оскільки жодна з існуючих торгівельних інтернет-систем не надає можливості підбору постачальника, було прийнято рішення створити програмне забезпечення, що виконувало б дану функцію. Було розглянуто прості методи програмної реалізації функцій нормалізації значень та отримання індексних оцінок. Вони засновані на введенні в програму додаткових фукцій максимуму та мінімуму, які потім приймають участь у розрахунках відповідно до математичних формул. Алгоритм програми передбачає детальну перевірку даних та покрокове виконання задачі, що дозволяє своєчасно виявити недоліки чи помилки. Особливістю даної програмної реалізації є те, що вона має простий та зрозумілий GUI, що дає користувачи можливість швидко зорієнтуватись в програмі та розпочати роботу. Крім того, функціонал програми дозволяє зберегти отримані результати в текстовому чи графічному вигляді, що полегшує подальше використання отриманих результатів. 51 ВИСНОВКИ Під час виконання дипломного проекту були розв’язані наступні задачі: – проведено дослідження існуючих торгівельних інтернет-систем; – проведено аналіз літературних джерел щодо електронної комерції; – проведено дослідження методів багатокритеріального підбору з великої кількості вариантів; – розроблено алгоритм багатокритеріального підбору; – реалізовано програмне забезпечення, у якому за допомогою методу багатокритеріального підбору обчислено найкращого постачальника товарів і послуг. У дипломній роботі досліджено поняття електронної комерції і електронного магазину. Детально розглянуто види і особливості створення електронних магазинів, а також існуючі варіанти використання стороннього програмного забезпечення для роботи магазину. В результаті порівняння актуальних торгівельних інтернет-систем було виявлено, що жодна з них не надає можливості обирати найкращого постачальника. Для того щоб розуміти, варто чи ні продовжувати роботу з постачальником, необхідно провести оцінку кожного з них за певними критеріями. Отже, різноманітність потенційних постачальників необхідної продукції робить вельми актуальною проблему вибору тих з них, які могли б з найбільшим ефектом забезпечити успішну діяльність електронного магазину. В цілому ця проблема може бути підрозділена на 3 етапи: - виявлення потенційних постачальників; - аналіз виявлених постачальників; - визначення рейтингу і ранжування виявлених постачальників. Було спроектовано, розроблено і створено програмну систему, що може використовуватись в процесі підтримки прийняття рішень в управлінні вибору постачальника електронного магазину. 52 Проте сучасні потреби користувачів передбачають реалізацію широкого кола додаткових функцій, а саме: синхронізація з іншими програмними системами або БД, забезпечення більш надійного захисту інформації, інтеграція зі службами Microsoft Office, тощо. Це потребує створення більш досконалої системи, проте розроблена в даному бакалаврському проекті система заходів є доцільна у будь-якому електронному магазині і може бути розширена відповідно до функціональних потреб конкретної системи. Одержані результати можуть бути використані, як в електронному магазині, так і в будь-якій іншій предметній області з використанням створеної системи програмних засобів, оскільки вона є досить ефективною системою та пристосована для використання в інших галузях за умов адаптації множини критеріїв та вагомостей під умови поставленого завдання. 53 СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ 1. ДСТУ 3008-95 Структура і правила оформлення. Документація. Звіти у сфері науки і техніки 2. Единая система конструкторской документации. Основные надписи: ГОСТ 2.104-2006. – Взамен ГОСТ 2.104-68; введ. 01.09.06. – М.: Стандартинформ, 2006. – 14 с. 3. Единая система программной документации. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения: ГОСТ 19.701-90. – Введ. 01.01.92. – М.: Изд-во стандартов, 1991. – 25 с. 4. Библиографическое описание документа. Общие требования и правила составления: ГОСТ 7.1-84. – Введ. 01.01.86. – М: Изд-во стандартов, 1985. – 72 с. 5. Троелсен. Э. С# и платформа .NET. Библиотека программиста. – СПб.: Питер, 2004. – 796 с. 54 ДОДАТОК А Лістинг програми, яка реалізує багатокритеріальний підбор using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; namespace WindowsFormsApplication1 { public partial class Form1 : Form { Form2 Form2 = new Form2(); Form3 Form3 = new Form3(); // считывание данных из полей //ПОСТАВЩИК A double ves_summ; double a_2=0; //Ассортимент double a_4=0; //отзывы double a_5 = 0; //Гарантия 55 double a_6 = 0; //Доставка double a_7 = 0; //форма оплаты //ПОСТАВЩИК B double b_2 = 0; //Ассортимент double b_4 = 0; //отзывы double b_5 = 0; //Гарантия double b_6 = 0; //Доставка double b_7 = 0; //форма оплаты //ПОСТАВЩИК C double c_2 = 0; //Ассортимент double c_4 = 0; //отзывы double c_5 = 0; //Гарантия double c_6 = 0; //Доставка double c_7 = 0; //форма оплаты double ves_1; double ves_2; double ves_3; double ves_4; double ves_5; double ves_6; double ves_7; 56 public Form1() { InitializeComponent(); } private void label1_Click(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { //Вес аргумента ves_1 = Convert.ToDouble(ves1.Text); Form2.ves1.Text = Convert.ToString(ves_1); ves_1 = ves_1/ 100; //ves1.Text = Convert.ToString(ves_1); ves_2 = Convert.ToDouble(ves2.Text); Form2.ves2.Text = Convert.ToString(ves_2); ves_2 = ves_2/ 100; //ves2.Text = Convert.ToString(ves_2); ves_3 = Convert.ToDouble(ves3.Text); Form2.ves3.Text = Convert.ToString(ves_3); ves_3 =ves_3/ 100; //ves3.Text = Convert.ToString(ves_3); ves_4 = Convert.ToDouble(ves4.Text); Form2.ves4.Text = Convert.ToString(ves_4); 57 ves_4 = ves_4/ 100; //ves4.Text = Convert.ToString(ves_4); ves_5 = Convert.ToDouble(ves5.Text); Form2.ves5.Text = Convert.ToString(ves_5); ves_5 = ves_5/ 100; //ves5.Text = Convert.ToString(ves_5); ves_6 = Convert.ToDouble(ves6.Text); Form2.ves6.Text = Convert.ToString(ves_6); ves_6 = ves_6/ 100; // ves6.Text = Convert.ToString(ves_6); ves_7 = Convert.ToDouble(ves7.Text); Form2.ves7.Text = Convert.ToString(ves_7); ves_7 = ves_7/ 100; //ves7.Text = Convert.ToString(ves_7); double a_1 = Convert.ToDouble(a1.Text); //цена Form2.a1.Text = Convert.ToString(a_1); double a_3 = Convert.ToDouble(a3.Text); //Скидка Form2.a3.Text = Convert.ToString(a_3); double b_1 = Convert.ToDouble(b1.Text); //цена Form2.b1.Text = Convert.ToString(b_1); double b_3 = Convert.ToDouble(b3.Text); //Скидка Form2.b3.Text = Convert.ToString(b_3); double c_1 = Convert.ToDouble(c1.Text); //цена Form2.c1.Text = Convert.ToString(c_1); 58 double c_3 = Convert.ToDouble(c3.Text); //Скидка Form2.c3.Text = Convert.ToString(c_3); double sumA; double sumB; double sumC; //Форма оплаты поставщика А switch (a7.SelectedIndex) { case 0: a_7 = 1; break;//Наличный case 1: a_7 = 2; break;//Безналичный default: a_7 = 0;break; } Form2.a7.Text = Convert.ToString(a7.Text); //Форма оплаты поставщика B switch (b7.SelectedIndex) { case 0: b_7 = 1; break;//Наличный case 1: b_7 = 2; break;//Безналичный default: b_7 = 0; break; } Form2.b7.Text = Convert.ToString(b7.Text); //Форма оплаты поставщика C switch (c7.SelectedIndex) { case 0: c_7 = 1; break;//Наличный case 1: c_7 = 2; break;//Безналичный 59 default: c_7 = 0; break; } Form2.c7.Text = Convert.ToString(c7.Text); //Достака поставщика А switch (a6.SelectedIndex) { case 0: a_6 = 1; break;//В тот же день case 1: a_6 = 2; break;//1 - 2 дня case 2: a_6 = 3; break;//3 - 5 дней case 3: a_6 = 4; break;//Неделя case 4: a_6 = 5; break;//Больше недели default: a_7 = 0; break; } Form2.a6.Text = Convert.ToString(a6.Text); //Достака поставщика B switch (b6.SelectedIndex) { case 0: b_6 = 1; break;//В тот же день case 1: b_6 = 2; break;//1 - 2 дня case 2: b_6 = 3; break;//3 - 5 дней case 3: b_6 = 4; break;//Неделя case 4: b_6 = 5; break;//Больше недели default: b_6 = 0; break; } Form2.b6.Text = Convert.ToString(b6.Text); //Достака поставщика C 60 switch (c6.SelectedIndex) { case 0: c_6 = 1; break;//В тот же день case 1: c_6 = 2; break;//1 - 2 дня case 2: c_6 = 3; break;//3 - 5 дней case 3: c_6 = 4; break;//Неделя case 4: c_6 = 5; break;//Больше недели default: c_6 = 0; break; } Form2.c6.Text = Convert.ToString(c6.Text); //Гарантия поставщика А switch (a5.SelectedIndex) { case 0: a_5 = 1; break;////Месяц case 1: a_5 = 2; break;//Квартал case 2: a_5 = 3; break;//Год case 3: a_5 = 4; break;//Больше года default: a_5 = 0; break; } Form2.a5.Text = Convert.ToString(a5.Text); //Гарантия поставщика B switch (b5.SelectedIndex) { case 0: b_5 = 1; break;////Месяц case 1: b_5 = 2; break;//Квартал case 2: b_5 = 3; break;//Год case 3: b_5 = 4; break;//Больше года 61 default: b_5 = 0; break; } Form2.b5.Text = Convert.ToString(b5.Text); //Гарантия поставщика B switch (c5.SelectedIndex) { case 0: c_5 = 1; break;////Месяц case 1: c_5 = 2; break;//Квартал case 2: c_5 = 3; break;//Год case 3: c_5 = 4; break;//Больше года default: c_5 = 0; break; } Form2.c5.Text = Convert.ToString(c5.Text); //Отзывы поставщика А switch (a4.SelectedIndex) { case 0: a_4 = 1; break;//Негативные = 1 case 1: a_4 = 2; break;//Средние =2 case 2: a_4 = 3; break;//Положительные =3 default: a_4 = 0; break; } Form2.a4.Text = Convert.ToString(a4.Text); //Отзывы поставщика B switch (b4.SelectedIndex) { case 0: b_4 = 1; break;//Негативные = 1 62 case 1: b_4 = 2; break;//Средние =2 case 2: b_4 = 3; break;//Положительные =3 default: b_4 = 0; break; } Form2.b4.Text = Convert.ToString(b4.Text); //Отзывы поставщика А switch (c4.SelectedIndex) { case 0: c_4 = 1; break;//Негативные = 1 case 1: c_4 = 2; break;//Средние =2 case 2: c_4 = 3; break;//Положительные =3 default: c_4 = 0; break; } Form2.c4.Text = Convert.ToString(c4.Text); //Ассортимент поставщика 1 switch (a2.SelectedIndex) { case 0: a_2 = 1; break;//Узкий(< 200) = 1 case 1: a_2 =2; break;//Ограниченный(< 1000) =2 case 2: a_2 = 3; break;//Широкий(> 1000) =3 default: a_2 = 0; break; } Form2.a2.Text = Convert.ToString(a2.Text); //Ассортимент поставщика 2 switch (b2.SelectedIndex) 63 { case 0: b_2 = 1; break;//Узкий(< 200) = 1 case 1: b_2 = 2; break;//Ограниченный(< 1000) =2 case 2: b_2 = 3; break;//Широкий(> 1000) =3 default: b_2 = 0; break; } Form2.b2.Text = Convert.ToString(b2.Text); //Ассортимент поставщика 3 switch (c2.SelectedIndex) { case 0: c_2 = 1; break;//Узкий(< 200) = 1 case 1: c_2 = 2; break;//Ограниченный(< 1000) =2 case 2: c_2 = 3; break;//Широкий(> 1000) =3 default: c_2 = 0; break; } Form2.c2.Text = Convert.ToString(c2.Text); //Номализация для цены MIN double[] F1m = { a_1, b_1, c_1 }; double maxF1 = F1m.Max(); double minF1 = F1m.Min(); if (a_1 == b_1 && b_1 == c_1) { a_1 = 0; b_1 = 0; c_1 = 0; } else { 64 a_1 = ((maxF1 - a_1) / (maxF1 - minF1)) * (2 - 1) + 1; b_1 = ((maxF1 - b_1) / (maxF1 - minF1)) * (2 - 1) + 1; c_1 = ((maxF1 - c_1) / (maxF1 - minF1)) * (2 - 1) + 1; } //Номализация для ассортимента double[] F2m = { a_2, b_2, c_2 }; double maxF2 = F2m.Max(); double minF2 = F2m.Min(); if (a_2 == b_2 && b_2 == c_2) { a_2 = 0; b_2 = 0; c_2 = 0; } else { a_2 = ((a_2 - minF2) / (maxF2 - minF2)) * (2 - 1) + 1; b_2 = ((b_2 - minF2) / (maxF2 - minF2)) * (2 - 1) + 1; c_2 = ((c_2 - minF2) / (maxF2 - minF2)) * (2 - 1) + 1; } //Номализация для Скидки double[] F3m = { a_3, b_3, c_3 }; double maxF3 = F3m.Max(); double minF3 = F3m.Min(); if (a_3 == b_3 && b_3 == c_3) { a_3 = 0; b_3 = 0; c_3 = 0; } else 65 { a_3 = ((a_3 - minF3) / (maxF3 - minF3)) * (2 - 1) + 1; b_3 = ((b_3 - minF3) / (maxF3 - minF3)) * (2 - 1) + 1; c_3 = ((c_3 - minF3) / (maxF3 - minF3)) * (2 - 1) + 1; } //Номализация для Отзывы double[] F4m = { a_4, b_4, c_4 }; double maxF4 = F4m.Max(); double minF4 = F4m.Min(); if (a_4 == b_4 && b_4 == c_4) { a_4 = 0; b_4 = 0; c_4 = 0; } else { a_4 = ((a_4 - minF4) / (maxF4 - minF4)) * (2 - 1) + 1; b_4 = ((b_4 - minF4) / (maxF4 - minF4)) * (2 - 1) + 1; c_4 = ((c_4 - minF4) / (maxF4 - minF4)) * (2 - 1) + 1; } //Номализация для Гарантия double[] F5m = { a_5, b_5, c_5 }; double maxF5 = F5m.Max(); double minF5 = F5m.Min(); if (a_5 == b_5 && b_5 == c_5) { a_5 = 0; b_5 = 0; c_5 = 0; } 66 else { a_5 = ((a_5 - minF5) / (maxF5 - minF5)) * (2 - 1) + 1; b_5 = ((b_5 - minF5) / (maxF5 - minF5)) * (2 - 1) + 1; c_5 = ((c_5 - minF5) / (maxF5 - minF5)) * (2 - 1) + 1; } //Номализация для Доставки MIN double[] F6m = { a_6, b_6, c_6 }; double maxF6 = F6m.Max(); double minF6 = F6m.Min(); if (a_6 == b_6 && b_6 == c_6) { a_6 = 0; b_6 = 0; c_6 = 0; } else { a_6 = ((maxF6 - a_6) / (maxF6 - minF6)) * (2 - 1) + 1; b_6 = ((maxF6 - b_6) / (maxF6 - minF6)) * (2 - 1) + 1; c_6 = ((maxF6 - c_6) / (maxF6 - minF6)) * (2 - 1) + 1; } //Номализация для Способа оплаты double[] F7m = { a_7, b_7, c_7 }; double maxF7 = F7m.Max(); double minF7 = F7m.Min(); if (a_7 == b_7 && b_7 == c_7) { 67 a_7 = 0; b_7 = 0; c_7 = 0; } else { a_7 = ((a_7 - minF7) / (maxF7 - minF7)) * (2 - 1) + 1; b_7 = ((b_7 - minF7) / (maxF7 - minF7)) * (2 - 1) + 1; c_7 = ((c_7 - minF7) / (maxF7 - minF7)) * (2 - 1) + 1; } //умножаеем поле на вес и суммируем значения поля А a_1 = a_1 * ves_1; a1.Text =Convert.ToString(a_1); a_2 = a_2 * ves_2; a2.Text = Convert.ToString(a_2); a_3 = a_3 * ves_3; a3.Text = Convert.ToString(a_3); a_4 = a_4 * ves_4; a4.Text = Convert.ToString(a_4); a_5 = a_5 * ves_5; a5.Text = Convert.ToString(a_5); a_6 = a_6 * ves_6; a6.Text = Convert.ToString(a_6); a_7 = a_7 * ves_7; a7.Text = Convert.ToString(a_7); sumA =a_1 + a_2 + a_3 + a_4 + a_5 + a_6 + a_7; a_sum.Text = Convert.ToString(sumA); 68 //умножаеем поле на вес и суммируем значения поля В b_1 = b_1 * ves_1; b1.Text = Convert.ToString(b_1); b_2 = b_2 * ves_2; b2.Text = Convert.ToString(b_2); b_3 = b_3 * ves_3; b3.Text = Convert.ToString(b_3); b_4 = b_4 * ves_4; b4.Text = Convert.ToString(b_4); b_5 = b_5 * ves_5; b5.Text = Convert.ToString(b_5); b_6 = b_6 * ves_6; b6.Text = Convert.ToString(b_6); b_7 = b_7 * ves_7; b7.Text = Convert.ToString(b_7); sumB = b_1 + b_2 + b_3 + b_4 + b_5 + b_6 + b_7; b_sum.Text = Convert.ToString(sumB); //умножаеем поле на вес и суммируем значения поля С c_1 = c_1 * ves_1; c1.Text = Convert.ToString(c_1); c_2 = c_2 * ves_2; c2.Text = Convert.ToString(c_2); c_3 = c_3 * ves_3; c3.Text = Convert.ToString(c_3); c_4 = c_4 * ves_4; c4.Text = Convert.ToString(c_4); c_5 = c_5 * ves_5; 69 c5.Text = Convert.ToString(c_5); c_6 = c_6 * ves_6; c6.Text = Convert.ToString(c_6); c_7 = c_7 * ves_7; c7.Text = Convert.ToString(c_7); sumC = c_1 + c_2 + c_3 + c_4 + c_5 + c_6 + c_7; c_sum.Text = Convert.ToString(sumC); double[] Res = {sumA, sumB, sumC}; double maxValue = Res.Max(); res.Text = "Лучший коэффициент ="+Convert.ToString(maxValue); if(sumA>sumB && sumA > sumC) { Form3.label1.Text = "Лучший поставщик 1. С индексом " + Convert.ToSingle(maxValue); Form3.chart1.Series[0].Color = Color.Red; Form3.chart1.Series[1].Color = Color.Blue; Form3.chart1.Series[2].Color = Color.Blue; } else if (sumB > sumA && sumB > sumC) { Form3.label1.Text = "Лучший поставщик 2. С индексом " + Convert.ToSingle(maxValue); Form3.chart1.Series[0].Color = Color.Blue; Form3.chart1.Series[1].Color = Color.Red; Form3.chart1.Series[2].Color = Color.Blue; } else if (sumC > sumA && sumC > sumB) { Form3.label1.Text = "Лучший поставщик 3. С индексом " + Convert.ToSingle(maxValue); Form3.chart1.Series[0].Color = Color.Blue; Form3.chart1.Series[1].Color = Color.Blue; 70 Form3.chart1.Series[2].Color = Color.Red; } Form3.name = this.Text; //Передача названия файла Form3.chart1.Series[0].Points.AddXY(0, sumA); Form3.chart1.Series[1].Points.AddXY(1, sumB); Form3.chart1.Series[2].Points.AddXY(2, sumC); Form2.Show(); Form3.Show(); } private void Form1_MouseMove(object sender, MouseEventArgs e) { ves_summ = Convert.ToDouble(ves1.Text) + Convert.ToDouble(ves2.Text) + Convert.ToDouble(ves3.Text) + Convert.ToDouble(ves4.Text) + Convert.ToDouble(ves5.Text) + Convert.ToDouble(ves6.Text) + Convert.ToDouble(ves7.Text); if (ves_summ == 100) panel1.BackColor = Color.Green; else panel1.BackColor = Color.Red; } private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { toolTip1.SetToolTip(this.pictureBox1, "Сумма Весов должна быть 100"); } 71 private void Form1_Load(object sender, EventArgs e) { a2.Text = a2.Items[0].ToString(); a4.Text = a4.Items[0].ToString(); a5.Text = a5.Items[0].ToString(); a6.Text = a6.Items[0].ToString(); a7.Text = a7.Items[0].ToString(); b2.Text = b2.Items[1].ToString(); b4.Text = b4.Items[1].ToString(); b5.Text = b5.Items[1].ToString(); b6.Text = b6.Items[1].ToString(); b7.Text = b7.Items[1].ToString(); c2.Text = c2.Items[2].ToString(); c4.Text = c4.Items[2].ToString(); c5.Text = c5.Items[2].ToString(); c6.Text = c6.Items[2].ToString(); c7.Text = c7.Items[0].ToString(); } private void новыйToolStripMenuItem_Click(object sender, EventArgs e) { Application.Restart(); } 72 private void графикToolStripMenuItem_Click(object sender, EventArgs e) { Form3.Visible = true; //Form3.Show(); } private void данныеToolStripMenuItem_Click(object sender, EventArgs e) { Form2.Visible = true; } private void выходToolStripMenuItem_Click(object sender, EventArgs e) { Close() private void изображениеToolStripMenuItem_Click(object sender, EventArgs e) { SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "PNG Image|*.png|JPeg Image|*.jpg"; saveFileDialog.Title = "Save Chart As Image File"; saveFileDialog.FileName = this.Text + ".png"; DialogResult result = saveFileDialog.ShowDialog(); saveFileDialog.RestoreDirectory = true; if (result == DialogResult.OK && saveFileDialog.FileName != "") { 73 try { if (saveFileDialog.CheckPathExists) { if (saveFileDialog.FilterIndex == 2) { Form3.chart1.SaveImage(saveFileDialog.FileName, System.Windows.Forms.DataVisualization.Charting.ChartImageFormat.Jpeg); MessageBox.Show("Файл сохранен"); } else if (saveFileDialog.FilterIndex == 1) { Form3.chart1.SaveImage(saveFileDialog.FileName, System.Windows.Forms.DataVisualization.Charting.ChartImageFormat.Png); MessageBox.Show("Файл сохранен"); } } else { MessageBox.Show("Путь не найден"); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } 74 } private void данныеToolStripMenuItem1_Click(object sender, EventArgs e) { SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "Текстовый документ (*.txt)|*.txt"; saveFileDialog.FileName =this.Text+".txt"; if (saveFileDialog.ShowDialog() == DialogResult.OK) { StreamWriter streamWriter = new StreamWriter(saveFileDialog.FileName); streamWriter.WriteLine("_________________________________________________ _____________________________________________"); streamWriter.WriteLine("_________________________________Результаты_____ ______________________________________________"); streamWriter.WriteLine("_________________________________________________ _____________________________________________"); streamWriter.WriteLine(label1.Text + "\t" + label2.Text + "\t" + label3.Text + "\t" + label4.Text + "\t" + label5.Text); streamWriter.WriteLine(label6.Text + "\t\t" + ves1.Text + "\t\t" + a1.Text + "\t\t" + b1.Text + "\t" + c1.Text); streamWriter.WriteLine(label7.Text + "\t\t" + ves2.Text + "\t\t" + a2.Text + "\t\t" + b2.Text + "\t" + c2.Text); 75 streamWriter.WriteLine(label8.Text + "\t\t" + ves3.Text + "\t\t" + a3.Text + "\t\t" + b3.Text + "\t" + c3.Text); streamWriter.WriteLine(label9.Text + "\t\t" + ves4.Text + "\t\t" + a4.Text + "\t\t" + b4.Text + "\t" + c4.Text); streamWriter.WriteLine(label10.Text + "\t\t" + ves5.Text + "\t\t" + a5.Text + "\t\t" + b5.Text + "\t" + c5.Text); streamWriter.WriteLine(label11.Text + "\t\t" + ves6.Text + "\t\t" + a6.Text + "\t\t" + b6.Text + "\t" + c6.Text); streamWriter.WriteLine(label12.Text + "\t\t" + ves7.Text + "\t\t" + a7.Text + "\t\t" + b7.Text + "\t" + c7.Text); streamWriter.WriteLine("_________________________________________________ _____________________________________________"); streamWriter.WriteLine("_________________________________Изначальные данные___________________________________________"); streamWriter.WriteLine("_________________________________________________ _____________________________________________"); streamWriter.WriteLine(label1.Text + "\t" + label2.Text + "\t" + label3.Text + "\t" + label4.Text + "\t" + label5.Text); streamWriter.WriteLine(label6.Text + "\t\t" + Form2.ves1.Text + "\t\t" + Form2.a1.Text + "\t\t" + Form2.b1.Text + "\t" + Form2.c1.Text); streamWriter.WriteLine(label7.Text + "\t\t" + Form2.ves2.Text + "\t\t" + Form2.a2.Text + "\t\t" + Form2.b2.Text + "\t" + Form2.c2.Text); streamWriter.WriteLine(label8.Text + "\t\t" + Form2.ves3.Text + "\t\t" + Form2.a3.Text + "\t\t" + Form2.b3.Text + "\t" + Form2.c3.Text); 76 streamWriter.WriteLine(label9.Text + "\t\t" + Form2.ves4.Text + "\t\t" + Form2.a4.Text + "\t\t" + Form2.b4.Text + "\t" + Form2.c4.Text); streamWriter.WriteLine(label10.Text + "\t\t" + Form2.ves5.Text + "\t\t" + Form2.a5.Text + "\t\t" + Form2.b5.Text + "\t" + Form2.c5.Text); streamWriter.WriteLine(label11.Text + "\t\t" + Form2.ves6.Text + "\t\t" + Form2.a6.Text + "\t\t" + Form2.b6.Text + "\t" + Form2.c6.Text); streamWriter.WriteLine(label12.Text + "\t\t" + Form2.ves7.Text + "\t\t" + Form2.a7.Text + "\t\t" + Form2.b7.Text + "\t" + Form2.c7.Text); streamWriter.Close(); MessageBox.Show("Файл сохранен"); } } private void a1_KeyPress(object sender, KeyPressEventArgs e) { if ((e.KeyChar <= 47 || e.KeyChar >= 58) && e.KeyChar != 8) e.Handled = true; } private void b1_KeyPress(object sender, KeyPressEventArgs e) { if ((e.KeyChar <= 47 || e.KeyChar >= 58) && e.KeyChar != 8) e.Handled = true; } private void c1_KeyPress(object sender, KeyPressEventArgs e) { 77 if ((e.KeyChar <= 47 || e.KeyChar >= 58) && e.KeyChar != 8) e.Handled = true; } private void a3_KeyPress(object sender, KeyPressEventArgs e) { if ((e.KeyChar <= 47 || e.KeyChar >= 58) && e.KeyChar != 8) e.Handled = true; } private void b3_KeyPress(object sender, KeyPressEventArgs e) { if ((e.KeyChar <= 47 || e.KeyChar >= 58) && e.KeyChar != 8) e.Handled = true; } private void c3_KeyPress(object sender, KeyPressEventArgs e) { if ((e.KeyChar <= 47 || e.KeyChar >= 58) && e.KeyChar != 8) e.Handled = true; } private void ves1_KeyPress(object sender, KeyPressEventArgs e) { if ((e.KeyChar <= 47 || e.KeyChar >= 58) && e.KeyChar != 8) e.Handled = true; } 78 private void b2_KeyPress(object sender, KeyPressEventArgs e) { e.Handled = true; } } } 79 ДОДАТОК В Вміст текстового файлу з результатом _________________________________________________________________ _____________________________ _________________________________Результаты_____________________ ______________________________ _________________________________________________________________ _____________________________ Параметр Вес Поставщик А Цена 10 0,2 Ассортимент Скидка 15 25 Гарантия Отзывы 0,15 15 Доставка 0,375 0,5 0,05 Форма отплаты 0,1 0,225 0,3 0,15 20 Поставщик С 0,18974358974359 0,25 5 Поставщик В 0,225 0,3 0,075 0,1 0,4 10 0,3 0,1 0,2 0,2 0,1 _________________________________________________________________ _____________________________ _________________________________Изначальные данные___________________________________________ _________________________________________________________________ _____________________________ Параметр Вес Цена 10 Ассортимент Поставщик А 1000 Поставщик В Поставщик С 5000 40000 Узкий (<200) 15 Ограниченный(<1000) Широкий(>1000) Скидка 25 10 15 20 80 Гарантия Негативные 15 Средние Положительные Отзывы Месяц 5 Доставка Квартал В тот же день 20 Год 1-2 дня 3-5 дней Форма отплаты 10 Наличные Безналичные Наличные 81