Реферат

Реферат Ведение реляционной БД на яз. CLIPPER 5.02

Работа добавлена на сайт bukvasha.net: 2015-10-28

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 11.11.2024





МОСКОВСКАЯ ГОСУДАРСТВЕННАЯ ТЕКСТИЛЬНАЯ АКАДЕМИЯ

им. КОСЫГИНА
Кафедра ИТ и ВТ.
К У Р С О В А Я   Р А Б О Т А

Тема :  “Разработка  програмного обеспечения,  ведение базы данных и получение ведомости с частичными суммами.“
по курсу: “Алгоритмические языки и технология програмирования “
   Выполнил:                                                                             Пономарев А.Н.

                                                                                                    гр.42-96                  
   Руководитель:                                                                   доц. Стрельников Б.А.

                                                                                     асс. Степанова О.П.
МОСКВА

                              1998                            

2. ЗАДАНИЕ:
ТЕМА КУРСОВОЙ РАБОТЫ: Реализация алгоритма обработки данных

                       и ведения реляционной базы данных.
ИСХОДНЫЕ ДАННЫЕ:

   Индивидуальное задание с описанием базы данных и получаемой в

   результате ее обработки ведомости с частичными и полными суммами.
ПЕРЕЧЕНЬ ПОДЛЕЖАЩИХ РАЗРАБОТКЕ ВОПРОСОВ  ( СОДЕРЖАНИЕ  РАСЧЕТНО-ПОЯСНИТЕЛЬНОЙ ЗАПИСКИ )
    1. Разработать структуры файлов и создать макет базы данных.
    2. Разработать алгоритм обработки данных для получения ведомости.
    3. Составить и отладить программу получения ведомости.
    4. Разраб. формы экранных кадров и меню для ведения базыданных.
    5. Составить и отладить программу реализации экранного кадра для

       просмотра основных(ой) таблиц(ы).
    6. Дополнить программу п.5 возможностью удаления и добавления

       строк в таблицу.
    7. Дополнить программу п.5 возможностью изменения инф-ии в                                        таблице.
    8. Составить и отладить процедуры оперативного ведения справочников

       базы данных.
    9. Разраб.единую систему меню для ведения базы данных и ее                                                              обработки с целью получения ведомости.
   10. Разработать систему интерфейса пользователя (подсказки о                          клавишах, на которые предусмотрена реакция системы и помощь     пользователю).
ПЕРЕЧЕНЬ ГРАФИЧЕСКОГО МАТЕРИАЛА
1. Структуры файлов базы данных и их заполнение для тестового примера.
2. Макеты экранных кадров и состав подсказок для пунктов ожидания

   ввода от пользователя.
3. Ведомость, получаемая в результате выполнения тестового примера.
МАТЕМАТИЧЕСКИЕ МОДЕЛИ
  Обеспечить модульную структуру программы.

  ( программа состоит из нескольких PRG-файлов, включая PRG-файл

  типовых утилит. Каждый PRG-файл состоит из функций или процедур,

  снабженных комментариями. )
ТЕХНИЧЕСКИЕ СРЕДСТВА:

       ПЭВМ  IBM

       Система программирования  Clipper 5.2





































      3. ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ.




      Имеются  файлы: АА - нормативы профилактики оборудования,

        ВВ - профилактики и СС - состав оборудования

     

    АА:  1. Идентификатор типа станка    ВВ: 1. Инвентарный номер станка

             2. Наименование типа станка             2. Вид профилактики

             3. Норма кол-ва дней между               3. Дата профилактики

                профилактиками                                4. Идентификатор записи

 

    СС:  1. Инвентарный номер

              2. Идентификатор типа станка

        

            Выявить все случаи превышения нормативных интервалов между профилактиками и вывести их в выводной файл DD:

                                                                                      1. Инв.№                                                                                                                                          2. Фактическое кол-во дней

                                                                                          между профилактиками

                                                                                       3. Нормативное кол-во дней                                                                                                      4. Иден-тор записи пред. проф-ки

                                                                                      5. Иден-тор записи след. проф-ки

На принтер вывести ведомость, упорядоченную по убыванию кол-ва просроченных дней:

                                     Нарушения норм техобслуживания

Инв.№ /Тип  Дата/Вид пред.проф-ки  Дата /Вид след.проф-ки  Просрочено, дней

Инв.№ /Тип  Дата /Вид пред.проф-ки  Дата /Вид след.проф-ки Просрочено, дней

Инв.№ /Тип  Дата /Вид пред.проф-ки  Дата /Вид след.проф-ки Просрочено, дней

                        .           .           .           .           .           .           .           .           .           .

                                   Общее кол-во дней просрочки            СУММА          

        
                                                                                                                   
4.Анализ обработки БД для её получения :

а) По какому файлу проводится главный цикл обработки ?

    Главный цикл обработки в подпрограмме vedom - (п.п., которая осущест-

вляет выявление всех случаев превышения нормативных интервалов между профилактиками, вывод их в выводной файл “DD”, а также осуществляет выдачу ведомости на принтер) проводится по файлу bb.dbf .
б) Как он должен быть упорядочен ?

    Он должен быть упорядочен в хронологическом порядке.

Пример:

              index on bb->invnom + dtoc(bb->dateprof) to bb0001

Справка:

                                        Синтаксис:

     INDEX ON <ключевое выражение> TO <имя индексного файла>

INDEX - команда обработки базы данных, которая создает файлы,           

содержащие индексы базы данных на основе значения аргумента <ключевое выражение>. При использовании индексного файла записи базы данных обрабатываются в последовательности, заданной ключевым выражением, однако физический порядок следования записей базы данных остается неизменным.  INDEX обеспечивает последовательность записей,             

упорядоченную по значениям ключевого выражения. Для ключей типа         

CHARACTER - в соответствии со значением ASCII кода каждого символа      

