Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Создание динамических баз данных

Читайте также:
  1. A. схема, отражающая состав и связи данных базы для предметной области
  2. I. ОБСЛЕДОВАНИЕ (СБОР ДАННЫХ)
  3. Архивация данных. Алгоритмы сжатия данных. Программы архивации данных.
  4. Базы данных. Модели баз данных. Системы управления базами данных (СУБД). Общая характеристика СУБД MS Access.
  5. Библиографические базы данных
  6. Библиографический поиск - информационный поиск, осуществляемый на основании библиографических данных.
  7. Ввод исходных данных и вывод решения

 

Достоинством Пролога является простота создания динамических баз данных. Основной задачей систем управления баз данных СУБД является добавление, удаление и корректирование записей в базе. Как известно из курса «Информационные системы», самая распространенная модель данных – реляционная.

Данные в реляционной базе данных представляются в виде таблицы. Под каждую запись в БД отводится одна строка, которая рассматривается как элемент отношения. Число элементов отношения является мощностью отношения. Число колонок (полей) в записи называется арностью. Имя колонки является атрибутом. Например, табличный список студентов:

ФИО Группа № студента

 

Фамилия, группа и номер образуют запись в базе, которую можно определить предикатом dstudent (name, groupe, position). Таким образом, можно установить следующие соответствия:

База данных Турбо Пролога Реляционная база
Предикат базы Отношение
Объект Атрибут
Отдельное утверждение Элемент отношения
Количество утверждений Мощность
Имя предиката Имя таблицы

 

Для работы с базами данных в Прологе имеются следующие встроенные предикаты.

1. asserta – заносит новый факт в базу данных (БД) в?????(ОЗУ). Заносит так, что новый факт помещается перед всеми ранее внесенными фактами.

2. assertz – помещает новый факт в конец БД.

Например.

assertbase: - student (name, group, number),

assertz (dstudent (name, group, number)),

fail.

assertbase: -!.

3. retract – удаляет утверждение из БД (удаляет конкретную запись)

Например, из записи убрать конкретного студента:

Retract (dstudent («Иванов», 461, 5))

Предикаты для работы с базой в целом:

4. save – предикат, сохраняющий БД на диске из ОЗУ.

save (Dos_filename) – сохраняет из ОЗУ на диске.

5. consult (Dos_filename) – считывает базу из файла на диске в ОЗУ. Consult неуспешен, если нет файла, неправильный синтаксис описания, нельзя разместить в ОЗУ из-за недостатка места.

6. readterm (Domain, Term) – считывает из файла объекты, относящиеся к определенному домену: readterm(auto_record,auto(Name, Year, Price))

Пример:

domains

name = string

group = integer

number = integer

student(name, group, number)

readterm(dstudent, student(name, groupe, number))

Для получения списка всех студентов можно использовать предикат findall(Name, dstudent(Name, _, _), Namelist). Переменная Namelist будет содержать список всех имен.

При проектировании БД необходимо учитывать следующие факторы.

1. Размер БД (для того, чтобы выбрать, где будет делаться база в ОЗУ или на диске).

2. Организация элементов БД.

3. Способы работы и содержание БД.

База данных создается в ОЗУ, если размер базы данных относительномал. Сначала необходимо задать начальные данные и создать базу. После того как БД создана, необходимо организовать её работу, которая включает следующее:

1. занесение новых данных,

2. удаление данных,

3. выборка и вывод данных на экран.

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

student(p_name, /* полное имя (string) */

G_number,/* номер группы */

Pos) /*номер в группе*/

Группа предикатов записывается в виде:

student(“Irina Fux, 484,5) и т.д.

Раздел domains

p_name=string

g_number,pos=integer

Предикаты динамической базы данных описываются в разделе Database:

dstudent (p_name, g_number, pos).

При запуске на выполнение, утверждения базы данных помещаются отдельно от обычных утверждений в оперативной памяти.

В разделе предикатов описываем все другие предикаты:

predicates

repeat

do_mbase

assert_database

menu

process(integer)

clear_database

student(p_name, g_number, pos)

error

Предикат student предназначен для задания начального содержимого базы данных. Эта информация засылается в утверждения предиката dstudent.

База данных «Студенты».

domains

p_name=string

g_number, pos=integer

database

dstudent(p_name, g_number, pos)

predicates

repeat

do_mbase

assert_database

menu

process(integer)

clear_database

student(p_name, g_number, pos)

error

goal

do_mbase

clauses

repeat

repeat:-repeat,

student(“Ivan Ivanov”, 543, 3)

student(.......)

assert_database:– student(P_name, G_name,Pos), assertz(dstudent(P_name, G_name, Pos), fail.

assert_databse:–!.

сlear_database:– retract(dstudent(_,_,_)), fail.

сlear_database:–!.

вo_mbase:– assert_database, makewindow(1, 7, 7, “Student Base”, 0, 0, 25, 80), menu, clear_database.

Menu:– repeat, clearwindow, write(«Text of help»), write(«Input choice(1,2,3,4):”), readint(Choice), nl, process(Choice), Choice=4,!.

Process(1):– makewindow(2, 7, 7, “Add student to base”, 2, 20, 18, 58), shiftwindow(2), write(“Input Name”), readln(P-name), write(“Input group”), readint(G-number), write(“Input number”), readint(Pos), assertz(dstudent(P_name, G_number, Pos)), write(P_name, “add to base”), nl,!, write(“press space”), readchar(_), removewindow.

Process(2):– makewindow(3, 7, 7, “Deleting”, 10, 30, 7, 40), shiftwindow(3), write(“Input Name”), readln(P_name), retract(dstudent(P_name,_,_)), write(P_name, “Deleted”), nl,!, write(“Press space”), readchar(_), removewindow.

Process(3):– makewindow(4, 7, 7, “review”, 7, 30, 16, 47), shiftwindow(4), write(“Input Name”), readln(P_name), dstudent(P_name, G_number, Pos), nl, write(“Name of student:”, P_name), write(“Group”, G_number), write(“Position”, Pos), nl, nl,!, write(“Space”), readchar(_), removewindow).

