Розробка алгоритмічного програмного забезпечення інформаційних систем

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Украинский
    ,
    Формат файла:
    MS Word
    1,02 Мб
  • Опубликовано:
    2012-12-07
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Розробка алгоритмічного програмного забезпечення інформаційних систем

Реферат

Актуальність теми курсового проекту: одержання прогресивних технологічних рішень.

Мета курсового проектування:

закріплення, поглиблення та узагальнення теоретичних знань і розвиток навичок їх практичного застосування;

самостійне та колективне розв’язання конкретних фахових задач;

уміння користуватися відповідною довідковою літературою, державними стандартами;

використання сучасних комп’ютерних інформаційних технологій.

У даному курсовому проекті на фундаменті теоретичних матеріалів та поставлених задач спроектовано два незалежних продукти:

) Знаходження функції за методом найменших квадратів, реалізована за допомогою об’єктно орієнтованого програмування (С++ Builder 6);

) Розробка розподіленої інформаційної системи.

Перший пункт на основі використання математичних методів та складання алгоритму для побудови лінійної емпіричної функції аx + b = с , був створенный проект на мові С++ а також розроблений простий у використанні інтерфейс програми.(Рисунки програми та лістинг головних кнопок наведений в додатку)

Другий пункт мав інший характер розроблення, для виконання було спроектовано структуру бази даних, використовуючи MySql та налаштування функціональності засобами PHP, оптимізуючи об’єднав все у автоматичний web-сервіс, під простою назвою інтернет-магазин. (Рисунки та лістинг коду наведені у додатку)

Зміст

Вступ

Розділ I. Теоретичний матеріал

1.1 Загальні відомості про С++ Builder

1.2 Середовище розробки С++ Builder

1.2.1 Компоненти

1.2.2 Події

1.2.3 Менеджер проектів

1.2.4 Створення додатків

Розділ II. Імітаційне моделювання прикладних задач

2.1 Метод найменших квадратів

2.2 Побудова лінійної емпіричної формули

Розділ III. Розробка розподіленої інформаційної системи

3.1 Робота з базою даних MSql засобами PHP

3.1.1 Поэднання з сервером

3.1.2 Розрив з’єднання з сервером

3.1.3 Створення бази даних

3.1.4 Обробка помилок

3.1.5 Автоматизація підключення до бази даних

3.2 SQL-запити

3.2.1 Створення таблиці

3.2.2 Редагування запитів

3.3 MSQL та проблеми захисту

3.3.1 Екранування спец-символів

3.3.2 Шаблони запитів iPlaceHolders

Висновки

Список використаної літератури

Додатки

ВСТУП

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

При створенні програмних систем звичайно виділяють наступні фази:

. Постановка завдання - збір вимог і створення прототипу програми.

. Проектування - розробка проектної документації, що відбиває структурні і поведінкові особливості створюваної системи.

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

. Тестування - налагодження коду та перевірка відповідності реалізації поставленої задачі.

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

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

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

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

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

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

РОЗДІЛ I. Теоретичний матеріал

лінійний сервер квадрат екранування

1.1 Загальні відомості про С++ Builder

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

Головною метою нашої роботи, буде написання інтерактивної системи навчання програмуванню на мові C++. В теоретичній частині наведемо основні відомості про інструментарій.

Розглянемо характеристики, які притаманні Borland C++ Builder на як системі об’єктно-орієнтованого програмування для швидкої розробки сучасного математичного забезпечення персональних комп'ютерів. Borland C++ Builder випускається в трьох варіантах: Standard, Professional й Client/Server Suite.

Швидкість візуальної розробки

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

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

Конструювання по способі "drag-and-drop " дозволяє створювати додаток простим перетаскуванням захоплених мишею візуальних компонентів з Палітри на форму додатка. Інспектор об'єктів надає можливість оперувати із властивостями й подіями компонент, автоматично створюючи заготівлі функцій обробки подій, які наповнюються кодом і редагуються в процесі розробки.

Механізми двунаправленої розробки (two-way-tools) усувають бар'єри між програмістом і його кодом. Технологія двунаправленої розробки забезпечує контроль за вашим кодом за допомогою гнучкого, інтегрованого й синхронізованої взаємодії між інструментами візуального проектування й Редактором коду.

Властивості, методи й події - це саме ті елементи мови, які забезпечують швидку розробку додатків у рамках об‘єктно - орієнтованого програмування. Властивості дозволяють легко встановлювати різноманітні характеристики об'єктів. Методи роблять певні, іноді досить складні, операції над об'єктом. Події зв'язують впливу користувача на об'єкти з кодами реакції на ці впливи. Події можуть виникати при таких специфічних змінах стану об'єктів як відновлення даних в інтерфейсних елементах доступу до баз даних. Працюючи спільно, властивості, методи й події утворять середовище RAD (Rapid Application Development) швидкого й інтуїтивного програмування надійних додатків для Windows.

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

Випробування прототипу дозволяє без праці переходити від прототипу додатка до повністю функціонального, професійно оформленому програмному продукту, діючи в межах інтегрованого середовища. Щоб упевнитися, що ваша програма робить очікувані результати, раніше доводилося багаторазово проходити по циклі редагування => компіляція => зборка, непродуктивно витрачаючи час. C++Builder поєднує три етапи розробки в єдиний виробничий процес. У результаті вдається будувати додатка, що базуються на поточних вимогах замовника, разом з тим гнучкі настільки, щоб швидко адаптувати їх до нових запитів користувачів.

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

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

