Забезпечення інформаційної безпеки
Аналіз і характеристика особливостей захисту персональних комп'ютерів. Опис спеціального програмного забезпечення для захищення і шифрування інформації. Розробка комплексного програмного продукту, який реалізує обмін даними за допомогою серверу.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | украинский |
Дата добавления | 28.07.2017 |
Размер файла | 91,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
x.prepend ("rock"); / / x == "rock and"
x.append ("roll"); / / x == "rock and roll"
x.replace (5, 3, "&"); / / x == "rock & roll"
У функціях replace () і remove () перші два аргументи вказують на позицію, від якої починається видалення, і кількість байт, яке повинно бути вилучено. Коли ви додаєте дані за допомогою append () в непорожній масив, він може бути перерозподілений в пам'яті перед копіюванням в нього нових даних. Ви можете уникнути такої поведінки, викликавши функцію reserve (), яка виділить точну кількість пам'яті. Ви також можете викликати capacity (), щоб дізнатися, скільки пам'яті займає QByteArray в дійсності. Дані, що додаються в порожній масив, не копіюються. Часто треба видалити з масиву незначущі пропуски і символи-роздільники ("whitespace"), такі як '\ n', '\ t', '' і т.п. Якщо ви хочете видалити пробільні символи з обох кінців QByteArray, використовуйте trimmed (). Якщо ви хочете видалити символи-роздільники з обох кінців масиву і замінити послідовності з декількох таких символів одним пропуском всередині байтового масиву, використовуйте simplified (). Якщо ви хочете знайти всі входження символу або підрядка в QByteArray, испоьзуется indexOf () або lastIndexOf (). Перша функція здійснює пошук вперед від зазначеної позиції, а остання - здійснює пошук назад. Обидві функції повертають індекс позиції символу або підрядка, якщо вони були знайдені, в іншому випадку повертається -1. Наприклад, тут наведено типовий цикл, який знаходить всі збіги конкретної підрядка: QByteArray ba ("We must be <b> bold </ b>, very <b> bold </ b>");
int j = 0;
while ((j = ba.indexOf ("<b>", j))! = -1) {
cout << "Found <b> tag at index position" << j << endl; + + J;
}
Якщо ви просто хочете лише перевірити, чи містить QByteArray конкретний символ або підрядок, використовуйте contains (). Якщо вам потрібно дізнатися, скільки разів символ або підрядок зустрічаються в масиві, використовуйте count (). Якщо ви хочете поміняти одне значення на інше в усьому масиві, використовуйте одну з двох перевантажених функцій replace () з двома параметрами. Два QByteArray можна порівняти використовуючи перевантажені оператори <(), <= (), == (),> = () і т.д. Порівняння базується виключно на числових значеннях символів масиву і проводиться дуже швидко, але не завжди відповідає бажанням людини.Функція QString :: localeAwareCompare () краще підходить для сортування рядків користувальницького інтерфейсу. Історично склалося, що в QByteArray існує відмінність між неініціалізованих (null byte) масивом і порожнім (empty) масивом. Неініціалізованих масив - це масив, який створений за допомогою конструктора QByteArray () за замовчуванням або конструктором з аргументом (const char *) 0. Порожній масив це масив, що має довжину 0. Неініціалізованих масив завжди порожній, але порожній масив необов'язково буде неініціалізованих:
QByteArray (). IsNull (); / / поверне true
QByteArray (). IsEmpty (); / / поверне true
QByteArray (""). IsNull (); / / поверне false
QByteArray (""). IsEmpty (); / / поверне true
QByteArray ("abc"). IsNull (); / / returns false
QByteArray ("abc"). IsEmpty (); / / поверне false
Всі функції, за винятком isNull (), розглядають неініціалізованих (null) масив, як порожній (empty). Наприклад, data () поверне покажчик на '\ 0' для неініціалізованої (null) масиву (не покажчик null), а QByteArray (), при порівнянні, дорівнює QByteArray (""). Ми рекомендуємо вам завжди використовувати isEmpty () і уникати isNull (). Перевірка данних на достовірність та їх цілісність
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);
out << (quint16)0;
out << Command();
out << Data();
QString msg;
msg += QString::number(Command());
msg += Data();
emit msgRecived(msg);
out.device()->seek(0);
out << (quint16)(block.size() - sizeof(quint16));
write(block);
Механізм слотів сигналів
Сигнали і слоти використовуються для зв'язку між об'єктами. Механізм сигналів і слотів - це основна особливість Qt і, ймовірно, основна частина Qt, яка найбільше відрізняється по функціональності від інших бібліотек.
При програмуванні графічного інтерфейсу користувача ми часто хочемо повідомляти одним елементам про зміну інших елементів управління. Більш узагальнено можна сказати, що ми хочемо забезпечити зв'язок між об'єктами будь-яких видів. Наприклад, якщо користувач натискає кнопку Close ми, ймовірно, хочемо, щоб була викликана функція вікна close ().
Більш старі інструментарії забезпечують подібний зв'язок за допомогою функцій зворотного виклику. Зворотний виклик - це покажчик на функцію. Якщо ви хочете, щоб функція обробки повідомила вас про деяке подію, ви передаєте їй покажчик на іншу функцію (відгук). Функція обробки викличе функцію зворотного виклику, коли це буде доречно. Але даний підхід має два фундаментальні недоліки: по-перше, він не тіпобезопасен. Ми ніколи не зможемо перевірити, що функція обробки викликає відгук з правильними аргументами. По-друге, цей метод жорстко пов'язаний з функцією обробки, так як вона повинна знати, який відгук викликати.
У Qt ми ввели техніку, альтернативну функцій зворотного виклику: ми використовуємо сигнали і слоти. Сигнал випускається, коли відбувається певна подія. Віджети Qt мають безліч зумовлених сигналів, і ви завжди можете створити їх підкласи, щоб додати свої сигнали. Слот - це функція, що викликається у відповідь на певний сигнал. Віджети Qt мають безліч зумовлених слотів, але ви, і це стало общеіспользуемой практикою, можете створювати підкласи віджетів і додавати свої слоти для того, щоб обробляти надходять сигнали, як того хочете.
Цей механізм тіпобезопасен: сигнатура сигналу повинна відповідати сигнатурі приймає слота. (Фактично, слот може мати більш коротку сигнатуру, ніж сигнал, який він отримує, оскільки може ігнорувати зайві аргументи.) Сигнали і слоти пов'язані без нежорстко: Клас, що випускає сигнали, не знає і не цікавиться, який із слотів отримає сигнал. Механізм сигналів і слотів Qt гарантує, що, якщо Ви поєднали сигнал зі слотом, слот буде викликатися з параметрами сигналу в потрібний момент. Сигнали і слоти можуть мати будь-яку кількість аргументів будь-яких типів. Вони повністю тіпобезопасни.
Всі класи, успадковані від QObject або одного з його підкласів (наприклад, QWidget) можуть містити сигнали і слоти. Сигнали випускаються при зміні об'єктом свого стану, якщо ця зміна може бути цікаво іншим об'єктам. Всі об'єкти роблять це для зв'язку з іншими об'єктами. Їх не турбує, чи отримує хтось випускаються ними сигнали. Це є істинною інкапсуляцією інформації, і вона гарантує, що об'єкти можуть використовуватися як окремі компоненти програмного забезпечення.
Слоти можуть отримувати сигнал, але вони також є звичайними функціями-членами. Також, як об'єкт не знає, чи отримує хтось сигнали, що випускаються ним, слоти не знають, чи існують сигнали, з ними пов'язані. Це гарантує, що можна створити повністю незалежні Qt компоненти.
Ви можете приєднувати до одного слоту стільки сигналів, скільки вам буде потрібно, і один сигнал може бути з'єднаний зі стількома слотами, скільки вам потрібно. Навіть можливо з'єднувати сигнал безпосередньо з іншим сигналом. (Другий сигнал буде випускатися негайно всякий раз, коли випускається перший.).
Разом сигнали і слоти представляють собою потужний механізм компонентного програмування.
Мінімальна декларація класу C + + може виглядати наступним чином:
class Counter
{
public:
Counter () {m_value = 0;}
int value () const {return m_value;}
void setValue (int value);
private:
int m_value;
};
Невеликий клас, заснований на QObject, може виглядати так:
# Include <QObject>
class Counter: public QObject
{
Q_OBJECT
public:
Counter () {m_value = 0;}
int value () const {return m_value;}
public slots:
void setValue (int value);
signals:
void valueChanged (int newValue);
private:
int m_value;
};
Версія класу, заснована на QObject, має те ж саме внутрішній стан і надає відкриті методи для доступу до нього, але на додаток до цього вона підтримує компонентне програмування з використанням сигналів і слотів. Цей клас, важко зітхнувши сигнал valueChanged (), може повідомляти зовні, що його стан змінився, і має слот, якому інші об'єкти можуть посилати сигнали.
Всі класи, що містять сигнали і слоти, повинні згадати макрос Q_OBJECT на початку своєї декларації. Також вони повинні відбуватися (прямо чи опосередковано) від QObject.
Слоти реалізуються програмістом. Ось можлива реалізація слота Counter :: setValue ():
void Counter :: setValue (int value)
{
if (value! = m_value) {
m_value = value;
emit valueChanged (value);
}
}
Рядок, що містить emit, змушує об'єкт випустити сигнал valueChanged () з новим значенням, переданим в аргументі.
У наступному фрагменті коду ми створюємо два об'єкти Counter і з'єднуємо сигнал першого об'єкта valueChanged () зі слотом другого об'єкта setValue (), використовуючи QObject :: connect ():
Counter a, b;
QObject :: connect (& a, SIGNAL (valueChanged (int)),
& B, SLOT (setValue (int)));
a.setValue (12); / / a.value () == 12, b.value () == 12
b.setValue (48); / / a.value () == 12, b.value () == 48
Виклик a.setValue (12) змушує a випускати сигнал valueChanged (12), який буде отриманий об'єктом b через слот setValue (), тобто буде викликана функція b.setValue (12). Потім b сам випустить сигнал valueChanged (), але так як ніхто не пов'язаний з об'єктом b через сигнал valueChanged (), він буде проігнорований.
Зверніть увагу на те, що функція setValue () встановлює значення і випускається тільки в тому випадку, якщо value! = M_value. Це запобігає нескінченний цикл при циклічних сполуках (наприклад, якщо б b.valueChanged () був з'єднаний з a.setValue ()).
Сигнал випускається для кожного з'єднання, яке було створено, якщо сигнал з'єднаний з двома слотами, то він буде іспущен двічі. Також ви можете розірвати з'єднання за допомогою QObject :: disconnect ().
Даний приклад ілюструє спільну роботу об'єктів, які нічого не знають один про одного. Для її досягнення об'єкти повинні бути з'єднані за допомогою виклику простий функції QObject :: connect () або за допомогою функції uic'а - автоматичним зв'язуванням.
Препроцесор C + + замінює або видаляє ключові слова signals, slots і emit для того, щоб компілятору був наданий код, відповідний стандарту C++.
За допомогою moc обробляються визначення класів, що містять сигнали і слоти, і генеруються файли реалізації C + +, які будуть скомпільовані і пов'язані з іншими об'єктними файлами програми. Якщо ви використовуєте qmake, то в make-файл буде автоматично доданий виклик moc.
Сигнали випускаються об'єктом, коли змінюється його внутрішній стан, і якщо це може бути цікаво його клієнтам або власнику. Тільки класи, що містять визначення сигналів, і їх підкласи можуть випускати сигнали.
При випущенні сигналу слоти, з ним пов'язані, виконуються негайно, так само, як при звичайному виклику функції. Коли це трапляється, механізм сигналів і слотів повністю незалежний від циклу обробки подій графічного інтерфейсу користувача. Виконання коду, наступного за виразом emit продовжиться, як тільки завершиться виконання всіх слотів. У випадку з чергами сполук ситуація дещо відмінна, при цьому виконання коду, наступного за emit, продовжиться негайно, а слоти будуть виконані дещо пізніше.
Якщо кілька слотів пов'язані з одним сигналом, то при випущенні сигналу вони будуть виконані один за іншим у довільному порядку.
Сигнали автоматично генеруються утилітою moc, і ви не повинні включати їх реалізацію в. Cpp файли. Вони не повинні мати повертаються типів (тобто використовувати void).
Зауваження про аргументи: наш досвід показує, що сигнали і слоти більш придатні для повторного застосування, якщо вони не використовують спеціальних типів. Якщо сигнал QScrollBar :: valueChanged () повинен використовувати спеціальний тип, такий як гіпотетичний QScrollBar :: Range, він може бути з'єднаний лише з слотами, спроектованими спеціально для QScrollBar. Що-небудь настільки ж просте, як програма в частині 5 навчального посібника, буден неможливо реалізувати.
Слот викликається як тільки випускається з'єднаний з ним сигнал. Слоти - це звичайні функції C + +, вони можуть викликатися звичайним чином; їх єдина особливість - це те, що до них можуть бути приєднані сигнали.
Так як слоти є звичайними функціями-членами, вони мають права доступу, подібні звичайних функцій-членам. Разом з тим, як слотів вони можуть бути викликані будь-яким компонентом незалежно від рівня доступу за допомогою з'єднання сигнал-слот. Це означає, що сигнал, що випускається об'єктом довільного класу, може бути пов'язаний з закритим (private) слотом і бути викликаний в абсолютно стороннього класі.
Ви також можете визначати віртуальні слоти, що ми знаходимо дуже корисним на практиці.
У порівнянні із зворотними викликами, сигнали і слоти трохи повільніше у зв'язку з більшою гнучкістю, яку вони надають, але для реальних додатків це розходження неістотно. Взагалі, випускання сигналу, пов'язаного з деякими слотами, приблизно в десять разів повільніше, ніж виклик невіртуальної функції приймача безпосередньо. Так відбувається, тому що потрібно безпечно перебрати всі з'єднання (тобто перевірити, щоб наступні приймачі не були зруйновані під час випускання сигналу) і передати параметри покладеним чином. Хоча "десять викликів невіртуальний функцій" здається довгим, це менше ніж, наприклад, операція new або delete. Якщо ви обробляєте рядок, вектор або список, тобто операції, які вимагають виклику new або delete, обробка сигналів та слотів стають не найактивнішими споживачами часу.
Те ж саме відбувається, коли система викликає слот або побічно викликаються більше десятка функцій. На i586-500 ви можете генерувати близько 2,000,000 сигналів, пов'язаних з одним слотом, в секунду, або близько 1,200,000 сигналів, пов'язаних з двома слотами, в секунду. Простий і гнучкий механізм сигналів і слотів є гарною оболонкою для внутрішньої реалізації, яку користувачі навіть не помічатимуть.
Інші бібліотеки, що визначають змінні з ім'ям signals або slots, можуть викликати попередження і помилки при компіляції з додатком, створеним на основі Qt. Вирішити цю проблему може директива препроцесора # undef.
Мета-об'єктний компілятор (moc) переглядає декларацію класу у файлі C + + і генерує код, ініціалізувалися мета-об'єкт. Мета-об'єкт містить імена всіх сигналів і слотів і покажчики на їх функції.
Мета-об'єкт містить додаткову інформацію, таку як ім'я класу об'єкта. Також ви можете перевірити, чи є об'єкт спадкоємцем певного класу, наприклад:
if (widget-> inherits ("QAbstractButton")) {
QAbstractButton * button = static_cast <QAbstractButton *> (widget);
button-> toggle ();
}
Інформація мета-об'єкта також використовується в qobject_cast <T> (), який подібний QObject :: inherits (), але менш схильний до помилок:
if (QAbstractButton * button = qobject_cast <QAbstractButton *> (widget))
button-> toggle ();
Для отримання більш детальної інформації дивіться Система мета-об'єктів.
Далі наведено простий приклад віджету.
# Ifndef LCDNUMBER_H
# Define LCDNUMBER_H
# Include <QFrame>
class LcdNumber: public QFrame
{
Q_OBJECT
LcdNumber успадковує QObject, який використовує сигнали і слоти через QFrame і QWidget. Він трохи схожий на вбудований віджет QLCDNumber.
При розширенні препроцесором, макрос Q_OBJECT декларує кілька функцій-членів, які реалізуються moc; якщо ви отримали повідомлення про помилки компілятора, подібні "undefined reference to vtable for LcdNumber", ви, ймовірно, забули запустити moc або включити висновок moc в команду link public: LcdNumber (QWidget * parent = 0);
moc явно не вимагає цього, але якщо ви наслідуєте QWidget, майже напевно захочете мати аргумент parent у вашому конструкторі і передати його в конструктор базового класу.
Деякі деструктори і функції-члени тут опущені; moc ігнорує їх.
signals: void overflow ();
LcdNumber випускає сигнал, коли його просять показати невірне значення.
Якщо ви не дбаєте про те, чи виходить значення за встановлені межі, або вважаєте, що воно не може за них вийти, можете ігнорувати сигнал overflow (), тобто не з'єднувати з ним ні якої слот.
Якщо ви, навпаки, хочете викликати дві функції при виході значення за межі діапазону, з'єднайте сигнал з двома слотами. Qt викличе їх обидва (в довільному порядку).
public slots:
void display (int num);
void display (double num);
void display (const QString & str);
void setHexMode ();
void setDecMode ();
void setOctMode ();
void setBinMode ();
void setSmallDecimalPoint (bool point);
};
# Endif
Слот зазвичай використовується для отримання інформації про зміну стану інших віджетів. LcdNumber використовує цю можливість, код, наведений вище, показує, як відобразити змінене значення. Так як display () є частиною інтерфейсу між класом і рештою частини програми, то він є відкритим (public) слотом.
4.5 Розробка моделі для виведення і редагування даних
При створенні нової моделі для існуючої структури даних дуже важливо вирішити, який тип моделі найкраще підходить для забезпечення інтерфейсу до даних. Якщо структура даних може бути визначена як список або таблиця елементів, можна створити підклас QAbstractListModel або QAbstractTableModel, так як ці класи надають відповідні реалізації функцій за умовчанням.
Однак, якщо базова структура даних може бути представлена тільки у вигляді ієрархічної деревоподібної структури, виникає необхідність у створенні підкласу QAbstractItemModel. Такий підхід показаний в прикладі Проста модель дерева.
У цьому розділі ми реалізуємо просту модель, засновану на списку рядків, для створення якої ідеальною основою є клас QAbstractListModel.
Безвідносно форми, яку приймає основна структура даних, хорошим тоном в спеціалізованих моделях є додавання стандартного API QAbstractItemModel до того, який надає більш природний доступ до структури даних. Це полегшує заповнення моделі даними, але крім того дозволяє іншим компонентам архітектури модель / уявлення взаємодіяти з моделлю, використовуючи стандартний API. Наведена нижче модель надає користувальницький конструктор виключно з цією метою.
4.6 Розробка моделі тільки-для-читання
Реалізована тут модель - це проста неієрархічні модель тільки-для-читання, заснована на стандартному класі QStringListModel. Вона має QStringList в якості внутрішнього сховища даних і реалізує лише найнеобхідніше для функціонування моделі. Для полегшення реалізації, ми створюємо підклас QAbstractListModel так як він визначає зручне поведінка за умовчанням для моделей списків і надає більш простий інтерфейс, ніж клас QAbstractItemModel.
При реалізації моделі слід пам'ятати, що QAbstractItemModel не зберігає даних, він лише надає інтерфейс, використовуваний уявленнями для доступу до даних. Для мінімальної моделі тільки-для-читання, необхідні реалізації лише декількох функцій, які надані за замовчуванням для більшості інтерфейсів. Декларація класу наступна:
class StringListModel: public QAbstractListModel
{
Q_OBJECT
public:
StringListModel (const QStringList & strings, QObject * parent = 0)
: QAbstractListModel (parent), stringList (strings) {}
int rowCount (const QModelIndex & parent = QModelIndex ()) const;
QVariant data (const QModelIndex & index, int role) const;
QVariant headerData (int section, Qt :: Orientation orientation,
int role = Qt :: DisplayRole) const;
private:
QStringList stringList;
};
Крім конструктора моделі, ми повинні реалізувати тільки дві функції: rowCount (), яка повертає кількість рядків у моделі, і data (), яка повертає елемент даних, що відповідає певному модельному індексу.
Добре працюють моделі також реалізують headerData () для отримання уявленнями дерев і таблиць чогось для відображення в їх заголовках.
Зверніть увагу на те, що це неієрархічні модель, тому ми не повинні турбуватися про батьківсько-дочірніх відносинах. Якщо наша модель ієрархічна, ми також повинні реалізувати функції index () і parent ().
Список рядків зберігається в закритій змінної-члені stringList.
Ми хочемо, щоб кількість рядків в моделі було таким же, що і кількість елементів у списку рядків. Пам'ятаючи про це, ми реалізуємо функцію rowCount ():
int StringListModel :: rowCount (const QModelIndex & parent) const
{
return stringList.count ();
}
Так як модель неієрархічні, ми можемо спокійно ігнорувати модельний індекс, відповідний батьківському елементу. За замовчуванням, моделі, похідні від QAbstractListModel, містять тільки один стовпець, тому нам не потрібно повторно реалізовувати функцію columnCount ().
Як елементи в поданні ми хочемо повернути рядки зі списку рядків. Функція data () відповідальна за повернення елемента даних, відповідного аргументу-індексу:
QVariant StringListModel :: data (const QModelIndex & index, int role) const
{
if (! index.isValid ())
return QVariant ();
if (index.row ()> = stringList.size ())
return QVariant ();
if (role == Qt :: DisplayRole)
return stringList.at (index.row ());
else
return QVariant ();
}
Якщо переданий модельний індекс валиден, номер рядка знаходиться в межах діапазону значень списку рядків і необхідна роль нами підтримується, ми повертаємо валідний QVariant.
Деякі вистави, такі як QTreeView і QTableView, можуть відображати заголовки поряд з елементами даних. Якщо наша модель відображається в поданні з заголовками, ми хочемо, щоб заголовки містили номери рядків і стовпців. Ми можемо надати інформацію про заголовках реалізувавши функцію headerData ():
QVariant StringListModel :: headerData (int section, Qt :: Orientation orientation,
int role) const
{
if (role! = Qt :: DisplayRole)
return QVariant ();
if (orientation == Qt :: Horizontal)
return QString ("Column% 1"). arg (section);
else
return QString ("Row% 1"). arg (section);
}
І знову ми повертаємо валідний QVariant тільки в тому випадку, якщо модельний індекс валиден і роль підтримується. При рішенні, що повинно бути повернуто, також приймається до уваги орієнтація заголовка.
Не всі уявлення відображають заголовки з елементами даних, і вони можуть бути налаштовані для приховування заголовків. Тим не менш, рекомендується реалізовувати функцію headerData () для надання важливої інформації про дані, що надаються моделлю.
Елемент може мати кілька ролей, надаючи різні дані в залежності від зазначеної ролі. Елементи нашої моделі мають тільки одну роль, DisplayRole, так що ми повертаємо дані елемента незалежно від зазначеної ролі. Однак, дані, надані для ролі DisplayRole, ми може повторно використовувати в інших ролях, таких як ToolTipRole, яку уявлення можуть використовувати для відображення інформації про елемент в підказці.
ВИСНОВКИ
В даній дипломній роботі спроектовано та розроблено систему захисту інформації. Реалізовані функції кодування декодування інформації, спроектовано та розроблено ТСР сервер та два тестових клієнта. Алгоритм шифрування та перевірки данних на цілісність,достовірність не вцідображається на продуктивності программи. Створено зручний та інтуїтивно зрозумілий графічний інтерфейс користувача, що дає змогу користувачам з будь яким рівнем знань вільно користуватися даної ситемою. Програмний продукт є крос-платформним програмним забезпеченням, тобто може працювати з будь якою сучасною операційною системою, що робить його універсальним і майже незалежним від іншого програмного забезпечення.
СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ
1. Закон України “Про охорону праці”
2. Науково-практичний коментар до Закону України “Про охорону праці”, К. 1997 - 528 с.
3. Автоматзированые информационные технологии в экономике. Учебник/ Под.ред.проф. Г.А. Титоренко. - М.: Компьютер, ЮНИТИ, 1998.- 400с.
4. Береза А. Н. Основи створення інформаційних систем: Навч.посібник - К.: КНЕУ, 1998. - 140 с.
5. Гужва В. М., Постєвой А. Г. Інформаційні системи в міжнародному бізнесі: Навч.посібник - К.: КНЕУ, 1999. - 164 с.
6. Диго С.Н. Проектирование и использование базы даных: Учебник. - М.: Финансы и статистика, 1995.- 208 с.
7. Евстигнеев Е.Н., Кавалев В.В. Автоматизированная система обработки економической информации в торговле: Учебник для торг. ВУЗОВ .- М.: Економика, 1991.- 272с.
8. Єрьоміна Н. В. Проектування баз даних: Навч.посібник - К.: КНЕУ,1998. - 208с..
9. Кондрашова С.С. Інформаційні технології в управлінні: Навч.посібник - К.: МАУП, 1998. - 136 с.
10. Навакатікян О. О., Кальниш В. В. Охорона праці користувачів комп'ютерних відеодисплейних терміналів - К.: 1997. - 400 с.
11. Рогач І. Ф, Сендзюк М. А. , Антонюк В. А. Інформаційні системи у фінансово - кредитних установах: Навч.посібник - К.: КНЕУ, 1999. - 216 с.
12. Руденко В.Д., Макарчук О.М., Практичний курс інформатики/ За ред. Мадзігона В.М. - К.: Феникс, 1997.- 304 с.
13. Ситник В. Ф., Краєва О. С. Технологія автоматизованої оброби економічної інформації: Навч.посібник - К.: КНЕУ, 1998. - 200 с.
14. Сусиденко В Т. , Мирочник Г.Д. Применение автоматизированной системы управления в торговле - К.: Техника, 1989.-152с.
15. Экономика торговли, Под.ред, Л.В. Бирюкова: Издательства “Экономика ” 1990. 421с.
Размещено на Allbest.ru
Подобные документы
Аналіз системи збору первинної інформації та розробка структури керуючої ЕОМ АСУ ТП. Розробка апаратного забезпечення інформаційних каналів, структури програмного забезпечення. Алгоритми системного програмного забезпечення. Опис програмних модулів.
дипломная работа [1,9 M], добавлен 19.08.2012Криптографія – математичні методи забезпечення інформаційної безпеки та захисту конфіденційності. Огляд існуючих методів пошуку нових алгоритмів шифрування. Розробка системи оцінки ефективності криптографічних систем. Найпоширеніші методи шифрування.
дипломная работа [1,2 M], добавлен 13.06.2015Аналіз предметної області, опис проекту бази даних, моделей майбутнього програмного забезпечення гри для персонального комп'ютера "Міста". Функціональні можливості програмного забезпечення, які необхідно реалізувати. Інтерфейс програмного забезпечення.
курсовая работа [2,3 M], добавлен 02.06.2016Основи безпеки даних в комп'ютерних системах. Розробка програми для забезпечення захисту інформації від несанкціонованого доступу: шифрування та дешифрування даних за допомогою криптографічних алгоритмів RSA та DES. Проблеми і перспективи криптографії.
дипломная работа [823,1 K], добавлен 11.01.2011Аналіз задач, які вирішуються з використанням інформаційної системи. Вибір серверного вирішення, клієнтської частини, мережного вирішення, системного програмного забезпечення. Розробка підсистеми діагностики, керування, забезпечення безпеки даних.
курсовая работа [1,5 M], добавлен 22.04.2011Структура інформаційної системи КККЕіП ім. М.П. Сая. Локальна комп'ютерна мережа на підприємстві, конфігурація персональних комп’ютерів. Аналіз апаратних засобів, системного програмного та документального забезпечення структурних підрозділів коледжу.
отчет по практике [6,4 M], добавлен 27.05.2019Аналіз формування податкової звітності. Розробка проекту інтерфейсу, інформаційної, статичної та динамічної моделей програмного забезпечення. Розрахунок економічної ефективності впровадження програмного забезпечення формування податкової звітності.
дипломная работа [3,5 M], добавлен 26.04.2012Аналіз сучасних методів та технологій проектування програмного забезпечення. Вибір цільової мобільної платформи. Розробка екранних форм, діаграми класів. Вимоги до програмного продукту. Аналіз небезпечних факторів у відділі роботи з фізичними особами.
дипломная работа [508,1 K], добавлен 02.12.2015Проблеми розробки компонентного програмного забезпечення автоматизованих систем управління. Сучасні компонентні технології обробки інформації. Аналіз вибраного середовища проектування програмного забезпечення: мова програмування PHP та Apache HTTP-сервер.
дипломная работа [2,8 M], добавлен 11.05.2012Причини незаконного використання програмного забезпечення. Дослідження збитку, нанесеного комп'ютерним піратством. Ризик роботи з нелегальним програмним забезпеченням і гідності ліцензійних програм. Види захисту прав виробників програмного забезпечення.
реферат [60,8 K], добавлен 01.06.2010