Задание N П-1
На курсовое проектирование по дисциплине "Логическое прог-
раммирование". Студенту Синельникову А.Г. гр. ИЖ-1-95.
1. Тема исследований:
разработка информационно-справочной системы.
2. Исходные данные:
из базы В1 с записями вида
-----------------------------------------------------------------
Зарплата по НИР
-----------------------------------------------------------------
ФИО | |Зарплата|выдано по кварталам| |
---------------|Каф.|по |-------------------|всего|остаток
Фамилия|Имя|Отч| |НИР |I |II |III |IV | |
-----------------------------------------------------------------
создать базу В2 с признаками, задаваемыми с дисплея. Для базы В1
предусмотреть режимы: сохранения, просмотра-добавления, загрузки,
корректировки; для В2 - режимы: просмотра и сохранения.
Язык программирования Пролог.
3. Перечень вопросов, подлежащих разработке:
3.1 Разработка меню, обеспечивающее взаимодействие пользователя с системой, в соответствии с заданием, предусмотрев режимы:
- корректировки данных,
- удаления данных,
- просмотра базы,
- загрузки базы,
- сохранения базы,
- создания новой базы,
- ввода новых данных.
3.2 Разработка процедур:
- корректировки данных,
- удаления данных,
- просмотра базы,
- загрузки базы,
- сохранения базы,
- создания новой базы,
- ввода новых данных.
4. Перечень графических материалов:
4.1 структурная схема меню
4.2 структурная схема программы.
5. Календарный план-график работы над курсовой работой:
1. Получение задания
4.10.96
2. Анализ задания, постановка задачи, подбор и изучение литературы
18.10.96
3. Разработка меню и структуры программы
25.10.96
4. Разработка процедур информационно-справочной системы
15.11.96
5. Отладка программы
29.11.96
6. Оформление пояснительной записки и сдача работы на проверку
13.12.96
7. Защита курсовой работы
20.12.96
Руководитель /Холкин И.И./
Студент /Синельников А.Г., ИЖ-1-95/
Содержание
@стр.
Введение .................................. 4
1. Понятие об информационных системах и их
программной реализации ................. 5
2. БД и способы ее представления .......... 5
3. Разработка системного меню ............. 6
4. Разработка структуры программы ......... 7
5. Разработка процедур:
5.1 Управления основным меню ........... 8
5.2 Загрузки базы ...................... 8
5.3 Корректировки базы ................. 9
5.4 Удаления данных ....................10
5.5 Ввода новых данных .................10
5.6 Просмотра базы .....................10
5.7 Создания новой базы ................10
6. Текст программы ........................12
7. Отладка программы ......................18
8. Инструкция пользователя и решение
контрольных примеров: ..................18
8.1 Заполнение БД ......................20
8.2 Сохранение БД ......................20
8.3 Создание новой БД ..................20
8.4 Загрузка БД ........................20
Заключение ................................21
Список литературы .........................22
Введение
Сегодня, в век высоких технологий, особое внимание уделяется информации и ее обработке.
С появлением компьютерной техники появилась возможность ведения баз данных по разной тематике. В данной курсовой работе раскрываются принципы создания и ведения баз данных.
Курсовая работа состоит из нескольких частей: общие принципы информационных систем, разработка информационных систем (на примере системы "Зарплата по НИР") и инструкции по использованию системы "Зарплата по НИР".
В первой части курсовой (главы 1 и 2) раскрываются общие принципы информационных систем и Баз Данных (БД), рассказывается о программной реализации систем и БД. В этой же части будет рассказано о способах построения БД.
Во второй части (главы 3-7) рассказывается об принципах создания программ для обработки БД: создания интерфейса пользователя, сохранения БД и т.д. Так же будет рассказано об отладке программы. В конце второй части приведен текст программы "Зарплата по НИР". Текст программы приведен для Turbo-Prolog v2.0.
В третьей части показаны инструкции по использованию информационной системы "Зарплата по НИР".
1. Понятие об информационных системах и их программной реализации
Информационные системы - это системы, которые информируют пользователя системы о той или иной сфере жизнедеятельности человека. Например: информационная система "Зарплата по НИР", в которой содержится информация о сотрудниках разных кафедр, которые ведут научные исследования.
Оболочка информационной системы - это программа, которая обеспечивает удобное взаимодействие пользователя и системы. Пользователь, при помощи оболочки, может получить любую интересующую его информацию.
Язык Пролог предостовляет довольно большие возможности для программной реализации оболочки информационной системы. Он предоставляет такие средства как:
- загрузка базы данных системы с диска (стандартный предикат @consult );
- запись базы на диск (предикат @save );
- добавление в базу новых данных (предикаты @asserta и assertz );
- удаление данных из базы (предикат @retract) и др.
Сочитание всего этого позволяет создавать довольно мощные информационные системы.
@2. База данных и способы ее представления
База Данных (БД) - это информация, представленная в виде двумерных таблиц. БД содержит множество строк, каждая из которых соответствует объекту. Для каждого объекта используются определенные независимые позиции, которые называются полями. Представим себе такую БД, содержащую строки и столбцы (простейший случай). Каждая строка, называемая так же записью, соответствует определенному объекту. Каждый столбец содержит значения соответствующих данных об объекте. Например - телефонная книжка:
-------------------------------------------
|Фамилия |Имя |Отчество |Телефон |
-------------------------------------------
Иванов Иван Иванович 000-00-00
Петров Петр Петрович 111-11-11
-------------------------------------------
БД может состоять не из одной таблицы, а из двух, трех и более. Дополнительную информацию об объекте можно хранить в дополнительных таблицах.
Одно из мощных средств БД состоит в том, что информацию можно упорядочивать по тому критерию, который задает пользователь.
В Прологе БД представлется в виде списка термов вида:
имя_предиката_базы(поля_записи) .
Имена БД описываются в разделе @DATABASE. Доступ к записям БД осуществляется с помощью предиката базы. Пролог предостовляет довольно много средств по работе с такими БД: загрузка, запись, добавление и т.д.
@3. Разработка системного меню
Системное меню или основное меню должно обеспечивать удобное взаимодействие пользователя с программой. В меню должны войти пункты сохранения, просмотра, ввода новых данных и т.д. Пользователю нужно всего лишь нажать цифру, символизирующую ту или иную операцию. В меню данной программы присутствует восемь пунктов:
0 - О пpогpамме... - вывод данных о программе
1 - коррекция данных - режим корректировки данных
2 - удаление данных - режим удаления данных
3 - просмотр базы - режим просмотра базы
4 - загрузка базы - режим загрузки другой базы
5 - сохранение базы - режим сохранения базы
6 - создание новой базы - режим создания новой базы
7 - ввод новых данных - режим ввода данных
8 - выход из программы - выход из программы
Некоторые режимы предусматривают варианты выполнения данной операции. Представим структуру меню на следующей схеме:
Ъ———————————————ї
і Основное меню і
А—В—————————————Щ
і Ъ———————————ї
Г——ґО программеі
і А———————————Щ
і Ъ————————————————ї
Г——ґКоррекция данныхі
і А————————————————Щ
і Ъ———————————————ї
Г——ґУдаление данныхі
і А———————————————Щ
і Ъ—————————————ї
Г——ґПросмотр базыі
і А—————————————Щ
і Ъ—————————————ї
Г——ґЗагрузка базыі
і А———В—————————Щ
і і Ъ——————————————————————————ї
і Г——ґЗагрузка из файла ALEX.DATі
і і А——————————————————————————Щ
і і Ъ————————————————————————————ї
і А——ґЗагрузка из указанного файлаі
і А————————————————————————————Щ
і Ъ———————————————ї
Г——ґСохранение базыі
і А———В———————————Щ
і і Ъ——————————————————————ї
і Г——ґЗапись в файл ALEX.DATі
і і А——————————————————————Щ
і і Ъ———————————————————————ї
і А——ґЗапись в указанный файлі
і А———————————————————————Щ
і Ъ———————————————————ї
Г——ґСоздание новой базыі
і А———В———————————————Щ
і і Ъ——————————————————————————————————ї
і Г——ґСоздание базы по именам и кафедрамі
і і А——————————————————————————————————Щ
і і Ъ——————————————————————————————ї
і Г——ґСоздание базы "все о зарплате"і
і і А——————————————————————————————Щ
і і Ъ—————————————————————ї
і А——ґВыход в основное менюі
і А—————————————————————Щ
і Ъ—————————————————ї
Г——ґВвод новых данныхі
і А—————————————————Щ
і Ъ——————————————————ї
А——ґВыход из программыі
А——————————————————Щ
@4. Разработка структуры программы
Структура программы должна разрабатываться с учетом дальнейшей ее отладки, т.е. попытать разбить ее на несколько логических блоков, например:
AСтруктура программы ALEX - "Зарплата по НИР"
Ъ———————————————————————————ї
і Процедура загрузки базы и і
і управления основным меню і
А—————————————В—————————————Щ
і
Ъ—————————————Б—————————————ї
і Процедуры выполнения ре- і
і жимов, представленных в і
і основном меню і
А—————————————В—————————————Щ
і
Ъ—————————————Б—————————————ї
і Процедуры создания новой і
і базы і
А—————————————В—————————————Щ
і
Ъ—————————————Б—————————————ї
і Процедура просмотра новой і
і базы і
А—————————————В—————————————Щ
і
Ъ—————————————Б—————————————ї
і Процедура REPEAT і
А———————————————————————————Щ
Подобное разбиение позволит в дальнейшем легко вносить изменение в программу, а также расставлять контрольные точки для отладки. Отладку мы рассмотрим в п. 7. Так же рекомендуется перед каждой процедурой ставить комментарии, поясняющие функцию процедуры. Это поможет легко отыскать ту или иную процедуру.
@5. Разработка процедур
@5.1 Процедура управления основным меню @(PATH)
Как уже говорилось основное меню должно обеспечивать удобное взаимодействие пользователя с программой. Для этого необходимо разработать вид основного меню и способ управления им. Был выбран циферный способ управления меню, т.е. пользователь будет
вводить цифру, символизирующую ту или иную операцию. Надо так же представить в меню все операции, выполняемые программой, и присвоить каждой операции номер (цифру).
Представим вид меню:
Ъ———————————————————Зарплата по НИР————————————————————————ї
і і
і і
і 0 - О пpогpамме... і
і 1 - коррекция данных і
і 2 - удаление данных і
і 3 - просмотр базы і
і 4 - загрузка базы і
і 5 - сохранение базы і
і 6 - создание новой базы і
і 7 - ввод новых данных і
і 8 - выход из программы і
і >_ і
і і
і і
А——————————————————————————————————————————————————————————Щ
После вывода в окне меню происходит ввод целочисленной переменной @Choice и если значение переменной попадает в промежуток от 0 до 8, то выполняется процедура @process(Choice). После выполнения процедуры @process(Choice) снова повторяется ввод переменной @Choice .
@ 5.2 Процедура загрузки базы
В программе ALEX - "Зарплата по НИР" определены процедуры начальной загрузки базы и загрузка с участием пользователя. Рассмотрим каждую процедуру в отдельности.
@ AПроцедура начальной загрузки базы (LOAD)
С помощью этой процедуры происходит загрузка базы сразу после запуска программы.
Сначала происходит поиск файла "alex.dat" с помощью предиката @existfile и если он существует, то происходит загрузка этого файла во внутреннюю базу @ALEX с помощью предиката @consult. Если же файл не найден, то производится вывод сообщения о его отсутствии и программа переходит в режим основного меню.
AПроцедура загрузки базы с участием пользователя
Эта процедура вызывается из процедуры управления основным меню с помощью команды @PROCESS(4). Она имеет свое меню вида:
Ъ———————————————Загрузка———————————————————ї
і Загрузить из файла ALEX.DAT - 1 і
і Загрузить из указанного файла - 2 і
і >_ і
і і
і і
А——————————————————————————————————————————Щ,
т.е. пользователю предлагается два варианта загрузки базы.
После вывода в окне этого меню происходит ввод целочисленной переменной @WHAT и в зависимости от ее содержания производится одна из представленных операций.
Первый вид загрузки полностью аналогичен загрузке, описанной в процедуре @LOAD.
Второй вид предполагает ввод имени. После ввода имени файла в переменную @FNAME происходит поиск файла и если он найден, то очищается содержимое базы @ALEX, с помощью предиката @retractall(_,alex), и база загружается из указанного файла.
@5.3 Процедура корректировки базы
Эта процедура должна обеспечивать удобную корректировку записей базы данных. Она вызывается из процедуры управления основным меню командой @PROCESS(1).
После входа в режим корректировки базы из базы @ALEX берется первая запись с помощью предиката базы данных @alex(FIO,NAME,OT,KAF,NIR,K1,K2,K3,K4,TOTAL,OST) и происходит вывод на экран всех полей записи, после чего выводится запрос о корректировке текущей записи и ожидается ввод переменной @WHAT ,@ и в зависимости от ее содержания (1 или 0) производится корректировка записи (1) или переход к следующей записи (0). Представим вид окна при работе этой процедуры:
Ъ—————————————————Коррекция данных——————————————————————ї
і Фамилия:Иванов (FIO) і
і Имя:Иван (NAME) і
і Отчество:Иванович (OT) і
і Название кафедры:история (KAF) і
і Зарплатa по НИР:300 (NIR) і
і Выдано за I квартал:50 (K1) і
і Выдано за II квартал:40 (K2) і
і Выдано за III квартал:50 (K3) і
і Выдали за IV квартал:60 (K4) і
і Всего выдано:200 (TOTAL) і
і Остаток:100 (OST) і
і і
і Будете корректировать ? (1-да 0-нет) і
. .
. .
А———————————————————————————————————————————————————————Щ
При вводе единицы происходит ввод каждого поля записи и после ввода текущая запись удаляется, и в базу добавляется откорректированный вариант записи.
При вводе нуля осуществляется переход к следующей записи базы.
@5.4 Процедура удаления данных
Эта процедура вызывается из процедуры управления основным меню командой @PROCESS(2). Она полность аналогична процедуре корректировки данных, но работает на удаление записи из базы.
@5.5 Процедура ввода новых данных
Эта процедура должна предоставлять удобный ввод новой записи базы @ALEX.
Вызывается из процедуры управления основным меню командой @PROCESS(7).
После входа в режим ввода данных происходит запрос на ввод каждого поля записи базы @ALEX. И после ввода новая запись добавляется в конец базы с помощью стандартного предиката @assertz(alex(FIO,NAME,OT,KAF,NIR,K1,K2,K3,K4,TOTAL,OST)).
@5.6 Процедура просмотра базы
В программе ALEX - "Зарплата по НИР" определены процедуры
просмотра основной базы @ALEX и просмота созданной базы. Процеду-
ра создания новой базы рассмотрена в п.5.7.
Обе этих процедуры полностью аналогичны поэтому рассмотрим
их общие свойства.
Эта процедура должна обеспечивать удобный просмотр базы дан-
ных. Она вызывается из процедуры управления основным меню коман-
дой @PROCESS(3).
После входа в режим просмотра базы происходит вывод шапки
таблицы (вид таблицы взят из задания) и далее с помощью предика-
та @alex(FIO,NAME,OT,KAF,NIR,K1,K2,K3,K4,TOTAL,OST) происходит
взятие первой записи базы @ALEX и распечатка каждого поля записи в
виде таблицы. Для этого курсор пермещается к началу вывода каж-
дой записи с помощью предиката @CURSOR. Процедура выполняется до
тех пор пока не кончатся все записи в базе.
При просмотре созданной базы происходит работа с записями
базы @ALEX1 . Процедура просмотра созданной базы - @viewbase .
@5.7 Процедура создания новой базы
Эта процедура должна обеспечивать удобное создание новой ба-
зы из основной с заданными признаками. Она вызывается из процеду-
ры упрвления основным меню командой @PROCESS(6) .
Процедура имеет свое меню вида:
Ъ—————————————Создание новой базы—————————————————ї
і Создать базу по именам и кафедрам - 1 і
і Создать базу 'все о зарплате' - 2 і
і Выход в меню - 3 і
і >_ і
і і
і і
А—————————————————————————————————————————————————Щ,
т.е. пользователю предлагается выбор создания одной из двух баз,
а так же выход из режима.
После вывода в окне этого меню происходит ввод целочислен-
ной переменной @WHAT и в зависимости от ее содержания производит-
ся одна из представленных операций.
A Создание базы по именам и кафедрам
Из основной базы @ALEX берется каждая запись и добавляется во
вторую базу @ALEX1 с удалением из нее полей, содержащих информа-
цию о зарплате. Процесс создания этой базы обеспечивает процеду-
ра @newbase(1) , которая вызывается из процедуры создания базы. За-
тем@ следует просмотр созданной базы с помощью процедуры @viewbase .
AСоздание базы 'все о зарплате'
Из основной базы @ALEX берется каждая запись и добавляется во
вторую базу @ALEX1 с удалением из нее полей, содержащих информа-
цию об имени и кафедре. Процесс создания этой базы обеспечивает
процедура @newbase(2) , которая вызывается из процедуры создания
базы. Затем@ следует просмотр созданной базы с помощью процедуры
@viewbase .
После создания каждой базы происходит запись созданной базы
на диск под именем "ALEX1.DAT".
@6. Текст программы
DOMAINS
i=integer
s=symbol
DATABASE-alex
alex(s,s,s,s,i,i,i,i,i,i,i)
DATABASE-alex1
alex1(s,s,s,s,i,i,i,i,i,i,i)
PREDICATES
start
load
path
process(i)
newbase(i)
repeat
viewbase
GOAL
start.
CLAUSES
/* процедура создания основного меню и загрузки базы данных */
start:-
makewindow(1,2,7,"ЗАРПЛАТА ПО НИР",0,0,25,80),
clearwindow,
load,
path.
/* процедура поиска и загрузки файла содержащего базу данных */
load:-
existfile("alex.dat"),
consult("alex.dat",alex),
cursor(1,2),
write("База загружена").
load:-
cursor(1,2),
write("Нет базы на диске").
path:-
repeat,
cursor(7,0),
write(" 0 - О пpогpамме... "),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),
clearwindow,
Choice = 9,
retractall(_),
removewindow.
/* О программе */
process(0):-
makewindow(1,7,4,"О пpогpамме...",10,10,10,60),nl,
write(" Инфоpмационно-спpавочная система"),nl,
write(" Зарплaта по НИР "),nl,
write(" Язык TURBO-PROLOG версия 2.0 "),nl,
write(" автоp:Синельников А.Г. "),nl,
write(" МИРЭА, гp.ИЖ-1-95 (C) 1996 г. "),nl,nl,
write(" Нажмите на любую клавишу"),
readchar(_),
removewindow.
/* процедура удаления данных */
process(2):-
makewindow(2,7,2,"Удаление данных",0,0,25,80),
alex(FIO,NAME,OT,KAF,NIR,K1,K2,K3,K4,TOTAL,OST),
clearwindow,
write("Фамилия:",FIO),nl,
write("Имя:",NAME),nl,
write("Отчество:",OT),nl,
write("Название кафедры:",KAF),nl,
write("Зарплатa по НИР:",NIR),nl,
write("Выдано за I квартал:",K1),nl,
write("Выдано за II квартал:",K2),nl,
write("Выдано за III квартал:",K3),nl,
write("Выдали за IV квартал:",K4),nl,
write("Всего выдано:",TOTAL),nl,
write("Остаток:",OST),nl,nl,
attribute(4),
write("Удалить ? (1-да 0-нет) >"),attribute(7),
readint(WHAT),
WHAT=1,
nl,
retract(alex(FIO,NAME,OT,KAF,NIR,K1,K2,K3,K4,TOTAL,OST)),
clearwindow;
WHAT=0,removewindow.
/* процедура просмотра содержимого базы данных */
process(3):-
makewindow(2,2,7,"Просмотp базы 'Зарплата по НИР'",0,0,25,80),
write("------------------------------------------------------------"),nl,
write(" ФИО | |Зарплата|выдано по кварталам| |"),nl,
write("------------|Каф.|по |-------------------|всего|остаток"),nl,
write("Фам.|Имя|Отч| |НИР |I |II |III |IV | |"),nl,
write("------------------------------------------------------------"),nl,
alex(FIO,NAME,OT,KAF,NIR,K1,K2,K3,K4,TOTAL,OST),
cursor(Z,_),
cursor(Z,0),write(FIO),
cursor(Z,8),write(NAME),
cursor(Z,17),write(OT),
cursor(Z,26),write(KAF),
cursor(Z,34),write(NIR),
cursor(Z,43),write(K1),
cursor(Z,48),write(K2),
cursor(Z,53),write(K3),
cursor(Z,58),write(K4),
cursor(Z,63),write(TOTAL),
cursor(Z,69),write(OST),nl,
fail.
process(3):-
write("------------------------------------------------------------"),
nl,attribute(4),
write(" Нажмите на любую клавишу"),
attribute(2),
readchar(_),
removewindow.
/* процедура загрузки базы */
process(4):-
makewindow(2,15,4,"Загрузка",10,10,10,60),
write("Загрузить из файла ALEX.DAT - 1"),nl,
write("Загрузить из указанного файла - 2"),nl,
write(">"),
readint(WHAT),
WHAT=1,
retractall(_,alex),
consult("alex.dat",alex),
write("База загружена ..."),nl,
write(" Нажмите любую клавишу"),
readchar(_),!,removewindow;
WHAT=2,
write("Введите имя файла >"),readln(FNAME),
existfile(FNAME),
retractall(_,alex),
consult(FNAME,alex),
write("База загружена ..."),nl,
write(" Нажмите любую клавишу"),
readchar(_),!,removewindow;
nl,attribute(4),
write(" Файл не найден !!!"),attribute(7),
readchar(_),
removewindow.
/* процедура сохранения данных */
process(5):-
makewindow(2,15,4,"Запись",10,10,10,60),
write("Записать в файл ALEX.DAT - 1"),nl,
write("Записать в указанный файл - 2"),nl,
write(">"),
readint(WHAT),
WHAT=1,
save("alex.dat",alex),
write("База записана ..."),nl,
write(" Нажмите любую клавишу"),
readchar(_),!,removewindow;
WHAT=2,
write("Введите имя файла >"),readln(FNAME),
save(FNAME,alex),
write("База записана ..."),nl,
write(" Нажмите любую клавишу"),
readchar(_),!,removewindow.
/* процедура создания новой базы */
process(6):-
makewindow(2,2,7,"Создание новой базы",0,0,25,80),
write("Создать базу по именам и кафедрам - 1"),nl,
write("Создать базу 'все о зарплате' - 2"),nl,
write("Выход в меню - 3"),nl,
write(">"),readint(WHAT),
WHAT>0,WHAT<4,
removewindow,
newbase(WHAT).
/* процедура ввода новых данных */
process(7):-
makewindow(2,2,7,"Ввод новых данных",0,0,25,80),
write("Введите фамилию:"),readln(FIO),
write("Введите имя:"),readln(NAME),
write("Введите отчество:"),readln(OT),
write("Введите название кафедры:"),readln(KAF),
write("Введите зарплату по НИР:"),readint(NIR),
write("Сколько выдали за I квартал:"),readint(K1),
write("Сколько выдали за II квартал:"),readint(K2),
write("Сколько выдали за III квартал:"),readint(K3),
write("Сколько выдали за IV квартал:"),readint(K4),
TOTAL=K1+K2+K3+K4,
OST=NIR-TOTAL,
assertz(alex(FIO,NAME,OT,KAF,NIR,K1,K2,K3,K4,TOTAL,OST)),
removewindow.
/* Процедура коррекции данных */
process(1):-
makewindow(2,7,2,"Коррекция данных",0,0,25,80),
alex(FIO,NAME,OT,KAF,NIR,K1,K2,K3,K4,TOTAL,OST),
clearwindow,
write("Фамилия:",FIO),nl,
write("Имя:",NAME),nl,
write("Отчество:",OT),nl,
write("Название кафедры:",KAF),nl,
write("Зарплатa по НИР:",NIR),nl,
write("Выдано за I квартал:",K1),nl,
write("Выдано за II квартал:",K2),nl,
write("Выдано за III квартал:",K3),nl,
write("Выдали за IV квартал:",K4),nl,
write("Всего выдано:",TOTAL),nl,
write("Остаток:",OST),nl,nl,
attribute(4),
write("Будете корректировать ? (1-да 0-нет) >"),attribute(7),
readint(WHAT),
WHAT=1,
nl,
write("Введите фамилию:"),readln(FIO1),
write("Введите имя:"),readln(NAME1),
write("Введите отчество:"),readln(OT1),
write("Введите название кафедры:"),readln(KAF1),
write("Введите зарплату по НИР:"),readint(NIR1),
write("Сколько выдали за I квартал:"),readint(K11),
write("Сколько выдали за II квартал:"),readint(K21),
write("Сколько выдали за III квартал:"),readint(K31),
write("Сколько выдали за IV квартал:"),readint(K41),
TOTAL1=K11+K21+K31+K41,
OST1=NIR1-TOTAL1,
retract(alex(FIO,NAME,OT,KAF,NIR,K1,K2,K3,K4,TOTAL,OST)),
assertz(alex(FIO1,NAME1,OT1,KAF1,NIR1,K11,K21,K31,K41,TOTAL1,OST1)),
clearwindow;
WHAT=0,removewindow.
/* Выход из программы */
process(8):-
makewindow(2,7,2,"Выход",10,10,3,60),
write("Вы уверены ? (1-да 0-нет) >"),readint(WHAT),
WHAT=1,exit;
WHAT=0,removewindow.
/* процедура создания новой базы */
newbase(1):-
makewindow(3,7,2,"Создание базы по именам и кафедрам",10,5,4,67),
retractall(_,alex1),
alex(FIO,NAME,OT,KAF,NIR,K1,K2,K3,K4,TOTAL,OST),
FIO1=FIO,NAME1=NAME,OT1=OT,KAF1=KAF,
NIR1=0,K11=0,K21=0,K31=0,K41=0,TOTAL1=0,OST1=0,
assertz(alex1(FIO1,NAME1,OT1,KAF1,NIR1,K11,K21,K31,K41,TOTAL1,OST1)),
fail.
newbase(1):-
save("alex1.dat",alex1),
write("База создана. Нажмите любую клавишу для просмотра созданной базы."),
readchar(_),
viewbase,
removewindow,!.
newbase(2):-
makewindow(3,7,2,"Создание базы 'все о зарплате'",10,5,4,67),
retractall(_,alex1),
alex(FIO,NAME,OT,KAF,NIR,K1,K2,K3,K4,TOTAL,OST),
FIO1="",NAME1="",OT1="",KAF1="",
NIR1=NIR,K11=K1,K21=K2,K31=K3,K41=K4,TOTAL1=TOTAL,OST1=OST,
assertz(alex1(FIO1,NAME1,OT1,KAF1,NIR1,K11,K21,K31,K41,TOTAL1,OST1)),
fail.
newbase(2):-
save("alex1.dat",alex1),
write("База создана. Нажмите любую клавишу для просмотра созданной базы."),
readchar(_),
viewbase,
removewindow,!.
/* процедура просмотра созданной базы */
viewbase:-
makewindow(4,2,7,"Просмотp созданной базы",0,0,25,80),
write("------------------------------------------------------------"),nl,
write(" ФИО | |Зарплата|выдано по кварталам| |"),nl,
write("------------|Каф.|по |-------------------|всего|остаток"),nl,
write("Фам.|Имя|Отч| |НИР |I |II |III |IV | |"),nl,
write("------------------------------------------------------------"),nl,
alex1(FIO,NAME,OT,KAF,NIR,K1,K2,K3,K4,TOTAL,OST),
cursor(Z,_),
cursor(Z,0),write(FIO),
cursor(Z,8),write(NAME),
cursor(Z,17),write(OT),
cursor(Z,26),write(KAF),
cursor(Z,34),write(NIR),
cursor(Z,43),write(K1),
cursor(Z,48),write(K2),
cursor(Z,53),write(K3),
cursor(Z,58),write(K4),
cursor(Z,63),write(TOTAL),
cursor(Z,69),write(OST),nl,
fail.
viewbase:-
write("------------------------------------------------------------"),
nl,attribute(4),
write(" Нажмите на любую клавишу"),attribute(2),
readchar(_),
removewindow.
repeat.
repeat:- repeat.
/* конец программы */
@7. Отладка программы
Отладка программы происходила следующим образом: расставля-
лись контрольные точки (с помощью стандартного предиката EXIT) и
происходил запуск программы. После выполнения программы, до кон-
трольной точки, происходил выход из программы и можно было на эк-
ране просмотреть результаты работы той или иной процедуры (на на-
чальном этапе программа разрабатывалась без оконного интерфейса).
Если процедура работала неправильно, то изменялась часть процеду-
ры и производился повторный запуск программы. Некоторые ошибки
"ловил" сам Пролог в процессе выполнения программы.
В основном ошибки попадались в процедурах сохранения баз.
Все ошибки были устранены. Попадались, так же, некоторые "глюки"
в процедуре просмотра базы, в основном из-за того, что не хвата-
ло строки для вывода записи, и поэтому было уменьшено количество
знакомест для каждого поля записи.
В остальных процедурах ошибок не было.
@8. Инструкция пользователя и решение контрольных примеров
Программа ALEX представляет собой инструмент для ведения базы данных "Зарплата по НИР", а так же для обработки данных, представленных в базе.
Программа позволяет создать базу и затем сохранить ее в виде файла, а также откорректировать данные, удалить данные, ввести новые данные и создать новую базу данных по именам или зарплатам.
Взаимодействие с програмой осуществляется с помощью меню:
0 - О пpогpамме... - вывод данных о программе
1 - коррекция данных - режим корректировки данных
2 - удаление данных - режим удаления данных
3 - просмотр базы - режим просмотра базы
4 - загрузка базы - режим загрузки другой базы
5 - сохранение базы - режим сохранения базы
6 - создание новой базы - режим создания новой базы
7 - ввод новых данных - режим ввода данных
8 - выход из программы - выход из программы
Чтобы войти в необходимый режим следует ввести цифру, стоящую напротив названия режима.
Теперь опишем каждый пункт в отдельности.
@О пpогpамме...
Вывод данных о программе.
@Коррекция данных
Режим коррекции данных.
После входа в этот режим на экране появится первая запись и вопрос "Будете корректировать ? (1-Да 0-Нет)". Если Вам надо откорректировать выведенную запись, то нажмите 1 и отвечайте на запросы программы. Если Вам не надо корректировать выведенную запись нажмите 2 и на экране распечатается следующая запись. После вывода последней записи происходит выход в основное меню.
@ Удаление данных
Режим удаления данных.
Этот режим полностью аналогичен предыдущему за исключением того, что появляется вопрос "Удалить ? (1-Да 0-Нет)".
@Просмотр базы
Режим просмотра базы.
Как только Вы войдете в этот режим на экране появится шапка таблицы и под этой шапкой будут распечатаны все данные. После окончания вывода таблицы нажмите любую клавишу для выхода в основное меню.
@Загрузка базы
Режим загрузки базы.
После входа в этот режим появится еще одно меню:
Загрузить из файла ALEX.DAT - 1
Загрузить из указанного файла - 2
и Вам следует нажать цифру в зависимости от того, что Вы хотите сделать. Если Вам надо загрузить базу из основного файла программы ALEX.DAT, то нажмите 1; если же Вы хотите загрузить базу из другого файла, то нажмите 2. После загрузки базы происходит вы-
ход в основное меню.
@Сохранение базы
Режим сохранения базы.
Этот режим полностью аналогичен режиму загрузки базы с одним отличием - работает на сохранение базы в основной файл или указанный.
@Создание новой базы
Режим создания новой базы.
В этом режиме так же есть меню:
Создать базу по именам и кафедрам - 1
Создать базу 'все о зарплате' - 2
Выход в меню - 3
и Вам следует нажать цифру в зависимости от того какую базу Вы хотите сделать. Если Вам надо создать базу только по именам и кафедрам, то нажмите 1; если же Вам надо сделать базу, содержащую все данные о зарплате, то нажмите 2. Для выхода из режима создания нажмите 3.
После то как Вы указали какую базы надо сделать последует просмотр созданной базы (см. режим просмотра базы). Затем нажмите любую клавишу для выхода в основное меню.
Созданная база сохраняется в файле ALEX1.DAT.
@Ввод новых данных
Режим ввода новых данных.
В этом режиме производится ввод новых данных в уже созданную базу или создание новой базы.
Фактически от Вас не требуется никаких действий кроме ввода ответов на запросы программы.
@Выход из программы
Я думаю тут все понятно.
@8.1 Заполнение БД
Чтобы заполнить базу в режиме основного меню нажмите цифру "7" и отвечайте на запросы программы. Повторите эту процедуру несколько раз для ввода нескольких записей.
@ 8.2 Сохранение БД
Чтобы сохранить созданную базу в режиме основного меню нажмите цифру "5" и укажите в какой файл Вы хотите записать данные.
@ 8.3 Создание новой БД
Если Вам надо создать новую базу но основе созданной базы - нажмите клавишу "6" и укажите программе какую именно базу Вы хотите создать.
@ 8.4 Загрузка БД
Чтобы загрузить для дальнейшей обработки ранее созданную базу в режиме основного меню нажмите цифру "4" и укажите программе откуда Вы хотите загрузить базу.
@Заключение
В данной курсовой работе были рассмотрены все поставленные задачи и обсуждены общие принципы построения информационных систем и их реализации на языке Пролог.
@Список литературы
И.Братко "Программирование на языке Пролог для искусственного интеллекта"
Л.Стерлинг,Э.Шапиро "Искусство программирования на языке Пролог"
Дж.Доорс "Пролог - язык программирования будущего"