
5.2 Листинг задачи внешней базы данных
domains
p_tovar = string
p_price = real
p_kolvo = integer
db_selector = xdb
record = dbrecord(p_tovar, p_price, p_kolvo)
predicates
repeat
do_mbase
assert_database
clear_database
menu
process(integer)
error
goal
do_mbase.
clauses
repeat.
repeat:- repeat.
assert_database:-!.
clear_database.
clear_database:-!.
do_mbase:-
clear_database,
assert_database,
makewindow(1,7,7,"Склад " ,0,0,25,80),
menu.
menu:-
repeat,
clearwindow,
write(" ======================================================="),nl,
write(" | |"),nl,
write(" | 1. Занесение новой информации о товаре |"),nl,
write(" | 2. Удаление записи |"),nl,
write(" | 3. Редактирование записи |"),nl,
write(" | 4. Просмотр содержимого базы данных |"),nl,
write(" | 5. Открыть базу |"),nl,
write(" | 6. Создать базу |"),nl,
write(" | 7. Выход из программы |"),nl,
write(" | |"),nl,
write(" ======================================================="),nl,
nl,
write(" Выберите номер пункта меню: 1..7 : "),
readint(Choice),nl,
process(Choice),
Choice = 7,
!.
process(1):-
makewindow(2,7,7,"Добавить запись о товаре",2,20,18,58),
shiftwindow(2),
write("Наименование: "),
readln(P_tovar),
write("Стоимость: "),
readreal(P_price),
write("Количество: "),
readint(P_kolvo),
chain_insertz(xdb,"Adress",record,dbrecord(P_tovar,P_price,P_kolvo),Ref),
write(P_tovar," помещен в базу данных."),
nl,!,
write("Нажмите пробел. "),
readchar(_),
removewindow.
process(2):-
makewindow(3,7,7,"Удаление записи",12,20,7,40),
shiftwindow(3),
write("Наименование товара: "),
readln(P_tovar),
chain_terms(xdb,"Adress",record,dbrecord(P_tovar,_,_),Ref),
term_delete(xdb,"Adress",Ref),
fail;
write("Запись удалена"), nl, !,
write("Нажмите пробел."),
readchar(_),
removewindow.
process(3):-
makewindow(3,7,7,"Редактирование записи о товаре по наименованию ",0,0,25,80),
shiftwindow(3),
write("Наименование редактируемого товара: "),
readln(P_tovar),nl,
write("Сведения о новом товаре"),nl,
write("Наименование: "),
readln(Fam),
write("Стоимость: "),
readreal(Adress),
write("Количество: "),
readint(Phone),
chain_terms(xdb,"Adress",record,dbrecord(P_tovar,_,_),Ref),
term_replace(xdb,record,Ref,dbrecord(Fam,Adress,Phone)),
nl,!,
nl,write("Нажмите пробел"),
readchar(_),
removewindow.
process(4):-
makewindow(6,7,7,"Просмотр содержимого базы данных ",0,0,25,80),
shiftwindow(6),
chain_terms(xdb,"Adress",record,dbrecord(P_tovar,P_price,P_kolvo),Ref),nl,
nl,write(" Наименование : ",P_tovar, " Стоимость: ",P_price," Количество: ",P_kolvo),
nl,fail,
readchar(_).
process(4):-
nl,!,
readchar(_),
removewindow.
process(7):-
write("Закончить работу с программой? (д/н)"),
readln(Answer),
frontchar(Answer,'д',_), !,
db_flush(xdb),
db_close(xdb).
process(6):-
db_delete("xdata.db", in_file),
db_create(xdb, "xdata.db", in_file),
makewindow(8,7,7,"База данных создана!",12, 20, 7, 40),nl,
shiftwindow(8),
write("Нажмите пробел"),
readchar(_),
removewindow.
process(5):-
db_open(xdb, "xdata.db", in_file),
makewindow(9,7,7,"База данных успешно загружена!",10,30,7,40),nl,
shiftwindow(9),
write("Нажмите пробел"),
readchar(_),
removewindow.
process(Choice):-
Choice<1,error.
process(Choice):-
Choice>7,error.
error:-
write("Укажите число от 1 до 7."),
write("(Нажмите пробел для продолжения )"),
readchar(_).
6. Результат работы программы
6.1 При запуске программы на экран выводится главная форма (рис 1).
Рисунок 1
6.2 Пункт меню «Занесение новой информации о товаре» отображает форму изображенную на рисунке 2.
Рисунок 2
6.3 Пункт меню «Удаление информации» отображает форму изображенную на рисунке 3.
Рисунок 3
6.4 Пункт меню «Редактирование записи» отображает форму изображенную на рисунке 4.
Рисунок 4
6.5 Пункт меню «Просмотр содержимого базы данных» отображает форму изображенную на рисунке 5.
Рисунок 5
6.6 Пункт меню «Создать базу» отображает форму изображенную на рисунке 6.
Рисунок 6
6.7 Пункт меню «Выход из программы» отображает форму изображенную на рисунке 7.
Рисунок 7
7. Список используемой литературы
1. Адаменко А., Кучуков А. «Логическое программирование и Turbo Prolog:»: учебно-методическое пособие - Изд-во БХВ-Петербург, 2003. - 109 с.
2. Стерлинг Л., Шапиро Э. «Искусство программирования на языке Пролог »: Изд-во МИР, 1990. – 256с.
3. Малпас Дж. «Реляционный язык Пролог и его применение » - Изд-во Наука, 1990. – 158с.