Меню
  Список тем
  Поиск
Полезная информация
  Краткие содержания
  Словари и энциклопедии
  Классическая литература
Заказ книг и дисков по обучению
  Учебники, словари (labirint.ru)
  Учебная литература (Читай-город.ru)
  Учебная литература (book24.ru)
  Учебная литература (Буквоед.ru)
  Технические и естественные науки (labirint.ru)
  Технические и естественные науки (Читай-город.ru)
  Общественные и гуманитарные науки (labirint.ru)
  Общественные и гуманитарные науки (Читай-город.ru)
  Медицина (labirint.ru)
  Медицина (Читай-город.ru)
  Иностранные языки (labirint.ru)
  Иностранные языки (Читай-город.ru)
  Иностранные языки (Буквоед.ru)
  Искусство. Культура (labirint.ru)
  Искусство. Культура (Читай-город.ru)
  Экономика. Бизнес. Право (labirint.ru)
  Экономика. Бизнес. Право (Читай-город.ru)
  Экономика. Бизнес. Право (book24.ru)
  Экономика. Бизнес. Право (Буквоед.ru)
  Эзотерика и религия (labirint.ru)
  Эзотерика и религия (Читай-город.ru)
  Наука, увлечения, домоводство (book24.ru)
  Наука, увлечения, домоводство (Буквоед.ru)
  Для дома, увлечения (labirint.ru)
  Для дома, увлечения (Читай-город.ru)
  Для детей (labirint.ru)
  Для детей (Читай-город.ru)
  Для детей (book24.ru)
  Компакт-диски (labirint.ru)
  Художественная литература (labirint.ru)
  Художественная литература (Читай-город.ru)
  Художественная литература (Book24.ru)
  Художественная литература (Буквоед)
Реклама
Разное
  Отправить сообщение администрации сайта
  Соглашение на обработку персональных данных
Другие наши сайты
Приглашаем посетить
  Бальмонт (balmont.lit-info.ru)

   

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

им. КОСЫГИНА


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


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


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


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


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

гр. 42-96


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

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


МОСКВА

1998

2. ЗАДАНИЕ:



ИСХОДНЫЕ ДАННЫЕ:

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


ПЕРЕЧЕНЬ ПОДЛЕЖАЩИХ РАЗРАБОТКЕ ВОПРОСОВ ( СОДЕРЖАНИЕ РАСЧЕТНО-ПОЯСНИТЕЛЬНОЙ ЗАПИСКИ )


1. Разработать структуры файлов и создать макет базы данных.


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



4. Разраб. формы экранных кадров и меню для ведения базыданных.


5. Составить и отладить программу реализации экранного кадра для

просмотра основных(ой) таблиц(ы).


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

строк в таблицу.


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


8. Составить и отладить процедуры оперативного ведения справочников


9. Разраб. единую систему меню для ведения базы данных и ее обработки с целью получения ведомости.



ПЕРЕЧЕНЬ ГРАФИЧЕСКОГО МАТЕРИАЛА


1. Структуры файлов базы данных и их заполнение для тестового примера.


2. Макеты экранных кадров и состав подсказок для пунктов ожидания

ввода от пользователя.


3. Ведомость, получаемая в результате выполнения тестового примера.


МАТЕМАТИЧЕСКИЕ МОДЕЛИ


Обеспечить модульную структуру программы.

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

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

снабженных комментариями. )


ТЕХНИЧЕСКИЕ СРЕДСТВА:

ПЭВМ IBM


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->

Справка:

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

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

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

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

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

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

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


в) Применяются ли фильтры ?

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

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

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

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


г) Имеются ли связи ”хозяин-слуга” и по каким полям ?

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

Пример:

а) set relat to bb->invnom into cc

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

б) set relat to cc->

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

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

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

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


a) Структура файла aa. dbf :


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

Имя Тип Длина

IDST Символ 3

NAMEST Символ 12

NORMA Число 3


б) Структура файла bb. dbf :


INVNOM VIDPROF DATEPROF IDZAP

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

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

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

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

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

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

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

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

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

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

Имя Тип Длина

INVNOM Символ 3

VIDPROF Символ 12

DATEPROF Дата 8

IDZAP Символ 3


в) Структура файла сс. dbf :


323 1

626 1

4 2

231 3

Имя Тип Длина

INVNOM Символ 3


г) Структура файла dd. dbf :


2 62 20 9 15

231 51 20 10 16

24 74 15 12 18

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

Имя Тип Длина

NORMA Число 3

IDZAPPP Символ 3

