База даних оцінок відгуків та зауважень від користувачів, документаційно-інформаційного забезпечення на основі атрибутів якості

 

Зміст


Вступ

1.Дослідження предметної області

1.1 Характеристика предметної області

1.2 Виділення сутностей предметної області

1.3 Приведення до 3-ї нормальної форми

2.Проектування та реалізація бази даних на фізичному рівні

2.1 Обґрунтування вибору СКБД

2.2 Фізична ER-діаграма БД

3.Реалізація бази даних та розробка програмного забезпечення по веденню бази даних

3.1 Вибір засобів розробки інтерфейсу програмного забезпечення

3.2 Створення інтерфейсу для роботи з базою даних

3.3 Інструкція користувача

Висновок

Перелік посилань

Додаток

база даний програмний атрибут


Вступ


Потреба у документаційно-інформаційному забезпеченні завжди була нормальним явищем для людини. Раніше для пошуку потрібної інформації ми звертались до бібліотек, різних довідників, осіб, які могли б володіти потрібною нам інформацією. На це йшло багато часу, читаючи десятки «не тої» літератури. Але з розвитком компютерних технологій і мережі Інтернет, пошук інформації став більш доступним та зручним.

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

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



1.Дослідження предметної області


1.1 Характеристика предметної області


На сьогоднішній день багато людей мають доступ до мережі Internet. Завдяки цьому користувачі можуть розміщувати на сайтах різноманітний контент, наприклад Документаційно-інформаційне забезпечення (ДІЗ) [9] і залишати свої оцінки та відгуки до нього.

На сайті mapia.ua в статті «Правила розміщення інформації» є прості загальні рекомендації з того, як створювати контент.

Загальні рекомендації з цієї статті (відгуки які не відповідають цим рекомендаціям, видаляються з інтернет ресурсу):

недоречний контент. Рекомендується утримуватися від погроз, домагань, образ, проявів ненависті, а також ненормативної лексики;

рекламний контент. Власники сайтів негативно відносяться до публікації матеріалів рекламного характеру. Це для того щоб утримувати продукт корисним для користувачів і чистим від спаму;

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

конфіденційність. Не варто публікувати інформацію особистого характеру інших людей без їх дозволу. Сюди відносяться повні ПІБ, номери телефонів, адреси і фотографії. Більш детально про конфіденційність можна прочитати в Політиці конфіденційності;

інтелектуальна власність. Не варто перепощувати нічого з інших сайтів або інших користувачів;

нелегальний контент. Якщо вміст відгуку порушує права інших людей або чинний закон України, то він є не легальним;

неграмотність. Інформацію, написану з безліччю граматичних і пунктуаційних помилок або описок, важко сприймати і можна невірно тлумачити.

Рекомендації по відгукам із тієї ж статті:

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

особистий досвід. Немає нічого кориснішого інформації з перших рук;

точність і правдивість. Залишаючи відгук необхідно якомога точніше описати свій досвід, не спотворюючи факти;

конфлікт інтересів. Якщо користувач сам є представником компанії, то, не варто писати відгуки про свою компанію і бажано утримуватись від відгуків конкурентам;

змістовність. При написанні відгуку бажано детально викласти свою думку. Інші користувачі обов'язково оцінять такий відгук. Емоційні відгуки - це добре, але якщо відгук не виражає нічого крім емоції - це погано. Не варто писати відгуки такі, як наприклад: «ААА, який офігенний ресторан!!» або «Усе огидно!» Краще, описати, чому ви так вважаєте.

Коли користувач шукає потрібне йому ДІЗ, то для нього як для користувача мережі Internet, цілодобово є у відкритому доступі необхідна інформація про те що стосується ДІЗ. Тільки в Internet є можливість швидко, переглядати оцінки користувачів, читати відгуки людей, які вже знають про дане ДІЗ, що дозволяє прийняти найбільш раціональне рішення при виборі потрібного матеріалу. Більш того, користувач має право сам залишити відгук і тим самим висловити свою думку.

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



Таблиця 1 - Шкала якості

Рівень якостіНазваОпис0ВандалізмБезглуздий набір символів, графіті тощо. Не існує змістовних версій.(Видаляється)1Відгук не має відношення до статтіВідгук не повязаний з статтею.2Відгук не закінченийМінімальний зміст, або одне визначення, або немає визначення, але є якісь дані.3Звичайний відгукВизначення, додаткові дані, категорія.4Якісний відгукЯкісний зміст, розкрита точка зору користувача.5Зразковий відгукЯкісний зміст, розкриття теми і всіх суттєвих аспектів.

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

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

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

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

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

Під час визначення атрибутів для кожної сутності необхідно пам'ятати:

кожен атрибут має бути пов'язаний з темою сутності;

не рекомендується включати до сутності дані, які є результатом виразу;

у сутності має бути вся необхідна інформація.

Інформацію варто розбивати на найменші логічні одиниці (наприклад, поля «Ім'я» і «Прізвище», а не загальне поле «Ім'я»).


