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

Понятие об информационных системах и их программной реализации. База данных и способы ее представления. Разработка системного меню информационно-справочной системы. Листинг и отладка программы. Инструкция пользователя и решение контрольных примеров.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 09.09.2012
Размер файла 324,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Министерство образования и науки Российской Федерации

НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Функциональное и логическое программирование

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

СОДЕРЖАНИЕ

Введение

1. Понятие об информационных системах и их программной реализации

2. База данных и способы ее представления

3. Разработка системного меню

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

4.1 Основная процедура - START

4.2 Вывод главного меню - PATCH

4.3 Автоматическая загрузка БД - LOAD

4.4 Вывод информации о системе - PROCESS(0)

4.5 Коррекция данных - PROCESS (1)

4.6 Удаление данных - PROCESS(2)

4.7 Просмотр базы данных - PROCESS(3)

4.8 Загрузки базы данных - PROCESS(4)

4.9 Сохранение базы данных - PROCESS(5)

4.10 Ввод новых данных - PROCESS(6)

4.11 Просмотр-добавление - PROCESS(7)

4.12 Выход из программы - PROCESS(8)

4.13 Загрузки БД с диска LOD

4.14 Сохранения БД на диске SVE

5. Листинг программы

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

7. Инструкция пользователя и решение контрольных примеров Дополнительно

Заключение

Список литературы

ВВЕДЕНИЕ

Данная курсовая написана на языке Пролог в среде Turbo Prolog v2.0. В структуре языка заложены возможности простой и чрезвычайно эффективной работы с базами данных, что позволяет на его основе создавать различного рода информационно - справочные системы. Структура языка Пролог соответствует структуре реляционных баз данных. Так отношению в РБД соответствует предикат в Прологе, элементу - факт, атрибуту отношения - аргумент предиката и т.д. Встроенные в Пролог предикаты работы с окнами позволяют создать дружественный интерфейс для работы пользователя с информационно справочной системой.

1. ПОНЯТИЕ ОБ ИНФОРМАЦИОННО-СПРАВОЧНЫХ СИСТЕМАХ И ИХ ПРОГРАММНОЙ РЕАЛИЗАЦИИ

Информационно-справочные системы - это программы-оболочки, служащие для управления массивами и базами данных. В наш век всеобщей компьютеризации информационно-справочные системы значительно облегчают труд человека во всех отраслях народного хозяйства. Значительно упростилась работа милиции по обнаружению угнанного транспорта после создания в компьютерных баз данных по угнанным автомобилям. Бухгалтерам предприятий и фирм теперь не нужно перебирать горы бумаг, чтобы получить все данные о сотруднике: достаточно загрузить информационно-справочную систему и она в удобной форме выдаст всю необходимую информацию. программа инструкция пользователь справочный

Области применения информационно-справочных систем воистину безграничны: это ведение статистики удоя скота на ферме, составление каталогов книг в библиотеках и произведений искусства в музеях, сбор данных о наличии рабочих вакансий в данном регионе и многие другие.

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

2. БАЗА ДАННЫХ И СПОСОБЫ ЕЕ ПРЕДСТАВЛЕНИЯ

База данных в простейшем случае - упорядоченная структура данных в виде таблицы, каждая запись которой может объединять разнотипные данные, причем все записи одной базы имеют одинаковую структуру. Существуют три модели представления баз данных: иерархическая, сетевая и реляционная. В силу особенностей языка Пролог, с его помощью реализуется реляционная модель. Каждая строка в базе данных называется элементом отношения, каждая колонка - атрибутом отношения, количество колонок - арностью, а количество строк - мощностью. В языке программирования Пролог атрибуту отношения соответствует аргумент предиката, арности - количество аргументов в предикате, отношению - предикат, элементу - факт, и мощности - число фактов. Исходя из вышеперечисленных соответствий, Пролог является прекрасным средством для реализации реляционных баз данных.

3. РАЗРАБОТКА СИСТЕМНОГО МЕНЮ

Все режимы программы активизируются с помощью меню, которое реализовано с помощью процедуры start_patch. Для активизации какого либо режима пользователю следует нажать цифровую клавишу, соответствующую выбранному пункту меню.

Меню данной программы состоит из десяти пунктов:

0 - О программе…

1 - Коррекция данных

2 - Удаление данных

3 - Просмотр базы

4 - Загрузка базы

5 - Сохранение базы

6 - Ввод новых данных

7 - Просмотр-добавление

8 - Выход из программы

4. РАЗРАБОТКА ПРОЦЕДУР

