Рефетека.ру / Информатика и програм-ие

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

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

Кафедра ИТ и ВТ.

К У Р С О В А Я Р А Б О Т А

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

по курсу: “Алгоритмические языки и технология програмирования “

Выполнил:

Пономарев А.Н. гр.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 $

.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 = 160 .AND. cs = 224 .AND. cs 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. • Система CLIPPER
  2. • Система CLIPPER
  3. • Программное обеспечение пункта обмена валюты банка
  4. • Технический проект аэрофотосъемки
  5. • Разработка автоматизированной системы учета выбывших из ...
  6. • Fox Pro - реляционная модель данных
  7. • Морские пути. Современные средства морских пассажирских ...
  8. • Дослідження методів чисельного інтегрування
  9. • Автоматизированная система бухгалтерского учета Министерства ...
  10. • Проектирование корпоративных информационных систем и ...
  11. • Острый гнойный ишиоректальный парапроктит
  12. • Биохимические показатели крови человека при сальмонеллезной ...
  13. • Анализ машиночитаемых документов компьютерными средствами
  14. • MS Access
  15. • Автоматизированные банковские системы
  16. • Архитектура последних моделей семейства AS/400
  17. • Создание систем поддержки принятия решений
  18. • Розробка стабілізатора напруги на базі інформаційних ...
  19. • СУБД dBase
Рефетека ру refoteka@gmail.com