1.2 Виділення сутностей предметної області


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

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

Ключ - мінімальний набір атрибутів, за значеннями якого можна однозначно знайти потрібний екземпляр сутності. Мінімальний означає, що виключення з набору будь-якого атрибута не дозволяє ідентифікувати сутність за тими, які залишились;

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

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

Оцінювання відгуків повинне здійснюватися спеціально відібраною групою експертів, тому, як коректна оцінка дасть більш чітке уявлення про коментар і допоможе відсіяти ті які не мають відношення до конкретного ДІЗ. В звязку з цим потрібно, додати можливість автентифікації (тобто введення свого логіна і пароля) різних типів користувачів, з різним рівнем доступу. Але і в звичайних користувачів повинен бути спосіб яким вони зможуть засвідчити користь від прочитаного відгуку. Саме тому користувачам буде надана можливість відповісти на коротке питання «Відгук корисний?» натиснувши «так» або «ні», і інші користувачі будуть бачити що комусь цей відгук допоміг і можливо допоможе і їм.

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

При розробці даної БД було виділено такі сутності (Рис. 1):

Користувач - екземпляр сутності визначається власним унікальним номером. Ця сутність використовується для того, щоб користувачі могли додавати відгуки і вирішувати чи були корисними для них інші, а користувачі з більшим рівнем доступу іменовані як «Експерти» могли виставляти оцінки до коментарів і видаляти нерелевантні

Відгуки - кожен відгук має свій унікальний номер. У цій сутності знаходяться відгуки і основна інформація про них така як: автор відгуку і його оцінки;


Рисунок 1 - Сутності БД


Тепер опишемо саму модель предметної області (Рис. 2):

користувачі повинні проходити автентифікацію;

є два типи користувачів: звичайні користувачі і експерти;

всі користувачі можуть залишати свої відгуки і переглядати інші (на цьому спільні можливості закінчуються);

кожен відгук має чотири критерії оцінювання 3 - експерт і 1 користувацький;

експерт може виставити три типи оцінок для не оцінених відгуків або переоцінити оцінений, також може видалити відгук;

звичайний користувач може відмітити чи корисний відгук і він буде виділений відповідним кольором - зеленим або червоним.


Рисунок 2 - Модель предметної області


На рисунку зображена модель предметної області і сутності. Сутності виділені різними кольорами.



1.3 Приведення до 3-ї нормальної форми


В ході логічного моделювання на першому кроці було запропоновано зберігати дані в одній сутності яка має наступні атрибути:

КОРИСТУВАЧІ_ВІДГУКИ(ID_КОРИСТУВАЧ, ЛОГІН, ПАРОЛЬ, ПРИОРІТЕТ,ID_ВІДГУК , ВІДГУК, АВТОР, ОЦІНКА, ГРАМОТНІСТЬ, ЗРОЗУМІЛІСТЬ, КОРИСТЬ)_КОРИСТУВАЧ - ідентифікаційний номер користувача.

ЛОГІН - логін користувача яким він авторизується.

ПАРОЛЬ - пароль користувача яким він авторизується.

ПРИОРІТЕТ - тут визначаються якими можливостями буде наділений користувач._ВІДГУК - ідентифікаційний номер відгуку.

ВІДГУК - текст відгуку.

АВТОР - автор відгуку.

ОЦІНКА - основна оцінка відгуку.

ГРАМОТНІСТЬ - оцінка грамотності відгуку.

ЗРОЗУМІЛІСТЬ - оцінка зрозумілості відгуку.

КОРИСТЬ - критерій за яким видно чи був цей відгук корисний комусь.

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

Зявляється проблема при зміненні даних в сутності, проблема має назву Аномалія обновлення.

В багатьох кортежах відбувається багато разове повторення одних і тих самих значень в атрибутах ЛОГІН, ПАРОЛЬ, ПРИОРІТЕТ, АВТОР. Крім того тут зберігаються незалежні одне від одного дані про користувачів і їх відгуки.

Аномалія вставки.

В відношення неможна вставити лані про користувача який ще не залишав відгуки. Наприклад до сутності додається новий користувач, то в такому випадку запис буде виглядати так (Петро, 1111, USER, null, null), а це не допустимо тому, що база даних буде виглядати некоректно і неадекватно.

Аномалія видалення.

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

Відношення КОРИСТУВАЧІ_ВІДГУКИ знаходиться у першій нормальній формі(1НФ), але ще не знаходиться у 2 нормальній формі(2НФ).

Тому, що відношення має залежності від складного ключа такі як:_КОРИСТУВАЧЛОГІН_КОРИСТУВАЧПАРОЛЬ_КОРИСТУВАЧПРИОРІТЕТ

Також є залежність відгуку від складного ключа_ВІДГУКВІДГУК_ВІДГУКАВТОР_ВІДГУКОЦІНКА (і всі інші оцінки так само)

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

Відношення КОРИСТУВАЧІ_ВІДГУКИ декомпозується на дві КОРИСТУВАЧІ і ВІДГУКИ. І таким чином відношення переходить у 2НФ.

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



