Інтерактивна надбудова Scopus для аналізу публікаційної активності Хмельницького національного університету

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык украинский
Дата добавления 21.07.2013
Размер файла 563,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru

Размещено на http://www.allbest.ru

Вступ

На сьогоднішній день існує багато програмних продуктів, які використовуються у різних галузях, але все одно вимоги зростають і це призводить до створювати щось нове. Одним з таких завдань стала моя дипломна робота, її суть полягає у створенні програмного продукту для бібліотеки університету. Данна програма повинна зчитувати інформацію про публікації співробітників нашого університету, які присутні в науко-метричній базі даних «Scopus», яка в подальшому буде оброблятися моєю програмою і зберігатись у базі даних програми. Необхідність розробки такої надбудови над Scopus виникає через те, що база даних є платною для організацій проте для окремих авторів вхід вільний, хоча і із обмеженою функціональністю. Для потреб ХНУ необхідно мати загальну картину публікаційної активності співробітників і відстежувати її в динаміці. Саме ці задачі повинен вирішувати мій програмний продукт.

Для розробки свого програмного забезпечення я обрав крос-платформовий інструментарій «Qt», оскільки база даних «Scopus» повинна коректно сприймати різного виду запити, а на мою думку за допомогою «Qt» можна реалізувати повний потенціал програми. Також у «Qt» можна реалізувати повноцінний приємний на вигляд інтерфейс, що значно покращить та полегшить роботу працівників бібліотеки.

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

1.1 Аналіз предметної області

На сьогоднішній день Scopus являє собою найбільшу в світі єдину реферативну базу даних, яка індексує більше 17 000 найменувань науково-технічних і медичних журналів приблизно 4000 міжнародних видавництв.

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

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

Пошукова система Scopus також пропонує Research Performance Measurement ? засоби контролю ефективності досліджень, які допомагають оцінювати авторів, напрямки в дослідженнях і журнали.

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

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

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

Розробка Scopus велася за участю професіоналів в області інформаційних технологій і дослідників з усього світу. Інтерфейс створювався силами команди, що складається не тільки з десятка розробників, зайнятих над даним проектом на повний робочий день, але і когнітивного психолога. Вони узагальнювали дані спостережень та відгуків користувачів, отриманих в ході тестів (у них були залучені сотні дослідників і бібліотекарів). Даний підхід є унікальним у своєму роді, оскільки в проектуванні і тестуванні кожної функції і елемента функціональних можливостей брали участь потенційні користувачі продукту. Наприклад, реалізація інноваційного елемента 'Refine Results' уточнити результати стала прямим наслідком зворотного зв'язку з користувачами, які були зацікавлені у можливості зручного перегляду результатів і простих у використанні опцій, що забезпечують більш точний і чіткий пошук.

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

У рейтингу SJR станом на 2007 р. в цілому по всім галузям знання за кількістю публікацій Україна займає 33-е місце, а за кількістю цитувань -- 40-е. Індекс Гірша України за даними SJR 2007 становить 94 тобто, українські вчені опублікували 94 статті, кожна з яких була процитована принаймні 94 рази -- 43-е місце серед країн світу. За кількістю публікацій найвищий рейтинг Україна має у галузі механіки матеріалів, найнижчий -- у галузі стоматології. На основі даних SCImago Journal & Country Rank розпочато проект створення Атласу науки, у якому має графічно реперзентуватись світова структура наукових досліджень. Поки ведеться робота над Атласами науки Іспанії, Португалії та вісьми країн Південної Америки.

Дані Scopus використовуються у рейтингу провідних університетів світу Times Higher Education Supplement: World University Rankings QS TopUniversities. Українські університети у даному рейтингу не представлені.

Компанія Academic Analytics використовує дані Scopus для підрахунку Faculty Scholarly Productivity Index метричний показник оцінки якості наукової діяльності університетів США.

У 2006 р. корпорація Elsevier спільно з Національною академією наук Індії заснували щорічну національну премію для молодих учених Indian Scopus Young Scientist Award. Премія присуджується найбільш продуктивним та цитованим молодим індійським ученим у десяти номінаціях: Бібліотекознавство та інформаційні науки; Біологічні науки; Виробництво; Математика; Медицина; Науки про Землю, світовий океан та навколишнє середовище; Сільське господарство; Соціальні науки; Фізика; Хімія.

Проекти щодо використання наукометричної бази даних Scopus для оцінки наукового потенціалу держави в цілому та окремих суб'єктів наукової діяльності в Україні на рівні вищих органів державної влади почали з'являтися у 2009 р. Протягом року Міністерство освіти і науки України та Національна академія наук України провели ряд консультацій з вищим керівництвом компанії Elsevier щодо серйозного збільшення номенклатури українських видань, що індексуються у Scopus. Стратегічні домовленості з цього питання були досягнуті. Органи державної влади та профільні відомства розпочали процеси роботи з видавцями щодо цільової підготовки наукових фахових видань України до включення у Scopus і, паралельно, процеси запровадження у практику власної діяльності методів кількісної та напівкількісної оцінки наукового потенціалу (наукометрії) на основі даних Scopus. 10 червня 2009 р. Президія НАН України ухвалила рішення щодо розгортання системи постійного моніторингу наукового потенціалу суб'єктів наукової діяльності України за показниками бази даних Scopus. Реалізація даного завдання була покладена на Національну бібліотеку України імені В.І. Вернадського.