Розширена математична бібліотека містить додаткові уніфіковані функції статистичних і фінансових обчислень.

Продуктивність компонентів

Бібліотека Візуальних Компонентів VCL придбала статус нового промислового стандарту й у цей час застосовується більш ніж півмільйоном користувачів, істотно прискорюючи розробку надійних додатків будь-якого ступеня складності. VCL містить близько 100 повторно використовуваних компонентів, які реалізують всі елементи користувальницького інтерфейсу операційної системи Windows 95. Крім того, VCL надають у розпорядження програмістів такі оригінальні об'єкти, як записні книжки із закладками, табличні сітки для відображення вмісту баз даних і навіть органи керування пристроями мультимедія. Перебуваючи в середовищі об‘єктно - орієнтованого Програмування C++Builder, компоненти можна використати безпосередньо, міняти їхні властивості, вигляд і поводження або породжувати похідні елементи, з потрібними відмітними характеристиками.

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

Компонента ChartFX забезпечує негайна побудова на вашій формі різноманітних графіків, діаграм, таблиць і передбачає перевірку правопису на багатьох мовах. У варіанті C++Builder Standard цей компонент є єдиним представником групи Active.

Інтеграція компонентів Active дозволяє розширити Бібліотеку Візуальних Компонентів, включивши компоненти стандарту Active для розробки додатків у мережі Internet. Якщо ваш комп'ютер має вихід в Internet, з'єднаєтеся із сервером за адресою #"577732.files/image001.gif">

Рис.1. Середовище розробки C++ Builder

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

.2.1 Компоненти C++ Builder

Компоненти розділяються на видимі (візуальні) і невидимі (невізуальні). Візуальні компоненти з'являються під час виконання точно так само, як і під час проектування. Прикладами є кнопки та редагують поля, що. Невізуальні компоненти з'являються під час проектування як піктограми на формі. Вони ніколи не видні під час виконання, але мають певну функціональність (наприклад, забезпечують доступ до даних, викликають стандартні діалоги Windows 95та ін.)

Рис. 2. Приклад використання видимих і невидимих компонентів

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

Кожен компонент C++ Builder має три різновиди характеристик: властивості, події та методи.

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

Рис.3. Інспектор об'єктів

Властивості компонентів

Властивості є атрибутами компонента, що визначають його зовнішній вигляд і поводження. Багато властивостей компонента в колонку властивостей мають значення, яке встановлюється за замовчуванням (наприклад, висота кнопок). Властивості компонента відображаються а сторінці властивостей (Properties). Інспектор об'єктів відображає опубліковані (published) властивості компонентів. Крім published-властивостей, компоненти можуть і найчастіше мають загальні (public), опубліковані властивості, які доступні тільки під час виконання проекту. Інспектор об'єктів використається для установки властивостей під час проектування. Список властивостей розташовується на сторінці властивостей інспектори об'єктів. Можна визначити властивості під час проектування або написати код для видозміни властивостей компонента під час виконання проекту.

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

.2.2 Події

Сторінка подій (Events) інспектори об'єктів показує список подій, розпізнаваних компонентом (програмування для операційних систем із графічним користувальницьким інтерфейсом, зокрема, для Windows 95 або Windows NT пре думає опис реакції проекту на ті або інші події, а сама операційна система займається постійним опитуванням комп'ютера з метою виявлення настання якої-небудь події). Кожен компонент має свій власний набір оброблювачів подій. В C++ Builder варто писати функції, називані оброблювачами подій, і зв'язувати події із цими функціями. Створюючи оброблювач тої чи іншої події, ви доручаєте програмі виконати написану функцію, якщо ця подія відбудеться.

Для того, щоб додати оброблювач подій, потрібно вибрати на формі за допомогою миші компонент, якому необхідний оброблювач подій, потім відкрити сторінку подій інспектори об'єктів і двічі клацнути лівою клавішею миші на колонку з поруч із подією, щоб змусити C++ Builder згенерувати прототип оброблювача подій і показати його в редакторі коду. При цьому автоматично генерується текст порожньої функції, і редактор відкривається в тім місці, де варто вводити код. Курсор позиціюється усередині операторних дужок { ... }. Далі потрібно ввести код, що повинен виконуватися при настанні події. Оброблювач подій може мати параметри, які вказуються після імені функції в круглих дужках.

Рис.4. Прототип оброблювача подій.

Методи

Метод є функцією, що пов'язана з компонентом, і яка оголошується як частина об'єкта. Створюючи оброблювачі подій, можна викликати методи, використовуючи наступну нотацію: ->, наприклад: Edit1->Show();

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

.2.3 Менеджер проектів

Файли, що утворять додаток - форми та модулі - зібрані в проект. Менеджер проектів показує списки файлів і модулів проекту та дозволяє створювати навігацію між ними. Можна викликати менеджер проектів , вибравши пункт меню View/Project Manager. За замовчуванням знову створений проект одержує ім'я Project1.cpp.

Рис.5. Менеджер проектів