2.Проектування та реалізація бази даних на фізичному рівні


2.1 Обґрунтування вибору СКБД


Для фізичної реалізації БД було обрано SQLite.- це бібліотека, написана на мові C, яка реалізує SQL механізм роботи з даними, іншими словами, движок баз даних. не являється клієнтською бібліотекою, що дозволяє лише підєднувати додаток до серверу баз даних, SQLite сама являється сервером баз даних.бібліотека записує дані безпосередньо в файл на диску, а також дає можливість читати, обновлювати і шукати дані на основі мови запитів SQL, переважно орієнтуючись на стандарт SQL 92.

Основні переваги використання SQLite:

безкоштовне розповсюдження;

простота установки;

простота адміністрування. Оскільки SQLite зберігає дані в звичайних файлах, то зникає потреба в додаткових засобах адміністрування. Кожен користувач може мати свої власні бази даних чиї права доступу реалізуються файловою системою сервера автоматично;

простота використання. На відміну від інших баз даних, SQLite являється без типовою базою. При створенні таблиці можна вказати лише імена полів, так як всі дані SQLite зберігає в форматі рядка(string). Припустим, ми обявили стовбець як «INTEGER». SQlite дозволяє занести в цей рядок значення любого типу (999, «abc», «123», 678.525). І якщо значення яке вставляється - не ціле, то SQlite намагається привести його до цілого. Тобто рядок «123» перетвориться в ціле 123, а решта значень запишуться «як є»;

продуктивність. Оскільки движок і інтерфейс цієї СКБД реалізовані, як єдине ціле, то величезною перевагою SQLite є висока продуктивність - для більшості типових задач додаток, побудований на SQLite, працює швидше, ніж при використанні MySQL в 2-3 рази і швидше PostgreSQL в 10-20 разів;


Рисунок 3 - Порівняння швидкості виконання основних операцій. За даними тестування на сайті - www.hwaci.com/sw/sqlite/speed.html <#"justify">2.2 Фізична ER-діаграма БД


Дослідивши предметну область і вияснивши, що необхідно зробити для створення потрібної нам БД, були виділені необхідні нам сутності із їх атрибутами і приведеними до 3НФ. Також розглянувши декілька СКБД була віддана перевага СКБД SQLite, за її швидкість і зручність в перенесенні. І оскільки виділені сутності були приведені до 3НФ і цим позбавлені від різних аномалій і надлишковості в даних, які будуть зберігатися. Прийшов час створити фізичну ER-діаграму, для БД описаної в першому розділі, див. Рисунок 4.

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

у кожного користувача є свій логін і пароль за допомогою якого вони авторизуються у програмі;

кожен відгук повинен мати унікальний ідентифікатор, текстове значення(сам відгук) і імя автора відгуку;

також до відгуку повинні буди прикріплені його критерії оцінювання.



Рисунок 4 - Сформовані сутності з їх атрибутами



3. Реалізація бази даних та розробка програмного забезпечення по веденню бази даних


3.1 Вибір засобів розробки інтерфейсу програмного забезпечення


Дана програма буде написана мовою програмування C#, в середовищі розробки Visual Studio 2012 на платформі .NET, З використанням Бази даних SQLLite.C# надає розробникам сучасну, компонентно-орієнтовану мову, яка дозволяє швидко конструювати чудові рішення, керовані даними. Можливості C# дозволяють створювати рішення для широкого кола клієнтів, включаючи веб - програми, програми на основі Microsoft Windows Forms, додатки для тонких та інтелектуальних клієнтів. На відміну від Object Pascal в С# підпрограми реалізовані тільки у вигляді функцій, проте спеціальний тип функції void не повертає ніякого значення. Саме тому деякі функції таким чином і були реалізовані.

На відміну від С++ , С# більш структурована і типізована мова програмування. В неї немає глобальних змінних, тому що кожна змінна належить певному класу. Також в неї є безліч конструкторів по роботі з календарними датами, які пришвидшать виконання і здешевлять проект.

Синтаксис C# близький до С++ і Java. Мова має строгу статичну типізацію, підтримує поліморфізм, перевантаження операторів, вказівники на функції-члени класів, атрибути, події, властивості, винятки, коментарі у форматі XML. Перейнявши багато що від своїх попередників - мов С++, Delphi, Модула і Smalltalk - С#, спираючись на практику їхнього використання, виключає деякі моделі, що зарекомендували себе як проблематичні при розробці програмних систем: так, C# не підтримує множинне спадкування класів (на відміну від C++) або виведення типів (на відміну Haskell).++ Builder - середовище швидкої розробки (RAD), що випускається компанією Codegear, дочірньою фірмою компанії Embarcadero (раніше Borland). Призначена для написання програм на мові програмування C++. C++ Builder об'єднує Бібліотеку візуальних компонентів і середовище програмування (IDE), написане на Delphi з компілятором C++. Цикл розробки аналогічний Delphi, але з істотними поліпшеннями, доданими в C++ Builder. Більшість компонентів, розроблених в Delphi, можна використовувати і в C++ Builder без модифікації, але, на жаль, не навпаки.++ Builder містить інструменти, які дозволяють здійснювати справжню візуальну розробку Windows-програм методом drag-and-drop, спрощуючи програмування завдяки WYSIWYG редакторові інтерфейсу, вбудованому в його середовище розробки.