26 жовтня 2009 р. Комітет з Державних премій України в галузі науки і техніки затвердив нові редакції Інструкцій про порядок висунення, оформлення та представлення робіт на здобуттяДержавних премій України в галузі науки і техніки та на здобуття щорічних премій Президента України для молодих вчених. Згідно з новими редакціями цих інструкцій, претенденти на здобуття премій у анотаціях робіт забов'язані вказувати, зокрема, загальну кількість статей, опублікованих у міжнародних журналах, що містяться в базі даних SCOPUS, загальний ідентифікатор SJR (SCImago Journal Rank) та загальний індекс цитування робіт претендентів.

24 грудня 2009 р. рішенням колегії Міністерства освіти і науки України показник «Кількість публікацій у наукометричній міжнародній базі даних Scopus» був ухвалений у якості одного з показників оцінки результативності наукової та науково-технічної діяльності вищих навчальних закладів. «Положення про дослідницький університет», затверджене ПостановоюКабінету Міністрів України від 17 лютого 2010 р. № 17, зокрема, регламентує мінімальну кількість наукових робіт, яку співробітники університету повинні публікувати щорічно у виданнях, що індексуються базами даних Web of Science та/або Scopus, для надання підтвердження статусу дослідницького університету.

Удосконалення Scopus з урахуванням потреб дослідників триватиме. Дослідники можуть направляти запити про нові найменуваннях, джерелах і типах документів до Комісії з відбору інформаційного наповнення, що складається з провідних вчених і бібліотекарів - представників всіх основних предметних областей, які допомагають забезпечувати регулярне додавання нових найменувань. Оцінювати якість дослідження-аналізувати результати дослідження на рівні інституту чи журналу, щоб прийняти правильне рішення або просто бути в курсі подій. Розглянувши тематику дипломного проекту стає зрозумілим, що наявної функціональної структури не існує як такої. Програмний продукт буде створений для працівників бібліотеки, щоб переглядати та аналізувати результати або просто бути в курсі подій.

1.2 Аналіз наявного програмно-технічного забезпечення предметної області

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

Розглянувши багато варіантів мов програмування я зупинився на «Qt», оскільки дана платформа дає мені можливість максимально реалізувати завдання, яке поставлене перед мною.

Qt - крос-платформовий інструментарій розробки ПЗ мовою програмування C++. Дозволяє запускати написане за його допомогою ПЗ на більшості сучасних операційних систем шляхом простої компіляції тексту програми для кожної ОС без зміни початкового коду. Включає всі основні класи, які можуть бути потрібні при розробці прикладного програмного забезпечення, починаючи з елементів графічного інтерфейсу і закінчуючи класами для роботи з мережею, базами даних, OpenGL, SVG і XML. Бібліотека дозволяє керувати потоками, працювати з мережею, і забезпечує крос-платформовий доступ до файлів. Відмінна особливість Qt від інших бібліотек -- використання Meta Object Compiller -- попередньої системи обробки початкового коду (загалом, Qt, це бібліотека не для чистого C++, а для його особливого діалекту, з якого і перекладає MOC для подальший компіляції будь-яким стандартним C++ компілятором). MOC дозволяє у багато разів збільшити потужність бібліотек, вводячи такі поняття як слоти slots і сигнали signals. Qt комплектується графічним середовищем розробки графічного інтерфейсу QTDesigner, що дозволяює створювати діалоги і форми мишею. Ідеологія створення форм в Qt базується на використанні менеджерів розташування, котрі створюють «гумовий» дизайн, при якому розмір і розташування елементів форм визначаються автоматично, що значно прискорює розробку графічного інтерфейсу. В поставці Qt є Qt Linguist -- могутня графічна утиліта, що дозволяє спростити локалізацію і переклад вашої програми багатьма мовами; і Qt Assistant -- довідкова система Qt, що спрощує роботу з документацією по бібліотеці, а також дозволяє створювати крос-платформову довідку для розробленого на основі Qt ПЗ.

Основні компоненти які потрібні для повноцінної роботи Qt:

qtCore -- класи ядра бібліотеки використовувані іншими модулями;

qtGui -- компоненти графічного інтерфейсу;

qtNetwork -- набір класів для мережевого програмування. Підтримка різних високорівневих протоколів може мінятися від версії до версії. У версії 4.2.x присутні класи для роботи з протоколами FTP і HTTP. Для роботи з протоколами TCP/IP і UDP призначені такі класи як: QTcpServer, QTcpSocket для TPC/IP і QUdpSocket для UDP;

qtOpenGL -- набір класів для роботи з OpenGL;

qtSql -- набір класів для роботи з базами даних мовою структурованих запитів SQL. Основні класи цього модуля у версії 4.2. QSqlDatabase -- клас для надання з'єднання з базою, для роботи з якоюсь конкретною базою даних, вимагає об'єкт успадкований від класу QSqlDriver -- абстрактного класу, який реалізується для конкретної бази даних і може вимагати для компіляції SDK бази даних. Наприклад, для збірки драйвера під базу даних FireBird/InterBase вимагає.h файли і бібліотеки статичної лінковки, що входять в комплект постачання даної БД;

qtScript -- класи для роботи з Qt Scripts;

qtSvg -- класи для відображення і роботи зі Scalable Vector Graphics SVG даними;

qtXml -- модуль для роботи з XML, підтримується SAX і DOM моделі роботи;

qtDesigner -- класи створення розширень QtDesigner'а для своїх власних віджетів;

qtUiTools -- класи для обробки в застосунку форм Qt Designer;

qtAssistant -- довідкова система;

qt3Support -- модуль з класами, необхідними для сумісності з бібліотекою Qt версії 3.х.х;

qtTest -- модуль для роботи з UNIT тестами;