IDZAPSP Символ 3

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


6. Принципы подготовки данных для тестового примера и заполнения исходных данных.


Эти данные были выбраны произвольно - “из головы”:

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

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


Идентификатор записи в файле bb. dbf


Норма кол-ва дней между профилактиками была выбрана произвольна.


Дата профилактики выбиралась так, чтобы норма кол-ва дней между профилактиками была превышена для всех видов профилактик.

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


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 ¦

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

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

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

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


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

Московская государственная текстильная академия ( МГТА )



Курсовая работа по курсу :

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


----------------------------------------------------------------------------------а А. Н.

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

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

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

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

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

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

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

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

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


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


Меню № 1:

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

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


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

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

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


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


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

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


Меню № 2:

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

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

При выборе п. 1 мы попадаем в редактор файла aa. dbf - (“Нормативы профилактики оборудования”), где мы можем его просматривать и редактировать.


При выборе п. 2 мы попадаем в редактор файла bb. dbf - (“Профилактика”), где мы можем его просматривать и редактировать.


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


При выборе п. 4 выполняются действия аналогичные п. 4 в меню № 1.


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

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


Клавиши на которые реагирует система:

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

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

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

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

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


Таблицы ведения Б. Д.:

Табл. №1


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

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

¦ ¦

¦ ¦

¦ ¦

¦ ¦

¦ ¦

Тип станка:

Табл. №2


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

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

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

¦ ¦

¦ ¦

¦ ¦

¦ ¦

¦ ¦

¦ ¦

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

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

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


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


9. Структура программы :


а) Содержимое rmk-файла “kursv. rmk”:


objs = main2,aa,util,bb


. prg. obj:

< /a/m/n


RTLINK OUTPUT $* FI $(objs) /PLL:base52


main2. obj : main2. prg

aa. obj : aa. prg

util. obj : util. prg

bb. obj : bb. prg


kursok. exe : main2. obj aa. obj util. obj bb. obj



Программные файлы:

1) aa. prg

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


2) bb. prg

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


3) main2. prg

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

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

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

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

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


4) util. prg

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

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

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

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

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

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


Описание основных подпрограмм:

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

func dbindex(prm)

sscr(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->

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

rscr()

return nil


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

func dbopen

close all

use aa index aa0002

use bb index bb0001 new

use cc index cc0003 new

use dd index dd0004 new


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

FUNCTION dbcompress()

sscr(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

USE

DELETE FILE aa. dbf

RENAME work. dbf TO aa. dbf

ENDIF

COPY TO work

IF ERRORLEVEL() = 0

USE

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

COPY TO work

USE

DELETE FILE dd. dbf

RENAME work. dbf TO dd. dbf

ENDIF

rscr()

RETURN NIL


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

PROCEDURE hlp(callpnt,prm)

LOCAL retcol,crow,ccol

IF prm = NIL

prm := . F.

ENDIF

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")

" / " + 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")

" / " + chr(25) + " / " + CHR(26) + ' / ' ;

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

@ 24,0 SAY 'Enter'

@ 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 " ;

@ 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

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

SET COLOR TO ("r+/n")

" / " + 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)


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

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

set printer on

select dd

zap

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

? lin

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->

select dd

replace dd->invnom with tinvnom

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

replace dd->norma with aa->norma

replace dd->

replace dd->idzapsp with bb->idzap

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

select bb

endif

enddo

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

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

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

endif

skip

enddo

idpop:=dd->

go top

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

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

endif

skip

enddo

select dd

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

skip

enddo

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

? lin

set color to w+/b

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

? lin

set printer off

inkey(0)

return nil


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

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

func sound

tone(300,1)

tone(100,1)

tone(300,1)

tone(100,1)

return nil


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

FUNC sscr(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

ENDIF

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( colr, SETCOLOR() )

AADD( curs, SETCURSOR() )

RETURN . T.


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

FUNC rscr()

LOCAL ln

IF ln == 0

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[5],ln-1)

ASIZE(pos[1],ln-1)

ASIZE(pos[2],ln-1)

SETCOLOR(colr[ln])

ASIZE(curs,ln-1)

RETURN . T.


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

LOCAL ret , ei , i

LOCAL crsm:={ ;

, {KUP , {o o:up() } } ;

, {KPGDN , {o o:pagedown() } } ;

, {KRIGHT , {o o:right() } } ;

, {KLEFT , {o o:left() } } ;

, {KCTRLRIGHT , {o o:panright() } } ;

, {KCTRLLEFT , {o o:panleft() } } ;

, {KEND , {o o:end() } } ;

, {KHOME , {o o:home() } } ;

, {KCTRLEND , {o o:panend() } } ;

, {KCTRLHOME , {o o:panhome() } } }

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

IF i <> 0

ELSE

ret := NIL

ENDIF

RETURN ret


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

IF READINSERT()

READINSERT(. F.)

SETCURSOR(SCINSERT)

ELSE

READINSERT(. T.)

SETCURSOR(SCNORMAL)

ENDIF

RETURN


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

FUNC UpperC(prm)

LOCAL n , i , smb , cs

FOR i = 1 TO n

cs := ASC( smb )

DO CASE

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

cs := cs - 32

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

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

cs := cs - 32

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

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

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

ENDCASE

NEXT

RETURN prm


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

PROCEDURE fquit()

LOCAL reply

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

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

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

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

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

ELSE

QUIT

ENDIF

RETURN


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

PROCEDURE msgs(x,y,m,color)

LOCAL ml,c

IF m = NIL

RETURN

ENDIF

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

RETURN

ENDIF

x := (80-ml)/2

ENDIF

y := 24/2 - 1

ENDIF

<> NIL

c := SETCOLOR(color)

@ y,x SAY m

SETCOLOR(c)

ELSE

@ y,x SAY m

ENDIF

RETURN


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

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)

