Реферат: Разработка информационно-справочной системы "Зарплата по НИР"

                          Задание 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

          Создать базу 'все о зарпл

еще рефераты
Еще работы по программированию, базе данных