qtWebKit -- модуль WebKit інтегрований в Qt і доступний через її класи;

qtXmlPatterns -- модуль для підтримки XQuery 1.0 і XPath 2.0;

рhonon -- модуль для підтримки відтворення і запису відео і аудіо, як локально, так і з пристроїв і з мережі;

аctiveQt -- модуль для роботи з ActiveX і COM технологіями для Qt-розробників під Windows. Модуль доступний тільки в комерційній редакції Qt.

Основні переваги «Qt»:

швидка багаторівнева розробка;

крос-платформеність;

використання в мобільних платформах;

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

1.3 Постановка задачі

Метою дипломного проекту є створення програмного продукту для співробітників наукової бібліотеки університету, який повинен виконувати наступні поставлені задачі:

виведення бібліометричної інформації із бази даних Scopus;

створення локальної бази даних;

періодично оновлювати базу даних;

шукати інформацію про автора;

знаходження значень h-index;

отримувати доступ до інформації, що дає уявлення про певного автора;

отримувати загальне або повне уявлення про нової предметної області;

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

В результаті спроектованого програмного продукту він повинен полегшити роботу працівників бібліотеки. Даний продукт повинен забезпечувати високу функціональність.

Вимоги до ПЗ:

можливість роботи в глобальній мережі Інтернет;

використовувати системи захисту;

простий і зручний у використанні інтерфейс користувача.

2. Проектування структури інформаційної системи

2.1 Аналіз та автоматизація інформаційних потоків

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

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

засоби фіксації і збору інформації;

засоби передачі відповідних даних та повідомлень;

засоби збереження інформації;

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

за ступенем автоматизації в залежності від ступеня (рівня) автоматизації виділяють ручні, автоматизовані й автоматичні інформаційні системи:

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

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

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

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

економічна ІС -- інформаційна система призначена для виконання функцій управління на підприємстві;

медична ІС -- інформаційна система призначена для використання в лікувальному або лікувально-профілактичному закладі;

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

адміністративні;

виробничі;

навчальні;

екологічні;

криміналістичні;

військові та інші.

в) класифікація інформаційних систем за місцем діяльності:

наукові ІС -- призначені для автоматизації діяльності науковців, аналізу статистичної інформації, керування експериментом.

іс автоматизованого керування -- призначені для автоматизації праці інженерів-проектувальників і розроблювачів нової техніки (технології). Такі ІС допомагають здійснювати:

розробку нових виробів і технологій їхнього виробництва;

різноманітні інженерні розрахунки (визначення технічних параметрів виробів, видаткових норм -- трудових, матеріальних і т. д.);

створення графічної документації (креслень, схем, планувань);

моделювання проектованих об'єктів;

створення керуючих програм для верстатів із числовим програмним керуванням.

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

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

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

керувальні (АСКТП, АСКВ);

проектувальні (САП);

наукового пошуку (АСНД, експертні системи);

діагностичні, моделювальні;

систем підготовки прийняття рішення (СППР).

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

Рисунок 2.1 - Діаграма варіантів використання

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

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

2.2 Розробка структури системи

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

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

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

Таблиця 2.1 - Список полів предметної області

Name

Autor ID

Affiliation

Documents

Subject Area

City

Country

Co-authors

Web Search

h-index

Citations

Publiation range

References

2.3 Вибір засобів розробки системи

Середовищем для реалізації програмного продукту даної кваліфікаційної роботи було обрано Qt, компілятор MinGW, реалізація програмного коду за допомогою регулярного виразу Regexp.

Qt -- крос - платформовий інструментарій розробки ПЗ мовою програмування C++. Дозволяє запускати написане за його допомогою ПЗ на більшості сучасних операційних систем шляхом простої компіляції тексту програми для кожної ОС без зміни початкового коду. Включає всі основні класи, які можуть бути потрібні при розробці прикладного програмного забезпечення, починаючи з елементів графічного інтерфейсу і закінчуючи класами для роботи з мережею, базами даних, OpenGL, SVG і XML. Бібліотека дозволяє керувати потоками, працювати з мережею, і забезпечує крос-платформовий доступ до файлів.

Сама розробка та компиляція проходить у Qt Creator. Qt Creator -- інтегроване середовище розробки, призначене для створення крос-платформових застосунків з використанням бібліотекиQt. Підтримується розробка як класичних програм мовою C++, так і використання мови QML, для визначення сценаріїв в якій використовується JavaScript, а структура і параметри елементів інтерфейсу задаються CSS-подібними блоками.

Qt Creator може використовувати GCC або Microsoft VC++ в якості компілятора і GDB як зневаджувач. Для Windows версій бібліотека комплектується компілятором, заголовними і об'єктними файлами MinGW.

MinGW (англ. Minimalist GNU for Windows), раніше mingw32, - компілятор, нативний програмний порт GNU Compiler Collection (GCC) під Microsoft Windows, разом з набором вільно розповсюджуваних бібліотек імпорту та заголовків файлів для Windows API. MinGW дозволяє розробникам створювати нативні додатки Microsoft Windows. У MinGW включені розширення для виконавчі бібліотеки Microsoft Visual C + + для підтримки функціональності C99.

Проект MinGW підтримує і поширює кілька різних ключових компонентів і додаткових пакетів, включаючи різні порти GNU toolchain, такі як GCC і binutils, переведені в еквіваленті пакети. Ці утиліти можуть бути використані з командного рядка Windows або інтегровані в IDE.

На додаток, компонент MinGW, відомий як MSYS (Minimal SYStem) надає win32-порти оточення легковагою Unix-подібної оболонки, що включає rxvt і набір інструментів POSIX, достатній для запуску скриптів autoconf.

