Мои Конспекты
Главная | Обратная связь


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

Лабораторная работа №8. Создание динамической базы данных. Предикаты для работы с базой данных



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

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

Предикаты для работы с динамической БД:

Asserta заносит новый факт в БД, новый факт помещается перед всеми уже внесенными утверждениями.

Assertz помещает новый факт в БД за всеми имеющимися утверждениями.

Retract удаляет утверждение из БД.

Save сохраняет находящуюся в оперативной памяти БД в текстовом файле. Синтаксис этого предиката таков Save(DOS_file_name)

consult(DOS_file_name)считывает в память файл БД

readterm(Domain,Term) используется для чтения из файла объектов, относящихся к определенному в программе домену.

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

В качестве примера рассмотрим БД по игрокам футбольных команд, БД допускает следующие операции: добавление, удаление и просмотр данных. Эта программа создает БД и содержит её в оперативной памяти. Для работы с ней использовался предикат player с аргументами p_name-имя игрока, k_name-название клуба, p_number-номер игрока, pos-позиция игрока, height -рост, weight-вес, nfl_exp-стаж выступлений, college-учебное заведение)

 

Программа 32. Динамическая база данных «Футбольная команда»

Domains

p_name,k_name, pos, college = string

p_number, height, weight, nfl_exp = integer

Database

dplayer(p_name, k_name,p_number,pos, height,weight,nfl_exp, college)

Predicates

repeat

do_mbase

assert_database

menu

process(integer)

clear_database

player(p_name, k_name,p_number,pos, height,weight,nfl_exp, college)

error

Goal

do_mbase.

Clauses

repeat.

repeat:-repeat.

/*База данных футбол*/

player("Иванов Иван","Спартак",13,"з", 205,90,3, "ГГПИ").

player("Петров Петр","Динамо",96,"пз", 185,78,4, "ГТК").

player("Сидоров Денис","Локомотив",69,"в", 190,88,2, "ГТУ").

player("Васечкин Илья","Торпедо",5,"в", 195,80,5, "ГГПИ").

player("Алексеев Дима","ЦСКА",1,"н", 165,67,2, "ГТК").

player("Карпов Павел","Зенит",12,"н",170,74,1, "ГКК").

/*конец начальных данных*/

assert_database:-

player(P_name,K_name,P_number,Pos,Height,Weight,Nfl_exp,College), assertz(dplayer(P_name,K_name,P_number,Pos,Height,Weight,Nfl_exp,

College)),

fail.

assert_database:-!.

 

clear_database:-

retract(dplayer(_,_,_,_,_,_,_,_)),

fail.

clear_database:-!.

do_mbase :-

assert_database,

makewindow(1,7,7," FOOTBALL DATABASE ",0,0,25,80),

menu,

clear_database.

menu :-

repeat, clearwindow,

nl,

write(" ************************************* "),nl,

write(" * 1. Добавление нового игрока в БД * "),nl,

write(" * 2. Удаление игрока из БД * "),nl,

write(" * 3. Просмотр данных * "),nl,

write(" * 4. Выход из программы * "),nl,

write(" ************************************* "),nl,

write(" Пожалуйста, сделайте свой выбор 1, 2, 3 or 4 : "),

readint(Vibor),nl,process(Vibor),Vibor = 4,!.

/* Добавление информации об игроке в БД */

process(1) :-

makewindow(2,7,7,"Добавление данных",2,20,18,58),shiftwindow(2),

write("Введите, пожалуйста:"),nl,

write("Имя игрока: "), readln(P_name),

write("Название клуба: "), readln(K_name),

write("Номер игрока: "), readint(P_num),

write("Позицию: "), readln(Pos),

write("Рост: "), readint(Ht),

write("Вес: "), readint(Wt),

write("Стаж выступлений: "), readint(Exp),

write("Название учебного заведения: "), readln(College),

assertz(dplayer(P_name, K_name, P_num,Pos,Ht,Wt,Exp, College)),

write(P_name," добавлен в БД"), nl,!,

write("Press space bar. "), readchar(_),

removewindow, shiftwindow(1).

/* Удаление */

process(2) :-

makewindow(3,7,7,"Удаление данных",10,30,7,40),shiftwindow(3),

write("Введите имя удаляемого игрока: "), readln(P_name),

retract(dplayer(P_name,_,_,_,_,_,_,_)),

write(P_name," удален из БД "), nl, !,

write("Press space bar."), readchar(_), removewindow,

shiftwindow(1).

/* Просмотр данных об игроке*/

process(3) :-

makewindow(4,7,7," Просмотр ", 7,30,16,47), shiftwindow(4),

write("Введите имя для просмотра: "), readln(P_name),

dplayer(P_name,T_name,P_number,Pos,Ht,Wt,Exp,College),nl,

write(" Имя игрока : ",P_name),nl,

write(" Название клуба : ",T_name),nl,

write(" Номер игрока : ",P_number),nl,

write(" Позиция : ",Pos),nl,

write(" Рост : ",Ht), nl,

write(" Вес : ",Wt),nl,

write(" Стаж выступлений : ",Exp), nl,

write(" Учебное заведение : ",College),nl, nl,!,

write("Press space bar"), readchar(_),

removewindow, shiftwindow(1).

process(3) :-

makewindow(5,7,7," Неудача ",14,7,5,60), shiftwindow(5),

write("К сожалению, данных нет."),nl,

write("Извините, пока!"),nl,!,

write("Press space bar."),readchar(_),

removewindow,shiftwindow(1).

/* Выход */

process(4) :-

write("До новых встреч! "),readchar(_),exit.

/*Обработка ошибки*/

process(Vibor):-

Vibor<1, error; Vibor>5, error.

error:-

write("Пожалуйста выберите число от 1 до 4"),

write("(Press the spase bar to continue)"),readchar(_).




Поиск по сайту:







©2015-2020 mykonspekts.ru Все права принадлежат авторам размещенных материалов.