brws:AddColumn(coln)

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

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

coln:width := 35

brws:AddColumn(coln)

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

" Норма,дней"

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 retfl,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

sscr()

srs()

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

retfl := . F.

DO WHILE. NOT. retfl

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

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)

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

IF blk <> NIL

ELSE

DO CASE

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

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

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

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

SKIP

IF RECNO() = RECCOUNT()+1

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

ENDIF

nrc := 0

CASE nKey = KESC

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

CASE ( nKey = KENTER )

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

aaGet(brws ;

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

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

CASE nKey == KF3

APPEND BLANK

brws:RefreshAll()

ENDCASE

ENDIF

ENDDO

SET RELAT TO

srs(. T.)

rscr()

RETURN ret


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

PROCEDURE aaGet( brws , z0 )

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( KINS, { ReplIns()} )

// эквивалентно Set Key KINS To Procedure ReplIns

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

retcurs := SetCursor( IF(ReadInsert(), SCNORMAL, SCINSERT ) )

sscr()

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

@ brws:nTop-3,0

@ brws:nTop-3,0 SAY z0

hlp("GET")

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

indch := . F.

CASE brws:colpos = 1

w := aa->idst

@ r,c+2 GET w

READ

IF. NOT.( LASTKEY() = KESC ). 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() = KESC ). OR.( aa->

REPLACE aa->namest WITH n

ENDIF

CASE brws:colpos = 3

w := aa->norma

@ r,c+1 GET w

READ

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

REPLACE aa->norma WITH w

ENDIF

ENDCASE

SETCOLOR(retcol)

SETPOS(r,c)

IF indch

ELSE

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

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

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

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

SetCursor(retcurs)

READEXIT(retexit)

SetKey(KINS, retIns)

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

nKey := LASTKEY()

IF nKey == KUP. OR. nKey == KDOWN. OR. ;

nKey == KPGUP. OR. nKey == KPGDN

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

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

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 ¦

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

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



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

им. КОСЫГИНА



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


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


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


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


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

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


МОСКВА

1998

2. ЗАДАНИЕ:


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

и ведения реляционной базы данных.


ИСХОДНЫЕ ДАННЫЕ:

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

результате ее обработки ведомости с частичными и полными суммами.



1. Разработать структуры файлов и создать макет базы данных.



3. Составить и отладить программу получения ведомости.


4. Разраб. формы экранных кадров и меню для ведения базыданных.



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

строк в таблицу.


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


8. Составить и отладить процедуры оперативного ведения справочников

базы данных.


9. Разраб. единую систему меню для ведения базы данных и ее обработки с целью получения ведомости.


10. Разработать систему интерфейса пользователя (подсказки о клавишах, на которые предусмотрена реакция системы и помощь пользователю).


ПЕРЕЧЕНЬ ГРАФИЧЕСКОГО МАТЕРИАЛА


1. Структуры файлов базы данных и их заполнение для тестового примера.


ввода от пользователя.


3. Ведомость, получаемая в результате выполнения тестового примера.


МАТЕМАТИЧЕСКИЕ МОДЕЛИ


Обеспечить модульную структуру программы.

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

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

снабженных комментариями. )


