Реферат: Разработка информационно-справочной системы "Зарплата по НИР"
Задание 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
Создать базу 'все о зарпл