Microsoft Visual Studio - лінійка продуктів фірми Майкрософт <#"justify">3.2 Створення інтерфейсу для роботи з базою даних


Опис модулів

Створення інтерфейсу відбувається по моделі описаній в розділі 1.2 (Рис. 2). Далі будуть описані модулі які будуть застосовані при створенні даного програмного продукту:

модуль Авторизації. (Form1)

Даний модуль приймає данні в виді двох рядків тексту логін і пароль, і виясняє чи є в базі такий логін і чи відповідає введений пароль цьому логіну;

модуль введення-виведення. (Form2 - Вкладка «відгуки»)

В цьому модулі є можливість додавання відгуків і свого імені(імя автора), після чого він буде доданий в БД і на екран у вигляді списку будуть виведені всі відгуки у порядку спадання по оцінках, щоб можна було переглянути всі відгуки;

модуль Редагування. (Form2 - Вкладка «Оцінювання»)

Цей модуль доступний для користувачів з рівнем доступу «EXPERT», він може виводити на екран два види списків: повний список з усіма відгуками та їх оцінками, список в якому виводяться лише не оцінені відгуки. Також цей модуль дає можливість оцінювати або змінювати оцінку любого вибраного відгуку за трьома критеріями: оцінка, грамотність, зрозумілість. Також є можливість видаляти відгуки;

модуль для взаємодії з БД. (DBClass)

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

модуль оцінювання (mark) - цей модуль приймає усі три види оцінок і вичислює одну основну яка буде виведена на екран;

модуль заповнювання списку (CompleteList) - Цей модуль працює лише з двома обєктами: Listview і List він зчитує з БД відгуки і заповняє ними Listview, а обєкт List заповнює відповідними id-номерами;

модуль заповнювання неоціненими відгуками (CompleteListNew) - він аналогічний попередньому, єдина відмінність це те що Listview заповнюється лише відгуками з оцінкою 0 (тобто не оціненими);

модуль додавання (AddItem) - цей модуль приймає два текстових значення(імя автора та його відгук) і додає їх до БД;

модуль видалення (DleteItem) - приймає одне числове значення id-номер відгуку і за ним видаляє цей відгук із БД, id-номер отримуємо при виборі відгуку із списку після чого визначається його індекс в Listview і за аналогічним індексом в List отримуємо id-номер цього відгуку.

модуль зміни оцінки(EditMark) - модуль пирймає значення трьох видів оцінювання, і id-номер вибраного відгуку, та змінює оцінку відгуку в БД;

модуль значення користі (EditLike) - Модуль приймає значення, «Так» або «Ні» і змінює значення в БД.

Розробка програмних модулів

При розробці структури даний програмний продукт був поділений на модулі. Для того, щоб програма відповідала поставленим вимогам, були розроблені окремі блоки для реалізації завдань.

Блок завантаження головної форми який знаходиться у файлі ініціалізації програми:

static void Main()

{.EnableVisualStyles();.SetCompatibleTextRenderingDefault(false);.Run(new Form1());

}

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

public string[] user;

Та змінна підключення до БД:

public SQLiteConnection con;

Яка отримує рядок підключення з публічного поля статиного класу DBClass:

con = DBClass.con;

Form1 - Це перше вікно яке зявляється перед користувачем, воно призначене для того щоб користувач міг авторизувати себе для програми, і визначити імя та пріоритет доступу користувача. (Рис. 5)

Їй належать такі елементи:- кнопка «Вхід»;- рамка для інших елементів з текстом «Авторизація»;, label2 - з текстом «Імя:» і «Пароль:»;- в якому із списку можна вибрати два імені;- в який потрібно вводити пароль.


Рисунок 5 - Вікно авторизації


Блок Авторизації через базу даних:

private void button1_Click(object sender, EventArgs e)

{= new string[2];.SelectedItem.ToString().Trim();.Text.Trim();(tbPassword.Text.Trim() != "" && comboBox1.SelectedItem.ToString() != "")

{cmd = con.CreateCommand();.CommandText = @"SELECT UserName, Password, Priority FROM Users";

{.Open();(SQLiteDataReader reader = cmd.ExecuteReader())

{(reader.Read())//Зчитування результатів

{

//Порівняння(comboBox1.SelectedItem.ToString() == reader.GetString(0).TrimEnd() && tbPassword.Text == reader.GetString(1).TrimEnd())

{[0] = reader.GetString(0).TrimEnd();//Ім'я користувача[1] = reader.GetString(2).TrimEnd();//Рівень доступу

}

}

}

}(Exception ex) { MessageBox.Show(ex.Message); }

{.Close();

}

}{ MessageBox.Show("Необхідно щоб усі поля були заповнені"); }(user[0] != null)

{.Show("Вітаю "+user[0]);frm = new Form2();.user = this.user;//передача імені і рівня.Hide();.ShowDialog();.Show();

}

{.Clear();.Focus();.Show("Ім'я або пароль не вірні");

}

}