Реалізації заголовних файлів Win32 і бібліотек імпорту Win32 для зв'язування під час виконання програми від початку до її завершення мають ліберальну ліцензію, а порти GNU доступні під GNU General Public License. Бінарні збірки повного пакету MSYS та окремих MinGW GNU утиліт доступні для скачування на сайті MinGW. Регулярний вираз (в програмуванні) -- це рядок, що описує або збігається з множиною рядків, відповідно до набору спеціальних синтаксичних правил. Вони використовуються в багатьох текстових редакторах та допоміжних інструментах для пошуку та зміни тексту на основі заданих шаблонів. Багато мов програмування підтримують регулярні вирази для роботи з рядками. Наприклад, Perl та Tcl мають потужний механізм для роботи, вбудований безпосередньо в їх синтаксис. Завдяки набору утиліт (включаючи редактор sed та фільтрgrep), що входили до складу дистрибутивів Юнікс регулярні вирази стали відомими та поширеними.

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

Регулярний вираз (часто називається шаблон) є послідовністю, що описує множину рядків. Ці послідовності використовуються для того, аби дати точне описання множини, не перелічуючи всі її елементи. Наприклад, множина, що складається із слів «грати» та «ґрати» може бути описана регулярним виразом «[гґ]рати». В більшості формалізмів, якщо існує регулярний вираз, що описує задану множину, тоді існує нескінченна кількість варіантів, які описують цю множину.

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

Найпростішим регулярним виразом, з якого формуються складні, є звичайний символ. Аналогічно можуть бути представлені інші спеціальні символи (набір символів, що вимагають екранування, може відрізнятися залежно від конкретної реалізації). Частина символів, які в тій або іншій реалізації не вимагають екранування (наприклад, кутові дужки < >), можуть бути екрановані з міркувань зручності читання.

Більшість символів у регулярному виразі представляють самі себе за винятком спеціальних символів (метасимволів) [ ] \ ^ $. | ? * + () { }, яким може передувати символ \(зворотна коса риска), котра робить метасимволи «екранованими», «захищеними» для представлення, відображення їх самих як символів тексту. Можна екранувати деяку послідовність символів, розмістивши її між \Q і \E таблиця 2.2.

Таблиця 2.2 - Послідовність символів

Приклад

Відповідність

a\.?

a. або a

a\\\\b

a\\b

a\[F\]

a[F]

\Q+-*/\E

+-*/