внутри строки, для ключей типа NUMERIC - в соответствии с числовым      

порядком, для ключей типа дата - в хронологическом порядке и для

логических - считается, что истина (.Т.) - более высокого порядка.

Memo-поля не могут быть индексированы.
в) Применяются ли фильтры ?

    Хотя команда SET FILTER делает так, что файл в рабочей области          

выглядит состоящим из подмножества записей, на самом деле                

последовательно обрабатываются все его записи.

    Фильтры не применяются, т.к время работы с фильтрованной и нефильтрованной рабочей областью оказывается одним и тем же.                                    
г) Имеются ли связи ”хозяин-слуга” и по каким полям ?

    В подпрограмме vedom имеются связи.

Пример:

              а) set relat to bb->invnom into cc

                  Связь по полю “invnom”.

              б) set relat to cc->idst into aa additive

                  Связь по полю “idst”.

              в) set relat to dd->invnom into cc additive

                  Связь по полю “invnom”.

...............................................................................................................................

5.Структура dbf-файлов (имя, тип, формат, каждого поля ):
a) Структура   файла   aa.dbf :


 

         IDST         NAMEST               NORMA

             1            Строгальный              25

             2            Сверлильный             15

             3            Токарный                   20

 ......................................................................................................

   Имя               Тип             Длина

   IDST              Символ           3

   NAMEST       Символ           12

   NORMA        Число              3
б) Структура   файла   bb.dbf :
        INVNOM         VIDPROF         DATEPROF        IDZAP                                          

              24                 Смазка              09-01-98               1                                              

              4                   Смазка              09-01-98               2                                              

              231               Смазка              09-01-98               3                                               

              2                   Смазка              09-01-98               4                                              

              626               Смазка              09-01-98             5                                              

              323               Смазка              09-01-98             6                                              

              626               Регулировка     01-02-98                7                                             

              323               Регулировка     28-01-98                8                                             

              2                   Регулировка     29-01-98                9                                              

              231               Регулировка     28-01-98                10                                          

              4                   Регулировка     19-01-98                11                                            

              24                 Регулировка     18-01-98                12                                           

              626               Чистка              31-03-98                13                                             

              323               Чистка              15-04-98                14                                             

              2                   Чистка              01-04-98                15                                             

              231               Чистка              20-03-98                16                                             

              4                   Чистка              10-03-98                17                                             

              24                 Чистка              02-04-98                18                                            

 ......................................................................................................

    Имя                 Тип            Длина

    INVNOM        Символ           3

    VIDPROF       Символ           12

    DATEPROF    Дата                8

    IDZAP            Символ            3
в) Структура   файла   сс.dbf :
    INVNOM         IDST

         323                1

         626                  1

         4                      2

         231                  3

         24                    2

         2                      3

 ......................................................................................................

    Имя               Тип             Длина

    INVNOM      Символ           3

    IDST             Символ           3
г) Структура   файла   dd.dbf :
INVNOM       FKDN       NORMA      IDZAPPP       IDZAPSP                                           

      2                 62                20                  9                   15                                                

      231             51                20                  10                 16                                             

      24               74                15                  12                 18                                              

      323             77                25                  8                   14                                              

      4                 50                15                  11                 17                                               

      626             58                25                   7                  13                                              

   .....................................................................................................

      Имя                 Тип            Длина

      INVNOM        Символ          3

      FKDN             Число             3

      NORMA         Число             3

      IDZAPPP        Символ          3

      IDZAPSP        Символ          3

.................................................................................................................................

































6. Принципы подготовки данных для тестового примера и       заполнения исходных данных.
Эти данные были выбраны произвольно - “из головы”:

  1) Идентификатор типа станка   

  2) Инвентарный номер станка

  3) Вид профилактики

  4) Наименование типа станка

 

Идентификатор записи в файле bb.dbf заполнялся по убыванию (от 1 до 18), где 1- первая запись, а 18- последняя.
Норма кол-ва дней между профилактиками была выбрана произвольна.
Дата профилактики выбиралась так, чтобы норма кол-ва дней между профилактиками была превышена для всех видов профилактик.

...............................................................................................................................
7. Система меню.
а) Какие экранные кадры ?

 

   Экранный кадр № 1:


            Московская государственная текстильная академия ( МГТА )
                 БАЗА  ДАННЫХ Нарушение норм техобслуживания:
                                          Курсовая работа по курсу  :

    "Алгоритмические языки обработки данных и технология программирования"
                                                         студента гр 42/96 Пономарёва А.Н.

                                                                   *************************
                                                         Руководитель:

                                                                               доц. Стрельников Б.А.

                                                                               асс. Степанова О.П.
                             

                           Сразу приступить к работе с Базой Данных

                            Заново построить все индексы Базы Данных

                            Провести компрессию Базы Данных
                            Выход из Базы Данных


   Экранный кадр № 2:




            Московская государственная текстильная академия ( МГТА )
                 БАЗА  ДАННЫХ Нарушение норм техобслуживания:
                                          Курсовая работа по курсу  :

    "Алгоритмические языки обработки данных и технология программирования"
                                                         студента гр 42/96 Пономарёва А.Н.

                                                                   *************************
                                                         Руководитель:

                                                                               доц. Стрельников Б.А.

                                                                               асс. Степанова О.П.
                           Выберите одну из следующих задач

                           Ведение файла "Нормативы профилактики оборудования"

                           Ведение файла "Профилактика"

                           Получение ведомости нарушение норм техобслуживания

                           Выход из Базы Данных





  Экранный кадр № 3:



                   Нормативы профилактики оборудования:
    Идент. типа станка       Наименование типа станка        Норма,дней

  ------------------------------------------------------------------------------------------

         1                             ¦             Строгальный                     ¦     25

         2                             ¦             Сверлильный                    ¦     15

         3                             ¦             Токарный                           ¦     20

                                        ¦                                                         ¦

                                        ¦                                                         ¦

                                        ¦                                                               ¦

                                        ¦                                                               ¦

                                        ¦                                                               ¦

                                        ¦                                                               ¦

                                        ¦                                                               ¦

                                        ¦                                                               ¦

                                        ¦                                                               ¦ 

  -------------------------------------------------------------------------------------------

    Тип станка:  Строгальный