4.1 ОСНОВНАЯ ПРОЦЕДУРА - START

С помощью процедуры START в разделе GOAL инициируется начало выполнения программы. Эта процедура запускает процедуру начальной загрузки базы данных LOAD, после чего передает управление процедуре вывода главного меню PATCH.

4.2 ВЫВОД ГЛАВНОГО МЕНЮ - PATCH

Эта процедура выводит список пунктов главного меню и ожидает от пользователя ввода числа, которое будет занесено в переменную Choice. Послемэтого вызывается процедура обработки основных режимов PROCESS, в которую переменная Choice передается в качестве аргумента. В процедуре использован предикат Repeat, в случае если Choice меньше 0 и больше 8 происходит повторный вывод пунктов меню и ожидание ввода числа.

Главное Веню программы.

4.3 АВТОМАТИЧЕСКАЯ ЗАГРУЗКА БД - LOAD

Процедура LOAD предназначена для автоматической загрузки основной базы данных при запуске программы. Это значительно облегчает работу с системой, так как не требуется при запуске программы подгружать основную БД из режима "Загрузка". Процедура LOAD проверяет существование на диске файла BAZIS.DAT с помощью встроенного предиката existfile и подгружает БД в динамическую память с помощью предиката consult. В случае отсутствия файла выдается сообщение об ошибке.

4.4 ВЫВОД ИНФОРМАЦИИ О СИСТЕМЕ - PROCESS(0)

Данная процедура выводит информационное окно о назначении программы, среде программирования и данные об авторе программы.

Вывод информационного окна.

4.5 КОРРЕКЦИЯ ДАННЫХ - PROCESS(1)

Процедура process(1) служит для вывода меню режима коррекции данных, находящихся в БД, и внесения новых записей. После активизации выводит меню с разделами базы данных, по которым возможен поиск нужной записи. Активизация режимов происходит аналогично главному меню с помощью нажатия соответствующей цифровой клавиши. Считанное с клавиатуры число заносится в переменную S, после чего вызывается процедура solve_cor, со значением S. С помощью процедуры solve_cor по заданному признаку находится нужная запись - по номеру записи используется переменная Num, которой задаем номер записи и сравниваем ее со значением NUMBER, для поиска по типу элемента существует переменная Tip, которая сравнивается со значением TYPE. При нахождении элемента в динамической базе данных data0, происходит вывод данных прибора, с предложением изменит значения элемента. После коррекции данных с помощью предиката assert происходит запись в динамическую базу данных. В процедуре process(1) также применен предикат Repeat, с помощью которого реализован повторный вывод меню в случае ошибки ввода.

Окно коррекции данных.

4.6 УДАЛЕНИЕ ДАННЫХ - PROCESS(2)

Данная процедура предназначена для удаления записей из базы данных. После активизации выводит меню с разделами базы данных, по которым возможен поиск нужной записи. Работа раздела process(2) аналогичен предыдущему процессу. Из меню вызывается процедура solve_del, с номером 1 или 2, в зависимости от способа указания элемента. С помощью оператора readint для поиска по номеру записи используется переменная Num которой задаем номер записи и сравниваем ее со значением NUMBER, для поиска по типу элемента существует переменная Tip, которая сравнивается со значением TYPE. При нахождении элемента в динамической базе данных data0 происходит удаление его записи с помощью предиката retract.

4.7 ПРОСМОТР БАЗЫ ДАННЫХ - PROCESS(3)

Процедура PROCESS(3) осуществляет просмотр содержимого БД. На экране выводится таблица, происходит чтение из динамической базы данных data0 с занесением значений в соответствующие номера строк и колонок. Встроенный предикат fail (неудача) вызывает откат, так что предикаты и правила выполняются еще раз, также как и cut (!) используются для управления откатами.

Окно просмотра базы данных.

4.8 ЗАГРУЗКА БАЗЫ ДАННЫХ - PROCESS(4)

Данная процедура запрашивает у пользователя имя файла содержащего базу данных. Меню определяет - будет ли загружен файл из основного источника BAZIS.DAT или указан пользователем. Собственно загрузка баз данных осуществляется процедурой lod аргументом, которой служит переменная C, считанная с клавиатуры при вводе пользователем имени файла.

Окно загрузки базы данных.

4.9 СОХРАНЕНИЕ БАЗЫ ДАННЫХ - PROCESS(5)

Процедура PROCESS(5) аналогична PROCESS(4). Для сохранения баз данных применяется процедура SVE, рассмотренная ниже, аргументом которой является переменная I. Окно подменю аналогично предыдущему варианту.

