Разработка информационно-справочной системы
Понятие об информационных системах и их программной реализации. База данных и способы ее представления. Разработка системного меню информационно-справочной системы. Листинг и отладка программы. Инструкция пользователя и решение контрольных примеров.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 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
Подобные документы
Теоретические основы проектирования информационно-справочных систем. Значение информационно-справочных компонент в корпоративных информационных системах. Разработка концептуальной и инфологической модели информационно-справочной системы ГОУ НПО ПУ №33.
дипломная работа [645,4 K], добавлен 02.09.2010Реализация информационно-справочной системы расписания поездов в Microsoft Visual Studio 2008 на языке C#. Методика разработки и основное содержание данной программы, алгоритмы ее реализации. Требования к программе и оценка ее эффективности, листинг.
курсовая работа [5,0 M], добавлен 19.08.2012Реализация информационно-справочной системы на языке программирования C#. ее тестирование и отладка. Назначение, состав и структура программы "Адресная книга", описание операций. Программные и аппаратные требования к системе. Блок-схема и код программы.
курсовая работа [709,5 K], добавлен 11.06.2019Анализ информационных потоков. Описание информационных задач. Функциональное назначение программы, ее структура, описание логики. Тексты запросов на языке SQL. Назначение и условия применения информационно-справочной системы, описание операций, отчетов.
курсовая работа [3,0 M], добавлен 16.12.2013Предназначение информационно-справочной системы - ведение учета студентов в деканате, переводя их с курса на курс. Основные функции системы: зачисление, отчисление, начисление стипендии. Нормализация (построение структуры). Главное меню пользователя.
курсовая работа [1,7 M], добавлен 09.01.2013Проект поисковой информационно-справочной подсистемы "Абитуриент" по учебным заведениям всех специальностей г. Воронежа. Анализ предметной области, входная и выходная информация. Разработка и реализация программного средства; генерация базы данных.
курсовая работа [1,6 M], добавлен 28.08.2012Детальная разработка информационно-справочной системы по учету железнодорожных вагонов на подъездном пути предприятия с целью автоматизации обработки информации по вагонам и расчета затрат на обслуживание подвижного состава. Проект модели базы данных.
дипломная работа [1,4 M], добавлен 20.10.2008Описание процесса проектирования информационно–справочной системы с помощью среды разработки PascalABC.Net, ее использование для регистрации обращений в медицинское учреждение. Логическая структура программы, алгоритм ее работы, особенности интерфейса.
курсовая работа [628,8 K], добавлен 07.06.2017Описание процесса проектирования информационно–справочной системы с помощью среды разработки Delphi 10 Lite, ее использование для регистрации сварочных работ. Функциональное назначение программы и ее логическая структура. Свойства информационной системы.
курсовая работа [1,7 M], добавлен 10.01.2015Изучение этапов создания базы данных на основе типизированных файлов средствами визуальной среды программирования Delphi. Проектирование информационно-справочной системы "парфюмерная компания Avon" в соответствии с требованиями технического задания.
курсовая работа [1015,6 K], добавлен 05.05.2012