За замовчуванням проект спочатку містить файли для однієї форми та вихідного коду одного модуля. Однак більшість проектів містять кілька форм і модулів. Щоб додати модуль або форму до проекту, потрібно клацнути правою кнопкою миші та вибрати пункт New Form з контекстного меню. Можна також додавати існуючі форми та модулі до проекту, використовуючи кнопку Add контекстного меню менеджера проектів і вибираючи модуль або форму, яку потрібно додати. Форми та модулі можна видалити в будь-який момент протягом розробки проекту. Однак, через те, що форма зв'язані завжди з модулем, не можна видалити одне без видалення іншого, за винятком случаючи, коли модуль не має зв'язку з формою. Видалити модуль із проекту можна, використовуючи кнопку Remove менеджера проектів.

Якщо вибрати кнопку Options у менеджері проектів, відкриється діалогова панель опцій проекту, у якій можна вибрати головну форму проекту, визначити, які форми будуть створюватися динамічно, які параметри компіляції модулів (у тому числі створених в Delphi 2.0, тому що C++ Builder може включати їх у проекти) і компонування.

Рис. 6. Установка опцій проекту

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

.2.4 Створення додатків в C + + Builder

Першим кроком у розробці програми C + + Builder є створення проекту.

Файли проекту містять з генерований автоматично вихідний текст,який стає частиною програми, коли воно скомпільованої і підготовлено до виконання. Щоб створити новий проект, потрібно вибрати пункт меню File/New Application. + + Builder створює файл проекту з ім'ям за умовчанням Project1.cpp, а також make-файл з ім'ям за умовчанням Project1.mak. При внесенні змінив проект, таких, як додавання нової форми, C + + Builder оновлює файл проекту.

Проект або додаток зазвичай мають кілька форм. Додавання форми до проекту створює наступні додаткові файли:

Файл форми з розширенням. DFM, що містить інформацію про ресурси вікон для конструювання форми

Файл модуля з розширенням. CPP, що містить код на C ++.

Заголовки з розширенням. H, що містить опис класу форми.

Коли ви додаєте нову форму, файл проекту автоматично оновлюється.

Для того щоб додати одну або більше форм до проекту, виберіть пункт меню /New Form. З'явиться порожня форма, яка буде додана до проекту. Можна скористатися пунктом меню File/New, вибрати сторінку Forms і вибрати варіант оформлення з сховища об'єктів. Для того, щоб просто відкомпілювати поточний проект, з меню Compile потрібно вибрати пункт меню Compile. Для того щоб відкомпілювати проект і створити виконуваний файл для поточного проекту, з меню Run потрібно вибрати пункт меню Run. Компонування проекту є інкрементний (перекомпілюються тільки що змінилися модулі).

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

РОЗДІЛ II. Імітаційне моделювання прикладних задач

.1 Метод найменших квадратів

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

Нехай у результаті досліджень дістали таку таблицю деякої функціональної залежності:

Таблиця 1

x

x1

x2

xn

y

y1

y2

yn


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

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

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

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

Розглянемо суть методу найменших квадратів.

Нехай емпірична формула має вигляд

, (2.1)

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

За методом найменших квадратів найкращі значення коефіцієнтів  ті, для яких сума квадратів відхилень

  (2)

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

, , …, .

Диференціюючи вираз (2) по невідомих параметрах , матимемо відносно них систему рівнянь:


Система (3) називається нормальною. Якщо вона має розв’язок, то він єдиний, і буде шуканим.

Якщо емпірична функція (1) лінійна відносно параметрів , то нормальна система (3) буде системою з  лінійних рівнянь відносно шуканих параметрів.

Будуючи емпіричні формули, припускатимемо, що експериментальні дані  додатні.

Якщо серед значень  і  є від’ємні, то завжди можна знайти такі додатні числа  і , що  і .

Тому розв’язування поставленої задачі завжди можна звести до побудови емпіричної формули для додатних значень .

.2 Побудова лінійної емпіричної формули

Нехай між даними  існує лінійна залежність. Шукатимемо емпіричну формулу у вигляді

, (4)

де коефіцієнти  і невідомі.

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


Звідси, врахувавши, що , маємо

 (5)

Розв’язавши відносно  і  останню систему, знайдемо

, (6)

. (7)

Зазначимо, що, крім графічного, є ще й аналітичний критерій виявлення лінійної залежності між значеннями  і .

Покладемо

, , .

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


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


(див. рис.). Потрібно знайти рівняння прямої

=ax+b,                                                                        (2)

найкращим чином узгоджується з досвідченими точками.

Нехай ми знайшли таку пряму. Позначимо через відстань дослідної точки від цієї прямої (вимірюється паралельно осі y).

З рівняння (2) випливає, що

      (3)

Чим менше числа  за абсолютною величиною, тим краще підібрана пряма (2). В якості характеристики точності підбору прямий (2) можна прийняти суму квадратів

        (4)

Покажемо, як можна підібрати пряму (2) так, щоб сума квадратів S була мінімальною. З рівнянь (3) і (4) отримуємо

      (5)

Умови мінімуму S будуть

      (6)

      (7)

Рівняння (6) і (7) можна записати в такому вигляді:

      (8)

      (9)

З рівнянь (8) і (9) легко знайти a і b по досвідченим значенням xi і yi. Пряма (2), обумовлена рівняннями (8) та (9), називається прямою, отриманої за методом найменших квадратів (цією назвою підкреслюється те, що сума квадратів S має мінімум). Рівняння (8) і (9), з яких визначається пряма (2), називаються нормальними рівняннями. Можна вказати простий і загальний спосіб складання нормальних рівнянь. Використовуючи досвідчені точки (1) і рівняння (2), можна записати систему рівнянь для a і b


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

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

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