4.10 ВВОД НОВЫХ ДАННЫХ - PROCESS(6)

Данная процедура служит для добавления новых элементов в базу данных.

Процедура работает следующим образом: пользователя просят ввести номер записи тип прибора и параметры прибора. По окончанию ввода происходит запись в динамическую базу данных и выход в основное меню.

Окно ввода новых данных.

4.11 ПРОСМОТР-ДОБАВЛЕНИЕ - PROCESS(7)

Данная процедура служит для просмотра-добавления базы данных.

Процедура работает следующим образом: пользователя просят ввести тип прибора и, если запись существует, она выводится на экран. В противном случае выводится сообщение о том, что запись не существует и просьба, повторив введенный номер, заполнить запись. При окончании ввода происходит выход в основное меню.

Окно просмотра добавления.

4.11 ВЫХОД ИЗ ПРОГРАММЫ - PROCESS(8)

Данная процедура состоит из проверки динамической базы данных, на предмет изменения записей flag при отрицательном условии происходит отсечение, которое запрещает дальнейший перебор. Процедура оканчивается успехом и происходит возврат в процедуру PATCH, в которой выполняется условие Choice=8, благодаря чему происходит выход из программы. В противном случае выводится окно с предложением сохранить запись, при подтверждении выводится соответствующее окно с выбором способа сохранения и последующем выходом из программы.

Окно выхода из программы с предложением сохранить изменения.

4.15 ЗАГРУЗКА БД С ДИСКА - LOD

Данная процедура осуществляет загрузку базы данных из файла в зависимости от введенного пользователем имени. В данной процедуре проверяется наличие файла на диске с помощью предиката existfile и загрузка БД в динамическую память с помощью предиката consult. В случае отсутствия файла на диске, выдается соответствующее сообщение.

4.16 СОХРАНЕНИЕ БД НА ДИСКЕ - SVE

Данная процедура осуществляет сохранение баз данных в файлах на диске по признакам, зависящим от аргумента процедуры: sve(1) сохраняет основную БД в файле, заданном пользователем, sve(2) - в файле BAZIS.DAT. Сохранение БД осуществляется с помощью встроенного предиката save. В случае ошибки выдается соответствующее сообщение. Также в программе создана динамическая база данных flag(Int), в который регистрируются изменения в базе при работе и при завершении работы с программой, если база данных была изменена, происходит запрос с предложением сохранить БД.

5. ЛИСТИНГ ПРОГРАММЫ

CODE=12150 /*Директива предкомпилятора code = size*/

/* **************************

* КУРСОВАЯ РАБОТА *

* Юскова Ю.В. *

* *

**************************

*/

domains

i,c,d,f,m,n,Int=integer

a,b,s,t=symbol

database - flag

flag(Int)

database

data0(n,a,b,c,d,f,m,t)

predicates

ok

ok1

out_save

error

error_1

io_error

save_bd

start

patch

load

solve_del(i)

solve_cor(i)

process(i)

sve(i)

lod(i)

repeat

goal

start.

clauses

/*Процедура создания основного меню и загрузки базы данных*/

start:-

clearwindow,

load,

patch.

/*Процедура управления основным меню*/

patch:-

clearwindow,

repeat,

makewindow(1,26,94,"Транзисторы малой мощности высокочастотные",0,0,25,80),

cursor(7,0),

write(" 0 - О программе... "),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,

write(" =>"),

readint(Choice),

Choice>=0,

Choice<9,

clearwindow,

process(Choice),

Choice = 8,

!,

clearwindow,

removewindow.

/*Процедура поиска и загрузки файла содержащего базу данных*/

load:-

existfile("BAZIS.dat"),

consult("BAZIS.dat"),

cursor(1,2),

makewindow(2,32,-3,"БАЗА ЗАГРУЖЕНА",6,18,8,40),

cursor(2,8),

write("Нажмите любую клавишу!"),

readchar(_),

clearwindow,

removewindow,

!.

load:-

makewindow(2,74,79,"ОШИБКА",6,18,8,40),

cursor(2,10),

write("Нет базы на диске!!!"),

readchar(_),

clearwindow,

removewindow,

!.

/*Процедура вывода данных о пpогpамме*/

process(0):-

makewindow(2,27,30, "О программе..." ,0,0,25,80),nl,nl,

write(" Инфоpмационно-спpавочная система "),nl,nl,

write(" Транзисторы малой мощности высокочастотные "),nl,nl,