ТЕХНИЧЕСКИЕ СРЕДСТВА:

ПЭВМ IBM

Система программирования Clipper 5. 2



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

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


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

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

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

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


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


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

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

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

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

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

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

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

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

. . . . . . . . . .

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

 


 


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

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

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


б) Как он должен быть упорядочен ?

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

Пример:

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

Справка:

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

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

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

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

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

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

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

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-файлов (имя, тип, формат, каждого поля ):



IDST NAMEST NORMA

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

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

3 Токарный 20

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

Имя Тип Длина

IDST Символ 3

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

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

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

Имя Тип Длина

VIDPROF Символ 12

DATEPROF Дата 8


в) Структура файла сс. dbf :


626 1

4 2

231 3

2 3

Имя Тип Длина

INVNOM Символ 3

IDST Символ 3


г) Структура файла dd. dbf :


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

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



Эти данные были выбраны произвольно - “из головы”:

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

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

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


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


Норма кол-ва дней между профилактиками была выбрана произвольна.


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


7. Система меню.


а) Какие экранные кадры ?


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

Московская государственная текстильная академия ( МГТА )


БАЗА ДАННЫХ Нарушение норм техобслуживания:


Курсовая работа по курсу :

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


*************************


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

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

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


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

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

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



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


Московская государственная текстильная академия ( МГТА )


БАЗА ДАННЫХ Нарушение норм техобслуживания:


Курсовая работа по курсу :

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


студента гр 42/96 Пономарёва А. Н.

*************************


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


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

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

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

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

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

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

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


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

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

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

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/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


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

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


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

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

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

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

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

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

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

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

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

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


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



Курсовая работа по курсу :

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


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

¦ или ¦

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

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

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

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

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

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

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

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


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


Меню № 1:

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

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

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

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


При выборе п. 1, если индексы уже имеются мы попадаем в меню № 2.

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



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

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


Меню № 2:

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

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

“Нормативы профилактики оборудования”), где мы можем его просматривать и редактировать.


При выборе п. 2 мы попадаем в редактор файла bb. dbf - (“Профилактика”), где мы можем его просматривать и редактировать.


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


При выборе п. 4 выполняются действия аналогичные п. 4 в меню № 1.


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

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


Клавиши на которые реагирует система:

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

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

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

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


Табл. №1


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

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

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

¦ ¦

¦ ¦

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

Тип станка:

Табл. №2


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

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

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

¦ ¦

¦ ¦

¦ ¦

¦ ¦

¦ ¦

¦ ¦

¦ ¦

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

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

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

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


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


9. Структура программы :


а) Содержимое rmk-файла “kursv. rmk”:


objs = main2,aa,util,bb


. prg. obj:

CLIPPER $< /a/m/n


RTLINK OUTPUT $* FI $(objs) /PLL:base52


util. obj : util. prg

bb. obj : bb. prg



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


Программные файлы:

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


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


3) main2. prg

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

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

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

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

“горячих” клавишах.


4) util. prg

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

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

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

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

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

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


Описание основных подпрограмм:

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

sscr(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->

use aa

index on aa->idst to aa0002

use cc

index on cc->invnom to cc0003

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

close all

return nil


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

func dbopen

close all

use bb index bb0001 new

use cc index cc0003 new

use dd index dd0004 new

return nil


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

FUNCTION dbcompress()

"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

IF ERRORLEVEL() = 0

USE

DELETE FILE bb. dbf

RENAME work. dbf TO bb. dbf

ENDIF

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

rscr()


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

PROCEDURE hlp(callpnt,prm)

LOCAL retcol,crow,ccol

prm := . F.

ENDIF

crow = ROW()

ccol = COL()

retcol = SETCOLOR("w/n")

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) + ' / ' ;

" PgUp / PgDn " ;

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

@ 23,23 TO 24,23 DOUBLE

"w/n"

"r+/n"

@ 23,54 TO 24,54 DOUBLE

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

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

"r+/n")

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

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

@ 24,0 SAY 'Enter'

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 " ;

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

@ 23,23 TO 24,23 DOUBLE

"w/n"

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

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

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

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

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'

@ 24,55 SAY 'F3'

ENDIF

SET COLOR TO (retcol)

SETPOS(crow,ccol)

RETURN


“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->

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->

replace dd->idzapsp with bb->idzap

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

select bb

endif

enddo

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

idpop:=dd->idzapsp

go top

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


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

func sound

tone(100,1)

tone(300,1)

tone(100,1)

return nil


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

IF t = NIL

ENDIF

IF l = NIL

l := 0