y=a0+a1x+a2x2+...+anxn.                                                           (11)

Природно, що тут вийде система з n +1 нормального рівняння для визначення величин a0, a1, a2, ..., an.

Розглянемо окремий випадок застосування методу найменших квадратів. Нехай з теорії відомо, що

=y/x                                                         (12)

є величина постійна і її потрібно визначити по досвідченим даним (1).

Систему рівнянь для k можна записати:


Для отримання нормального рівняння помножимо кожне з цих рівнянь на коефіцієнт при невідомій k, тобто на 1, і складемо отримані рівняння

      (14)

      (15)

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

Приклад 1 На досвіді отримані значення x і y, зведені в таблицю

x

1

2

3

4

5

6

y

5,2

6,3

7,1

8,5

9,2

10,0


Знайти пряму (2) за методом найменших квадратів.

Рішення. знаходимо:

xi=21, yi=46,3, xi2=91, xiyi=179,1.

Записуємо рівняння (8) і (9)

a+21b=179,1,

a+6b=46,3,

звідси знаходимо =0,98 b=4,3.

Оцінка точності методу найменших квадратів.

Дамо оцінку точності методу для лінійного випадку, коли має місце рівняння (2).Нехай досвідчені значення xi є точними, а досвідчені значення yi мають випадкові помилки з однаковою дисперсією для всіх i введемо позначення:

(16)

Тоді рішення рівнянь (8) і (9) можна представити у вигляді

(17)

(18)

(19)

З рівняння (17) знаходимо

(20)

Аналогічно з рівняння (18) отримуємо 

(21)

       (22)

З рівнянь (21) та (22) знаходимо

     (23)

Рівняння (20) і (23) дають оцінку точності коефіцієнтів, визначених за рівнянням (8) і (9).

Зауважимо, що коефіцієнти a і b корельовані. Шляхом простих перетворень знаходимо їх кореляційний момент.

      (24)

Рівняння (20), (23) і (24) дозволяють знайти оцінку для помилки y, яку дає рівняння (2) в довільній точці x, якщо коефіцієнти a і b знайдені по рівняннях (8) і (9). З рівнянь (2), (20), (23) і (24) знаходимо

   (25)

На підставі рівнянь (20), (23) і (25) можна зробити наступні висновки:

.Точність коефіцієнтів a і b тим вище, чим більше sx, тобто чим більше розсіювання досвідчених точок на осі x.

2.Точність коефіцієнта b тим вище, чим менше .

.Ошібка рівняння (2) найменша в точці, де, і найбільша в точках, де величина має найбільше значення.

Розглянемо на прикладі використання рівнянь (20) - (25).

Приклад 2 Потрібно оцінити точність рішення прикладу 1 при .

Рішення. В умовах цього прикладу маємо n = 6.

=21/6=3.5, sx2=91/6-(3,5)2=2,9.)

З рівняння (20), (23) та (25) знаходимо

 

 

 

Звідси знаходимо = 0,072 при x=1 і 6,

= 0,041 при x=3,5.

Блок схема. Метод найменших квадратів.


РОЗДІЛ III. Розробка розподіленої інформаційної системи

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

.1 Робота з базою даних MSQL засобами PHP

.1.1 Поєднання з сервером. Функція >mysql_connect

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

>resourcemysql_connect([string $>server[,string $>username[,string $>password]]])

Ця функція встановлює мережне з'єднання з базою даних MySQL, розташованої на хості $>server (за умовчанням це localhost, тобто. поточний комп'ютер) і повертає ідентифікатор відкритого сполуки. Уся подальша робота провадиться саме з цим ідентифікатором. Всі інші функції, приймаючі цей ідентифікатор (дескриптор) як аргумент, будуть однозначно визначати обрану базі даних.

При реєстрації вказується ім'я користувача $>username і пароль $>password (за умовчанням ім'я користувача, від якої запущено поточний процес - при налагодженні скриптів:root, і порожній пароль):

<?

$>dblocation = ">localhost"; //Ім'я серверу

$>dbuser = ">root"; //Ім'я користувача

$>dbpasswd = ""; //>Пароль

//Здійснюємо з'єднання з сервером бази даних

//>Подавляем висновок помилок символом @ перед викликом функції

$>dbcnx = @mysql_connect($dblocation, $>dbuser, $>dbpasswd);

>if (!$>dbcnx) //Якщо дескриптор дорівнює 0, з'єднання встановлено

{

//>Виводимо попередження

>echo("<P>B сьогодні сервер бази даних не доступний, тому коректне відображення сторінкиневозможно.</Р>");();}?>

Змінні $>dblocation, $>dbuser і $>dbpasswd зберігають ім'я серверу, ім'я користувача і пароль.

.1.2 Розрив з'єднання з сервером. Функція >mysql_close

Поєднання з MySQL - сервером буде автоматично закрито за завершенні роботи сценарію, або навіть за виклик функціїmysql_close

>boolmysql_close ([>resource $>link_identifier])

Ця функція розриває з'єднання з сервером MySQL, і повертає true при успішне виконання операції, false інакше.

Функція приймає як аргумент дескриптор з'єднання з базою даних, повертаючи функцією mysql_connect.

Приклад роботи з циєю функцією:

<? $>dblocation = ">localhost"; //Ім'я серверу