Залежно від інтерпретатора регулярних виразів, метасимволи «?», «+», «{», «|», «(», та «)» можуть втрачати своє спеціальне значення, замість цього слід вживати «\?», «\+», «\{», «\|», «\(», та «\)».

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

Набір символів у квадратних дужках [ ] іменується символьним класом і дозволяє вказати інтерпретаторові регулярних виразів, що на даному місці в рядку може стояти один із перерахованих символів. Зокрема, [абв] задає можливість появи в тексті одного із трьох зазначених символів, а [1234567890] задає відповідність одній із цифр. Можливе зазначення діапазонів символів: наприклад, [А-Яа-я] відповідає всім літерам російського алфавіту, за винятком літер «Ё» і «ё». Якщо потрібно вказати символи, які не входять у зазначений набір, то використовують символ ^ усередині квадратних дужок, наприклад, [^0-9] означає будь-який символ, крім цифр.

Додавання в набір спеціальних символів шляхом екранування символом «\» -- найпростіший спосіб. Однак сучасні регулярні вирази успадковують також і традиційний підхід -- див.Традиційні регулярні вирази.

Деякі символьні класи можна замінити спеціальними метасимволами, дивитяся таблиця 2.3.

Таблиця 2.3 - Таблиця мета символів

Символ

Опис

\d

Відповідає цифрі. Еквівалентно [0-9]

\D

Відповідає нецифровому символу. Еквівалентно [^0-9]

\s

Відповідає будь-якому пробільному символу. Еквівалентно [ \f\n\r\t\v]

\S

Відповідає будь-якому непробільному символу. Еквівалентно [^ \f\n\r\t\v]

\w

Відповідає будь-якому літерному символу, цифровому й знаку підкреслення. Еквівалентно [[:word:]]

\W

Відповідає будь-якому символу, крім літерного символу, цифрового або підкреслення. Еквівалентно [^[:word:]]

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

Таблиця 2.4 - Позиціонування Regexp

Представлення

Позиція

Приклад

Відповідність

^

Початок рядка

^a

aaa aaa

$

Кінець рядка

a$

aaa aaa

\b

Межа слова

a\b

aaa aaa

\ba

aaa aaa

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

Таблиця 2.5 - Квантифікатор у регулярному вмразі

Представлення

Кількість повторень

Приклад

Відповідність

{n}

Рівно n разів

colou{3}r

colouuur

{m,n}

Від m до n включно

colou{2,4}r

colouur, colouuur, colouuuur

{m,}

Не менше m

colou{2,}r

colouur, colouuur, colouuuur і т.д.

{,n}

Не більше n

colou{,3}r

color, colour, colouur, colouuur

Таблиця 2.6 - Символьний клас

Представлення

Кількість повторень

Еквівалент

Приклад

Відповідність

*

Нуль або більше

{0,}

colou*r

color, colour, colouur і т.д.

+

Одне або більше

{1,}

colou+r

colour, colouur і т.д. (але не color)

?

Нуль або одне

{0,1}

colou?r

color, colour

Часто використовується послідовність.* для позначення будь-якої кількості будь-яких символів між двома частинами регулярного виразу. Символьні класи в поєднанні із квантифікаторами дозволяють установлювати відповідності з реальними текстами. Наприклад, колонками цифр, телефонами, поштовими адресами, елементами HTML-розмітки й ін. Якщо символи { } не утворюють квантифікатор, їхнє спеціальне значення ігнорується.

У деяких реалізаціях квантифікаторам у регулярних виразах відповідає максимально довгий рядок із можливих (квантифікатори є жадібними, англ. greedy). Це може стати значною проблемою. Наприклад, часто очікують, що вираз (<.*>) знайде в текстітеги HTML. Однак, якщо в тексті є більше одного HTML-тегу, то цьому виразу відповідає цілком рядок, що містить множину тегів.

Цю проблему можна вирішити двома способами:

Ураховувати символи, що не відповідають бажаному взірцю (<[^>]*> для вищеописаного випадку).

Визначити квантифікатор як нежадібний (ледачий, англ. lazy) -- більшість реалізацій дозволяють це зробити, додавши після нього знак питання.

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

Таблиця 2.7 - Жадібний і Ледачий квантифікатори

Жадібний

Ледачий

*

*?

+

+?

{n,}

{n,}?

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

При пошуку виразу (a+a+)+b у рядку aaaaa інтерпретатор піде приблизно таким шляхом:

aaaaa

aaaaa

aaaaa

aaaaa

aaaaa

aaaaa

aaaaa -- і тільки тут, перевіривши всі точки повернення, здасться.

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

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

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

Таблиця 2.8 - Жадібний і Ревнивий квантифікатори

Жадібний

Ревнивий

*

*+

?

?+

+

++

{n,}

{n,}+

Одне із застосувань групування -- повторне використання раніше знайдених груп символів підрядків, блоків, позначених підвиразів. При обробці виразу підрядки, що знайдені за шаблоном усередині групи, зберігаються в окремій області пам'яті й отримують номер, починаючи з одиниці. Кожному підрядку відповідає пара дужок у регулярному виразі. Квантифікація групи не впливає на збережений результат, тобто зберігається лише перше входження. Зазвичай підтримується до 9 нумерованих підрядків із номерами від 1 до 9, але деякі інтерпретатори дозволяють працювати з більшою кількістю. Згодом у межах даного регулярного виразу можна використати позначення від \1 до \9 для перевірки на збіг із раніше знайденим підрядком.

Наприклад, регулярний вираз (та|ту)-\1 знайде рядок та-та або ту-ту, але пропустить рядок та-ту.

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

Атомарне групування (виду (?>шаблон)), так само як групування без зворотного зв'язку, не створює зворотних зв'язків. На відміну від нього, таке групування забороняє вертатися назад по рядку, якщо частина шаблону вже знайдена, дивитися таблиця 2.9.

Таблиця 2.9 - Атомарне групування

Приклад

Відповідність

Створювані групи

a(bc|b|x)cc

abccaxcc

abccaxcc

abccaxcc

abccaxcc

a(?:bc|b|x)cc

немає

a(?>bc|b|x)cc

abccaxcc

але не abccaxcc: варіант x знайдений, інші зігноровані

a(?>x*)xa

не знайдеться axxxa: усі x зайняті, і немає повернення всередину групи

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

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

Таблиця 2.10 - Застосування інтерпиритатора

Синтаксис

Опис

(?i)

Включає

нечутливість виразу до регістра символів (англ. case insensitivity)

(?-i)

Виключає

(?s)

Включає

режим відповідності точки символам переносу рядка й повернення каретки

(?-s)

Виключає

(?m)

Символи ^ і $ викликають відповідність тільки

після й до символів нового рядка

(?-m)

із початком і кінцем рядка

(?x)

Включає

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

(?-x)

Виключає

Групи-модифікатори можна об'єднувати в одну групу: (?i-sm). Така група включає режим i і виключає режим s, m. Якщо використання модифікаторів потрібне тільки в межах групи, то потрібний шаблон вказується всередині групи після модифікаторів і двокрапки. Наприклад, (?-i)(?i:tv)set знайде TVset, але не TVSET.

Для додавання коментарів у регулярний вираз можна використовувати групи-коментарі виду (?#коментар). Така група інтерпретатором цілком ігнорується й не перевіряється на входження в текст. Наприклад, вираз А(?#тут коментар)Б відповідає рядку АБ.

Вертикальна риса розділяє допустимі варіанти. Наприклад, gray|grey відповідає gray або grey. Варто пам'ятати, що перебір варіантів виконується зліва праворуч, як вони вказані.

Якщо потрібно вказати перелік варіантів усередині складнішого регулярного виразу, то його потрібно взяти в групу. Наприклад, gray|grey або gr(a|e)y описують рядок gray абоgrey. У разі односимвольних альтернатив кращий варіант gr[ae]y, тому що порівняння із символьним класом виконується простіше, ніж обробка групи з перевіркою на всі її можливі модифікатори й генерацією зворотного зв'язку.

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

Таблиця 2.11 - Перегляд і Заперечення

Представлення

Вид перегляду

Приклад

Відповідність

(?=шаблон)

Позитивний перегляд уперед

Людовик(?=XVI)

ЛюдовикXV, ЛюдовикXVI, ЛюдовикXVIII, ЛюдовикLXVII, ЛюдовикXXL

(?!шаблон)

Негативний перегляд уперед (із запереченням)

Людовик(?!XVI)

ЛюдовикXV, ЛюдовикXVI, ЛюдовикXVIII, ЛюдовикLXVII, ЛюдовикXXL

(?<=шаблон)

Позитивний

(?<=Сергій)Іванов

Сергій Іванов, Ігор Іванов

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

Таблиця 2.12 - Перевірка регулярного виразу

Представлення

Пояснення

Приклад

Відповідність

(?(?=якщо)то|інакше)

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

(?(?<=а)м|п)

мам,пап

(?(n)то|інакше)

Якщо n-а група повернула значення, то пошук за умовою виконується за шаблоном то,

(а)?(?(1)м|п)

мам,пап

3. Реалізація програмного продукту

інформаційна система scopus бібліометричний

3.1 Структура і функціональне призначення модулів системи, їх взаємозв'язок

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

Функція MainWindow відповідальна за відображення користувацького інтерфейсу та за корекну роботу всіх кнопок та полів заповнення. Структуру функціїї можна подивитися на рисунку 3.1.

Рисунок 3.1 - Функція MainWindow

Функція QnetworkReply виконує запити та пошук даних які нам потрібно дістати із бази Scopus, рисунок 3.2.

Рисунок 3.2 - Функція QnetworkReply

На рисунку 3.3 відображена взаємодія між функціями.

Рисунок 3.3 - Взаємодія між функціями

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

Програмний продукт був прозроблений у середовищі Qt і написаний на мові C++ парадигма якої розгалужена на декілька парадигм програмування:

об'єктно-орієнтована;

узагальнена;

процедурна.

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

Функція replyListFinished відповідає за пошук сторінки в базі дваних Scopus з полями пошуку:

void MainWindow::replyListFinished(QNetworkReply *reply)

{

htmlReesult.clear();

QVariant possibleRedirectUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);

urlRedirectedTo = redirectUrl(possibleRedirectUrl.toUrl(), urlRedirectedTo);

connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyListFinished(QNetworkReply*)));

QEventLoop loop;

if(!urlRedirectedTo.isEmpty())

{

manager->get(QNetworkRequest(urlRedirectedTo));

loop.exec();

}

else

{

if (reply->url()!= tempUrl)

{

htmlReesult = reply->readAll();

tempUrl = reply->url();

}

urlRedirectedTo.clear();

}

Тобто за допомогою даної функції я знаходжу сторінку пошуку у базі даних Scopus після чого да допомогою Regexp, можна знайти все що нам потрібно. У цій функції я шукаю поля вводу фамілії, ініціалів та назви університету.

За допомогою функції ui та регулярного виразу Regexp я витягую та відображаю інформацію про автора у своїй програмі:

ui->lblAuthorNameValue->setText(extractRegexp("(title\\=\\\"View author details\\\"\\s\\>\\n*)([\\w\\s\\.\\,]*)(\\n*\\<\\/a\\>)", htmlReesult, 2).trimmed());

ui->lblAuthorIdValue->setText(extractRegexp("(name\\=\\\"authorIds\\\" value\\=\\\")([0-9]*)(\\\" onclick\\=)", htmlReesult, 2));

ui->lblDocunentsCount->setText(extractRegexp("(title\\=\\\"View documents published by this author in this source\\\"\\>\\n*\\s*)([0-9]*\\s*)(\\n*<\\/a\\>)", htmlReesult, 2).trimmed());

Саме функція ui відображає інформацію про автора у вікні. А Regexp веде пошук по сторінці яку саме інформацію потрібно відобразити.

Функція shortList веде пошук іншої групи даних які знаходяться на поточній сторінці самого автора у базі Scopus:

QString shortList;

shortList = extractRegexp("(\\<\\/script\\>\\n*\\s*\\<\\/td\\>)([.\\n\\r\\<\\>\\w\\s\\=\\\"\\'\\%\\;\\/]+)(\\<tr\\s*class\\=\\'ScopusResultsListRowColor\\n*'\\>)", htmlReesult, 2);

QRegExp regexp("(\\<td[\\=\\\"\\s\\w\\%]*\\>\\n*)([\\n\\s\\w\\;\\.]*)(<br/>|</td>)");

int pos = 0;

regexp.indexIn(shortList, pos);

ui->lblSubjectArea->setText(regexp.cap(2).trimmed());

pos += regexp.matchedLength();

regexp.indexIn(shortList, pos);

ui->lblAffiliton->setText(regexp.cap(2).trimmed());

pos += regexp.matchedLength();

regexp.indexIn(shortList, pos);

ui->lblCity->setText(regexp.cap(2).trimmed());

pos += regexp.matchedLength();

regexp.indexIn(shortList, pos);

ui->lblCountry->setText(regexp.cap(2).trimmed());

reply->deleteLater();

getAuthorPage(ui->lblAuthorIdValue->text());

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

void MainWindow::replyPageFinished(QNetworkReply *reply)

{

//htmlReesult.clear();

QVariant possibleRedirectUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);

urlRedirectedTo = redirectUrl(possibleRedirectUrl.toUrl(), urlRedirectedTo);

connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyPageFinished(QNetworkReply*)));