­/ ¯ / ® / ¬ / ^® PgUp / PgDn  / ^¬/ Home / End  - Перемещение курсора

                                         ¦ Esc - Возврат на шаг назад   ¦F8 - Удалить строку

Enter - Редактирование  ¦                                                 ¦F3 - Вставить строку




   Экранный кадр № 4:



                                         Профилактики:
      Инв.№ станка          Вид профилактики        Дата профилактики

  ----------------------------------------------------------------------------------------

         2                        ¦     Смазка                        ¦     01/09/98

         2                        ¦     Регулировка               ¦       01/29/98

         2                        ¦     Чистка                        ¦      04/01/98

         231                    ¦     Смазка                        ¦      01/09/98

         231                    ¦     Регулировка               ¦       01/28/98

         231                    ¦     Чистка                        ¦      03/20/98

         24                      ¦     Смазка                        ¦      01/09/98

         24                      ¦     Регулировка               ¦       01/18/98

         24                      ¦     Чистка                        ¦      04/02/98

         323                    ¦     Смазка                        ¦      01/09/98

         323                    ¦     Регулировка               ¦       01/28/98

         323                    ¦     Чистка                         ¦     04/15/98

  ----------------------------------------------------------------------------------------

   Инв.№ станка:  2

   Вид профилактики: Смазка

   Дата профилактики: 01/09/98
­/ ¯ / ® / ¬ / ^® PgUp / PgDn  / ^¬/ Home / End  - Перемещение курсора

                                         ¦ Esc - Возврат на шаг назад  ¦F8 - Удалить строку

Enter - Редактирование  ¦                                                ¦F3 - Вставить строку




   Экранный кадр № 5:


                             Таблица нарушение норм техобслуживания:

------------------------------------------------------------------------------------------------------------

¦ Инв.  ¦ Наименование ¦   Дата   ¦ Вид предвор.    ¦   Дата   ¦  вид след.         ¦Просроч.¦

¦номер ¦ типа станка     ¦              ¦ профилактики  ¦              ¦ профилактики ¦   дней    ¦

¦------------------------------------------------------------------------------------------------------------¦

¦  24     ¦ Сверлильный   ¦01/18/98¦ Регулировка    ¦04/02/98¦  Чистка            ¦     59       ¦

¦  323   ¦ Строгальный    ¦01/28/98¦ Регулировка    ¦04/15/98¦  Чистка            ¦     52       ¦

¦  2       ¦ Токарный         ¦01/29/98¦ Регулировка    ¦04/01/98¦  Чистка            ¦     42       ¦

¦  4       ¦ Сверлильный   ¦01/19/98¦ Регулировка    ¦03/10/98¦  Чистка            ¦      35      ¦

¦  626   ¦ Строгальный    ¦02/01/98¦ Регулировка    ¦03/31/98¦  Чистка            ¦      33      ¦

¦  231   ¦ Токарный         ¦01/28/98¦ Регулировка    ¦03/20/98¦  Чистка            ¦      31      ¦

-------------------------------------------------------------------------------------------------------------

            Всего просроченно дней  -  252




   Экранный кадр № 6:



            Московская государственная текстильная академия ( МГТА )
                 БАЗА  ДАННЫХ Нарушение норм техобслуживания:
                                      Курсовая работа по курсу  :

    "Алгоритмические языки обработки данных и технология программирования"
          ----------------------------------------------------------------------------------а А.Н.

          ¦      Сохранить все внесенные изменения и продолжить           ¦*****

          ¦ работу с Базой данных - т.е. сделать промежуточный SAVE  ¦

          ¦                                             или                                               ¦

          ¦    Завершить работу с базой данных с сохранением всех         ¦.А.

          ¦                                            изменений                                          ¦.

          ¦       Сохранить и продолжить          Завершить работу              ¦

          ----------------------------------------------------------------------------------

                      Выберите одну из следующих задач

               Ведение файла "Нормативы профилактики оборудования"

               Ведение файла "Профилактика"

               Получение ведомости нарушение норм техобслуживания

               Выход из Базы Данных




б) Пункты меню, что в них делается ?
     Меню № 1:

                                  1) Сразу приступить к работе с Базой Данных

                          2) Заново построить все индексы Базы Данных

                          3) Провести компрессию Базы Данных

                          4) Выход из Базы Данных
     При выборе п.1, если индексы уже имеются мы попадаем в меню № 2.

     При выборе п.2 заново происходит построение всех индексов Б.Д .

     При выборе п.3 производится компрессия (уплотнение) Б.Д .  

     При выборе п.4 появляется горизонтальное подменю:
                           а) Сохранить и продолжить        б) Завершить работу
      П.а) Сохранить все внесенные изменения и продолжить

      П.б) Завершить работу с базой данных с сохранением всех изменений
      Меню № 2:

                          1) Ведение файла "Нормативы профилактики                                                           оборудования"

                          2) Ведение файла "Профилактика"                                                                        3) Получение ведомости нарушение норм техобслуживания

                          4) Выход из Базы Данных

    При выборе п.1 мы попадаем в редактор файла aa.dbf - (“Нормативы                                                                                     профилактики оборудования”), где мы можем его просматривать и редактировать.     
    При выборе п.2 мы попадаем в редактор файла bb.dbf - (“Профилактика”), где мы можем его просматривать и редактировать.
    При выборе п.3 происходит выявление всех случаев превышения нормативных интервалов между профилактиками, вывод их в выводной файл “DD”, а также выдача ведомости на принтер.
    При выборе п.4 выполняются действия аналогичные п.4 в меню № 1.