$>dbuser = ">root"; //Ім'я користувача

$>dbpasswd = ""; //>Пароль

//Здійснюємо з'єднання з сервером бази даних

//>Пригнічуємо висновок помилок символом @ перед викликом функції

$>dbcnx = @mysql_connect($dblocation, $>dbuser, $>dbpasswd);

>if (!$>dbcnx) //Якщо дескриптор дорівнює 0, з'єднання встановлено

{//>Виводим попередження

>echo("<P>B сьогодні сервер бази даних не доступний, тому коректне відображення сторінки неможливо</Р>");();}

>if (>mysql_close($dbcnx)) //розриваємо з'єднання

{>echo("З’єднання з базою даних припинено");}

>else

{>echo("He вдалося завершити з'єднання");?>

.1.3 Створення бази даних. Функція CREATE DATABASE

Команда - створення бази даних доступна лише адміністратору серверу, і більшості хостингів його не можна виконувати:

>CREATEDATABASE ИмяБазиДанних

>Створює нову базу даних безпосередньо з ім'я Бази даних.

Приклад роботи з цим функцією:

//Створюємо базі даних $>dbname - це може робити не тільки супер-користувач

//Якщо база даних вже є, буде некритична помилка

@>mysql_query('CREATEDATABASE $>dbname');

Рекомендується скрізь використовувати апострофи ('>SQL - команда') як обмежувачів рядків, містять SQL - команди. Цим можна гарантувати, що її жодна $ - змінна випадково нічого очікувати інтерпольована (тобто. не заміниться на значення), і збільшиться безпеку скриптів.

Команда створення бази даних CREATEDATABASE доступна лише супер-користувачу, і більшості хостингів простому користувачеві її виконати неможливо. Вона доступна лише адміністратору серверу.

Для експериментів створимо базі даних testbase, виконавши SQL-запит з командної рядки. Треба лише увійти до системи MySQL і введення в командної рядку MySQL: >mysql>createdatabasetestbase;

Після цього треба набрати: >mysql>usetestbase; База даних створена.

Вибір бази даних. Функція >mysql_select_db

Поки послати перший запит серверу MySQL, необхідно вказати, з яким базою даних ми ж збираємося працювати. І тому призначена функція mysql_select_db:

>bool mysql_select_db(string $>database_name [,>resource $>link_identifier])

Вона повідомляє PHP, що у подальших операції з з'єднанням $>link_identifier використовуватиметься база даних $>database_name.

Використання цієї функції еквівалентно виклику команди use вSQL-запросе, т. е. функція mysql_select_db вибирає базі даних для подальшої роботи, всі наступні SQL-запроси застосовуються до обраної базі даних. Функція приймає наводили аргументи назва обраній бази даних database_name і дескриптор сполуки resource.

Функція повертає true при успішне виконання операції, іfalse - інакше:

<?//Код з'єднання з базою даних

>if (! @>mysql_select_db($dbname, $>dbcnx))

{//>Виводим попередження

>echo("<P> B сьогодні база даних недоступна, тому коректне відображення сторінки неможливо. </Р>");(); }?>

.1.4 Обробка помилок

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

Функція:

>intmysql_errno ([>int $>link_identifier])

повертає номер останньої зареєстрованою помилки.Идентификатор сполуки $>link_identifier годі й вказувати, якщо на час сценарію було встановлено лише одна з'єднання.

Функція:

>stringmysql_error([int $>link_identifier])

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

Зазвичайmysql_error використовують разом із конструкцією ordie (), наприклад:

@>mysql_connect("localhost", ">user", ">password")

("Ошибка при підключенні до бази даних: ".>mysql_error());

Оператор @, звісно ж, служить подолання стандартного попередження, що може виникнути у разі помилки.

У світлі останніх версіяхРНР попередження вMySQL-функциях за умовчанням не реєструються.

.1.5 Автоматизація підключення до MySQL.Файл (>config.php)

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

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

Потрібно поміщати функції для сполуки, вибору і шляхом створення бази даних той самий файл (>config.php), де оголошено перемінні безпосередньо з ім'ям серверу $>dblocation, ім'ям користувача $>dbuser, паролем $>dbpasswd і ім'ям бази даних $>dbname:

>Листингconfig.php:

<?//>config.php код файла, що містить параметри з'єднання з сервером і вибору бази даних

//виводить повідомлення помилки з'єднання перетворені на браузер

$>dblocation = ">localhost"; //Ім'я серверу

$>dbname = "вставити ім'я бази" //Ім'я бази даних: створюваної або вже існуючої

$>dbuser = ">root"; //Ім'я користувача бази даних

$>dbpasswd = ""; //>Пароль

//Здійснюємо з'єднання з сервером бази даних

//>Подавляем висновок помилок символом @ перед викликом функції

$>dbcnx=@mysql_connect($dblocation,$dbuser,$dbpasswd);

>if (!$>dbcnx) //Якщо дескриптор дорівнює 0, з'єднання з сервером бази даних встановлено

{//>Виводим попередження

>echo("<p> Нині сервер бази даних не доступний, тому коректне відображення сторінки неможливо. </>p>");();

}//Створюємо базі даних $>dbname - це може робити не тільки суперкористувач

//Якщо база даних вже є, буде некритична помилка

//Код з'єднання з базою даної: здійснюємо однозначний вибір щойно бази або вже існуючої бази даних

//>Подавляем висновок помилок символом @ перед викликом функції

>if(!@mysql_select_db($dbname, $>dbcnx)) //Якщо дескриптор дорівнює 0, з'єднання з базою даних встановлено

{ //> Виводим попередження

>echo("<p> Нині база даних недоступна, тому коректне відображення сторінки неможливо. </>p>");();}

//Невелика допоміжна функція, яка виводить повідомлення

//про помилку у разі помилки запиту до бази даних

>functionputerror($message)

{>echo("<p> $message </>p>");

exit();}?>

3.2 SQL-запити до бази даних

3.2.1 Створення таблиці. Функція CREATETABLE

>CREATE [>IF_NO_TEXT_IS_TS] TABLE Ім'я Таблиці

(>Имя Поля тип,Имя Поля тип,)

Цією командою базі даних створюється нова таблиця з колонками (полями), обумовленими своїми власними іменами (>Имя Поля) і зазначеними типами. Після створення таблиці у ній можна буде потрапити додавати записи, які з переказаних у даної команді полів.

>Лістинг test_11.php. Програма, створює нову таблицю базі даних:

<?PHP ## Створення нової таблиці в БД.

>include ">config.php";// Підключення до сервера і вибір бази даних

>mysql_query('CREATE TABLE ifnotexistspeople

(>id INTAUTO_INCREMENTPRIMARYKEY,

>nameTEXT)');("MySQLerror: ".>mysql_error());?>

Цей сценарій створює нову таблицю people з цими двома полями. Перше полі має тип INT (ціле) й ім'яid. Друге - типTEXT (текстова рядок) й ім'яname.

Якщо таблиця існує, спрацює конструкція ordie ().

>Необов’язкова фраза ifno texists, якщо вона задана, каже серверу MySQL, що вона повинна генерувати повідомлення про помилку, якщо таблиця із зазначеним ім'ям вже існує у базі даних.

Необхідно зробити потрібні зміни (змінити назва бази даних на test base) в файл config.php. Таблиця people створена. Можна переглянути перелік таблиць створеної бази даних з допомогою оператора SHOW. Можна відобразити інформацію про шпальтах всіх таблиць з допомогою оператора DESCRIBE. Для перегляду даних, збережених в таблиці, можна застосувати оператор SELEKT.

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

.2.2 Редагування таблиці

>INSERT INTO ИмяТаблици (ИмяПоля1ИмяПоля2 ...)VALUES ('>зн1', '>зн2',...)

Додає в таблицю “ИмяТаблици” запис, що має поля, зазначені якИмяПоля1ИмяПоля2 ...прописані у значення відповідно ДТ№. Ті поля, які у цій команді не перераховані, отримують "невизначені" значення. Невизначений значення (>NULL) - це порожня рядок, а й просто ознака, який свідчить MySQL, що з даного поля немає ніякої значення.

Втім, для не вказаного тут поля під час створення таблиці поставили NOTNULL, то полі отримає значення за умовчанням (найчастіше 0 чи порожня рядок). Значення полів можна брати й у звичайні лапки, але апострофи тут використовувати зручніше; при цьому, так належить за стандартом SQL. При уставці в таблицю бінарних даних (чи текстових, містять апострофи і слеши) деякі символи би мало бути "захищені" зворотними слешами, саме символи , ' і символ із нульовим кодом (в РНР позначається як ">х00" чи chr(0)).

Існує альтернативний синтаксис для даної команди, специфічний для MySQL:

>INSERTINTOИмяТаблициSETИмяПоля1='зн1',ИмяПоля2='зн2', . . .

Насправді він часто виявляється зручніше першого.

Видалення записів. Функція >DELETE

>DELETE FROM ИмяТаблици WHERE вираз

>Виділяє з таблиці “ИмяТаблици” все записи, котрим виконано вираз. Параметр вираз - це логічне вираз, складене "майже" за правилами РНР. Ось показовий приклад:

>DELETE FROM topics WHERE forum_id=10ANDuser != ">moderator"

У вираженні, крім імен полів, констант і операторів, можуть зустрічатиметься найпростіші ">обчислювальні " частини, наприклад:

(>id < 10+11*234).

Власне кажучи, формат висловлювання єдиний всім команд запитів, які ми зустрінемо надалі. Наприклад, він також використовують і в операції SELECN, й у операції UPDATE.

Оновлення записів. Функція >UPDATE

>UPDATEИмяТаблициSET (>ИмяПоля1= '>зн1',ИмяПоля1- '>зн2', ...)WHERE вираз

У таблиці “ИмяТаблици” всім записів, які відповідають вираженню вираз, зазначені поля встановлюються на відповідні значення. У цьому інші поля залишаються без зміни. У цю команду часто виконується, а то й потрібно оновлювати відразу всі поля якийсь записи, Україна ж має торкнутися лише окремі.

Відправлення запиту серверу для вилучення однієї стоки з таблиці бази даних. Функція mysql_query

>resource mysql_query (>string query)

Ця функція застосовується до відправки серверу SQL-запитів. Функція повертає дескриптор запиту при успішному ході false - у разі невдалого виконання запиту.

У лістингу показаний код, з допомогою якого витягається один рядок з таблиці customers бази даних categor:

<?>include ">config.php";//Підключення до сервера і вибір бази даних

$>ath =mysql_query("select *from customers;");

>if($ath)

{$>author =mysql_fetch_array($ath);

>echo "<>br>имя = ".$>author['name']."<br>";

>echo "адресу = ".$>author['city']."<br>";}

>else

{>echo "<>p><b>Error: ".>mysql_error () . "</>b></p>" ;() ;}?>


На рисунку 7 зображена частина бази даних створеної у PhpMyAdmin.

.3 MySQL І ПРОБЛЕМИ БЕЗПЕКИ

Запити, відправлені серверу MySQL, є звичайні рядки РНР:

>mysql_query("INSERT INTO table SET name='$name'");

У $>name може зберігатися рядок, яка містить апострофи.

Розглянемо, який запит прийде серверу MySQL, якщо $>name одно ">cat's":

>INSERTINTO table SET name='cat's'

У цю команду синтаксично некоректне і породить помилку під час виконання.

А може й більше.

Розглянемо такий запит:

>mysql_query("DELETEFROM table WHERE name='$name'");

Якщо параметр $>name приходить із форми, і зловмисник зазначила у ньому наступний рядок: "!' or 1=1 or '!", то після підстановки вийде такий запит до бази даних: >DELETEFRO Mtable-WHERE name=' !'OR 1=1OR ' !'

Цей запит віддалить все записи з таблиці table, оскільки вираз SQL 1=1 завжди істинно.

Розглянемо два засоби захисту аналогічних помилок чи дій зловмисника:

) Екранізуванні спец-символів.

) Шаблони запитів PlaceHolders.

