Реферат

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

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



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

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

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

                                                                                                    гр.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. Курсовая Советская политическая система и особенности ее развития в 3050-тые годы ХХ века
2. Реферат Стратегии завоевания расположения и симпатии
3. Реферат на тему Reconciliation Essay Research Paper As humans we
4. Реферат на тему Truth Or Lie Essay Research Paper January
5. Реферат Философия стоицизма 2
6. Контрольная работа по Технологии производства, хранения и переработки продукции растениеводств
7. Диплом на тему Комплекс геофизических исследований скважин Самотлорского месторо
8. Курсовая на тему Анализ инвестиционной политики ОАО Шебекинский маслодельный завод
9. Отчет по практике Отчет по практике в ЗАО Канавинское дорожно-эксплутационное предприятие
10. Реферат на тему Khoisans Essay Research Paper KHOISANSBlack Huntergatherers and