У разі правильності введених даних, перед користувачем відкриється нове вікно Form2 (рис. 6).

Статичний клас для взаємодії з БД DBClass, містить рядок підключення (Connection string) до БД яким користуються усі модулі:

public static SQLiteConnection con = new SQLiteConnection("Data Source=KomentMark.db");


У ньому є блок для реалізації завантаження з БД списку відгуків (рис. 7):

public static ListView CompleteList(ListView list, List<int> ListID)

{.Items.Clear();.Clear();

SQLiteCommand cmd = con.CreateCommand();.CommandText = @"SELECT * FROM Koments ORDER BY (Mark*0.5)+(MarkLiter*0.25)+(MarkIntel*0.25) desc";

{.Open();(SQLiteDataReader reader = cmd.ExecuteReader())

{(reader.Read())

{.Add((int)reader["id"]);item = new ListViewItem(reader["Autor"].ToString().TrimEnd());.SubItems.Add(reader["Koment"].ToString().TrimEnd());.SubItems.Add(mark(Convert.ToDouble(reader["Mark"]), Convert.ToDouble(reader["MarkLiter"]), Convert.ToDouble(reader["MarkIntel"])).ToString());(reader["Like"].ToString() != "").BackColor = (int)reader["Like"] == 1 ? System.Drawing.Color.Green : System.Drawing.Color.Red;.Items.Add(item);

}

}

}(Exception ex) { MessageBox.Show(ex.Message); }

{.Close();

}.Select();list;

}



Рисунок 6 - Головне функціональне вікно


Рисунок 7 - Список відгуків


Блок для завантаження списку не оцінених відгуків (Рис. 8):

public static ListView CompleteListNew(ListView list, List<int> ListID)

{.Items.Clear();.Clear();cmd = con.CreateCommand();.CommandText = @"SELECT * FROM Koments WHERE Mark=0";

{.Open();(SQLiteDataReader reader = cmd.ExecuteReader())

{(reader.Read())

{.Add((int)reader["id"]);item = new ListViewItem(reader["Autor"].ToString().TrimEnd());.SubItems.Add(reader["Koment"].ToString().TrimEnd());.SubItems.Add(mark(Convert.ToDouble(reader["Mark"]), Convert.ToDouble(reader["MarkLiter"]), Convert.ToDouble(reader["MarkIntel"])).ToString());.Items.Add(item);

}

}

}(Exception ex) { MessageBox.Show(ex.Message); }

{.Close();

}.Select();list;

}



Рисунок 8 - Список неоцінених відгуків


Функція для вирахування загальної оцінки:

private static double mark(double mark, double mark1, double mark2)

{*= 0.5;+= mark1 * 0.25;+= mark2 * 0.25;mark;

}

Блок додавання відгуків у БД (рис. 9):

public static void AddItem(string Koment, string Autor) {cmd = con.CreateCommand();.CommandText = "insert into Koments(Koment, Autor) values(@Koment,@Autor)";.Parameters.AddWithValue("@Koment", Koment);.Parameters.AddWithValue("@Autor", Autor);

{.Open();.ExecuteNonQuery();

}(Exception ex) { MessageBox.Show(ex.Message); }

{.Dispose();.Close();

}

}


Рисунок 9 - Блок додавання відгуків


Блок видалення відгуків з списку і БД (рис. 10):

public static void DleteItem(int id)

{cmd = con.CreateCommand();.CommandText = "DELETE FROM Koments WHERE id="+id;

{.Open();.ExecuteNonQuery();

}(Exception ex) { MessageBox.Show(ex.Message); }

{.Dispose();.Close();

}

}

Блок задавання і редагування оцінки (рис. 10):

public static void EditMark(int id, int Mark, int MarkLiter, int MarkIntel)

{cmd = con.CreateCommand();.CommandText = "UPDATE Koments SET Mark=" + Mark + ", MarkLiter=" + MarkLiter +

", MarkIntel=" + MarkIntel + " WHERE id=" + id;

{.Open();.ExecuteNonQuery();

}(Exception ex) { MessageBox.Show(ex.Message); }

{.Dispose();.Close();

}

}


Рисунок 10 - Блок оцінювання і видалення


Блок оцінки користі відгуку (рис. 11):

public static void EditLike(int id, int Like)

{cmd = con.CreateCommand();.CommandText = "UPDATE Koments SET [Like]=" + Like + " WHERE id=" + id;

{.Open();.ExecuteNonQuery();

}(Exception ex) { MessageBox.Show(ex.Message); }

{.Dispose();.Close();

}

}


Рисунок 11 - Блок оцінки користі

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

Блок завантаження Form2 :