.3.1. Екранування спец-символів

Перш ніж передавати значення змінних форми в SQL-запроси, необхідно спеціальним чином екранувати у яких деякі символи (зокрема, апостроф), наприклад, перед ними зворотній слеш. Для вставки призначена функція:

>mysql_escape_string()

>string mysql_escape_string (string $>str)

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

По стандарту MySQL екрануванню піддаються символи, які уРНР записуються так: ">х00", "n", "р", "", ""', "" і ">х1А".

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

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

З використання mysql_escape_string()код попереднього запиту така:

>mysql_query(

">DELETEFROMtableWHEREname='".mysql_escape_string($name)."'" );

Це довго, незграбно і негарно.

.3.2 Шаблони запитів PlaceHolders

Розглянемо інше рішення.

Замість явного екранізування і вставки змінних в запит з їхньої місце поміщають спеціальні маркери (>placeholders, "хранителі місця"), зазвичай які схожі на ?. Ті ж значення, які поставлено натомість, передаються окремо, додатковими параметрами. З використанням гіпотетичної функції mysql_qwo, код якої представлений нижче, запит то, можливо переписаний так:

>mysql_qw ('>DELETEFROMtableWHEREname=?', $>name);

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

У лістингу lib_mysql_qw.php міститься найпростіша реалізація функції mysql_qw() (>qw - від анг.querywrapper, "обгортка для запиту"). Є також бібліотека lib/Placeholder.php, забезпечує значно більше потужну підтримку мови PlaceHolders:dklab/chicken/30.html.

