Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
281
Добавлен:
16.05.2015
Размер:
1.97 Mб
Скачать

Приложение №.3. Программа «Внутренняя база данных фактов»

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

  • добавление нового отдела;

  • удаление сотрудника по фамилии;

  • удаление сотрудников по коду отдела;

  • просмотр сотрудников;

  • просмотр отделов.

Программа:

facts

dbotdel(integer ID_OTD,string NAIM,integer ID_RUK)

facts-fsotrudniki

dbsotrudniki(integer ID_SOTR,string FAM,integer ID_OTD)

predicates

otdel(integer,string,integer) %отделы

sotrudniki(integer,string,integer) %сотрудники

process(integer) %обработка меню

assertdbotdely %инициализация фактов - отделы

assertdbsotr %инициализация фактов - сотрудники

repeat %зацикливание

menu %меню

clauses

%Зацикливание

repeat.

repeat:-repeat.

%Исходные данные

otdel(1,"Бухгалтерия",10).

otdel(2,"Сбыт",20).

sotrudniki(100,"Иванов А.И.",1).

sotrudniki(200,"Котов О.К.",1).

sotrudniki(300,"Ким И.К.",1).

sotrudniki(400,"Зверева О.С.",2).

sotrudniki(500,"Хватова М.И.",2).

%Формирование фактов

assertdbotdely:-

otdel(KOtd,N,KRuk),assertz(dbotdel(KOtd,N,KRuk)),

fail.

assertdbotdely:-!.

assertdbsotr:-

sotrudniki(KSotr,N,KOtd),

assertz(dbsotrudniki(KSotr,N,KOtd),

fsotrudniki),fail.

assertdbsotr:-!.

%вывод меню

menu:-

repeat,

write("Введите код\n1-Добавить отдел"),

write("\n2-Удаление служ\n3-Удалитьсотрудников”),

write(“\n4- Сотрудники\n5- Отделы”),

write(“\n6 – Exit\n > "),

readint(Exec),process(Exec),Exec=6,nl,!.

%Обработка команд меню

process(1):-

write("Код="),readint(K),nl,

write("Название="),readln(N),nl,

write("Код руков="),readint(KR),

assertz(dbotdel(K,N,KR)).

process(2):-

write("Фамилия="),readln(N),

retract(dbsotrudniki(_,N,_),fsotrudniki).

process(3):-

write("Введите код отдела="),

readint(KOtd),retractall(dbsotrudniki(_,_,KOtd),

fsotrudniki).

process(4):-

dbsotrudniki(KSotr,N,KOtd),

write(KSotr,"\t",N,"\t",KOtd),

nl,fail.

process(5):-

dbotdel(KOtd,N,KRuk),write(KOtd,"\t",N,"\t",KRuk),

nl,fail.

process(6):-

write("\nExit ").

goal

%целевая установка

assertdbotdely,assertdbsotr,menu.

Приложение №.4. Программа «Внешняя база данных»

Требуется создать базу данных, в которой хранится информация о физическом лице с атрибутами: Почтовый индекс(PostIndex), Фамилия с инициалами (Name). Разместить цепочку термов в оперативной памяти. Действия над термами: добавление, просмотр списка термов, удаление, замена терма на новый.

Программа:

domains

db_selector=dbp%селектор

%домен терма и терм:

persons=person(string PostIndex,string Name)

predicates

browse %просмотр термов

dbadd %добавление термов

getmemory %выделение памяти

menu %меню

process(integer Job)%выбор пользователя

%исходные данные:

person_rec(string PostIndex,string Name)

%зацикливание

repeat

clauses

repeat.

repeat:-repeat.

%набор фактов

person_rec("123789","Иванова А.С").

person_rec("123567","Квасова О.П").

person_rec("123700","Зверева А.И").

%меню программы

menu:-

repeat,

write("1 – Новая запись\n2 – Просмотр”),

write(“\n3-Удаление\n4-Замена\n5-EXIT\n\n"),

readint(Job),process(Job),Job=5,!.

%выделить память

getmemory:-

db_create(dbp,"persons_list",in_memory).

%заполнение базы

dbadd:-

person_rec(PIndex,Name),

chain_insertz(dbp,chain1,persons,person(PIndex,Name),_)

,fail.

%вывод значений термов

browse:-

chain_terms(dbp,chain1,persons,

person(PIndex,Name),Ref),

write(PIndex," ",Name," ",Ref,"\n"),fail.

browse:-write("\nPress key !\n"),readchar(_),!.

%реакция на выбор в меню

process(1):- %заполнить базу

dbadd.

process(2):- %просмотр

browse.

process(3):- %уничтожение терма

write("Input post index > "),readln(PIndex),

chain_terms(dbp,chain1,persons,person(PIndex,_),Ref),

term_delete(dbp,chain1,Ref).

process(4):- %замена терма

write("Input post index for search > "),

readln(PIndex),

chain_terms(dbp,chain1,persons,person(PIndex,_),Ref),

write("Input new index >"),readln(PInew),nl,

write("Input new name >"),readln(Name),

term_replace(dbp,persons,Ref,person(PInew,Name)).

process(5):- %завершение работы

write("Exit !\n"),db_close(dbp),

db_delete("persons_list",in_memory).

goal

getmemory,menu.

Соседние файлы в папке Dop