Смекни!
smekni.com

Разработка информационно-справочной системы

Задание№ 11

на курсовоепроектирование

по дисциплине“Логическоепрограммирование”

студентуПакостинойАлександреВикторовне.

Группа ИР-1-95.


  1. Темаисследования:“Разработкаинформационно- справочнойсистемы”.

  2. Исходныеданные:База данныхBD,включающаязаписи вида:


Характеристикадетали










Местохранения

Название

Цена

Датапоступления





артикула

№ цеха

№склада

детали

руб

коп

год

месяц

число













Языкпрограммирования:Пролог.

  1. Переченьвопросов, подлежащихразработке:

  2. Разработатьменю, обеспечивающеевзаимодействиепользователяс системой, всоответствиис заданием,предусмотреврежимы:

  3. Разработатьпроцедуры:

  • уничтожениязаписей попризнакам;

  • загрузки;

  • сохранения;

  • просмотра;

  • уничтожения;

3.3.Предусмотретьсоздание избазы BDновых баз данныхB1,B2,характеризуемыхпризнаками,задаваемымипользователем.

  1. Переченьграфическихматериалов:
    4.1.Структурнаясхема меню:

  2. Структурнаясхема программы:




  1. Календарныйплан работынад курсовойработой:

  2. Получениезадания: 4.10.96.

  3. Анализзадания, постановказадачи, подбори изучениелитературы:18.10.96.

  4. Разработкаменю и структурыпрограммы:25.10.96.

  5. Разработкапроцедуринформационно-справочнойсистемы: 15.11.96.

  6. Отладкапрограммы:29.11.96.

  7. Оформлениепояснительнойзаписки и сдачаработы на правку:13.12.96.

  8. Защитакурсовой работы:20.12.96.


Руководитель:Холкин И.И.­­____________


Студент:Пакостина А.В.____________