write(" Программная среда:TURBO-PROLOG V2.0 "),nl,nl,

write(" автор: Юсков Ю.В. "),nl,nl,

write(" НГТУ 485гр 2 курс 2006 г. "),nl,

cursor(20,24),

write(" Нажмите на любую клавишу! "),

readchar(_),

removewindow.

/*Процедура изменения содержимого записей базы данных*/

process(1):-

repeat,

makewindow(2,2,7, "Коppекция данных" ,0,0,25,80),

cursor(7,0),

write(" 1 - Известен порядковый номер прибора"),nl,

write(" 2 - Известен тип прибора"),nl,

write(" 3 - Выход в основное меню"),nl,

write(" =>"),

readint(Sc),

Sc>=1,

Sc<4,

!,

clearwindow,

solve_cor(Sc),

Sc=3,

clearwindow,

removewindow.

/*Процедура удаления записей из базы данных*/

process(2):-

repeat,

makewindow(2,2,7, "Удаление записей" ,0,0,25,80),

cursor(7,0),

write(" 1 - Известен порядковый номер прибора"),nl,

write(" 2 - Известен тип прибора"),nl,

write(" 3 - Выход в основное меню"),nl,

write(" =>"),

readint(Sd),

Sd>=1,

Sd<4,

!,

clearwindow,

solve_del(Sd),

Sd=3,

clearwindow,

removewindow.

/*Процедура просмотра содержимого базы данных*/

process(3):-

makewindow(2,2,7, "Просмотр базы" ,0,0,25,80),

nl,

write("==============================================="),nl,

write("| Транзисторы малой мощности высокочастотные |"),nl,

write("==============================================="),nl,

write("| | Тип | Проводимость | Uk max | Ik max | Pk max | Fгр | |"),nl,

write("| № | прибора | транзистора | транзис- | транзис- | транзис- | (Мгц) | H21э |"),nl,

write("| | | (npn - pnp) | тора | тора | тора | | |"),nl,

write("==============================================="),nl,

data0(NUMBER,TYPE,TRANSITION,UK,IK,PK,FGR,H21),

cursor(Z,_),

cursor(Z,2),write(NUMBER),

cursor(Z,9),write(TYPE),

cursor(Z,20),write(TRANSITION),

cursor(Z,31),write(UK),

cursor(Z,40),write(IK),

cursor(Z,49),write(PK),

cursor(Z,58),write(FGR),

cursor(Z,66),write(H21),

cursor(Z,0),write("|"),

cursor(Z,76),write("|"),

nl,

fail.

process(3):-

write("-----------------------------------------------------------------------------"),

nl,

write("Нажмите на любую клавишу"),

readchar(_),

clearwindow,

removewindow.

/*Процедура загрузки в память базы данных*/

process(4):-

repeat,

makewindow(2,15,4, "Загрузка" ,5,5,20,70),

write("1 - База будет загружена из указанного файла"),nl,

write("2 - База будет загружена из файла BAZIS.dat"),nl,

write("3 - Выход в основное меню"),nl,

write("==>"),

readint(C),

C>=1,

C<4,

!,

clearwindow,

lod(C),

C=3,

clearwindow,

removewindow.

/*Процедура сохранения базы данных*/

process(5):-

repeat,

makewindow(2,15,4, "Запись" ,5,5,20,70),

write("1 - База будет записана в указанный файл"),nl,

write("2 - База будет записана в файл BAZIS.dat"),nl,

write("3 - Выход в основное меню"),nl,

write("==>"),

readint(I),

I>=1,

I<4,

!,

clearwindow,

sve(I),

I=3,

clearwindow,

removewindow.

/*Пpоцедуpа ввода новых данных*/

process(6):-

makewindow(2,2,7, "Ввод новых данных" ,0,0,25,80),

nl,

write("Введите номер записи :"),readint(NUMBER_R),nl,

write("Введите тип прибора :"),readln(TYPE_R),nl,

write("Введите проводимость транзистора(npn-pnp) :"),readln(TRANSITION_R),nl,

write("Введите Uk max транзистора (В) :"),readint(UK_R),nl,

write("Введите Ik max транзистора (мА) :"),readint(IK_R),nl,

write("Введите Pk max транзистора (мВт) :"),readint(PK_R),nl,

write("Введите Fгр (Мгц) :"),readint(FGR_R),nl,

write("Введите H21э :"),readln(H21_R),nl,