QEventLoop loop;

if(!urlRedirectedTo.isEmpty())

{

manager->get(QNetworkRequest(urlRedirectedTo));

loop.exec();

}

else

{

if (reply->url()!= tempUrl)

{

htmlReesult = reply->readAll();

tempUrl = reply->url();

}

urlRedirectedTo.clear();

}

За допомогою функції on_listAuthors_itemClicked я вищищаю поля від тексту перед запуском програми:

void MainWindow::on_listAuthors_itemClicked(QListWidgetItem *item)

{

ui->txtAuthorName->setText(extractRegexp("([a-zA-Z\\.\\,\\s]*)(\\;)([a-zA-Z\\.\\,\\s]*)(\\;)([a-zA-Z\\.\\,\\s]*)(\\;)", item->text(), 1));

ui->txtAuthorInitials->setText(extractRegexp("([a-zA-Z\\.\\,\\s]*)(\\;)([a-zA-Z\\.\\,\\s]*)(\\;)([a-zA-Z\\.\\,\\s]*)(\\;)", item->text(), 3));

ui->txtAffiliation->setText(extractRegexp("([a-zA-Z\\.\\,\\s]*)(\\;)([a-zA-Z\\.\\,\\s]*)(\\;)([a-zA-Z\\.\\,\\s]*)(\\;)", item->text(), 5));

ui->lblCity->clear();

ui->lblAuthorIdValue->clear();

ui->lblAuthorNameValue->clear();

ui->lblCoAuthorsValue->clear();

ui->lblAffiliton->clear();

ui->lblDocunentsCount->clear();

ui->lblSubjectArea->clear();

ui->lblCountry->clear();

ui->lblSearshCount->clear();

ui->lblhIndex->clear();

ui->lblCitationCount->clear();

ui->lblReferencesCount->clear();

ui->lblPublicationRange->clear();

Функція file при натисканні кнопки add чи del добавляє абож видаляє автора у списку бази даних:

QFile file("db");

if(!file.open(QIODevice::ReadWrite))

{

QMessageBox::information(0, "error", file.errorString());

}

QTextStream in(&file);

while(!in.atEnd())

{

ui->listAuthors->addItem(in.readLine());

}

file.close();

}