.................................................................................................................................



8. Ведение БД .

        Какими табл. представлено ведение БД, по какой табл. указывается текущая рабочая область, её слуги, колонки таблицы, набор клавиш на которые предусмотрена реакция системы.
        Клавиши на которые реагирует система:

­/ ¯ / ® / ¬ /; PgUp / PgDn; Home / End - Перемещение курсора

Enter - Выбор задачи в меню и редактирование полей в редакторе

Esc - Возврат на шаг назад. Отмена редактирования (без сохранения                изменненого значения)

F8 - Удалить строку 

F3 - Вставить строку

F10 - Выход из задачи с сохранением всей информации или выход без сохранения информации
                                         Таблицы ведения Б.Д.:

   
Табл. №1



                      Нормативы профилактики оборудования:

    Идент. типа станка       Наименование типа станка      Норма, дней

  -----------------------------------------------------------------------------------------------

                                        ¦                                                      ¦

                                        ¦                                                      ¦

                                        ¦                                                           ¦

                                        ¦                                                           ¦

                                        ¦                                                           ¦

 ------------------------------------------------------------------------------------------------

    Тип станка:

Табл. №2



                                                 Профилактики:

       Инв.№ станка          Вид профилактики        Дата профилактики

  ----------------------------------------------------------------------------------------------

                                 ¦                                              ¦ 

                                   ¦                                              ¦          

                                   ¦                                              ¦          

                                   ¦                                              ¦          

                                   ¦                                              ¦          

                                   ¦                                              ¦          

                                   ¦                                              ¦          

                                   ¦                                              ¦          

                                   ¦                                              ¦          

                                   ¦                                              ¦          

------------------------------------------------------------------------------------------------

   Инв.№ станка: 

   Вид профилактики:

   Дата профилактики:



.................................................................................................................................



 9. Структура программы :
а) Содержимое rmk-файла “kursv.rmk”:
objs = main2,aa,util,bb
.prg.obj:

    CLIPPER $< /a/m/n
.obj.exe:

     RTLINK OUTPUT $* FI  $(objs) /PLL:base52
main2.obj : main2.prg

aa.obj :    aa.prg

util.obj :  util.prg

bb.obj :    bb.prg
kurs_ok.exe : main2.obj aa.obj util.obj bb.obj
б) Имена и содержание prg-файлов. По каждой функции: имя, назначение, параметры, тип данных и смысл, возвращенное значение, рабочие перемен-ные и их назначение.
                                            Программные файлы:

1) aa.prg

    В этой программе реализовано:

1. Создание  TBrowse-объекта  для просмотра-редактирования  файла aa.dbf  в окне. 
2) bb.prg

    В этой программе реализовано:

1. Создание  TBrowse-объекта  для просмотра-редактирования  файла bb.dbf  в окне. 
3) main2.prg

   В этой программе реализовано:

      1.Организация меню.

      2. Индексирование файлов.      

      3. Уплотнение файла .

      4. Выявление всех случаев превышения нормативных интервалов между                                            профилактиками, вывод их в выводной файл “DD”, а также выдача    ведомости на принтер.

      5. Вывод на экран информации о “горячих” клавишах.
 4) util.prg

     Эта программа содержит набор стандартных утилит:

         1. Сохранение экрана, восстановление экрана.

         2. Перевод в верхний регистр как латиницы, так и кириллицы.

         3. Координаты, сообщение, цвет.

         4. Выход из задачи с сохранением всей информации - реакция на                  клавишу F10.

         5. Подача звукового сигнала для сигнализации успешного выполнения

             поставленной задачи:
                                 Описание основных подпрограмм:     

1) п.п. постоения индексов:

func db_index(prm)

s_scr(24,0,25,79)

CLOSE ALL

SETCOLOR ("w/n")

@ 24,0  CLEAR TO  25,79

@ 24,6 SAY "Ждите идет индексирование! " COLOR "w+*/n"

use bb

index on bb->invnom + dtoc(bb->dateprof) to bb0001

use aa

index on aa->idst to aa0002

use cc

index on cc->invnom to cc0003

use dd

index on dd->(norma-fkdn) to dd0004

close all

r_scr()

return nil



2) п.п. открытия индексов:

func db_open

close all

use aa index aa0002

use bb index bb0001 new

use cc index cc0003 new

use dd index dd0004 new

return nil
3) п.п. уплотнения Б.Д. :

FUNCTION  db_compress()

  s_scr(24,0,25,79)

  CLOSE ALL

  SETCOLOR("w/n")

  @ 24,0 CLEAR TO 25,79

  @ 24,6 SAY  "Ждите идет уплотнение !"  COLOR ("w+*/n")

  USE  aa         // уплотнение  файла aa.dbf

  COPY TO work

     IF  ERRORLEVEL() = 0

       USE

       DELETE FILE  aa.dbf

       RENAME  work.dbf  TO  aa.dbf

     ENDIF

  USE  bb          // уплотнение  файла bb.dbf

  COPY TO work

     IF  ERRORLEVEL() = 0

       USE

       DELETE FILE  bb.dbf

       RENAME  work.dbf  TO  bb.dbf

     ENDIF

    USE  cc          // уплотнение  файла cc.dbf

    COPY TO work

      IF  ERRORLEVEL() = 0

        USE

        DELETE FILE  cc.dbf

        RENAME  work.dbf  TO  cc.dbf

      ENDIF

    USE  dd           // уплотнение  файла dd.dbf

    COPY TO work

      IF  ERRORLEVEL() = 0

        USE

        DELETE FILE  dd.dbf

        RENAME  work.dbf  TO  dd.dbf

      ENDIF

     CLOSE ALL

     r_scr()

 RETURN  NIL