Process(3):– makewindow(5, 7, 7, ”Nobody”, 14, 7, 5, 60), shiftwindow(3), write(“Cant find”), nl, nl, write(“Sorry”), nl,!, write(“Space”), readchar(_), removewindow, shiftwindow(1).

Process(4):– write(“Are you shure?/Y/N”), readln(Answer), frontchar(Answer, ’Y’,_),!.

Process(Choice):– Choice<1, error.

Process(Choice):– Choice>4, error.

Error:– write(“Input number from 1 to 4”), write (“Space”), readchar(_).

Базы данных можно хранить и на внешних носителях. В этом случае к вышеприведенной программе добавляются правила чтения и записи внешних файлов. Вспомогательные модули dbassert и dbass заносят в базу новые данные. Вводятся два терма, обозначающие файл базы данных и служебный индексный файл.

domains

file=datafile; indexfile

name=string

group=integer

database

team(name, group)

predicates

repeat

menu

process(integer)

do_base

dbassert(dbasedom) – содержит ссылки на файл базы данных и служебный файл

dbass(dbaedom, string, string)

dbretract(dbasedom)

dbret(dbasedom, string, string) – ищет запись и удаляет

dbret1(dbasedom, real)

dbread(dbasedom)

dbrd(dbasedom, string, string) – ищет и читает данные

dbaaccess(dbasedom, real) –ищет и читает в индексном файле

goal

do_dbase

clauses

co_dbase:– makewindow(1, 7, 7, “Kurse”, 0, 0, 24, 80), menu.

menu:–repeat, clearwindow, nl, write(“1.add 2delete 3 review 4 exit”), nl, write(“Input choice 1 2 3 4”), readint(Choice), nl, Choice>0, Choice<5, process(Choice), Choice=4,!.

Process(1): – аналогично предыдущей программе/

7.19. Библиотеки Turbo Prolog’а

 

Штатные средства языка Турбо Пролог достаточны только для того, чтобы писать на нем учебные программы. Для решения научных задач их недостаточно, поэтому разработчики программного обеспечения дополняют эти средства специальными библиотеками программ. Для использования например BGI-графики, т.е. стандартной Borland-графики в Турбо Прологе необходимо в разделе constants определить маршрут для bgi-модулей в виде

Constants bgi_path=”e:\\prolog\\bgi”

где указывается каталог, в котором находятся bgi-модули, затем подключить модуль описаний

include”e:\\prolog\\programs\\GRAPDECL.PRO”.

После этого в предикате необходимо инициализировать графику предикатом

initgraph(detect, 0, Graphdriver, Graphmode, bgi_path).

После такой инициализации становятся доcтупными предикаты стандартной Borland-графики, например:

· arc(x, y, beg, end, r) – дуга с центром в (х, у), с углом (end-beg) и радиусом r.

· line(xstart, ystart, xend, yend) – линия с начальной и конечной точками.

· circle(x, y, r) – круг с центром в точке (х, у) и радиусом r.

· rectangle(x1, y1, x2, y2) – прямоугольник с координатами противоположных вершин.

· outtextxy(x, y, Title) – вывод текста Title, начиная с точки (х, у).

· Полный список доступных операторов можно найти в справке Help.

· Пример организации движения слов в Прологе.

· сonstants

· bgi_path=”e:\\prolog\\prolog\\bgi”

· include “e:\\prolog\\prolog\\programs\\GRAPDECL.PRO”

· Predicates

· dvig(integer, string)

· dvi(integer, string)

· goal

· initgraph(detect, 0, GraphDriver, PraphMode, bgi_path), setbkcolor(3), setcolor(12),

· settextstyle(0, 0, 3), outtextxy(10, 50, “волк”), outtextxy(10, 70, “коза”), outtextxy(10, 90, «капуста»),

· outtextxy(10, 110, “один”), getimage(10, 50, 100, 70,X), dvig(1, X),

· getimage(10, 70, 100, 90, Y), dvig(1, Y), getimage(10, 90, 100, 110, Z), dvi(500, Z), readchar(_),

· closegraph.

· clauses

· dvig(500,_).

· dvig(A,X):–putimage(A, 0, X, 1), putimage(A, 0, X, 1), A1=A+1, A<500, dvig(A1, X).

· dvi(1,_).

· dvi(A,X):–putimage(A, 0, X, 1), putimage(A, 0, X, 1), A1=A-1, A>1, dvi(A1, X).

·


Дата добавления: 2015-09-06; просмотров: 96 | Нарушение авторских прав


Читайте в этой же книге: Модель непосредственных составляющих | Расширенные сети переходов | Глубинные (семантические) падежи | Пакет Turbo Prolog | Поиск решений | Метод отсечения и отката (ОО). | Методы организации рекурсии | Отладка программы и обнаружение ошибок | Создание графического режима. | Работа с символами и строками |
<== предыдущая страница | следующая страница ==>
Специальные строки| Модульное программирование

mybiblioteka.su - 2015-2024 год. (0.026 сек.)