А
Б В
Г Д
Е Ж
З И
К Л
М Н
О П
Р С
Т У
Ф Х
Ц Ч
Ш Э
Ю Я
Реферат: Разработка информационно-справочной системы "Тех.паспорт автомобиля".
Разработка информационно-справочной системы "Тех.паспорт автомобиля".
Задание № 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’) iai?: +--------- Сохранить --------+ ¦ Что сохранить ? ¦ ¦ ¦ ¦ 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. К. Кларк. “Введение в логическое программирование на Micro Prologe”.2. К. Хоггер. “Введение в логическое программирование”.
|