4) п.п. выдачи информации о клавишах, на которые реагирует система                                                    ”Help”:

PROCEDURE hlp(callpnt,prm)

    LOCAL  retcol,crow,ccol

    IF  prm = NIL

         prm := .F.

    ENDIF

    crow = ROW()

    ccol = COL()

    retcol = SETCOLOR("w/n")

    @ 22,0 CLEAR TO 24,79

   IF callpnt = "GET"

                              //     исправленный HLP для GET 26.09.96

    @ 22,0  SAY   "Enter/" + CHR(24) + '/' + CHR(25) + '/PgUp/PgDn' ;

        +        " -Завершить редактирование с сохранением измененного значения"

    @ 22,0  SAY   "Enter/"+ CHR(24) + '/' + CHR(25) + '/PgUp/PgDn'   COLOR "r+/n"

    @ 23,1  SAY   CHR(26) + ' / ' + CHR(27) + ' / ^' + CHR(26) ;

        + ' / ^' + CHR(27)  + ' / Home / End    - Перемещение курсора'

    @ 23,1  SAY   CHR(26) + ' / ' + CHR(27) + ' / ^' + CHR(26) ;

        + ' / ^' + CHR(27)  + ' / Home / End'  COLOR "r+/n"

    @ 24,1  SAY    'Esc - Отменить редактирование ' ;

                                        + '( без сохранения измененного значения )'

    @ 24,1  SAY   "Esc"     COLOR "r+/n"

  ENDIF

IF  callpnt="AAED" .OR.  callpnt="BBED"

    SET COLOR TO ("w/n")

    @ 22,1  SAY   chr(24) + " / " + chr(25)  + " / " + CHR(26) + ' / ' ;

                  + CHR(27) + ' / ^' + CHR(26) + " PgUp / PgDn " ;

        + ' / ^' + CHR(27)  + '/ Home / End    - Перемещение курсора'

    @ 24,0  SAY   'Enter - Редактирование '

    @ 23,23 TO 24,23  DOUBLE

    @ 23,25  SAY 'Esc - Возврат на шаг назад   '  COLOR "w/n"

    @ 23,25  SAY 'Esc'  COLOR "r+/n"

    @ 23,54 TO 24,54  DOUBLE

    @ 23,55  SAY     'F8 - Удалить строку   '

    @ 24,55  SAY     'F3 - Вставить строку  '

    SET COLOR TO ("r+/n")

    @ 22,1  SAY   chr(24) + " / " + chr(25)  + " / " + CHR(26) + ' / ' ;

                  + CHR(27) + ' / ^' + CHR(26) + " PgUp / PgDn " ;

        + ' / ^' + CHR(27)  + '/ Home / End '

    @ 24,0   SAY   'Enter'

    @ 23,55  SAY   'F8'

    @ 24,55  SAY   'F3'

ENDIF

IF  callpnt="CCED" .OR.  callpnt="DDED"

    SET COLOR TO ("w/n")

    @ 22,1  SAY   chr(24) + " / " + chr(25)  + " / " + CHR(26) + ' / ' ;

                  + CHR(27) + ' / ^' + CHR(26) + " PgUp / PgDn " ;

        + ' / ^' + CHR(27)  + '/ Home / End    - Перемещение курсора'

    @ 24,0  SAY   'Enter - Редактирование '

    @ 23,23 TO 24,23  DOUBLE

    @ 23,25  SAY 'Esc - Возврат на шаг назад   '  COLOR "w/n"

    @ 23,25  SAY 'Esc'  COLOR "r+/n"

    @ 24,25  SAY '^Enter - Выбор значения      '  COLOR "w/n"

    @ 24,25  SAY '^Enter'  COLOR "r+/n"

    @ 23,54 TO 24,54  DOUBLE

    @ 23,55  SAY     'F8 - Удалить строку   '

    @ 24,55  SAY     'F3 - Вставить строку  '

    SET COLOR TO ("r+/n")

    @ 22,1  SAY   chr(24) + " / " + chr(25)  + " / " + CHR(26) + ' / ' ;

                  + CHR(27) + ' / ^' + CHR(26) + " PgUp / PgDn " ;

        + ' / ^' + CHR(27)  + '/ Home / End '

    @ 24,0   SAY   'Enter'

    @ 23,55  SAY   'F8'

    @ 24,55  SAY   'F3'

ENDIF

    SET COLOR TO (retcol)

    SETPOS(crow,ccol)

 RETURN
5) п.п. выявления всех случаев превышения нормативных интервалов между                                            профилактиками, вывода их в выводной файл “DD”, а также выдачи ведомости на принтер:

 func vedom

local tinvnom,sitog,tdata,tidzap,tidst,idpop

set printer on

select dd

zap

lin:=space(17)+"Таблица нарушение норм техобслуживания:"

? lin

select bb

set relat to bb->invnom into cc

set relat to cc->idst into aa additive

go top

sitog:=0

do while .not. eof()

tinvnom:=bb->invnom

tdata:=bb->dateprof

tidzap:=bb->idzap

tidst:=cc->idst

skip

if(bb->invnom=tinvnom).and.(bb->dateprof-tdata>aa->norma)

 select dd

 append blank

 replace dd->invnom with tinvnom

 replace dd->fkdn with bb->dateprof-tdata

 replace dd->norma with aa->norma

 replace dd->idzappp with tidzap

 replace dd->idzapsp with bb->idzap

 sitog:=sitog+(dd->fkdn-dd->norma)

 select bb

endif

enddo

lin:="+-----------------------------------------------------------------------------+"

? lin

lin:="¦ Инв.¦ Наименование ¦  Дата  ¦ Вид предвор. ¦  Дата  ¦  вид след.   ¦Просроч.¦"

? lin

lin:="¦номер¦ типа станка  ¦        ¦ профилактики ¦        ¦ профилактики ¦  дней  ¦"