private void Form2_Load(object sender, EventArgs e)

{(user);.CompleteList(listView1, ListID);.CompleteList(listView2, ListID);

}

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

void Admission(string[] user)

{.Text = user[0];.Text = user[0];(user[1])

{"USER":

{//видалення вкладки "Оцінювання".TabPages.Remove(tabControl1.TabPages[1]);

};"EXPERT":

{.Dispose();

};

}

}

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

Рисунок 12 - Перегляд довгих відгуків


У нижньому лівому куті форми розташована кнопка «Вийти.», натиснувши на неї виконується команда this.Close(); вона закриває form2.

Кнопка для додавання відгуку, зчитує дані з текстового поля в якому користувач вводить свій відгук, і текстового поля в якому написане його імя див (рис. 9) .

Код виконання кнопки:

if (textBoxKoment.Text != "" || textBoxAutor.Text != "")

{.AddItem(textBoxKoment.Text, textBoxAutor.Text);.CompleteList(listView1, ListID);.Clear();

}

{.Show("Не дозволяється додаватий пустий відгук чи не вказувати ім'я");

}

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


3.3 Інструкція користувача



При запуску програми зявляється форма авторизації (Рис. 13).


Рисунок 13 - Форма авторизації


Для того щоб авторизуватись, потрібно в полі «Імя» вибрати, до якої категорії ви відноситесь «user» чи «expert», в полі «Пароль» автоматично введено 1111. Далі потрібно натиснути кнопку «Вхід».

Після чого перед користувачем зявляється головне функціональне вікно з списком відгуків (рис. 14).

Рисунок 14 - Головне функціональне вікно


Додавання відгуків

У полі «Новий відгук» потрібно написати свій відгук, а у полі «Ваше імя» потрібно вписати своє імя, після чого натиснути кнопку «Додати відгук».

Детальніший перегляд відгуку

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

Оцінка користі(Доступ тільки для user)

Потрібно вибрати(виділити) рядок відгуку який ви хочете оцінити далі під списком відгуків зявиться поле в якому буде витання «Відгук корисний» і і варіанти відповіді «Так» або «Ні», натиснувши на відповідний варіант ви відповідно оціните відгук і він буде виділений відповідним кольором.

Рисунок 15 - Поле оцінки користі


Далі будуть перераховані функції доступні лише користувачеві «expert». Перейдіть на вкладку «Оцінювання» див. (рис. 16).

Список відгуків.

В Списку можуть відображатися як всі відгуки так і ті що не були оцінені експертом. Для того щоб в списку були відображені тільки не оцінені відгуки потрібно поставити галочку у полі «Тільки не оцінені». Якщо зняти галочку з цього поля то будуть відображені всі відгуки.

Оцінювання відгуку.

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

Видалення відгуку.

Для видалення відгуку необхідно виділити відгук який ви бажаєте видалити, та натиснути кнопку «Видалити».



Рисунок 16 - Вкладка «Оцінювання»



Висновок


У розділі «Дослідження предметної області» було проведено огляд новітніх інформаційних технологій, та програмного забезпечення, що могли б бути використані для розробки сучасного, ефективного програмного продукту.

У розділі «Проектування та реалізація бази даних на фізичному рівні» було обґрунтовано, чому вибрана саме SQLite описавши її переваги і порівнявши з іншими СКБД. Також була описана фізична модель БД і створена ER-діаграма.

У розділі «Реалізація бази даних та розробка програмного забезпечення по веденню бази даних» описано всі компоненти форм, основні модулі програми які поділені на блоки, розписані і проілюстровані. У підрозділі «Інструкція користувача» описано детальна інструкція та послідовні дії користувача в експлуатації програмного засобу. В підрозділі «Вимоги до технічних засобів» описано мінімальні вимоги до системи компютера для нормальної роботи даної програми.

Для реалізації даної курсової роботи була використана система керування базою даних SQLite. В ході виконання курсової роботи було описано усі сутності БД і створено інтуїтивно простий інтерфейс для взаємодії з БД.

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


Перелік посилань


Чарльз Петцольд. Программирование с использованием Microsoft Windows Forms: довідник / Ч. П. Петцольд - Русская Редакция, -Питер,2006 - 432с.

Фаронов В.В. Программирование на языке С#: довідник / В.В. Фаронов - Русская Редакция, -Питер, 2007 - 240с.

Бібліотека класів С# [Електронний ресурс]. - (Дата звернення: 19.05.13) - Режим доступу: #"justify">Форум програмістів .NET [Електронний ресурс]. - (Дата звернення: 19.05.13) - Режим доступу: #"justify">Каталог компаній [Електронний ресурс]. - (Дата звернення: 19.05.13) - Режим доступу: #"justify">Форум програмістів [Електронний ресурс]. - (Дата звернення: 19.05.13) - Режим доступу: #"justify">Офіційний сайт СКБД SQLite [Електронний ресурс] (Дата звернення: 19.05.13) - Режим доступу: #"justify">«Сайтостроение от А до Я» [Електронний ресурс] (Дата звернення: 19.05.13) - Режим доступу: #"justify">Додаток


