Разработка информационно-справочной системы "Зарплата по НИР"
Задание N П-1
На курсовое проектирование по дисциплине "Логическое прог-
раммирование". Студенту Синельникову А.Г. гр. ИЖ-1-95.
1. Тема исследований:
разработк информационно-справочной системы.
2. Исходные данные:
из базы В1 с записями вида
----------------------------------------------------------------Зарплата по НИР
----------------------------------------------------------------ФИО | |Зарплата|выдано по кварталам| |
---------------|Каф.|по |-------------------|всего|остаток
Фамилия|Имя|Отч| |НИР |I |IIа | |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. База данных и способы ее представления
База Данных (БД) - это информация, представленная в виде двумерных таблиц. БД содержит множество строк, каждая из которых соответствует объекту. Для каждого объекта используются определенные независимые позиции, которые называются полями. Представим себе такую БД, содержащую строки и столбцы (простейший случай). Каждая строка, называемая так же записью, соответствует определенному объекту. Каждый столбец содержит значения соответствующих данных об объекте. Например - телефонная книжка:
------------------------------------------|Фамилия |Имя |Отчество |Телефон |
------------------------------------------Иванов Иван Иванович -00-00
Петров Петр Петрович -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)
Выдано за квартал: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. Процедур выполняется до
тех пор пока не кончатся все записи в базе.
При просмотре созданной базы происходита работ c записями
базы @ALEX1. Процедура просмотра созданной базы - @viewbase.
@5.7 Процедура создания новой базы
Эта процедура должна обеспечивать добное создание новой ба-
зы из основной с заданными признаками. Она вызывается из процеду-
ры првления основным меню командой @PROCESS(6).
Процедура имеет свое меню вида:
Создание новой базы
Создать базу по именам и кафедрам - 1
Создать базу 'все о зарплате' - 2
Выход в меню - 3
>_
АЩ,
т.е. пользователю предлагается выбор создания одной из двуха баз,
так же выход из режима.
После вывода в окне этого меню происходита ввода целочислен-
ной переменной @WHAT и в зависимости от ее содержания производит-
ся одна из представленных операций.
A Создание базы по именам и кафедрам
Из основной базы @ALEX берется каждая запись и добавляется во
вторую базу @ALEX1 с далением из нее полей, содержащиха информа-
цию о зарплате. Процесс создания этой базы обеспечиваета процеду-
ра @newbase(1), которая вызывается из процедуры создания базы. За-
тем@ следует просмотр созданной базы с помощью процедуры @viewbase.
AСоздание базы 'все о зарплате'
Из основной базы @ALEX берется каждая запись и добавляется во
вторую базу @ALEX1 с далением из нее полей, содержащиха информа-
цию об имени и кафедре. Процесс создания этойа базы обеспечивает
процедура @newbase(2), которая вызывается иза процедуры создания
базы. Затем@ следует просмотр созданной базы c помощью процедуры
@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
iewbase
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("Выдано за квартал:",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а | |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("Сколько выдали за квартал:"),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("Выдано за квартал:",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("Сколько выдали за квартал:"),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(_),
iewbase,
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(_),
iewbase,
removewindow,!.
/* процедура просмотра созданной базы */
iewbase:-
makewindow(4,2,7,"Просмотp созданной базы",0,0,25,80),
write("------------------------------------------------------------"),nl,
write("а ФИО | |Зарплата|выдано по кварталам| |"),nl,
write("------------|Каф.|по |-------------------|всего|остаток"),nl,
write("Фам.|Имя|Отч| |НИР |I |IIа | |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.
iewbase:-
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" и укажите программе откуда Вы хотите загрузить базу.
@Заключение
В данной курсовой работе были рассмотрены все поставленные задачи и обсуждены общие принципы построения информационных систем и их реализации на языке Пролог.
@Список литературы
И.Братко "Программирование на языке Пролог для искусственного интеллекта"
Л.Стерлинг,Э.Шапиро "Искусство программирования на языке Пролог"
Дж.Доорс "Пролог - язык программирования будущего"