NUMBER=NUMBER_R,TYPE=TYPE_R,TRANSITION=TRANSITION_R,UK=UK_R,IK=IK_R,PK=PK_R,FGR=FGR_R,H21=H21_R,

assertz(data0(NUMBER,TYPE,TRANSITION,UK,IK,PK,FGR,H21)),

ok,

assert(flag(1)),

clearwindow,

removewindow.

/*Процедура просмотра-добавления*/

process(7):-

makewindow(2,2,7, "Просмотр-добавление" ,0,0,25,80),

nl,

write("Введите тип прибора:"),readln(A),nl,nl,

data0(NUMBER,TYPE,TRANSITION,UK,IK,PK,FGR,H21),

A=TYPE,

write("Номер записи :"),write(NUMBER),nl,

write("Тип прибора :"),write(TYPE),nl,

write("Проводимость транзистора(npn-pnp) :"),write(TRANSITION),nl,

write("Uk max транзистора (В) :"),write(UK),nl,

write("Ik max транзистора (мА) :"),write(IK),nl,

write("Pk max транзистора (мВт) :"),write(PK),nl,

write("Fгр (Мгц) :"),write(FGR),nl,

write("H21э :"),write(H21),nl,

write("Нажмите на любую клавишу"),

readchar(_),

!,

clearwindow,

removewindow.

process(7):-

nl,

write("Этого элемента нет в базе."),

write("Для добавления в базу элемента"),nl,

write("повторите название прибора и продолжайте ввод данных,"),nl,

write("Для выхода в основное меню используйте 'Esc'!"),nl,nl,

write("Введите тип прибора:"),

readln(A),nl,

A=TYPE_R,

write("Введите номер записи :"),readint(NUMBER_R),nl,

write("Введите проводимость транзистора(npn-pnp) :"),readln(TRANSITION_R),nl,

write("Введите Uk max транзистора (В) :"),readint(UK_R),nl,

write("Введите Ik max транзистора (мА) :"),readint(IK_R),nl,

write("Введите Pk max транзистора (мВт) :"),readint(PK_R),nl,

write("Введите Fгр (Мгц) :"),readint(FGR_R),nl,

write("Введите H21э :"),readln(H21_R),nl,

NUMBER=NUMBER_R,TYPE=TYPE_R,TRANSITION=TRANSITION_R,UK=UK_R,IK=IK_R,PK=PK_R,FGR=FGR_R,H21=H21_R,

assertz(data0(NUMBER,TYPE,TRANSITION,UK,IK,PK,FGR,H21)),

removewindow,

ok,

!,

assert(flag(1)),

clearwindow,

removewindow.

/* Процедура выхода из программы */

process(8):-

removewindow,

flag(1),retract(flag(1)),save_bd,!.

process(8).

/*Процедура 2 сохранения базы данных*/

out_save:-

repeat,

makewindow(2,15,4, "Запись" ,5,5,20,70),

write("1 - База будет записана в указанный файл"),nl,

write("2 - База будет записана в файл BAZIS.dat"),nl,

write("==>"),

readint(I),

I>=1,

I<3,

clearwindow,

sve(I),

clearwindow,

removewindow.

/* Операции для коррекции записи БД*/

solve_cor(1):-

removewindow,

clearwindow,

makewindow(2,2,7, "Корекция данных по номеру записи!!!" ,0,0,25,80),

write("Введите порядковый номер прибора:"),

readint(Num),

data0(Num,_,_,_,_,_,_,_),

NUMBER_R=Num,

nl,

data0(NUMBER_R,TYPE_R,TRANSITION_R,UK_R,IK_R,PK_R,FGR_R,H21_R),

nl,

write("Номер записи :"),write(NUMBER_R),nl,

write("Тип прибора :"),write(TYPE_R),nl,

write("Проводимость транзистора(npn-pnp) :"),write(TRANSITION_R),nl,

write("Uk max транзистора (В) :"),write(UK_R),nl,

write("Ik max транзистора (мА) :"),write(IK_R),nl,

write("Pk max транзистора (мВт) :"),write(PK_R),nl,

write("Fгр (Мгц) :"),write(FGR_R),nl,

write("H21э :"),write(H21_R),nl,

nl,

write("----------------------------------------------------------------------"),

nl,

write("Введите номер записи :"),readint(NUMBER),nl,

write("Введите тип прибора :"),readln(TYPE),nl,

write("Введите проводимость транзистора(npn-pnp) :"),readln(TRANSITION),nl,

write("Введите Uk max транзистора (В) :"),readint(UK),nl,

write("Введите Ik max транзистора (мА) :"),readint(IK),nl,

