Задание№ 11
на курсовоепроектирование
по дисциплине“Логическоепрограммирование”
студентуПакостинойАлександреВикторовне.
Группа ИР-1-95.
Темаисследования:“Разработкаинформационно- справочнойсистемы”.
Исходныеданные:База данныхBD,включающаязаписи вида:
Характеристикадетали | |||||||||||||||||||
№ | Местохранения | Название | Цена | Датапоступления | |||||||||||||||
артикула | № цеха | №склада | детали | руб | коп | год | месяц | число | |||||||||||
Языкпрограммирования:Пролог.
Переченьвопросов, подлежащихразработке:
Разработатьменю, обеспечивающеевзаимодействиепользователяс системой, всоответствиис заданием,предусмотреврежимы:
Разработатьпроцедуры:
уничтожениязаписей попризнакам;
загрузки;
сохранения;
просмотра;
уничтожения;
3.3.Предусмотретьсоздание избазы BDновых баз данныхB1,B2,характеризуемыхпризнаками,задаваемымипользователем.
Переченьграфическихматериалов:
4.1.Структурнаясхема меню:
Структурнаясхема программы:
Календарныйплан работынад курсовойработой:
Получениезадания: 4.10.96.
Анализзадания, постановказадачи, подбори изучениелитературы:18.10.96.
Разработкаменю и структурыпрограммы:25.10.96.
Разработкапроцедуринформационно-справочнойсистемы: 15.11.96.
Отладкапрограммы:29.11.96.
Оформлениепояснительнойзаписки и сдачаработы на правку:13.12.96.
Защитакурсовой работы:20.12.96.
Руководитель:Холкин И.И.____________
Студент:Пакостина А.В.____________
Описание
Понятиеоб информационно-справочныхсистемах и ихпрограммнаяреализация.
Информационно-справочныесистемы предназначеныдля управленияразличнымиинформационнымии справочнымимассивами, вчисло которыхвходят и базыданных. Этисистемы организовываютопределенныйинтерфейспользователяс функциямиобработкиинформациисамой системы.Набор возможностейтаких системобычно включаетв себя коррекциюструктурыиспользуемогообъекта (инкапсулирующегоинформацию),работа с егосоставляющими- дополнение,редактирование,удаление (вслучае, когдароль такогообъекта выполняетбаза данных,это - записи),простой просмотр,поиск элементов.Также необходимообеспечитьдля такой системыи функциипостоянногонадежногохранения - впростейшемслучае, это -запись базыиз памяти вфайл на дискеи считываниеоного с дискав память.
Программнаяреализациямало отличаетсяот подобнойконцепции, ноконкретизируетабстрактныеоперации вконкретныепроцедуры ифункции (илиже объекты) изависит полностьюот возможностейязыка, поставленнойзадачи и искусствапрограммиста.
Базыданных и способыих представления.
Общаяконцепциятеории простыхбаз данныхподразумеваетналичие некоторогомножестватаблиц и являющихся,собственно,базой данных,имеющей определенныйидентификатор(имя). Каждаятаблица состоитиз n-гоколичествазаписей (величинаnзависит отвозможностейконкретнойсистемы), каждаяиз которыхимеет одну иту же структуру(в рамках однойтаблицы) и можетобъединятьв себе несколькоразнородныхобъектов (ихколичествотакже зависитцеликом и полностьюот возможностейсистемы).
Работас базой данныхпредполагаетв себе возможностьработать сзаписями (либоизменять структурутаблиц).
В языкепрограммированияПролог базаданных описываетсяв отдельномразделе, именуемомdatabase.Таких разделовможет бытьнесколько водной программеи каждый изних, если онидействительнопредставляютсобой разныеБД, должны иметьразные имена.В случае отсутствияимени у базыданных, ей даетсяимя по умолчанию- dbasedom.
Работус загружаемымибазами данныхв Прологе реализуютследующиестандартныепредикаты:assert- добавить записьв БД, retract-удалить указаннуюзапись, save- сохранитьуказанную БДв файле, consult- загрузить БДиз файла в память.
Вданной работеобъявленаглавная базаданных bd,имеющая предикатcharacteristick,и две временныебазы b1,b2 спредикатамиtable1,table2.
Разработкасистемногоменю.
Системноеменю объединяетв себе доступко всем процедураминформационно- справочнойсистемы. Разработкаменю отталкиваетсяот имеющихсяфункций системы(предикатов).Посколькуобъявлен предикатdo(char),служащий буфероммежду системнымменю и существующимипроцедурами,он имеет в себелибо подменюс выбором режимовработы имеющихсяпредикатов,либо их вызовс последующимвозвратом всистемноеменю:
+--------------Системное меню--------------+
¦ Выберите вариантработы с базамиданных: ¦
¦ ¦
¦ 1 :- Загрузить ¦
¦ 2 :- Сохранить ¦
¦ 3 :- Просмотреть ¦
¦ 4 :- Скорректировать ¦
¦ 5 :- Удалить записьпо признакам ¦
¦ 6 :- Создать попризнакам ¦
¦ 7 :- Добавить ¦
¦ 8 :- Выход в ДОС ¦
¦ ¦
¦ ------------------| |------------------ ¦
+--------------------------------------------+
Разработкаструктурыпрограммы.
Системноеменю вызываеттолько предикатыdo(),определенныедля каждой изнеобходимыхзадач (номеррежим полностьюсовпадает снумерациейв главном меню).Каждая из реализацийэтого предикатавыводит меню,либо сразувызываетсоответствующиепроцедуры:open,store, adding, correct, see, del, indication.ПроцедураIndicationвыводит дополнительноеподменю и вызываетлибо IndicationB1,либоIndicationB2в зависимостиот выборапользователя.Do(‘8’)завершаетработу с системой.
Разработкапроцедур:
Загрузкабазы данных(Open).
Вdo(‘1’)имеется меню:
+---------Загрузить--------+
¦ Куда загрузить? ¦
¦ ¦
¦ 1 :- В bd ¦
¦ 2 :- В b1 ¦
¦ 3 :- В b2 ¦
¦ 4 :- Меню ¦
¦ ¦
¦ ------| |------ ¦
+----------------------------+
процедураOpenимеет четыререализации,для каждогоиз вариантовработы. Длялюбого случаяперед загрузкойбазы данныхпроверяетсясуществованиефайла с введеннымименем (предикатexists).Для загрузкибазы данныхиспользуетсястандартныйпредикат consult.При вызовеOpen(‘1’)загрузкапроизводитсяв базу bd,при вызовеOpen(‘2’)вбазу b1,при вызовеOpen(‘3’)-вb2.
Сохранение(Store).
Вdo(‘2’)меню:
+---------Сохранить--------+
¦ Что сохранить? ¦
¦ ¦
¦ 1 :- bd ¦
¦ 2 :- b1 ¦
¦ 3 :- b2 ¦
¦ 4 :- Меню ¦
¦ ¦
¦ ------| |------ ¦
+----------------------------+
Существуютпредикаты длязаписи главнойбазы и двухвременных.Используетсястандартныйпредикат save,записывающийв текстовыйфайл факты,связанные сданной БД.
Просмотр(See).
Вdo(‘3’)меню:
+--------Просмотреть-------+
¦ Что просмотреть? ¦
¦ ¦
¦ 1 :- bd ¦
¦ 2 :- b1 ¦
¦ 3 :- b2 ¦
¦ 4 :- Меню ¦
¦ ¦
¦ ------| |------ ¦
+----------------------------+
ПредложенияSee(‘1’)иSee(‘2’)создают новыеокна и выводятв них найденныезаписи. Послекаждой выведеннойзаписи запрашиваетсянажатие клавиши,затем повторяетсяпоиск с помошьюстандартногопредиката Failили происходитвыход из предикатав системноеменю.
Добавление(Adding).
Данныйпредикат былдобавлен впрограмму попричине облегченияработы с ней,хоть и в заданииего не было.
Вэтой процедуреиспользуетсяопределеннаяв этой же программепроцедура Get,запрашивающаяс клавиатурызначения дляновой записив главной базеданных и стандартнаяпроцедураassert,добавляющаяновый факт вбазу данных.
Корректировка(Correct).
Вданной программесуществуетдва вариантакорректировки- редактированиезаписи, найденнойпо номеру артикулаи найденнойпо названиюдетали. В каждойиз версий предикатавначале запрашиваетсяномер артикула(или название)изменяемойзаписи, поиски вывод на экран,затем происходитввод новыхзначений полей,подтверждаютсясделанныеизменения,удаляетсястарый факт(retract)и добавляетсявновь сформированный(assert).
Созданиябазы по признакам(Indication).
Indication(‘1’)создаетбазу b1,а Indication(‘2’)- базу b2.Для каждойбазы существуетотдельныйпредикат -IndicationB1иIndicationB2.Существуютвозможностисоздания такихбаз по следующимпризнакам: поместу хранения,по цене, по датепоступления.В каждом извариантовпроизводитсязапрос на несколькопараметровсразу и поискфактов, отвечающихэтим требованиям.При успешномпоиске, найденныйфакт добавляетсяв базу b1илиb2.
Удалениезаписи по признакам(Del).
Признакамидля удаляемойзаписи могутслужить номерартикула, название,а также возможноуничтожитьиз памяти всюбазу данных.Вовсех вариантахиспользуетсяпроцедураудаления записиretract.
6.Листинг.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% ПакостинаАлександра. %
% ИР-1-95. %
% Задание 11. %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
domains
artikul= integer
cex,sklad = integer
name= string
rubley,kopeek = integer
year,month, day = integer
placedom= place(cex, sklad)
pricedom= price(rubley, kopeek)
datedom= date(year, month, day)
database- bd
characteristick(artikul,placedom, name, pricedom, datedom)
database- b1
table1(artikul,placedom, name, pricedom, datedom)
database- b2
table2(artikul,placedom, name, pricedom, datedom)
predicates
windows
go
do(char)
open(char)
store(char)
adding
correct(char)
indication(char)
indicationB1(char)
indicationB2(char)
see(char)
del(char)
exists(string)
show(artikul,placedom, name, pricedom, datedom)
get(artikul,placedom, name, pricedom, datedom)
goal
windows,go.
clauses
characteristick(1,place(5,6),"Gayka",price(0,45),date(1996,1,4)).
characteristick(2,place(6,7),"Vint",price(0,65),date(1996,2,45)).
windows:-
makewindow(1,52,0,"",24,0,1,80),
write("ПакостинаАлександра."),
makewindow(2,52,0,"",0,0,1,80),
write(" Системауправлениябазой данных\"Характеристикадетали\""),
makewindow(3,112,1,"Системное меню",2,17,14,46),
nl,write(" Выберитевариант работыс базами данных:"),nl,
nl,write(" 1 :- Загрузить"),
nl,write(" 2 :- Сохранить"),
nl,write(" 3 :- Просмотреть"),
nl,write(" 4 :- Скорректировать"),
nl,write(" 5 :- Удалитьзапись попризнакам"),
nl,write(" 6 :- Создатьпо признакам"),
nl,write(" 7 :- Добавить"),
nl,write(" 8 :- Выход вДОС"), nl,
nl,write(" ------------------| |------------------"),
framewindow(126).
go:-
gotowindow(3),cursor(11,21),
readchar(X),do(X).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
do('1'):-
makewindow(4,18,1,"Загрузить",5,25,10,30),
framewindow(19),
nl,write(" Куда загрузить?"), nl,
nl,write(" 1 :- В bd"),
nl,write(" 2 :- В b1"),
nl,write(" 3 :- В b2"),
nl,write(" 4 :- Меню"), nl,
nl,write(" ------| |------"),
cursor(7,13),readchar(X), open(X),
removewindow,go, !.
do('2'):-
makewindow(4,18,1,"Сохранить",5,25,10,30),
framewindow(19),
nl,write(" Что сохранить?"), nl,
nl,write(" 1 :- bd"),
nl,write(" 2 :- b1"),
nl,write(" 3 :- b2"),
nl,write(" 4 :- Меню"), nl,
nl,write(" ------| |------"),
cursor(7,13),readchar(X), store(X),
removewindow,go, !.
do('3'):-
makewindow(4,18,1,"Просмотреть",5,25,10,30),
framewindow(19),
write(" Что просмотреть?"), nl,
nl,write(" 1 :- bd"),
nl,write(" 2 :- b1"),
nl,write(" 3 :- b2"),
nl,write(" 4 :- Меню"), nl,
nl,write(" ------| |------"),
cursor(7,13),readchar(X), see(X),
removewindow,go, !.
do('4'):-
makewindow(4,18,1,"Корректировка",5,25,9,30),
framewindow(19),
write("Способ нахождениязаписи: "), nl,
nl,write(" 1 :- по номеруартикула"),
nl,write(" 2 :- по названию"),
nl,write(" 3 :- Меню"), nl,
nl,write(" ------| |------"),
cursor(6,13),readchar(X), correct(X),
removewindow,go, !.
do('5'):-
makewindow(4,18,1,"Удаление записипо признаку",5,25,10,30),
framewindow(19),
write(" Введите признак:"),nl,
nl,write(" 1 :- По артикулу"),
nl,write(" 2 :- По названию"),
nl,write(" 3 :- Удалитьвсю базу"),
nl,write(" 4 :- Меню"), nl,
nl,write(" ------| |------"),
cursor(7,13),readchar(X), del(X),
removewindow,go, !.
do('6'):-
makewindow(4,18,1,"Создать базупо признаку",5,25,9,30),
framewindow(19),
write(" Какую базусоздать ?"), nl,
nl,write(" 1 :- B1"),
nl,write(" 2 :- B2"),
nl,write(" 3 :- Меню"), nl,
nl,write(" ------| |------"),
cursor(6,13),readchar(X), indication(X),
removewindow,go, !.
do('7'):-
makewindow(4,18,1,"Добавить записьк главной базе",7,10,13,60),
framewindow(19),adding,
removewindow,go, !.
do('8'):-
makewindow(4,95,1,"Запрос",10,29,5,22),nl,
framewindow(94),
write(" Выйти ? (Yes/No)"), readchar(X),
X='y',exit;
removewindow,go, !.
do(_):-
makewindow(4,76,1,"Ошибка",8,29,5,22),
framewindow(75),nl,
write("Выберите изменю"), readchar(_),
removewindow,go.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
open('1'):-
makewindow(5,95,1,"Загрузкаbd",7,20,10,40),
framewindow(94),nl,
write("Имя файла : "),readln(FN),
exists(FN),consult(FN, bd),
nl,write(" Загружено"),readchar(_), removewindow, !.
open('2'):-
makewindow(5,95,1,"Загрузкаb1",7,20,10,40),
framewindow(94),nl,
write("Имя файла : "),readln(FN),
exists(FN),consult(FN, b1),
nl,write(" Загружено"),readchar(_), removewindow, !.
open('3'):-
makewindow(5,95,1,"Загрузкаb2",7,20,10,40),
framewindow(94),nl,
write("Имя файла : "),readln(FN),
exists(FN),consult(FN, b2),
nl,write(" Загружено"),readchar(_), removewindow, !.
open('4'):-
!.
open(_):-
makewindow(5,76,1,"Ошибка",8,29,5,22),
framewindow(75),nl,
write("Выберите изменю"), readchar(_),
removewindow,removewindow, do('1').
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
store('1'):-
makewindow(5,95,1,"Сохранениеbd",7,20,10,40),
framewindow(94),nl,
write("Имя файла : "),readln(FN), save(FN, bd),
nl,write(" Сохранено"),readchar(_), removewindow, !.
store('2'):-
makewindow(5,95,1,"Сохранениеb1",7,20,10,40),
framewindow(94),nl,
write("Имя файла : "),
readln(FN),save(FN, b1),
nl,write(" Сохранено"),readchar(_), removewindow, !.
store('3'):-
makewindow(5,95,1,"Сохранениеb2",7,20,10,40),
framewindow(94),nl,
write("Имя файла : "),
readln(FN),save(FN, b2),
nl,write(" Сохранено"),readchar(_), removewindow, !.
store('4'):-
!.
store(_):-
makewindow(5,76,1,"Ошибка",8,29,5,22),
framewindow(75),nl,
write("Выберите изменю"), readchar(_),
removewindow,removewindow, do('2').
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
see('1'):-
makewindow(5,95,1,"Просмотр bd",7,10,9,60),
framewindow(94),nl,
characteristick(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),
show(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),
nl,nl,write("НажмитеENTER для продолжения..."),
readchar(_),nl, fail.
see('1'):-
removewindow,removewindow, do('3'), !.
see('2'):-
makewindow(5,95,1,"Просмотр b1",7,10,9,60),
framewindow(94),nl,
table1(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),
show(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),
nl,nl,write("НажмитеENTER для продолжения..."),
readchar(_),nl, fail.
see('2'):-
removewindow,removewindow, do('3'), !.
see('3'):-
makewindow(5,95,1,"Просмотр b2",7,10,9,60),
framewindow(94),nl,
table2(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),
show(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),
nl,nl,write("НажмитеENTER для продолжения..."),
readchar(_),nl, fail.
see('3'):-
removewindow,removewindow, do('3'), !.
see('4'):-
!.
see(_):-
makewindow(5,76,1,"Ошибка",8,29,5,22),
framewindow(75),nl,
write("Выберите изменю"), readchar(_),
removewindow,removewindow, do('3').
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
correct('1'):-
makewindow(5,95,1,"Корректировказаписи, найденнойпо артикулу",7,10,13,60),
framewindow(94),
write("Номерартикула: "),readint(X),
characteristick(X,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),
nl,write("Старая запись:"),nl, nl,
show(X,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),nl, nl,
write("Введитеновый вариант:"),nl, nl,
get(ArtD,place(NCD,NSD),NameD,price(RubD,KopD),date(YearD,MonD,DayD)),nl,
clearwindow,
retract(characteristick(X,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day))),
assert(characteristick(ArtD,place(NCD,NSD),NameD,price(RubD,KopD),date(YearD,MonD,DayD))),
removewindow,removewindow, do('4'), !.
correct('1'):-
removewindow,removewindow, do('4'), !.
correct('2'):-
makewindow(5,95,1,"Корректировказаписи, найденнойпо названию",7,10,13,60),
framewindow(94),
write("Название:"), readln(X),
characteristick(Art,place(NC,NS),X,price(Rub,Kop),date(Year,Mon,Day)),
nl,write("Старая запись:"),nl, nl,
show(Art,place(NC,NS),X,price(Rub,Kop),date(Year,Mon,Day)),nl, nl,
write("Введитеновый вариант:"),nl, nl,
get(ArtD,place(NCD,NSD),NameD,price(RubD,KopD),date(YearD,MonD,DayD)),nl,
clearwindow,
retract(characteristick(Art,place(NC,NS),X,price(Rub,Kop),date(Year,Mon,Day))),
assert(characteristick(ArtD,place(NCD,NSD),NameD,price(RubD,KopD),date(YearD,MonD,DayD))),
removewindow,removewindow, do('4'), !.
correct('2'):-
removewindow,removewindow, do('4'), !.
correct('3'):-
!.
correct(_):-
makewindow(5,76,1,"Ошибка",8,29,5,22),
framewindow(75),nl,
write("Выберите изменю"), readchar(_),
removewindow,removewindow, do('4').
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
del('1'):-
makewindow(5,95,1,"Удаление поартикулу",7,20,10,40),
framewindow(94),
write("Номер артикула:"), readint(X),
retract(characteristick(X,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day))),nl,
write("Готово."), readchar(_),
removewindow,removewindow,do('5'), !.
del('1'):-
makewindow(6,76,1,"Ошибка",8,29,5,22),
framewindow(75),nl,
write("Запись не найдена."),readchar(_),
removewindow,removewindow, removewindow, do('5').
del('2'):-
makewindow(5,95,1,"Удаление поназванию",7,20,10,40),
framewindow(94),
write("Название: "),readln(X),
retract(characteristick(Art,place(NC,NS),X,price(Rub,Kop),date(Year,Mon,Day))),nl,
write("Готово."), readchar(_),
removewindow,removewindow,do('5'), !.
del('2'):-
makewindow(6,76,1,"Ошибка",8,29,5,22),
framewindow(75),nl,
write("Запись не найдена."),readchar(_),
removewindow,removewindow, removewindow, do('5').
del('3'):-
makewindow(5,95,1,"Удаление всейбазы ",7,20,10,40),
framewindow(94),
retract(characteristick(_,place(_,_),_,price(_,_),date(_,_,_))),
fail.
del('3'):-
write("База удалена."),readchar(_),
removewindow,removewindow,do('5'), !.
del('4'):-
!.
del('_'):-
makewindow(5,76,1,"Ошибка",8,29,5,22),
framewindow(75),nl,
write("Выберите изменю"), readchar(_),
removewindow,removewindow, do('5').
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
indication('1'):-
makewindow(5,18,1,"Создать базуB1 по признаку",8,25,10,30),
framewindow(19),
write(" Введите признак:"),nl,
nl,write(" 1 :- По местухранения"),
nl,write(" 2 :- По цене"),
nl,write(" 3 :- По датепоступления"),
nl,write(" 4 :- Меню"), nl,
nl,write(" ------| |------"),
cursor(7,13),readchar(X), indicationB1(X),
removewindow,removewindow, do('6'), !.
indication('2'):-
makewindow(5,18,1,"Создать базуB2 по признаку",8,25,10,30),
framewindow(19),
write(" Введите признак:"),nl,
nl,write(" 1 :- По местухранения"),
nl,write(" 2 :- По цене"),
nl,write(" 3 :- По датепоступления"),
nl,write(" 4 :- Меню"), nl,
nl,write(" ------| |------"),
cursor(7,13),readchar(X), indicationB2(X),
removewindow,removewindow, do('6'), !.
indication('3'):-
!.
indication(_):-
makewindow(5,76,1,"Ошибка",8,29,5,22),
framewindow(75),nl,
write("Выберите изменю"), readchar(_),
removewindow,removewindow, do('6').
indicationB1('1'):-
makewindow(6,95,1,"Создание базыB1 по месту хранения",7,20,10,40),
framewindow(94),nl,
write("Номер цеха: "),readint(X),
write("Номер склада:"), readint(Y),
characteristick(Art,place(X,Y),Name,price(Rub,Kop),date(Year,Mon,Day)),
assert(table1(Art,place(X,Y),Name,price(Rub,Kop),date(Year,Mon,Day))),
fail.
indicationB1('1'):-
removewindow,removewindow, indication('1').
indicationB1('2'):-
makewindow(6,95,1,"Создание базыB1 по цене ",7,20,10,40),
framewindow(94),nl,
write("Рублей: "), readint(X),
write("Копеек: "), readint(Y),
characteristick(Art,place(NC,NS),Name,price(X,Y),date(Year,Mon,Day)),
assert(table1(Art,place(NC,NS),Name,price(X,Y),date(Year,Mon,Day))),
fail.
indicationB1('2'):-
removewindow,removewindow, indication('1').
indicationB1('3'):-
makewindow(6,95,1,"Создание базыB1 по дате поступления",7,20,10,40),
framewindow(94),nl,
write("Год: "), readint(X),
write("Месяц: "), readint(Y),
write("День: "), readint(Z),
characteristick(Art,place(NC,NS),Name,price(Rub,Kop),date(X,Y,Z)),
assert(table1(Art,place(NC,NS),Name,price(Rub,Kop),date(X,Y,Z))),
fail.
indicationB1('3'):-
removewindow,removewindow, indication('1').
indicationB1('4'):-
!.
indicationB1(_):-
makewindow(6,76,1,"Ошибка",8,29,5,22),
framewindow(75),nl,
write("Выберите изменю"), readchar(_),
removewindow,removewindow, indication('1').
indicationB2('1'):-
makewindow(6,95,1,"Создание базыB2 по месту хранения",7,20,10,40),
framewindow(94),nl,
write("Номер цеха: "),readint(X),
write("Номер склада:"), readint(Y),
characteristick(Art,place(X,Y),Name,price(Rub,Kop),date(Year,Mon,Day)),
assert(table2(Art,place(X,Y),Name,price(Rub,Kop),date(Year,Mon,Day))),
fail.
indicationB2('1'):-
removewindow,removewindow, indication('2').
indicationB2('2'):-
makewindow(6,95,1,"Создание базыB2 по цене ",7,20,10,40),
framewindow(94),nl,
write("Рублей: "), readint(X),
write("Копеек: "), readint(Y),
characteristick(Art,place(NC,NS),Name,price(X,Y),date(Year,Mon,Day)),
assert(table2(Art,place(NC,NS),Name,price(X,Y),date(Year,Mon,Day))),
fail.
indicationB2('2'):-
removewindow,removewindow, indication('2').
indicationB2('3'):-
makewindow(6,95,1,"Создание базыB2 по дате поступления",7,20,10,40),
framewindow(94),nl,
write("Год: "), readint(X),
write("Месяц: "), readint(Y),
write("День: "), readint(Z),
characteristick(Art,place(NC,NS),Name,price(Rub,Kop),date(X,Y,Z)),
assert(table2(Art,place(NC,NS),Name,price(Rub,Kop),date(X,Y,Z))),
fail.
indicationB2('3'):-
removewindow,removewindow, indication('2').
indicationB2('4'):-
!.
indicationB2(_):-
makewindow(6,76,1,"Ошибка",8,29,5,22),
framewindow(75),nl,
write("Выберите изменю"), readchar(_),
removewindow,removewindow, indication('2').
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
adding:-
get(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)),
nl,write(" Вы ввели :"),
nl,show(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)), nl,
nl,write(" Добавить? (Yes/No)"), readchar(A),
A='y',
assert(characteristick(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)));
!.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
exists(FN):-
existfile(FN);
makewindow(6,76,1,"Ошибка",10,25,5,30),nl,
framewindow(75),
write("Файл ",FN," ненайден!"),
readchar(_),removewindow,
removewindow,removewindow, do('1').
show(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)):-
write("Артикул : ",Art),
nl,write(" Местоположение(Цех, Склад) :",NC,", ",NS),
nl,write(" Наименованиетовара : ",Name),
nl,write(" Стоимость(Рублей:Копеек) : ",Rub,":",Kop),
nl,write(" Дата поступления(Год-Месяц-День): ",Year,"-",Mon,"-",Day).
get(Art,place(NC,NS),Name,price(Rub,Kop),date(Year,Mon,Day)):-
write("Артикул : "), readint(Art),
write("Местоположение : "), nl,
write(" Цех : "),readint(NC),
write(" Склад : "),readint(NS),
write("Наименованиетовара : "),readln(Name),
write("Стоимость : "), nl,
write(" Рублей : "), readint(Rub),
write(" Копеек : "), readint(Kop),
write("Дата поступления : "), nl,
write(" Год : "),readint(Year),
write(" Месяц : "),readint(Mon),
write(" День : "),readint(Day).
Отладкапрограммы.
ОткрытиеБД.
+--------------Системное меню--------------+
¦ Выберите вариантработы с базамиданных: ¦
¦ 1 :-+--------- Загрузить--------+ ¦
¦ 2 :-¦ Куда загрузить? ¦ ¦
¦ +--------------Загрузкаbd-------------+ ¦
¦ ¦ ¦ ¦
¦ ¦ Имя файла: data ¦ ¦
¦ ¦ ¦ ¦
¦ ¦ Загружено ¦ ¦
+--¦ ¦--+
+--------------------------------------+
СохранениеБД.
+--------------Системное меню--------------+
¦ Выберите вариантработы с базамиданных: ¦
¦ ¦
¦ 1 :-+--------- Сохранить--------+ ¦
¦ 2 :-¦ Что сохранить? ¦ ¦
¦ +-------------Сохранениеb2------------+ ¦
¦ ¦ ¦ ¦
¦ ¦ Имя файла: data2 ¦ ¦
¦ ¦ ¦ ¦
¦ ¦ Сохранено ¦ ¦
+--¦ ¦--+
+--------------------------------------+
Просмотр.
+--------------Системное меню--------------+
¦ Выберите вариантработы с базамиданных: ¦
¦ ¦
¦ 1 :-+-------- Просмотреть-------+ ¦
¦ 2 :-¦ Что просмотреть? ¦ ¦
+-----------------------Просмотр bd----------------------+
¦Артикул : 2 ¦
¦Местоположение(Цех, Склад) :6, 7 ¦
¦Наименованиетовара : Vint ¦
¦Стоимость(Рублей:Копеек) : 0:65 ¦
¦Дата поступления(Год-Месяц-День): 1996-2-45 ¦
¦ ¦
¦НажмитеENTER для продолжения... ¦
+----------------------------------------------------------+
Корректировка.
+--------------Системное меню--------------+
¦ Выберите вариантработы с базамиданных: ¦
¦ ¦
¦ 1 :-+------- Корректировка------+ ¦
¦ 2 :-¦ Способ нахождениязаписи: ¦ ¦
+-------Корректировказаписи, найденнойпо названию------+
¦Стараязапись: ¦
¦ ¦
¦Артикул : 1 ¦
¦Местоположение(Цех, Склад) :5, 6 ¦
¦Наименованиетовара : Gayka ¦
¦Стоимость(Рублей:Копеек) : 0:45 ¦
¦Дата поступления(Год-Месяц-День): 1996-1-4 ¦
¦ ¦
¦Введитеновый вариант: ¦
¦ ¦
¦Артикул : ¦
+----------------------------------------------------------+
Удаление.
+--------------Системное меню--------------+
¦ Выберите вариантработы с базамиданных: ¦
¦ ¦
¦ 1 :-+ Удалениезаписи по признаку+ ¦
¦ 2 :-¦ Введитепризнак: ¦ ¦
¦ +-------- Удалениепо артикулу--------+ ¦
¦ ¦ Номер артикула:1 ¦ ¦
¦ ¦ ¦ ¦
¦ ¦ Готово. ¦ ¦
+--¦ ¦--+
+--------------------------------------+
Созданиепо признакам.
+--------------Системное меню--------------+
¦ Выберите вариантработы с базамиданных: ¦
¦ ¦
¦ 1 :-+- Создать базупо признаку-+ ¦
¦ 2 :-¦ Какую базусоздать ? ¦ ¦
¦ +------ Созданиебазы B1 по цене------+ ¦
¦ ¦ ¦ ¦
¦ ¦ Рублей: 0 ¦ ¦
¦ ¦ Копеек: 45 ¦ ¦
+--¦ ¦--+
+--------------------------------------+
+----------------------------+
Добавление.
+--------------Системное меню--------------+
¦ Выберите вариантработы с базамиданных: ¦
¦ ¦
¦ 1 :- Загрузить ¦
¦ 2 :- Сохранить ¦
+-------------Добавить записьк главной базе-------------+
¦Местоположение : ¦
¦ Цех : 5 ¦
¦ Склад : 6 ¦
¦Наименованиетовара : Shayba ¦
¦Стоимость : ¦
¦ Рублей : 1 ¦
¦ Копеек : 2 ¦
¦Дата поступления : ¦
¦ Год : 1996 ¦
¦ Месяц : 23 ¦
¦ День : 3 ¦
+----------------------------------------------------------+
Инструкцияпользователяи решениеконтрольныхпримеров.
Решениеконтрольныхпримеровосновываетсяна том, что былосделано в отладкепрограммы иможет бытьизучено повышестоящейчасти (7.).
Дляработы с программойнеобходимовыбирать изпредлагаемыхменю пунктыпутем нажатияна соответствующиецифры. Припоявленииподменю повторитьоперацию, призапросе наимя файла - ввестистроку, определяющуюимя файла, призапросе насимвол, нажатьсоответствующуюклавишу наклавиатуре(не забывайте,пожалуйстаоб языковойраскладкеклавиатурыи состоянииклавиши CAPSLOCK).Также в несколькихпроцедурахпроизводитсяподтверждение(Yes/No- Да/Нет)- необходимопереключитьсяна английскуюраскладку инажать соответствующуюклавишу в нижнемрегистре.
Заключение.
ЯзыкпрограммированияПролог безусловноможет бытьиспользовандля написанияподобныхинформационно-справочныхсистем, таккак он позволяетлегко и быстросоздаватьлогическиезапросы к базамданных, чтобезусловновыделяет егосреди остальныхязыков программирования.
Списоклитературы.
1.К.Кларк.“Введениев логическоепрограммированиена MicroProloge”.
2.К.Хоггер.“Введениев логическоепрограммирование”.
ГОСУДАРСТВЕННЫЙКОМИТЕТ РОССИЙСКОЙФЕДЕРАЦИИ
ПОВЫСШЕМУ ОБРАЗОВАНИЮ
МОСКОВСКИЙГОСУДАРСТВЕННЫЙ ИНСТИТУТ
РАДИОТЕХНИКИ,ЭЛЕКТРОНИКИИ АВТОМАТИКИ
( ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)
ФакультетКибернетики.
Кафедраинтеллектуальных
технологийи систем.
Курсоваяработа.
Тема:“Разработкаинформационно- справочнойсистемы”
по дисциплине“Логическоепрограммирование”.
(IIIсеместр)
Задание: 11 Студент: ПакостинаАлександра Группа: ИР-1-95 Руководитель: доценткафедры ХолкинИгорь Иванович |
1996