Описание


  1. Понятиеоб информационно-справочныхсистемах и ихпрограммнаяреализация.
    Информационно-справочныесистемы предназначеныдля управленияразличнымиинформационнымии справочнымимассивами, вчисло которыхвходят и базыданных. Этисистемы организовываютопределенныйинтерфейспользователяс функциямиобработкиинформациисамой системы.Набор возможностейтаких системобычно включаетв себя коррекциюструктурыиспользуемогообъекта (инкапсулирующегоинформацию),работа с егосоставляющими- дополнение,редактирование,удаление (вслучае, когдароль такогообъекта выполняетбаза данных,это - записи),простой просмотр,поиск элементов.Также необходимообеспечитьдля такой системыи функциипостоянногонадежногохранения - впростейшемслучае, это -запись базыиз памяти вфайл на дискеи считываниеоного с дискав память.
    Программнаяреализациямало отличаетсяот подобнойконцепции, ноконкретизируетабстрактныеоперации вконкретныепроцедуры ифункции (илиже объекты) изависит полностьюот возможностейязыка, поставленнойзадачи и искусствапрограммиста.

  2. Базыданных и способыих представления.
    Общаяконцепциятеории простыхбаз данныхподразумеваетналичие некоторогомножестватаблиц и являющихся,собственно,базой данных,имеющей определенныйидентификатор(имя). Каждаятаблица состоитиз n-гоколичествазаписей (величинаnзависит отвозможностейконкретнойсистемы), каждаяиз которыхимеет одну иту же структуру(в рамках однойтаблицы) и можетобъединятьв себе несколькоразнородныхобъектов (ихколичествотакже зависитцеликом и полностьюот возможностейсистемы).
    Работас базой данныхпредполагаетв себе возможностьработать сзаписями (либоизменять структурутаблиц).
    В языкепрограммированияПролог базаданных описываетсяв отдельномразделе, именуемомdatabase.Таких разделовможет бытьнесколько водной программеи каждый изних, если онидействительнопредставляютсобой разныеБД, должны иметьразные имена.В случае отсутствияимени у базыданных, ей даетсяимя по умолчанию- dbasedom.
    Работус загружаемымибазами данныхв Прологе реализуютследующиестандартныепредикаты:assert- добавить записьв БД, retract-удалить указаннуюзапись, save- сохранитьуказанную БДв файле, consult- загрузить БДиз файла в память.
    Вданной работеобъявленаглавная базаданных bd,имеющая предикатcharacteristick,и две временныебазы b1,b2 спредикатамиtable1,table2.

  3. Разработкасистемногоменю.
    Системноеменю объединяетв себе доступко всем процедураминформационно- справочнойсистемы. Разработкаменю отталкиваетсяот имеющихсяфункций системы(предикатов).Посколькуобъявлен предикатdo(char),служащий буфероммежду системнымменю и существующимипроцедурами,он имеет в себелибо подменюс выбором режимовработы имеющихсяпредикатов,либо их вызовс последующимвозвратом всистемноеменю:
    +--------------Системное меню--------------+

    ¦ Выберите вариантработы с базамиданных: ¦

    ¦ ¦

    ¦ 1 :- Загрузить ¦

    ¦ 2 :- Сохранить ¦

    ¦ 3 :- Просмотреть ¦

    ¦ 4 :- Скорректировать ¦

    ¦ 5 :- Удалить записьпо признакам ¦

    ¦ 6 :- Создать попризнакам ¦

    ¦ 7 :- Добавить ¦

    ¦ 8 :- Выход в ДОС ¦

    ¦ ¦

    ¦ ------------------| |------------------ ¦

    +--------------------------------------------+

  4. Разработкаструктурыпрограммы.
    Системноеменю вызываеттолько предикатыdo(),определенныедля каждой изнеобходимыхзадач (номеррежим полностьюсовпадает снумерациейв главном меню).Каждая из реализацийэтого предикатавыводит меню,либо сразувызываетсоответствующиепроцедуры:open,store, adding, correct, see, del, indication.ПроцедураIndicationвыводит дополнительноеподменю и вызываетлибо IndicationB1,либоIndicationB2в зависимостиот выборапользователя.Do(‘8’)завершаетработу с системой.

  5. Разработкапроцедур:

  6. Загрузкабазы данных(Open).
    Вdo(‘1’)имеется меню:
    +---------Загрузить--------+

    ¦ Куда загрузить? ¦

    ¦ ¦

    ¦ 1 :- В bd ¦

    ¦ 2 :- В b1 ¦

    ¦ 3 :- В b2 ¦

    ¦ 4 :- Меню ¦

    ¦ ¦

    ¦ ------| |------ ¦

    +----------------------------+
    процедураOpenимеет четыререализации,для каждогоиз вариантовработы. Длялюбого случаяперед загрузкойбазы данныхпроверяетсясуществованиефайла с введеннымименем (предикатexists).Для загрузкибазы данныхиспользуетсястандартныйпредикат consult.При вызовеOpen(‘1’)загрузкапроизводитсяв базу bd,при вызовеOpen(‘2’)вбазу b1,при вызовеOpen(‘3’)b2.

  7. Сохранение(Store).
    Вdo(‘2’)меню:

    +---------Сохранить--------+

    ¦ Что сохранить? ¦

    ¦ ¦

    ¦ 1 :- bd ¦

    ¦ 2 :- b1 ¦

    ¦ 3 :- b2 ¦

    ¦ 4 :- Меню ¦

    ¦ ¦

    ¦ ------| |------ ¦

    +----------------------------+
    Существуютпредикаты длязаписи главнойбазы и двухвременных.Используетсястандартныйпредикат save,записывающийв текстовыйфайл факты,связанные сданной БД.

  8. Просмотр(See).
    Вdo(‘3’)меню:

    +--------Просмотреть-------+

    ¦ Что просмотреть? ¦

    ¦ ¦

    ¦ 1 :- bd ¦

    ¦ 2 :- b1 ¦

    ¦ 3 :- b2 ¦

    ¦ 4 :- Меню ¦

    ¦ ¦

    ¦ ------| |------ ¦

    +----------------------------+
    ПредложенияSee(‘1’)иSee(‘2’)создают новыеокна и выводятв них найденныезаписи. Послекаждой выведеннойзаписи запрашиваетсянажатие клавиши,затем повторяетсяпоиск с помошьюстандартногопредиката Failили происходитвыход из предикатав системноеменю.

  9. Добавление(Adding).
    Данныйпредикат былдобавлен впрограмму попричине облегченияработы с ней,хоть и в заданииего не было.
    Вэтой процедуреиспользуетсяопределеннаяв этой же программепроцедура Get,запрашивающаяс клавиатурызначения дляновой записив главной базеданных и стандартнаяпроцедураassert,добавляющаяновый факт вбазу данных.

  10. Корректировка(Correct).
    Вданной программесуществуетдва вариантакорректировки- редактированиезаписи, найденнойпо номеру артикулаи найденнойпо названиюдетали. В каждойиз версий предикатавначале запрашиваетсяномер артикула(или название)изменяемойзаписи, поиски вывод на экран,затем происходитввод новыхзначений полей,подтверждаютсясделанныеизменения,удаляетсястарый факт(retract)и добавляетсявновь сформированный(assert).

  11. Созданиябазы по признакам(Indication).
    Indication(‘1’)создаетбазу b1Indication(‘2’)- базу b2.Для каждойбазы существуетотдельныйпредикат -IndicationB1иIndicationB2.Существуютвозможностисоздания такихбаз по следующимпризнакам: поместу хранения,по цене, по датепоступления.В каждом извариантовпроизводитсязапрос на несколькопараметровсразу и поискфактов, отвечающихэтим требованиям.При успешномпоиске, найденныйфакт добавляетсяв базу b1илиb2.

  12. Удалениезаписи по признакам(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. Отладкапрограммы.
    ОткрытиеБД.
    +--------------Системное меню--------------+

    ¦ Выберите вариантработы с базамиданных: ¦

    ¦ 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 ¦

    +----------------------------------------------------------+

  1. Инструкцияпользователяи решениеконтрольныхпримеров.
    Решениеконтрольныхпримеровосновываетсяна том, что былосделано в отладкепрограммы иможет бытьизучено повышестоящейчасти (7.).
    Дляработы с программойнеобходимовыбирать изпредлагаемыхменю пунктыпутем нажатияна соответствующиецифры. Припоявленииподменю повторитьоперацию, призапросе наимя файла - ввестистроку, определяющуюимя файла, призапросе насимвол, нажатьсоответствующуюклавишу наклавиатуре(не забывайте,пожалуйстаоб языковойраскладкеклавиатурыи состоянииклавиши CAPSLOCK).Также в несколькихпроцедурахпроизводитсяподтверждение(Yes/No- Да/Нет)- необходимопереключитьсяна английскуюраскладку инажать соответствующуюклавишу в нижнемрегистре.

  2. Заключение.
    ЯзыкпрограммированияПролог безусловноможет бытьиспользовандля написанияподобныхинформационно-справочныхсистем, таккак он позволяетлегко и быстросоздаватьлогическиезапросы к базамданных, чтобезусловновыделяет егосреди остальныхязыков программирования.

  3. Списоклитературы.
    1.К.Кларк.“Введениев логическоепрограммированиена MicroProloge”.
    2.К.Хоггер.“Введениев логическоепрограммирование”.

17



ГОСУДАРСТВЕННЫЙКОМИТЕТ РОССИЙСКОЙФЕДЕРАЦИИ

ПОВЫСШЕМУ ОБРАЗОВАНИЮ


МОСКОВСКИЙГОСУДАРСТВЕННЫЙ ИНСТИТУТ

РАДИОТЕХНИКИ,ЭЛЕКТРОНИКИИ АВТОМАТИКИ

( ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)


ФакультетКибернетики.

Кафедраинтеллектуальных

технологийи систем.


Курсоваяработа.


Тема:“Разработкаинформационно- справочнойсистемы”

по дисциплине“Логическоепрограммирование”.


(IIIсеместр)



Задание: 11

Студент: ПакостинаАлександра

Группа: ИР-1-95

Руководитель: доценткафедры ХолкинИгорь Иванович


1996