Задание 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/
_AСодержание
_@стр.
Введение .................................. 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. Разработка процедур
[email protected] Процедура управления основным меню__ _@(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)__, и база загружается из указанного файла.
[email protected] Процедура корректировки базы
Эта процедура должна обеспечивать удобную корректировку за-
писей базы данных. Она вызывается из процедуры управления основ-
ным меню командой _@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-нет) ?
. .
. .
?????????????????????????????????????????????????????????
При вводе единицы происходит ввод каждого поля записи и пос-
ле ввода текущая запись удаляется, и в базу добавляется откоррек-
тированный вариант записи.
При вводе нуля осуществляется переход к следующей записи ба-
зы.
[email protected] Процедура удаления данных
Эта процедура вызывается из процедуры управления основным
меню командой _@PROCESS(2). __Она полность аналогична процедуре кор-
ректировки данных, но работает на удаление записи из базы.
[email protected] Процедура ввода новых данных
Эта процедура должна предоставлять удобный ввод новой запи-
си базы _@ALEX.
Вызывается из процедуры управления основным меню командой
_@PROCESS(7).
После входа в режим ввода данных происходит запрос на ввод
каждого поля записи базы _@ALEX__. И после ввода новая запись добав-
ляется в конец базы с помощью стандартного предиката
_@assertz(alex(FIO,NAME,OT,KAF,NIR,K1,K2,K3,K4,TOTAL,OST)).
[email protected] Процедура просмотра базы
В программе ALEX - "Зарплата по НИР" определены процедуры
просмотра основной базы _@ALEX __и просмота созданной базы. Процеду-
ра создания новой базы рассмотрена в п.5.7.
Обе этих процедуры полностью аналогичны поэтому рассмотрим
их общие свойства.
Эта процедура должна обеспечивать удобный просмотр базы дан-
ных. Она вызывается из процедуры управления основным меню коман-
дой _@PROCESS(3).
После входа в режим просмотра базы происходит вывод шапки
таблицы (вид таблицы взят из задания) и далее с помощью предика-
та _@alex(FIO,NAME,OT,KAF,NIR,K1,K2,K3,K4,TOTAL,OST) __происходит
взятие первой записи базы _@ALEX __и распечатка каждого поля записи в
виде таблицы. Для этого курсор пермещается к началу вывода каж-
дой записи с помощью предиката _@CURSOR. __Процедура выполняется до
тех пор пока не кончатся все записи в базе.
При просмотре созданной базы происходит работа с записями
базы _@ALEX1__. Процедура просмотра созданной базы - _@viewbase__.
[email protected] Процедура создания новой базы
Эта процедура должна обеспечивать удобное создание новой ба-
зы из основной с заданными признаками. Она вызывается из процеду-
ры упрвления основным меню командой _@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.
_@Ввод новых данных
Режим ввода новых данных.
В этом режиме производится ввод новых данных в уже создан-
ную базу или создание новой базы.
Фактически от Вас не требуется никаких действий кроме ввода
ответов на запросы программы.
_@Выход из программы
Я думаю тут все понятно.
[email protected] Заполнение БД
Чтобы заполнить базу в режиме основного меню нажмите цифру
"7" и отвечайте на запросы программы. Повторите эту процедуру
несколько раз для ввода нескольких записей.
_@ 8.2 Сохранение БД
Чтобы сохранить созданную базу в режиме основного меню наж-
мите цифру "5" и укажите в какой файл Вы хотите записать данные.
_@ 8.3 Создание новой БД
Если Вам надо создать новую базу но основе созданной базы -
нажмите клавишу "6" и укажите программе какую именно базу Вы хо-
тите создать.
_@ 8.4 Загрузка БД
Чтобы загрузить для дальнейшей обработки ранее созданную ба-
зу в режиме основного меню нажмите цифру "4" и укажите программе
откуда Вы хотите загрузить базу.
_@Заключение
В данной курсовой работе были рассмотрены все поставленные
задачи и обсуждены общие принципы построения информационных сис-
тем и их реализации на языке Пролог.
_@Список литературы
И.Братко "Программирование на языке Пролог для
искусственного интеллекта"
Л.Стерлинг,Э.Шапиро "Искусство программирования
на языке Пролог"
Дж.Доорс "Пролог - язык программирования будущего"
Не смотря на то, что все материалы на сайте xies.ru носят ознакомительный характер, наша база однозначно может помочь с написанием дипломных работ или рефератов. Каталок настолько внушительный, что у нас вы точно сможете найти отсортированные по тематикам рефераты и курсовые, а также контрольные работы и дипломы. Для тех кто ищет конспекты, тоже найдётся подходящая информация, которую без труда можно скачать бесплатно. Всё для студентов и школьников, в одной базе рефератов!