write("Введите Pk max транзистора (мВт) :"),readint(PK),nl,

write("Введите Fгр (Мгц) :"),readint(FGR),nl,

write("Введите H21э :"),readln(H21),nl,

retract(data0(NUMBER_R,TYPE_R,TRANSITION_R,UK_R,IK_R,PK_R,FGR_R,H21_R)),

assert(data0(NUMBER,TYPE,TRANSITION,UK,IK,PK,FGR,H21)),

ok,

!,

assert(flag(1)),

clearwindow,

removewindow.

solve_cor(1):-

error_1,

clearwindow,

removewindow.

/*Корекции записи по типу прибора*/

solve_cor(2):-

removewindow,

clearwindow,

makewindow(2,2,7, "Корекции записи по типу прибора!!!" ,0,0,25,80),

write("Введите название прибора:"),

readln(Tip),

data0(_,Tip,_,_,_,_,_,_),

TYPE_R=Tip,

data0(NUMBER_R,TYPE_R,TRANSITION_R,UK_R,IK_R,PK_R,FGR_R,H21_R),

nl,

write("Номер записи :"),write(NUMBER_R),nl,

write("Тип прибора :"),write(TYPE_R),nl,

write("Проводимость транзистора(npn-pnp) :"),write(TRANSITION_R),nl,

write("Uk max транзистора (В) :"),write(UK_R),nl,

write("Ik max транзистора (мА) :"),write(IK_R),nl,

write("Pk max транзистора (мВт) :"),write(PK_R),nl,

write("Fгр (Мгц) :"),write(FGR_R),nl,

write("H21э :"),write(H21_R),nl,

nl,

write("----------------------------------------------------------------------"),

nl,

write("Введите номер записи :"),readint(NUMBER),nl,

write("Введите тип прибора :"),readln(TYPE),nl,

write("Введите проводимость транзистора(npn-pnp) :"),readln(TRANSITION),nl,

write("Введите Uk max транзистора (В) :"),readint(UK),nl,

write("Введите Ik max транзистора (мА) :"),readint(IK),nl,

write("Введите Pk max транзистора (мВт) :"),readint(PK),nl,

write("Введите Fгр (Мгц) :"),readint(FGR),nl,

write("Введите H21э :"),readln(H21),nl,

retract(data0(NUMBER_R,TYPE_R,TRANSITION_R,UK_R,IK_R,PK_R,FGR_R,H21_R)),

assert(data0(NUMBER,TYPE,TRANSITION,UK,IK,PK,FGR,H21)),

ok,

!,

assert(flag(1)),

clearwindow,

removewindow.

solve_cor(2):-

error_1,

clearwindow,

removewindow.

/* Операция выбора и удаления записи*/

/*Процедура удаления по номеру записи*/

solve_del(1):-

removewindow,

makewindow(2,2,7, "Удаление по номеру записи!!!" ,0,0,25,80),

write("Введите порядковый номер прибора:"),

readint(Num),

data0(Num,_,_,_,_,_,_,_),

NUMBER=Num,

data0(NUMBER,TYPE,TRANSITION,UK,IK,PK,FGR,H21),

retract(data0(NUMBER,TYPE,TRANSITION,UK,IK,PK,FGR,H21)),

assert(flag(1)),

ok,

!,

clearwindow,

removewindow.

solve_del(1):-

error,

clearwindow,

removewindow.

/*Процедура удаления записи по типу*/

solve_del(2):-

removewindow,

makewindow(2,2,7, "Удаление по типу прибора!!!" ,0,0,25,80),

write("Введите название прибора:"),

readln(Tip),

data0(_,Tip,_,_,_,_,_,_),

TYPE=Tip,

data0(NUMBER,TYPE,TRANSITION,UK,IK,PK,FGR,H21),

retract(data0(NUMBER,TYPE,TRANSITION,UK,IK,PK,FGR,H21)),

assert(flag(1)),

ok,

!,

clearwindow,

removewindow.

solve_del(2):-

error,

clearwindow,

removewindow.

/*Процедура записи на диск*/

sve(1):-

write("Введите имя файла :"),

readln(N),

save(N),

!,

ok1,

clearwindow,

removewindow.

sve(1):-

io_error,removewindow.

sve(2):-

save("BAZIS.DAT"),

!,

ok1,

clearwindow,

removewindow.

sve(2):-

io_error,removewindow.

/*Процедура чтения с диска*/

lod(1):-

retractall(_),

write("Введите имя файла :"),

readln(N),