ENDIF

b := MAXROW()

ENDIF

r := MAXCOL()

ENDIF

AADD( wind[3], b )

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

AADD( pos[1], ROW() )

AADD( pos[2], COL() )

AADD( colr, SETCOLOR() )

AADD( curs, SETCURSOR() )

RETURN . T.


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])

SETCURSOR(curs[ln])

RETURN . T.


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

FUNC basemet(cod)

LOCAL crsm:={ ;

{KDOWN , {o o:down() } } ;

, {KUP , {o o:up() } } ;

, {KPGDN , {o o:pagedown() } } ;

, {KRIGHT , {o o:right() } } ;

, {KCTRLRIGHT , {o o:panright() } } ;

, {KCTRLLEFT , {o o:panleft() } } ;

, {KEND , {o o:end() } } ;

, {KHOME , {o o:home() } } ;

, {KCTRLEND , {o o:panend() } } ;

, {KCTRLHOME , {o o:panhome() } } }

IF i <> 0

ret := crsm[i,2]

ELSE

ENDIF

RETURN ret


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

PROCEDURE ReplIns()

IF READINSERT()

READINSERT(. F.)

ELSE

READINSERT(. T.)

SETCURSOR(SCNORMAL)

ENDIF

RETURN


FUNC UpperC(prm)

LOCAL n , i , smb , cs

n := LEN( prm )

smb := SUBSTR( prm , i , 1 )

cs := ASC( smb )

DO CASE

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

cs := cs - 32

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

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

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

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

cs := cs - 80

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

ENDCASE

NEXT


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

PROCEDURE fquit()

LOCAL reply

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

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

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

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

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

ELSE

QUIT

ENDIF

RETURN


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-объекта для просмотра-редактирования

FUNCTION aaCr(t,l,b,r)

LOCAL brws,coln,cblk,chdr

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

cblk := { " " + aa->

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

coln := TBColumnNew(chdr,cblk)

coln:width := 19

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

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

coln := TBColumnNew(chdr,cblk)

coln:width := 35

cblk := { STR( aa->

" Норма,дней"

coln := TBColumnNew(chdr,cblk)

coln:width := 12

brws:AddColumn(coln)

brws:colsep := CHR(186)

brws:headsep := CHR(205)

"w+/b,gr+/rb"

RETURN brws


FUNCTION aaEd(brws)

LOCAL retfl,sel,otb , w

LOCAL ret:=NIL

srs()

SETCOLOR( "N/W" )

CLS

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

hlp("AAED")

SELECT aa

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

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

retfl := . F.

DO WHILE. NOT. retfl

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

ENDDO

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

nrc := RECNO()

rr := ROW()

SETCOLOR("bg+/b")

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

" Тип станка: "

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

SETPOS(rr,cc)

ENDIF

SETCOLOR("gr+/rb")

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

nkey := Inkey(0)

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

IF blk <> NIL

ELSE

DO CASE

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

CASE ( nKey = KF8 )

DELETE

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

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

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

SKIP

SKIP -1

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

ENDIF

brws:RefreshAll()

nrc := 0

CASE nKey = KESC

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

CASE ( nKey = KENTER )

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

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

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

CASE nKey == KF3

APPEND BLANK

brws:RefreshAll()

ENDCASE

ENDIF

ENDDO

srs(. T.)

rscr()

RETURN ret


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

PROCEDURE aaGet( brws , z0 )

LOCAL r , c , w , w2 , otb

LOCAL retcurs,retexit // форма курсора и режим выхода из 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( KINS, { ReplIns()} )

// эквивалентно Set Key KINS To Procedure ReplIns

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

sscr()

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

READ

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

REPLACE aa->idst WITH w

indch := . T.

ENDIF

n := aa->namest

@ r,c+2 GET n

READ

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

REPLACE aa->namest WITH n

ENDIF

CASE brws:colpos = 3

w := aa->norma

READ

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

REPLACE aa->

ENDIF

ENDCASE

SETCOLOR(retcol)

rscr()

SETPOS(r,c)

ELSE

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

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

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

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

SetCursor(retcurs)

READEXIT(retexit)

SetKey(KINS, retIns)

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

IF nKey == KUP. OR. nKey == KDOWN. OR. ;

nKey == KPGUP. OR. nKey == KPGDN

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

KEYBOARD( CHR(nKey) )

ENDIF


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

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

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

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

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



а) Содержимое выводного файла 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


б) Содержимое файла (print. prn), выводимого на принтер:


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

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

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

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

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

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

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

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

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

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