? lin

lin:="¦-----+--------------+--------+--------------+--------+--------------+--------¦"

? lin

select dd

set relat to dd->invnom into cc additive

go top

do while .not. eof()

tinvnom:=dd->invnom

idpop:=dd->idzappp

lin:="¦ "+dd->invnom+" ¦ "

select bb

go top

do while .not. eof()

if(tinvnom=bb->invnom).and.(idpop=bb->idzap)

lin:=lin+aa->namest+" ¦"+dtoc(bb->dateprof)+"¦ "+bb->vidprof

endif

skip

enddo

select dd

idpop:=dd->idzapsp

select bb

go top

do while .not. eof()

if(tinvnom=bb->invnom).and.(idpop=bb->idzap)

lin:=lin+" ¦"+dtoc(bb->dateprof)+"¦  "+bb->vidprof+"¦ "

endif

skip

enddo

select dd

lin:=lin+str(dd->fkdn-dd->norma,4)+"   ¦"

? lin

skip

enddo

lin:="+-----------------------------------------------------------------------------+"

? lin

set color to w+/b

lin:=" Всего просроченно дней  -"+str(sitog,5)

? lin

set printer off

sound()

inkey(0)

return nil
6) п.п. подачи звукового сигнала для сигнализации успешного выполнения

    поставленной задачи:

func sound

tone(300,1)

tone(100,1)

tone(300,1)

tone(100,1)

return nil
7) п.п. сохранения зкрана:

FUNC  s_scr(t,l,b,r)

     IF t = NIL

       t := 0

     ENDIF

     IF l = NIL

       l := 0

     ENDIF

     IF b = NIL

       b := MAXROW()

     ENDIF

     IF r = NIL

       r := MAXCOL()

     ENDIF

     AADD( wind[1], t )

     AADD( wind[2], l )

     AADD( wind[3], b )

     AADD( wind[4], r )

     AADD( wind[5], SAVESCREEN(t,l,b,r) )

     AADD( pos[1], ROW() )

     AADD( pos[2], COL() )

     AADD( colr, SETCOLOR() )

     AADD( curs, SETCURSOR() )

   RETURN .T.
8) п.п. восстановления зкрана:

FUNC r_scr()

    LOCAL ln

    ln := LEN(wind[1])

    IF ln == 0

     @ 24,0 SAY ' Ошибка - стек для восстановления параметров пуст '

     INKEY(0)

     @ 24,0

    ENDIF

    RESTSCREEN(wind[1,ln], wind[2,ln], wind[3,ln], wind[4,ln], wind[5,ln] )

    ASIZE(wind[1],ln-1)

    ASIZE(wind[2],ln-1)

    ASIZE(wind[3],ln-1)

    ASIZE(wind[4],ln-1)

    ASIZE(wind[5],ln-1)

    SETPOS( pos[1,ln], pos[2,ln] )

    ASIZE(pos[1],ln-1)

    ASIZE(pos[2],ln-1)

    SETCOLOR(colr[ln])

    ASIZE(colr,ln-1)

    SETCURSOR(curs[ln])

    ASIZE(curs,ln-1)

   RETURN .T.
9) п.п. определения - нажата ли клавиша типового метода, если да - то возвращает блок кода с соответствующим методом, если нет - то возвращает NIL. Параметр функции - INKEY-код нажатой клавиши.

FUNC basemet(cod)

    LOCAL  ret , ei , i

    LOCAL crsm:={ ;

             {K_DOWN        ,   {|o| o:down()     }   } ;

           , {K_UP          ,   {|o| o:up()       }   } ;

           , {K_PGDN        ,   {|o| o:pagedown() }   } ;

           , {K_PGUP        ,   {|o| o:pageup()   }   } ;

           , {K_CTRL_PGDN   ,   {|o| o:gobottom() }   } ;

           , {K_CTRL_PGUP   ,   {|o| o:gotop()    }   } ;

           , {K_RIGHT       ,   {|o| o:right()    }   } ;

           , {K_LEFT        ,   {|o| o:left()     }   } ;

           , {K_CTRL_RIGHT  ,   {|o| o:panright() }   } ;

           , {K_CTRL_LEFT   ,   {|o| o:panleft()  }   } ;

           , {K_END         ,   {|o| o:end()   }   } ;

           , {K_HOME        ,   {|o| o:home()  }   } ;

           , {K_CTRL_END    ,   {|o| o:panend()   }   } ;

           , {K_CTRL_HOME   ,   {|o| o:panhome()  }   }    }

  i := ASCAN( crsm, {|ei| cod = ei[1] } )

     IF  i <> 0

        ret :=  crsm[i,2]

     ELSE

        ret := NIL

     ENDIF

  RETURN  ret
10) п.п. переключения режима вставка/замена и вида курсора:

PROCEDURE Repl_Ins()

     IF READINSERT()

          READINSERT(.F.)

          SETCURSOR(SC_INSERT)

     ELSE

           READINSERT(.T.)

           SETCURSOR(SC_NORMAL)

     ENDIF

RETURN
11) п.п. перевода в верхний регистр латиницы и кириллицы:

FUNC UpperC(prm)

  LOCAL  n , i , smb ,  cs

  n := LEN( prm )

  FOR i = 1  TO   n

     smb := SUBSTR( prm , i , 1 )

      cs := ASC( smb )

      DO CASE

        CASE  cs >= 97  .AND.  cs <= 122

          cs := cs - 32

          prm := STUFF( prm , i , 1 , CHR( cs ) )

        CASE  cs >= 160 .AND.  cs <= 175

          cs := cs - 32

          prm := STUFF( prm , i , 1 , CHR( cs ) )

        CASE  cs >= 224 .AND.  cs <= 239

          cs := cs - 80

          prm := STUFF( prm , i , 1 , CHR( cs ) )

      ENDCASE

  NEXT