MainWindow::~MainWindow()

{

QFile file("db");

if(!file.open(QIODevice::ReadWrite))

{

QMessageBox::information(0, "error", file.errorString());

}

QTextStream out(&file);

QString list;

int count = ui->listAuthors->count();

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

{

list.append(ui->listAuthors->item(i)->text() + "\n");

}

out << list;

file.close();

delete ui;

}

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

Запустивши програмний продукт перше що побачить користувач буде головне вікно програми, рисунок 3.4

Рисунок 3.4 - Інструкція користувача

Номер посилання;

Діапазон публікації;

Кількість цитат;

h-index;

Номер пошуку;

Співавтори;

Країна у якій проживає автор;

Місто де проживає автор;

Назва автора;

Унікальний ID для автора;

Приєднання;

Кількість документів;

Область (місце проживання);

Поля для пошуку певного автора;

Список видення даних по автору;

Кнопка для пошуку користувача (перед застосування потрібно заповнитити поля для пошуку);

Кнопка видалення автора із бази;

Кнопка за допомогою можна добавити автора у базу;

Вікно відображення авторів;

Автори які занесені в базі;

Клавіші закриття програми, звернення вікна, зменшення розміру вікна;

Налаштування.

За допомогою цих вказівок користувачеві буде надзвичайно легко та просто зрозуміти як саме працює дана програма. У полі 15 якщо не буде підключений інтернет висвітиться помилка. Щоб обновити інформацію про автора потрібно натискати кнопку Search.

3.4 Вимоги до технічних засобів

Програмний продукт було розроблено на кросплатформній мові програмування C++ в середовищі програмування Qt.

Проект розроблений на операційній системі Windows 7, і працює в середовищі сімейств Windows. Інтерфейс відповідає усім стандартам операційних систем, є зручним та зрозумілим для кінцевого користувача.

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

Для того щоб робота програми була стабільною, потрібно щоб комп'ютер мав наступні мінімальні характеристики:

тактова частота центрального процесора 0,8 Ггц;

об'єм оперативної пам'яті не менше 64 Мбайт;

об'єм вільного місця на жорсткому диску 500 Мегабайт;

операційна система - Windows XP (SP1), Windows 7, Linux, Mac OS;

Висновки

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

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

Qt 5.0.2;

Мова програмування C++;

IBM Rational Rose Enterprise Edition.

Компілятор MinGW;

середовище Qt Creator.

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

забезпечує зручний інтерфейс з користувачем;

автоматизація значно підвищує зручність використання;

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

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

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

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

1. Дипломне проектування: методичні вказівки для студентів напрямку підготовки «Програмна інженерія» (спеціальність «Програмне забезпечення автоматизованих систем») / Ю.В. Форкун, Г.І. Радельчук. - Хмельницький: ХНУ, 2009. - 49 с.

2. http://pidruchniki.ws/ [Електронний ресурс] - Режим доступу: http://pidruchniki.ws/component/option,com_jdownloads/.

3. www.ludads.com.ua [Електронний ресурс] - Режим доступу: http://www.ludads.com.ua/content/view/1943/86/.

4. www.mdoffice.com.ua [Електронний ресурс] - Режим доступу: http://www.mdoffice.com.ua/pls/MDOffice/MDOff.MDOffMain.

5. http://www.qdpro.com.ua/ [Електронний ресурс] - Режим доступу: http://www.qdpro.com.ua/edeclaring.

6. http://dbridge.com.ua [Електронний ресурс] - Режим доступу: http://dbridge.com.ua/about/.

7. Офіційна документація. Microsoft SQL Server Management Studio [Електронний ресурс]. - Режим доступу:

8. http://msdn.microsoft.com/ru-ru/library/ms174173.aspx

9. Офіційна документація. Microsoft SQL Server [Електронний ресурс].- Режим доступу:

10. http://msdn.microsoft.com/ru-ru/library/ms143722(SQL.90).aspx

Додаток А

(Програмний код)

#include "mainwindow.h"

#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent):

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

QFile file("db");

if(!file.open(QIODevice::ReadWrite))

