
- •1 Аналіз існуючих засобів і технологій
- •1.1 Поняття про інформаційні системи
- •1.2 Способи представлення баз даних у Пролог-програмах
- •1.2.1 Особливості динамічних баз даних
- •2 Розробка алгоритму рішення
- •2.1 Аналіз концептуальної моделі знань
- •2.2 Розробка алгоритму функціонування системи
- •2.3 Особливості програмної реалізації
2.3 Особливості програмної реалізації
Функції системи повинні забезпечувати можливість збереження, виведення, редагування інформації, що зберігається в базі знань системи. Необхідно зауважити, що програмна реалізація системи повинна включати в себе аналіз нештатних ситуацій, тобто під час роботи системи, не повинно бути повідомлень про виявлені помилки, що генеруються компілятором Visual Prolog під час виконання програми, необхідно забезпечити аналіз таких ситуацій і перехоплювати стандартні повідомлення власними. Для цього в програмному коді системи передбачено цілий ряд перевірок, які дозволяють уникнути повідомлень про помилки, які генеруються компілятором. Розглянемо детальніше дану проблему на реальних прикладах.
а) Перевірка наявності файлу із зовнішньою базою даних на диску.
В реалізовані програмі для підключення інформації із зовнішньої бази даних використовується правило open_database(), яке має наступні реалізації:
% Opening database
open_database() :-
existfile(db_file_name),
consult(db_file_name, statinfo), !.
open_database() :-
write(db_error_file_not_present),
beep(),
exit().
Перша реалізація правила працює наступним чином: за допомогою службового предиката existfile(db_file_name) перевіряється наявність файлу db_file_name на диску, у разі успішного завершення перевірки вміст файлу підключається до системи в розділ оголошення предикатів зовнішньої динамічної бази знань facts. За допомогою операції ! (відсікання) забезпечується можливість ігнорування іншої реалізації даного правила при успішному завершенні першої. У випадку хибного завершення першої реалізації, операція відсікання забезпечує виконання другої реалізації даного правила.
б) Перевірка наявності інформації в базі даних
Дана операція призначена для забезпечення коректного видалення інформації з бази знань системи, а також для унеможливлення реєстрації подібних даних. Розглянемо дану процедуру на прикладі реалізації алгоритму перевірки даних про адміністративні одиниці.
Коли користувач системи викличе форму реєстрації даних про деяку авіакомпанію виникає необхідність перевірити інформацію в базі знань чи не присутня подібна інформація в базі.
Ще однією особливістю є використання структур-списків для зберігання інформації про місця посадки. Для запису (введення) даних структур з клавіатури використовується наступне правило.
% readList - List registration
readlist([H|T]):-
write("Пункт прибуття:> "),
readln(H), readchar(Ch), Ch='y', !,
readlist(T).
readlist([]).
Розглянемо як працює вищенаведений програмний код. Користувачу пропонується ввести деяку інформацію з клавіатури, яка буде поміщена в голову списку, після введення даних система очікує події від клавіатури, якщо була натиснута клавіша "y", пропонується ввести ще один елемент списку, і це буде доти, доки користувач не натисне іншої клавіші.
Використання списків для представлення інформації про місця посадки дозволило значно збільшити можливості системи, а саме це дало можливість пошуку по аеропортам посадки (пересадки) для рейсів, що мають декілька зупинок. В свою чергу для реалізації цих можливостей було застосовано наступні процедури для роботи із списками.
% presentItem - find element in list
presentItem(X, [X|_]).
presentItem(X, [_|T]) :- presentItem(X, T).
% showItemsList - showing arrived items from ItemsList
showItemsList([]).
showItemsList([X|Y]) :- write(X), nl, showItemsList(Y).
Перший предикат призначений для визначення приналежності елемента списку, дана процедура використовується при пошуку.
Другий предикат призначений для виводу списку на екран, дана процедура використовується при пошуку інформації про авіарейси по різним критеріям.