RETURN prm
12) п.п.  выхода из задачи с сохранением всей информации - реакция на клавишу F10:

PROCEDURE  fquit()

   LOCAL  reply

          reply := ALERT("Сохранить все внесенные изменения и продолжить;" ;

           + "работу с Базой данных - т.е. сделать промежуточный SAVE  или;" ;

           + " Завершить работу с базой данных с сохранением всех изменений ;";

           ,  {" Сохранить и продолжить " , " Завершить работу " }  )

          IF ( reply = 1 ) .OR. ( reply = 0 )

             DBCOMMITALL()

          ELSE

              QUIT

          ENDIF

RETURN
13) п.п. вывода сообщения на экран с заданными координатами и цветом:

PROCEDURE   msgs(x,y,m,color)

LOCAL ml,c

   IF  m = NIL

       RETURN

   ENDIF

  ml=LEN(m)

  IF ml=0 && .OR. ml > 80

       RETURN

  ENDIF

  IF x=NIL        // Центр по X

      x := (80-ml)/2

   ENDIF

  IF y=NIL        //  Центр по Y

     y := 24/2 - 1

  ENDIF

  IF  color <>  NIL

      c := SETCOLOR(color)

      @  y,x  SAY m

      SETCOLOR(c)

  ELSE

      @  y,x  SAY m

  ENDIF

RETURN
14) п.п. создания  TBrowse-объекта  для просмотра-редактирования

   файла  aa.dbf в окне t,l,b,r :

 FUNCTION  aaCr(t,l,b,r)

 LOCAL  brws,coln,cblk,chdr

 brws := TBrowseDb(t,l,b,r)

 cblk := {||  "     " + aa->idst }

 chdr := "Идент. типа станка"

 coln := TBColumnNew(chdr,cblk)

 coln:width := 19

 brws:AddColumn(coln)

 cblk := {|| "      " + aa->namest}

 chdr := "     Наименование типа станка"

 coln := TBColumnNew(chdr,cblk)

 coln:width := 35

 brws:AddColumn(coln)

 cblk := {|| STR( aa->norma,7) }

 chdr := " Норма,дней"

 coln := TBColumnNew(chdr,cblk)

 coln:width := 12

 brws:AddColumn(coln)

 brws:colsep := CHR(186)

 brws:headsep := CHR(205)

 brws:colorspec := "w+/b,gr+/rb"

RETURN  brws
15) п.п. просмотра файла aa.dbf с обработкой нажимаемых клавиш и вызовом соответствующих методов или пользовательских функций:

FUNCTION  aaEd(brws)

LOCAL ret_fl,sel,otb , w

 LOCAL  cc,rr,nrc:=0,i

 LOCAL  ret:=NIL

 LOCAL  t := brws:nTop , l := brws:nLeft , b := brws:nBottom , r := brws:nRight

 LOCAL  t_ := 5 , l_ := 6 , b_ := 15 , r_ :=  74

  s_scr()

  s_r_s()

  SETCOLOR( "N/W" )

  CLS

  SETCOLOR( "gr+/b,w+/gr")

hlp("AAED")

SELECT  aa

SET ORDER TO 2

  @ t-2 , l-1  CLEAR TO   b+2 , r+1

  @ b+1, l  TO  b+1, r

  ret_fl := .F.

DO WHILE  .NOT.  ret_fl

    **  оптимизированная с использованием буфера клавиатуры стабилизация

    DO  WHILE ( NEXTKEY() == 0 )  .AND. ( .NOT.  brws:stabilize() )

    ENDDO

 IF  ( NEXTKEY() == 0 ) .AND.  ( RECNO() <> nrc)

  nrc := RECNO()

  rr := ROW()

  cc := COL()

  SETCOLOR("bg+/b")

  @ t-2 , l+1  SAY  "                Нормативы профилактики оборудования:"

  @ b+2 , l+1 SAY " Тип станка: "

  @ b+2 , COL()+1 SAY aa->namest COLOR "w+/b"

  SETPOS(rr,cc)

 ENDIF

  SETCOLOR("gr+/rb")

  **  ожидаем нажатия клавиши

  nkey := Inkey(0)

  // если нажата клавиша типового метода - вызовем его

  blk :=  basemet( nKey )

   IF blk <> NIL

      EVAL( blk , brws )

   ELSE

      DO CASE

        CASE  ( bHotkey := SETKEY( nKey ) ) <> NIL

              EVAL( bHotkey , PROCNAME() , PROCLINE() , READVAR() )

        CASE ( nKey = K_F8 )

              DELETE

                             // потрогаем файловый указатель, если

                             // возвращаетя EOF() - .T. после Down-Up,

                             //  значит файл пуст

          SKIP

          SKIP -1

          IF RECNO() = RECCOUNT()+1

                ret_fl := .T.    // завершение просмотра

          ENDIF

          brws:RefreshAll()

          nrc := 0

        CASE nKey = K_ESC

             ret_fl := .T.    // завершение просмотра

        CASE ( nKey = K_ENTER )

                            // Редактирование текущего элемента данных

             aaGet(brws  ;

                 , " Редактирование файла aa.dbf"  )

             nrc := 0    // обновить верхнюю строку

        CASE nKey == K_F3

             APPEND BLANK

             brws:RefreshAll()

    ENDCASE

  ENDIF

 ENDDO

 SET RELAT TO

 s_r_s(.T.)

 r_scr()

RETURN ret
16) п.п. выполнения GET в текущей колонке файла aa.dbf:

PROCEDURE aaGet( brws , z0 )

    LOCAL r , c , w , w2  , otb

    LOCAL retcurs,retexit    // форма курсора и режим выхода из  READ

    LOCAL  retins, retcol    // режим вставка-замена в READ

    LOCAL indch := .F.  // флаг изменений значений полей, входящих в

                         // индекснове выражение (тогда нужно REFRESHALL(),

                         //    а не  REFRESHCURRENT() )

    LOCAL col

    r := ROW()

    c := COL()

    // Проверка обновления экрана, корректности базы и т.д.

    ForceStable(brws)

    //  Установка клавиш Up-Arrow и Down-Arrow как клавиш выхода из

    //                                            команды    READ

    retexit := READEXIT(.T.)

                        // Установка клавиши INS для переключения

                        //  режима вставка/замена

                        // и соответствующего изменения вида курсора

    retins :=  SetKey( K_INS, {|| Repl_Ins()} )

                 //   эквивалентно    Set Key  K_INS  To Procedure  Repl_Ins

                // Установка вида курсора по текущему состоянию режима

    retcurs :=  SetCursor( IF(ReadInsert(), SC_NORMAL, SC_INSERT ) )

    s_scr()

    retcol := SETCOLOR("w+/g")

    @ brws:nTop-3,0

    @ brws:nTop-3,0 SAY z0

    hlp("GET")

    SETCOLOR("gr+/n,w+/g")

    indch := .F.

  DO CASE

    CASE  brws:colpos =  1

         w := aa->idst

         @ r,c+2 GET w

         READ

         IF .NOT.( LASTKEY() = K_ESC ).OR.( aa->idst == w )

           REPLACE aa->idst WITH w

           indch := .T.

          ENDIF

      CASE  brws:colpos =  2

          n := aa->namest

          @ r,c+2 GET n

          READ

          IF .NOT.( LASTKEY() = K_ESC ).OR.( aa->namest == n )

             REPLACE aa->namest WITH n

          ENDIF

    CASE  brws:colpos =  3

         w := aa->norma

         @ r,c+1 GET w

         READ

         IF .NOT.( ( LASTKEY() = K_ESC ) .OR. ( aa->norma = w ) )

            REPLACE aa->norma WITH w

         ENDIF

  ENDCASE

  SETCOLOR(retcol)

  r_scr()

  SETPOS(r,c)

  IF indch

    brws:RefreshAll()

  ELSE

     brws:RefreshCurrent()   // Обеспечить перерисовку текущей строки,

  ENDIF                     //  поскольку изменялся элемент данных

   //   Восстановление  формы курсора и режима выхода из READ по стрелкам

   //        и процедуры по клавише  K_INS

      SetCursor(retcurs)

      READEXIT(retexit)

      SetKey(K_INS, retIns)

    // Проверка требования ухода с текущей записи после GET

    nKey := LASTKEY()

    IF nKey == K_UP .OR. nKey == K_DOWN .OR. ;

        nKey == K_PGUP .OR. nKey == K_PGDN

        // управление курсором -- переход к другой записи

        KEYBOARD( CHR(nKey) )

    ENDIF

RETURN





Примечание: В отчёте не описаны п.п.:

    а) для создания  TBrowse-объекта  для просмотра-редактирования файла       bb.dbf в окне t,l,b,r ;

    б) для просмотра файла bb.dbf с обработкой нажимаемых клавиш и вызовом соответствующих методов или пользовательских функций;

    в) для выполнения GET в текущей колонке файла bb.dbf:

Т.к. эти подпрограммы практически аналогичны подпрограммам для файла aa.dbf !!!

.................................................................................................................................





10. Результаты тестового примера:
  а) Содержимое  выводного файла dd.dbf:
INVNOM       FKDN       NORMA      IDZAPPP       IDZAPSP                                           

      2                 62                20                  9                   15                                                

      231             51                20                  10                 16                                             

      24               74                15                  12                 18                                              

      323             77                25                  8                   14                                              

      4                 50                15                  11                 17                                               

      626             58                25                   7                  13                                              
  б) Содержимое  файла (print.prn), выводимого на принтер:
                             Таблица нарушение норм техобслуживания:

-----------------------------------------------------------------------------------------------------------------

¦ Инв.  ¦ Наименование ¦   Дата    ¦ Вид предвор.    ¦   Дата   ¦  вид след.         ¦ Просроч.¦

¦номер ¦ типа станка      ¦              ¦ профилактики  ¦              ¦ профилактики ¦    дней     ¦

¦----------------------------------------------------------------------------------------------------------------¦

¦  24     ¦ Сверлильный   ¦01/18/98 ¦ Регулировка     ¦04/02/98 ¦  Чистка            ¦     59        ¦

¦  323   ¦ Строгальный    ¦01/28/98 ¦ Регулировка     ¦04/15/98 ¦  Чистка            ¦     52       ¦

¦  2       ¦ Токарный         ¦01/29/98 ¦ Регулировка     ¦04/01/98 ¦  Чистка            ¦     42       ¦

¦  4       ¦ Сверлильный   ¦01/19/98 ¦ Регулировка     ¦03/10/98 ¦  Чистка            ¦      35      ¦

¦  626   ¦ Строгальный    ¦02/01/98 ¦ Регулировка     ¦03/31/98 ¦  Чистка            ¦      33      ¦

¦  231   ¦ Токарный         ¦01/28/98 ¦ Регулировка     ¦03/20/98 ¦  Чистка            ¦      31      ¦

-----------------------------------------------------------------------------------------------------------------

            Всего просроченно дней  -  252

1. Реферат на тему War Of Roses Essay Research Paper The
2. Статья Памятник Н. В. Гоголю на Никитском бульваре в Москве.
3. Реферат на тему Personal Statement Essay Research Paper Personal Statement 2
4. Реферат на тему Теория личности Юнга
5. Реферат Комунікативний підхід у вивченні граматики
6. Сочинение на тему Анализ стихотворения Н Гумилёва Жираф
7. Доклад на тему Экологическая демография
8. Реферат Феномен как организационная культура
9. Реферат на тему Ebola And Marburg Viruses Essay Research Paper
10. Реферат Методология конституционного права