У багатьох ситуацій можливостей, наданих функцієюmysql_qw (), вистачає.

>Листинг lib_mysql_qw.php

<?PHP ## Найпростіша функція до роботи з placeholders.

//result-set,mysql_qw ($>connection_id, $>query, $>argl, $>arg2 ...).

// - чи -

//result-setmysql_qw($query, $>argl, $>arg2, ...)

// Функція виконує запит до MySQL через з'єднання, заданий як

// $>connection_id (а то й зазначено, то через останнє відкрите).

//Параметр $>query може містити підстановочні знаки ?,

// замість яких поставлено відповідні значення

// аргументів $>arg1, $>arg2 тощо. буд. (усе своєю чергою), екрановані і

// укладені апострофи.

>function mysql_qw()

{// Отримуємо всі можливі аргументи функції.

$>args =func_get_args();

// Якщо HP перший параметр має тип "ресурс", це ID-з’єднання.

$>соnn =null;

>if (>is_resource($args[0])) $>conn =array_shift($args);

// Формуємо запит по шаблоном.

$>query =call_user_func_array("mysql_make_qw", $>args);

// Викликаємо SQL-функцію.

>return $>conn!==null ?mysql_query($query, $>conn):mysql_query($query);

}//string mysql_make_qw($query, $>argl, $>arg2,...)

// Ця функція формуєSQL-запрос по шаблоном $>query,

// який містить placeholders.

>function mysql_make_qw()

{$>args =func_get_args();

// Отримуємо в $>tmp1ССЫЛКУ на шаблон запиту.

$>tmp1 =& $>args[0];

$>tmp1 -str_replace("%", "%%", $>tmp1);

$>tmp1 =str_replace("?", "%>s", $>tmp1);

// Після цього $>args[0] також виявиться зміненим.

// Теперекранируем всі можливі аргументи, крім першого.

>foreach ($>argsas $>i=>$v)

{>if (!$і)continue; // це шаблон

>if (>is_int($v))continue; // цілі числа непотрібно екранувати

$>args[$i] = "'".>mysql_escape_string($v)."'";}

//Про всяк випадок заповнюємо 20 останніх аргументів неприпустимими

// значеннями, щоб у разі, якщо число "?" перевищує кількість

// параметрів, видавалася помилка SQL-запита (допоможе при налагодженні).

>for ($>i=$c=count($args)-1; $>i<$c+20; $і++)

$>args[$i+1] = ">UNKNOWN_PLACEHOLDER_$i";

// Формуємо SQL-запит+.

>returncall_user_func_array("sprintf", $>args);}?>