existfile(N),

consult(N),

ok,

!.

lod(1):-

io_error,

!,

removewindow.

lod(2):-

existfile("BAZIS.dat"),

consult("BAZIS.dat"),

ok,

!.

lod(2):-

io_error,

!,

removewindow.

/* Процедура вывода сообщения об успешном завершении данной операции */

ok:-

sound(70,294),

makewindow(17,27,90,"ОПЕРАЦИЯ ВЫПОЛНЕНА!",6,18,8,40),

cursor(2,7),

write("Нажмите на любую клавишу!!!"),nl,nl,

readchar(_),

removewindow,

!.

ok1:-

sound(70,294),

makewindow(2,32,-3,"БАЗА СОХРАНЕНА",6,18,8,40),

cursor(2,8),

write("Нажмите любую клавишу!"),

readchar(_),

removewindow,

!.

/* Процедуры вывода сообщений об ошибках */

error:-

sound(20,494),

makewindow(15,74,79,"ОШИБКА",6,18,8,40),

cursor(2,7),

write("Нажмите на любую клавишу"),nl,nl,

write(""),

readchar(_),

removewindow,

!.

io_error:-

sound(20,494),

makewindow(16,74,79,"ОШИБКА ВВОДА/ВЫВОДА",6,18,8,40),

cursor(2,7),

write("Нажмите на любую клавишу!!! "),nl,nl,

readchar(_),

removewindow,

!.

/* Вывод запроса о сохранении изменённых баз данных */

save_bd:-

clearwindow,

sound(20,494),

sound(30,392),

makewindow(17,74,79,"Сохранение изменений",6,18,8,40),nl,

write(" Сохранить произведённые "),nl,

write(" изменения на диске?"),nl,nl,

write(" Y-Да/любая другая клавиша-Нет"),

readchar(Ch),

removewindow,

clearwindow,

Ch='Y',

out_save,

makewindow(2,32,-3,"",6,18,8,40),

cursor(2,9),

write("ВЫХОД ИЗ ПРОГРАММЫ!!!"),

sound(70,294),

!,

removewindow.

save_bd.

/* Процедура repeat */

repeat.

repeat:- repeat.

6. ОТЛАДКА ПРОГРАММЫ

При отладке программы ошибки устранялись в три этапа. На первом этапе интерпретатор языка Пролог сам указывал на синтаксические ошибки. Такие ошибки возникали при неправильном написании имен встроенных предикатов, когда я забывал описать новые предикаты в разделе predicates и т.д. Если компиляция прошла успешно, но программа работала некорректно, приходилось переходить ко второму этапу - просмотру текста программы и логическому осмыслению ошибки. На этом этапе были устранены такие ошибки, как вывод всего одной записи базы данных в режиме просмотра БД. Причиной этому было отсутствие в конце процедуры предиката fail. Ошибка была устранена. Если не помогал второй этап, приходилось переходить к третьему - трассировке. В процессе конечной отладки и решения контрольных примеров ошибок в программе обнаружено не было. Однако с более обширным знанием языка программирования в среде TURBO-PROLOG, программа могла бы получиться на много короче.

7. ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ И РЕШЕНИЕ КОНТРОЛЬНЫХ ПРИМЕРОВ

Программа "Каталог - транзисторы малой мощности высокочастотные" представляет собой информационно-справочную систему. В основной БД присутствуют данные о типе прибора, проводимости, Uk max транзистора, Ik max транзистора, Pk max транзистора, F гр. транзистора и коэффициент усиления транзистора - H21э.

При запуске программы на экран выводится главное меню:

0 - О программе...

1 - коррекция данных

2 - удаление данных

3 - просмотр базы

4 - загрузка базы

5 - сохранение базы

6 - ввод новых данных

7 - просмотр-добавление

8 - выход из программы

Для выбора какого-либо пункта следует нажать соответствующую цифровую клавишу. Ниже приводится описание каждого из пунктов.

0 - О программе...

При выборе данного пункта на экран выводятся данные о системе и ее авторе. После нажатия на любую клавишу происходит выход в главное меню.

1 - коррекция данных

При входе в этот пункт на экран выводится подменю:

1 - известен порядковый номер прибора

2 - известен тип прибора

3 - выход в основное меню

Выберете признак, который Вам известен и затем введите его на запрос системы. Признак следует вводить в том же виде (сочетание заглавных и строчных букв) как имеющиеся названия в базе данных элементов. После определения корректируемой записи система выводит на экран все данные об этом объекте и позволяет их отредактировать, последовательно распечатывая поля записи. В противном случае произойдет выход в основное меню.