(Довідковий)

Код програми:

using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Text;System.Windows.Forms;System.Data.SqlClient;

namespace Оцінка_якості_відгуків

{partial class Form1 : Form

{SqlConnection con;//створення змінної для підключення до БД перед появою вікнаForm1()

{();= DBClass.con;//присвоєння рядка підключення який витягуєм з публічного поля статичного класу DBClass.SelectedIndex = 0; //вибір першого імені в списку, щоб запобігти пустому значенню

}string[] user;//створення масиву в який буде записане ім'я і пріорітет, для перелачі у наступну форму

private void button1_Click(object sender, EventArgs e)

{= new string[2];.SelectedItem.ToString().Trim();.Text.Trim();(tbPassword.Text.Trim() != "" && comboBox1.SelectedItem.ToString() != "")

{cmd = con.CreateCommand();.CommandText = @"SELECT UserName, Password, Priority FROM Users";

{.Open();(SqlDataReader reader = cmd.ExecuteReader())

{(reader.Read())//Зчитування результатів

{

//Порівняння(comboBox1.SelectedItem.ToString() == reader.GetString(0).TrimEnd() && tbPassword.Text == reader.GetString(1).TrimEnd())

{[0] = reader.GetString(0).TrimEnd();//Ім'я користувача[1] = reader.GetString(2).TrimEnd();//Його рівень доступу

}

}

}

}(Exception ex) { MessageBox.Show(ex.Message); }

{.Close();

}

}{ MessageBox.Show("Необхідно щоб усі поля були заповнені"); }

(user[0] != null)

{.Show("Вітаю "+user[0]);frm = new Form2();.user = this.user;//передача імені і рівня доступу в наступну форму.Hide();.ShowDialog();.Show();

}

{.Clear();.Focus();.Show("Ім'я або пароль не вірні");

}

}


}

}

:

using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Text;System.Windows.Forms;

Оцінка_якості_відгуків

{partial class Form2 : Form

{Form2()

{();

}string[] user = new string[2];//масив для визначення доступу і імені<int> ListID = new List<int>();//список id-номерів відгуків

void Form2_Load(object sender, EventArgs e)

{(user);.CompleteList(listView1, ListID);.CompleteList(listView2, ListID);

}Admission(string[] user)

{.Text = user[0];.Text = user[0];(user[1])

{"USER":

{.TabPages.Remove(tabControl1.TabPages[1]);//видалення вкладки "Оцінювання"

};"EXPERT":

{.Dispose();

};

}

}void button2_Click(object sender, EventArgs e)

{.Close();

}

void button3_Click(object sender, EventArgs e)

{(textBoxKoment.Text != "" || textBoxAutor.Text != "")//Перевірка чи поля не пусті

{.AddItem(textBoxKoment.Text, textBoxAutor.Text);//додавання відгуку в БД.CompleteList(listView1, ListID);//Обновлення списку в програмі.Clear();//очищення поля в якому був відгук

}

{.Show("Не дозволяється додаватий пустий відгук чи не вказувати ім'я");

}

}

void button1_Click(object sender, EventArgs e)

{.EditMark(ListID[listView2.FocusedItem.Index], markTrackBar.Value, markLiterTrackBar.Value,.Value);

_CheckedChanged(sender, e);

}

void button4_Click(object sender, EventArgs e)

{.DleteItem(ListID[listView2.FocusedItem.Index]);.CompleteList(listView2, ListID);

}

void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)

{(listView1.SelectedItems.Count == 1)

{

{.Text = listView1.FocusedItem.SubItems[1].Text;.Visible = true;

}(Exception) { }

}

{.Clear();.Visible = false;

}

}

void listView2_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)

{(listView2.SelectedItems.Count == 1)

{.Enabled = true;

}

{.Enabled = false;

}

}

void tabControl1_SelectedIndexChanged(object sender, EventArgs e)

{(tabControl1.SelectedIndex == 0)

{.CompleteList(listView1, ListID);

}

{_CheckedChanged(sender, e);

}

}

void checkBox1_CheckedChanged(object sender, EventArgs e)

{(checkBox1.Checked)

{.CompleteListNew(listView2, ListID);

}DBClass.CompleteList(listView2, ListID);

.Enabled = false;

}

void markTrackBar_Scroll(object sender, EventArgs e)

{.SetToolTip(markTrackBar, markTrackBar.Value.ToString());.Text = "Оцінка: " + markTrackBar.Value.ToString();

}

void markLiterTrackBar_Scroll(object sender, EventArgs e)

{.SetToolTip(markLiterTrackBar, markLiterTrackBar.Value.ToString());.Text = "Грамотність: " + markLiterTrackBar.Value.ToString();


}

private void markIntelTrackBar_Scroll(object sender, EventArgs e)

{.SetToolTip(markIntelTrackBar, markIntelTrackBar.Value.ToString());.Text = "Зрозумілість: "+markIntelTrackBar.Value.ToString();

}

