
5 Приложение
5.1 Листинг задачи внутренней базы данных
domains
p_name=string
p_price,p_am=real
database magazin
dsprav(p_name,p_price,p_am)
predicates
repeat
do_mbase
assert_database
clear_database
menu
process(integer)
sprav(p_name,p_price,p_am)
error
goal
do_mbase.
clauses
repeat.
repeat:- repeat.
sprav("Хлеб",18.0,20.0).
sprav("Конфеты",80.0,3.0).
assert_database:-
sprav(P_name,P_price,P_am),
assertz(dsprav(P_name,P_price,P_am)),fail.
assert_database:-!.
clear_database :-
retract(dsprav(_,_,_)),
fail.
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(" * *"),nl,
write(" * * * * * * * * * * * * * * * * * * * * * * * * * * * *"),nl,
nl,
write(" Выберите номер пункта меню: 1, 2, 3, 4 или 5 : "),
readint(Choice),nl,
process(Choice),
Choice = 5,
!.
process(1):-
makewindow(2,7,7,"Добавить данные в базу",2,20,18,58),
shiftwindow(2),
write("Товар: "),
readln(P_name),
write("Стоимость: "),
readreal(P_price),
write("Количество: "),
readreal(P_am),
assertz(dsprav(P_name,P_price,P_am)),
write(P_name," помещен в базу данных."),
nl,!,
write("Нажмите пробел. "),
readchar(_),
removewindow.
process(2):-
makewindow(3,7,7,"Удаление из базы",10,30,7,40),
shiftwindow(3),
write("Задайте название товара: "),
readln(P_name),
retract(dsprav(P_name,_,_)),
write(P_name," успешно удален из базы"), nl, !,
write("Нажмите пробел."),
readchar(_),
removewindow.
process(3):-
makewindow(4,7,7," Просмотр информации по товару ",0,0,25,80),
shiftwindow(4),
write("Задайте наименование товара: "),
readln(P_name),
dsprav(P_name,P_price,P_am),nl,
nl,write(" Товар: ",P_name, " Стоимость: ",P_price, "Количество: ",P_am),
nl,!,
nl,write("Нажмите пробел"),
readchar(_),
removewindow.
process(3):-
makewindow(5,7,7," Ошибка ",14,7,5,60),
shiftwindow(5),
write("Такого товара нет в базе данных ."),nl,
nl,!,
write("Нажмите пробел."),
readchar(_),
removewindow,
shiftwindow(1).
process(4):-
makewindow(6,7,7,"Просмотр содержимого базы данных ",0,0,25,80),
shiftwindow(6),
dsprav(P_name,P_price,P_am),nl,
nl,write(" Товар : ",P_name, " Стоимость: ",P_price," Количество: ",P_am),
nl,fail,
readchar(_).
process(4):-
nl,!,
readchar(_),
removewindow.
process(5):-
write("Закончить работу с программой? (д/н)"),
readln(Answer),
frontchar(Answer,'д',_), !.
process(Choice):-
Choice<1,error.
process(Choice):-
Choice>5,error.
error:-
write("Укажите число от 1 до 5."),
write("(Нажмите пробел для продолжения )"),
readchar(_).