2 - Удаление данных - выводится такое же подменю.

1 - известен порядковый номер прибора

2 - известен тип прибора

3 - выход в основное меню

Данный режим служит для удаления записей из базы данных. Как и в предыдущей операции, пользователю предоставляется возможность ввести один из признаков нужной записи. После ввода этих данных произойдет удаление выбранной записи и вывод сообщения, подтверждающего выполнение данной операции. В случае невозможности удаления записи, например - запись с данным номером не существует, выдается соответствующее сообщение об ошибке.

3 - Просмотр базы

Данный режим предназначен для просмотра содержимого имеющихся баз данных. При входе в этот режим на экран выводятся записи текущей БД в виде таблицы. Для возвращения в основное меню следует нажать любую клавишу.

4 - Загрузка базы

1 - База будет загружена из указанного файла

2 - База будет загружена из файла BAZIS.dat

3 - Выход в основное меню

Данный режим предназначен для загрузки баз данных из файлов.

При входе в этот пункт выводится запрос имени файла содержащего базу данных. При успешной загрузке появится соответствующее сообщение, при сбое появится сообщение об ошибке.

5 - Сохранение базы

Данный режим предназначен для сохранения баз данных. При входе в данный режим выводится следующее меню:

1 - База будет записана в указанный файл

2 - База будет записана в файл BAZIS.dat

3 - Выход в основное меню

Работа с его пунктами полностью аналогична работе с подменю режима "Загрузка базы".

6 - ввод новых данных

Процедура работает следующим образом: пользователя просят ввести номер записи тип прибора и параметры прибора. По окончанию ввода происходит запись в динамическую базу данных и выход в основное меню.

7 - просмотр-добавление

Данный режим предназначен для просмотра-добавления записей в базе данных. При входе в него у пользователя запрашивается тип прибора и, если он существует, то на экран выводится параметры элемента. В противном случае выводится соответствующее сообщение и просьба, повторив введенный номер, заполнить выбранную запись. После заполнения записи система выведет сообщение о завершении операции. При нажатии любой клавиши произойдет выход в основное меню.

8 - выход из программы

Этот пункт меню предназначен для выхода из информационно-справочной системы в ДОС. При измененных данных в справочной системе при выходе программа задаст вопрос о возможности сохранения изменений, при положительном ответе пользователя выводится следующее меню:

1 - База будет записана в указанный файл

2 - База будет записана в файл BAZIS.dat

После выбора способа сохранения программа завершает работу.

ДОПЛОНИТЕЛЬНО

Так как в базе данных требуется ввод с русской раскладки клавиатуры, я поместил в одну папку с рабочей программой файл RK.COM и здесь же был создан дополнительный файл - CHECKING_START.bat. В котором прописал запуск файла RK.COM - подключение русской раскладки клавиатуры для DOS приложений, а после него запускается основная программа CHECKING.EXE, в результате чего при работе с программой появилась возможность изменять раскладку клавиатуры РУС/ЛАТ, что позволило создать базу данных с названиями отечественных электронных приборов.

В целях конечной отладки программы и устранения скрытых ошибок было решено несколько контрольных примеров по работе с системой во всех режимах. Была создана и отредактирована основная база данных. С ее помощью были опробованы режимы удаления, корректировки, загрузки и сохранения БД. При решении контрольных примеров ошибок в программе не обнаружено.

ЗАКЛЮЧЕНИЕ

В данной курсовой работе были исследованы возможности языка программирования Пролог для создания информационно-справочных систем.

Можно сделать вывод, что Пролог представляет богатые возможности для реализации таких систем и написания дружественного интерфейса для общения пользователя с программой.

ЛИТЕРАТУРА

1. Que Corporation, Indianapolis, Indiana K.M. Yin, D. Solomon - “Using Turbo Prolog”

2. “Использование Турбо-Пролога”. Перевод с английского, канд. физ.-мат. наук Д.Ю. Буланже, О.Л. Кондратьева под редакцией канд. физ.-мат. наук Б.Г. Сушкова. Москва "Мир" 2009

3. Л. СТЕРЛИНГ, Э. ШАПИРО "ИСКУССТВО ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ ПРОЛОГ"; Перевод с английского канд. физ.-мат. наук С.Ф. Сопрунова и канд. физ.-мат. наук Л.В. Шабанова под редакцией д-ра тех. наук Ю.Г. Дадаева; МОСКВА, "МИР", 1990 г.

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.