Реферат: Ведение реляционной БД на яз. 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

cs := cs — 32

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

CASE cs >= 160 .AND. cs

cs := cs — 32

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

CASE cs >= 224 .AND. cs

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



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

им. КОСЫГИНА


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


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


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


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


Выполнил: Пономарев А.Н.

гр.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

cs := cs — 32

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

CASE cs >= 160 .AND. cs

cs := cs — 32

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

CASE cs >= 224 .AND. cs

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

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