void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)

{l = (LinkLabel)sender;L = l.Text == "Так" ? 1 : 0;.EditLike(ListID[listView1.FocusedItem.Index], L);.CompleteList(listView1, ListID);

}

}

}

:

using System;System.Collections.Generic;System.Text;System.Windows.Forms;System.Data.SqlClient;

Оцінка_якості_відгуків

{DBClass

{static SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=" + System.Windows.Forms.Application.StartupPath + @"\KomentMark.mdf;Integrated Security=True");

//public static SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=D:\СОФТ\БІБЛІОТЕКА\Навчання\Програми\Оцінка якості відгуків\Оцінка якості відгуків\KomentMark.mdf;Integrated Security=True");


//Функція для вирахування одної основної оцінки з іншихstatic double mark(double mark, double mark1, double mark2)

{*= 0.5;+= mark1 * 0.25;+= mark2 * 0.25;mark;

}

/// <summary>

/// Заповнення ListView данними з таблиці, і List кодами id всіх записів.

/// </summary>static ListView CompleteList(ListView list, List<int> ListID)

{.Items.Clear();.Clear();

cmd = con.CreateCommand();.CommandText = @"SELECT * FROM Koments ORDER BY (Mark*0.5)+(MarkLiter*0.25)+(MarkIntel*0.25) desc";

{.Open();(SqlDataReader reader = cmd.ExecuteReader())

{(reader.Read())

{.Add((int)reader["id"]);item = new ListViewItem(reader["Autor"].ToString().TrimEnd());.SubItems.Add(reader["Koment"].ToString().TrimEnd());.SubItems.Add(mark(Convert.ToDouble(reader["Mark"]), Convert.ToDouble(reader["MarkLiter"]), Convert.ToDouble(reader["MarkIntel"])).ToString());

(reader["Like"].ToString() != "").BackColor = (int)reader["Like"] == 1 ? System.Drawing.Color.Green : System.Drawing.Color.Red;

.Items.Add(item);

}

}

}(Exception ex) { MessageBox.Show(ex.Message); }

{.Close();

}.Select();list;

}

/// <summary>

/// Заповнення ListView тільки тими данними з таблиці, які не оцінені, і List кодами id цих записів.

/// </summary>static ListView CompleteListNew(ListView list, List<int> ListID)

{.Items.Clear();.Clear();

cmd = con.CreateCommand();.CommandText = @"SELECT * FROM Koments WHERE Mark=0";

{.Open();(SqlDataReader reader = cmd.ExecuteReader())

{(reader.Read())

{.Add((int)reader["id"]);item = new ListViewItem(reader["Autor"].ToString().TrimEnd());.SubItems.Add(reader["Koment"].ToString().TrimEnd());.SubItems.Add(mark(Convert.ToDouble(reader["Mark"]), Convert.ToDouble(reader["MarkLiter"]), Convert.ToDouble(reader["MarkIntel"])).ToString());.Items.Add(item);

}

}

}(Exception ex) { MessageBox.Show(ex.Message); }

{.Close();

}.Select();list;

}

/// <summary>

/// Додавання до таблиці відгука та імені його автора.

/// </summary>static void AddItem(string Koment, string Autor)

{cmd = con.CreateCommand();

.CommandText = "insert into Koments(Koment, Autor) values(@Koment,@Autor)";.Parameters.AddWithValue("@Koment", Koment);.Parameters.AddWithValue("@Autor", Autor);

{.Open();.ExecuteNonQuery();

}(Exception ex) { MessageBox.Show(ex.Message); }

{.Dispose();.Close();

}

}

/// <summary>

/// Видалення записів за id кодом.

/// </summary>static void DleteItem(int id)

{cmd = con.CreateCommand();

.CommandText = "DELETE FROM Koments WHERE id="+id;

{.Open();.ExecuteNonQuery();

}(Exception ex) { MessageBox.Show(ex.Message); }

{.Dispose();.Close();

}

}

/// <summary>

/// Додавання або редагування оцінок за id запису.

/// </summary>static void EditMark(int id, int Mark, int MarkLiter, int MarkIntel)

{cmd = con.CreateCommand();

cmd.CommandText = "UPDATE Koments SET Mark=" + Mark + ", MarkLiter=" + MarkLiter +

", MarkIntel=" + MarkIntel + " WHERE id=" + id;

{.Open();.ExecuteNonQuery();

}(Exception ex) { MessageBox.Show(ex.Message); }

{.Dispose();.Close();

}

}static void EditLike(int id, int Like)

{cmd = con.CreateCommand();

cmd.CommandText = "UPDATE Koments SET [Like]=" + Like + " WHERE id=" + id;

{.Open();.ExecuteNonQuery();

}(Exception ex) { MessageBox.Show(ex.Message); }

{.Dispose();.Close();

}

}

}

}


Зміст Вступ 1.Дослідження предметної області 1.1 Характеристика предметної області 1.2 Виділення сутностей предметної області 1.3 Приведення

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