Якщо прибрати пояснювальні записи, то розмір файла lib_mysql_qw.php зменшиться майже тричі:

<?PHP ## Найпростіша функція до роботи з placeholders.

>functionmysql_qw()

{$>args =func_get_args();

$>соnn =null;

>if (>is_resource($args[0])) $>conn =array_shift($args);

$>query =call_user_func_array("mysql_make_qw", $>args);

>return $>conn!==null ?mysql_query($query, $>conn):mysql_query($query);}

>functionmysql_make_qw()

{$>args =func_get_args();

$>tmp1 =& $>args[0];

$>tmp1 -str_replace("%", "%%", $>tmp1);

$>tmp1 =str_replace("?", "%>s", $>tmp1);

>foreach ($>argsas $>i=>$v)

{>if (!$і)continue;

>if (>is_int($v))continue;

$>args[$i] = "'".>mysql_escape_string($v)."'";}

>for ($>i=$c=count($args)-1; $>i<$c+20; $і++)

$>args[$i+1] = ">UNKNOWN_PLACEHOLDER_$i";

>returncall_user_func_array("sprintf", $>args);}?>

Функція sprintf() сприймає символ % як управляючий. Щоб скасувати спеціальну дію, треба її подвоїти, що робиться у функції. Потім ? замінюється на %>s, для sprintf() це "взяти черговий строковий аргумент". Для зручності тестування цього коду головна функція розбита на дві, виділено код заміни підстановчих знаків до функцій mysql_make_qw().

У лістинг у test_qw.php наведено приклад того, як виглядатимуть SQL-запити після підстановки placeholders.

>Лістинг test_qw.php

<?PHP

>require_once ">lib_mysql_qw.php";

>require_once ">mysql_connect.php";

// Уявімо, що ми - хакери...

$>name = "'OR '1";

// Допустимий запит.

>echomysql_make_qw('DELETE FROMpeopleWHEREname=?', $>name)."<br>";

//Недопустимий запит.

>echomysql_make_qw('DELETEFROMpeopleWHEREname=?OR ?', $>name)."<br>";

// Ось що таке виконання запиту.

>mysql_qw('DELETE FROMpeopleWHEREname=?OR ?', $>name)

ordie(mysql_error());?>

Через війну роботи скрипта буде сгенерована наступна сторінка:

>DELETEFROMpeopleWHEREname=''OR '1'

>DELETEFROMpeopleWHEREname=' 'OR ' 1'ORid=UNKNOWN_PLACEHOLDER_l

>Unknown column '>UNKNOWN_PLACEHOLDER_1' in '>whereclause1

Перед апострофами у цих з'явилися слеши, a PlaceHolder, якому "забракнуло" аргументів функції, виявився заміненим на рядок UNKNOWN_PLACEHOLDER_l.

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

Висновки

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

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

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

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

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

Список використаної літератури

1.       Об’єктно-орієнтований аналіз і проектування з прикладами додатків на С++. Буч Г. - М: БІНОМ, 1998.

.        Джек Гринфилд, Кит Шорт, Стив Кук, Стюарт Кент, Джон Крупи Фабрики разработки программ (Software Factories): потоковая сборка типовых приложений, моделирование, структуры и инструменты = Software Factories: Assembling Applications with Patterns, Models, Frameworks, and Tools. - М.: «Диалектика», 2006. - С. 592.

.        С++ Builder. Навчальний посібник. Глинський Я.М., Анохін В.Є, Ряжська В.А. Львів. 2004.

.        Иан Соммервилл, Инженерия программного обеспечения = Software Engineering. - 6-е изд. - М.: «Вильямс», 2002. - С. 642

.        Когаловский М.Р. Энциклопедия технологий баз данных. - М.: Финансы и статистика, 2002. - 800 с.

.        Бойко В.В., Савинков В.М. Проектирование баз данных информационных систем. - 2-е изд. - М.: Финансы и статистика, 1989. - 350 с.

Додаток A

Імітаційне моделювання прикладних задач.


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

Лічтинг кнопки порахувати:

{int n=StrToInt (Edit1->Text);sx,sy,sx2,sxy,a,b;=0; sy=0; sx2=0; sxy=0; a=0; b=0;(int i=1;i<n+1;i++)

{

sx=sx+StrToFloat (StringGrid1->Cells [i][0]);

sy=sy+StrToFloat (StringGrid1->Cells [i][1]);

sx2=sx2+(StrToFloat (StringGrid1->Cells [i][0])*StrToFloat (StringGrid1->Cells [i][0]));

sxy=sxy+(StrToFloat (StringGrid1->Cells [i][0])*StrToFloat (StringGrid1->Cells [i][1]));

}=(n*sxy-sx*sy)/(n*sx2-sx*sx); b=(sy-a*sx)/n;


На рисунку 9 зображені обчислення та знаходження емпіричної функції по заданим 6-ти точкам.

Додаток B

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


На рисунку 10 зображена головна сторінка інтернет-магазину.


На рисунку 11 зображена форма в якій реалізується функція додавання у кошик.


На рисунку 12 зображена форма замовлення.

Похожие работы на - Розробка алгоритмічного програмного забезпечення інформаційних систем

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!