{

QMessageBox::information(0, "error", file.errorString());

}

QTextStream in(&file);

while(!in.atEnd())

{

ui->listAuthors->addItem(in.readLine());

}

file.close();

}

MainWindow::~MainWindow()

{

QFile file("db");

if(!file.open(QIODevice::ReadWrite))

{

QMessageBox::information(0, "error", file.errorString());

}

QTextStream out(&file);

QString list;

int count = ui->listAuthors->count();

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

{

list.append(ui->listAuthors->item(i)->text() + "\n");

}

out << list;

file.close();

delete ui;

}

void MainWindow::replyListFinished(QNetworkReply *reply)

{

htmlReesult.clear();

QVariant possibleRedirectUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);

urlRedirectedTo = redirectUrl(possibleRedirectUrl.toUrl(), urlRedirectedTo);

connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyListFinished(QNetworkReply*)));

QEventLoop loop;

if(!urlRedirectedTo.isEmpty())

{

manager->get(QNetworkRequest(urlRedirectedTo));

loop.exec();

}

else

{

if (reply->url()!= tempUrl)

{

htmlReesult = reply->readAll();

tempUrl = reply->url();

}

urlRedirectedTo.clear();

}

ui->lblAuthorNameValue->setText(extractRegexp("(title\\=\\\"View author details\\\"\\s\\>\\n*)([\\w\\s\\.\\,]*)(\\n*\\<\\/a\\>)", htmlReesult, 2).trimmed());

ui->lblAuthorIdValue->setText(extractRegexp("(name\\=\\\"authorIds\\\" value\\=\\\")([0-9]*)(\\\" onclick\\=)", htmlReesult, 2));

ui->lblDocunentsCount->setText(extractRegexp("(title\\=\\\"View documents published by this author in this source\\\"\\>\\n*\\s*)([0-9]*\\s*)(\\n*<\\/a\\>)", htmlReesult, 2).trimmed());

QString shortList;

shortList = extractRegexp("(\\<\\/script\\>\\n*\\s*\\<\\/td\\>)([.\\n\\r\\<\\>\\w\\s\\=\\\"\\'\\%\\;\\/]+)(\\<tr\\s*class\\=\\'ScopusResultsListRowColor\\n*'\\>)", htmlReesult, 2);

QRegExp regexp("(\\<td[\\=\\\"\\s\\w\\%]*\\>\\n*)([\\n\\s\\w\\;\\.]*)(<br/>|</td>)");

int pos = 0;

regexp.indexIn(shortList, pos);

ui->lblSubjectArea->setText(regexp.cap(2).trimmed());

pos += regexp.matchedLength();

regexp.indexIn(shortList, pos);

ui->lblAffiliton->setText(regexp.cap(2).trimmed());

pos += regexp.matchedLength();

regexp.indexIn(shortList, pos);

ui->lblCity->setText(regexp.cap(2).trimmed());

pos += regexp.matchedLength();

regexp.indexIn(shortList, pos);

ui->lblCountry->setText(regexp.cap(2).trimmed());

reply->deleteLater();

getAuthorPage(ui->lblAuthorIdValue->text());

}

void MainWindow::replyPageFinished(QNetworkReply *reply)

{

//htmlReesult.clear();

QVariant possibleRedirectUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);

urlRedirectedTo = redirectUrl(possibleRedirectUrl.toUrl(), urlRedirectedTo);

connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyPageFinished(QNetworkReply*)));

QEventLoop loop;

if(!urlRedirectedTo.isEmpty())

{

manager->get(QNetworkRequest(urlRedirectedTo));

loop.exec();

}

else

{

if (reply->url()!= tempUrl)

{

htmlReesult = reply->readAll();


Подобные документы

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

    контрольная работа [174,9 K], добавлен 07.01.2015

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

    курсовая работа [1,9 M], добавлен 20.05.2015

  • Характеристика об’єкта автоматизації, вимоги до системи, склад та зміст системи. Розробка функціональної схеми програмного продукту. Тестування підпрограми програмного продукту. Розробка бази даних та налаштування ECO компонент в Borland Developer Studio.

    практическая работа [1,8 M], добавлен 05.06.2014

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

    контрольная работа [29,4 K], добавлен 06.10.2010

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

    статья [23,0 K], добавлен 19.11.2010

  • Побудова інформаційної системи "Магазин товарів для настільного тенісу" з автоматизації роботи магазину. Концептуальне моделювання бази даних. Обґрунтування вибору СУБД. Логічне проектування бази даних. Схема бази даних. Створення таблиць в конструкторі.

    курсовая работа [8,8 M], добавлен 16.12.2015

  • Мета, задачі та принципи створення інформаційних систем. Бібліотечні системи на Україні. Перелік вхідних та вихідних даних, вибір СУБД, структура програмного забезпечення АРМ. Визначення трудомісткості, тривалості та витрат на розробку програми.

    дипломная работа [2,1 M], добавлен 19.11.2010

  • База даних як організована структура, призначена для зберігання інформації. Проектування та реалізація в СУБД MS Access інформаційної системи "База даних Internet-ресурсів тестів з психології". Розробка логічної системи даних, інструкції користувача.

    курсовая работа [5,3 M], добавлен 22.10.2012

  • Визначення мети створення бази даних магазину та таблиць, які вона повинна містити. Розгляд видів полів та ключів таблиць. Створення запитів, форм, звітів, макросів та модулів. Вибір системи управління базами даних. Реалізація моделі у Microsoft Access.

    курсовая работа [3,8 M], добавлен 20.07.2014

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

    дипломная работа [2,2 M], добавлен 21.06.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.