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

Загальні відомості про С++ Builder. Метод найменших квадратів. Побудова лінійної емпіричної формули. Робота з базою даних MSql засобами PHP. Розрив з’єднання з сервером. Екранування спец-символів. Знаходження функції за методом найменших квадратів.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 11.12.2012
Размер файла 1,4 M

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

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

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

3.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.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.

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

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

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

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

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

Додаток A

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

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

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

{int n=StrToInt (Edit1->Text);

double sx,sy,sx2,sxy,a,b;

sx=0; sy=0; sx2=0; sxy=0; a=0; b=0;

for (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]));

}

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

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

Додаток B

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

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

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

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

Размещено на Allbest.ru


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

  • Вибір емпіричної формули. Метод оберненої матриці. Розв’язування систем лінійних рівнянь на ПК. Вибір двох апроксимуючих функцій. Розрахунки у середовищі MS Excel для лінійної функції, для квадратичної функції та у середовищі MS Visual Studio (мовою С#).

    курсовая работа [658,8 K], добавлен 18.08.2014

  • Характеристика середовища програмування Microsoft Visual C++ та бібліотеки класів MFC. Знаходження коефіцієнтів при невідомих за допомогою методу найменших квадратів. Створення програми для вирішення задачі обраним методом, її алгоритм та інтерфейс.

    курсовая работа [434,8 K], добавлен 20.01.2014

  • Ортогонaлізування функцій. Порівняння дискретного та хвильового перетворення. Інтерполяційні поліноми Лагранжа і Ньютона. Метод найменших квадратів. Побудова кривої для заданих результатів вимірювань. Розв’язання задачі по Лапласу операційним методом.

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

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

    курсовая работа [70,3 K], добавлен 03.12.2009

  • Опис підрозділу гнучких виробничих систем (ГВС) як об‘єкта управління. Проектування алгоритмічного забезпечення системи оперативного управління. Складання розкладу роботи технологічного обладнання. Розробка програмного забезпечення підсистем СОУ ГВС.

    курсовая работа [2,0 M], добавлен 11.07.2012

  • Реалізація інтерполяції поліномами за методами найменших квадратів і Лагранжа в Matlab. Наближення даних сплайном нульового порядку. Диференціювання полінома. Геометричний зміст похідної. Чисельне інтегрування функцій. Розв’язування диференційних рівнянь.

    контрольная работа [285,3 K], добавлен 01.06.2015

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

    курсовая работа [59,9 K], добавлен 28.03.2004

  • Проектування і реалізація навчального програмного продукту "Побудова геометричних фігур". Використання C++ Builder 6 у якості програмного середовища для реалізації даної навчальної програми. Інструкція з використання розробленого програмного забезпечення.

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

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

    курсовая работа [432,1 K], добавлен 24.01.2011

  • Загальні відомості про протоколи: Інтернету, управління передачею, користувача. Функції та структури, які беруть участь у реалізації алгоритму передачі даних. Виклик та завантаження, розробка структури програми. Вхідні та вихідні данні з сервера.

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

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