Смекни!
smekni.com

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

Справка:

Синтаксис:

INDEXON 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)п.п. постоенияиндексов:

funcdb_index(prm)

s_scr(24,0,25,79)

CLOSEALL

SETCOLOR("w/n")

@24,0 CLEAR TO 25,79

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

usebb

indexon bb->invnom + dtoc(bb->dateprof) to bb0001

useaa

indexon aa->idst to aa0002

usecc

indexon cc->invnom to cc0003

usedd

indexon dd->(norma-fkdn) to dd0004

closeall

r_scr()

returnnil


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

funcdb_open

closeall

useaa index aa0002

usebb index bb0001 new

usecc index cc0003 new

usedd index dd0004 new

returnnil


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

FUNCTION db_compress()

s_scr(24,0,25,79)

CLOSEALL

SETCOLOR("w/n")

@24,0 CLEAR TO 25,79

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

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

COPYTO work

IF ERRORLEVEL() = 0

USE

DELETE FILE aa.dbf

RENAME work.dbf TO aa.dbf

ENDIF

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

COPYTO work

IF ERRORLEVEL() = 0

USE

DELETE FILE bb.dbf

RENAME work.dbf TO bb.dbf

ENDIF

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

COPYTO work

IF ERRORLEVEL() = 0

USE

DELETE FILE cc.dbf

RENAME work.dbf TO cc.dbf

ENDIF

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

COPYTO work

IF ERRORLEVEL() = 0

USE

DELETE FILE dd.dbf

RENAME work.dbf TO dd.dbf

ENDIF

CLOSEALL

r_scr()

RETURN NIL


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

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

IFcallpnt = "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"

SETCOLOR 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 - Вставитьстроку '

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

SETCOLOR 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 - Вставитьстроку '

SETCOLOR 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

SETCOLOR TO (retcol)

SETPOS(crow,ccol)

RETURN


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

funcvedom

localtinvnom,sitog,tdata,tidzap,tidst,idpop

setprinter on

selectdd

zap

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

?lin

selectbb

setrelat to bb->invnom into cc

setrelat to cc->idst into aa additive

gotop

sitog:=0

dowhile .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)

selectdd

appendblank

replacedd->invnom with tinvnom

replacedd->fkdn with bb->dateprof-tdata

replacedd->norma with aa->norma

replacedd->idzappp with tidzap

replacedd->idzapsp with bb->idzap

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

selectbb

endif

enddo

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

?lin

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

?lin

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

?lin

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

?lin

selectdd

setrelat to dd->invnom into cc additive

gotop

dowhile .not. eof()

tinvnom:=dd->invnom

idpop:=dd->idzappp

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

selectbb

gotop

dowhile .not. eof()

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

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

endif

skip

enddo

selectdd

idpop:=dd->idzapsp

selectbb

gotop

dowhile .not. eof()

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

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

endif

skip

enddo

selectdd

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

?lin

skip

enddo

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

?lin

setcolor to w+/b

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

?lin

setprinter off

sound()

inkey(0)

returnnil


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

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

funcsound

tone(300,1)

tone(100,1)

tone(300,1)

tone(100,1)

returnnil


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

FUNC s_scr(t,l,b,r)

IFt = NIL

t:= 0

ENDIF

IFl = NIL

l:= 0

ENDIF

IFb = NIL

b:= MAXROW()

ENDIF

IFr = 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)п.п. восстановлениязкрана:

FUNCr_scr()

LOCALln

ln:= LEN(wind[1])

IFln == 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-код нажатойклавиши.

FUNCbasemet(cod)

LOCAL ret , ei , i

LOCALcrsm:={ ;

{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)п.п. переключениярежима вставка/заменаи вида курсора:

PROCEDURERepl_Ins()

IFREADINSERT()

READINSERT(.F.)

SETCURSOR(SC_INSERT)

ELSE

READINSERT(.T.)

SETCURSOR(SC_NORMAL)

ENDIF

RETURN


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

FUNCUpperC(prm)

LOCAL n , i , smb , cs

n:= LEN( prm )

FORi = 1 TO n

smb:= SUBSTR( prm , i , 1 )

cs:= ASC( smb )

DOCASE

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

RETURNprm


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)

LOCALml,c

IF m = NIL

RETURN

ENDIF

ml=LEN(m)

IFml=0 && .OR. ml > 80

RETURN

ENDIF

IFx=NIL // Центр по X

x:= (80-ml)/2

ENDIF

IFy=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)

LOCALret_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

SETORDER TO 2

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

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

ret_fl:= .F.

DOWHILE .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 )

IFblk NIL

EVAL( blk , brws )

ELSE

DOCASE

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

SETRELAT TO

s_r_s(.T.)

r_scr()

RETURNret


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

PROCEDUREaaGet( brws , z0 )

LOCALr , c , w , w2 , otb

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

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

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

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

// а не REFRESHCURRENT() )

LOCALcol

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.

DOCASE

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)

IFindch

brws:RefreshAll()

ELSE

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

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

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

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

SetCursor(retcurs)

READEXIT(retexit)

SetKey(K_INS, retIns)

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

nKey:= LASTKEY()

IFnKey == 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) tobb0001

Справка:

Синтаксис:

INDEXON 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)п.п. постоенияиндексов:

funcdb_index(prm)

s_scr(24,0,25,79)

CLOSEALL

SETCOLOR("w/n")

@24,0 CLEAR TO 25,79

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

usebb

indexon bb->invnom + dtoc(bb->dateprof) to bb0001

useaa

indexon aa->idst to aa0002

usecc

indexon cc->invnom to cc0003

usedd

indexon dd->(norma-fkdn) to dd0004

closeall

r_scr()

returnnil


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

funcdb_open

closeall

useaa index aa0002

usebb index bb0001 new

usecc index cc0003 new

usedd index dd0004 new

returnnil


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

FUNCTION db_compress()

s_scr(24,0,25,79)

CLOSEALL

SETCOLOR("w/n")

@24,0 CLEAR TO 25,79

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

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

COPYTO work

IF ERRORLEVEL() = 0

USE

DELETE FILE aa.dbf

RENAME work.dbf TO aa.dbf

ENDIF

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

COPYTO work

IF ERRORLEVEL() = 0

USE

DELETE FILE bb.dbf

RENAME work.dbf TO bb.dbf

ENDIF

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

COPYTO work

IF ERRORLEVEL() = 0

USE

DELETE FILE cc.dbf

RENAME work.dbf TO cc.dbf

ENDIF

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

COPYTO work

IF ERRORLEVEL() = 0

USE

DELETE FILE dd.dbf

RENAME work.dbf TO dd.dbf

ENDIF

CLOSEALL

r_scr()

RETURN NIL


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

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

IFcallpnt = "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"

SETCOLOR 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 - Вставитьстроку '

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

SETCOLOR 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 - Вставитьстроку '

SETCOLOR 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

SETCOLOR TO (retcol)

SETPOS(crow,ccol)

RETURN


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

funcvedom

localtinvnom,sitog,tdata,tidzap,tidst,idpop

setprinter on

selectdd

zap

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

?lin

selectbb

setrelat to bb->invnom into cc

setrelat to cc->idst into aa additive

gotop

sitog:=0

dowhile .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)

selectdd

appendblank

replacedd->invnom with tinvnom

replacedd->fkdn with bb->dateprof-tdata

replacedd->norma with aa->norma

replacedd->idzappp with tidzap

replacedd->idzapsp with bb->idzap

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

selectbb

endif

enddo

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

?lin

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

?lin

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

?lin

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

?lin

selectdd

setrelat to dd->invnom into cc additive

gotop

dowhile .not. eof()

tinvnom:=dd->invnom

idpop:=dd->idzappp

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

selectbb

gotop

dowhile .not. eof()

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

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

endif

skip

enddo

selectdd

idpop:=dd->idzapsp

selectbb

gotop

dowhile .not. eof()

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

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

endif

skip

enddo

selectdd

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

?lin

skip

enddo

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

?lin

setcolor to w+/b

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

?lin

setprinter off

sound()

inkey(0)

returnnil


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

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

funcsound

tone(300,1)

tone(100,1)

tone(300,1)

tone(100,1)

returnnil


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

FUNC s_scr(t,l,b,r)

IFt = NIL

t:= 0

ENDIF

IFl = NIL

l:= 0

ENDIF

IFb = NIL

b:= MAXROW()

ENDIF

IFr = 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)п.п. восстановлениязкрана:

FUNCr_scr()

LOCALln

ln:= LEN(wind[1])

IFln == 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-код нажатойклавиши.

FUNCbasemet(cod)

LOCAL ret , ei , i

LOCALcrsm:={ ;

{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)п.п. переключениярежима вставка/заменаи вида курсора:

PROCEDURERepl_Ins()

IFREADINSERT()

READINSERT(.F.)

SETCURSOR(SC_INSERT)

ELSE

READINSERT(.T.)

SETCURSOR(SC_NORMAL)

ENDIF

RETURN


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

FUNCUpperC(prm)

LOCAL n , i , smb , cs

n:= LEN( prm )

FORi = 1 TO n

smb:= SUBSTR( prm , i , 1 )

cs:= ASC( smb )

DOCASE

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

RETURNprm


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)

LOCALml,c

IF m = NIL

RETURN

ENDIF

ml=LEN(m)

IFml=0 && .OR. ml > 80

RETURN

ENDIF

IFx=NIL // Центр по X

x:= (80-ml)/2

ENDIF

IFy=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)

LOCALret_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

SETORDER TO 2

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

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

ret_fl:= .F.

DOWHILE .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 )

IFblk NIL

EVAL( blk , brws )

ELSE

DOCASE

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

SETRELAT TO

s_r_s(.T.)

r_scr()

RETURNret


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

PROCEDUREaaGet( brws , z0 )

LOCALr , c , w , w2 , otb

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

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

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

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

// а не REFRESHCURRENT() )

LOCALcol

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.

DOCASE

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)

IFindch

brws:RefreshAll()

ELSE

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

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

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

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

SetCursor(retcurs)

READEXIT(retexit)

SetKey(K_INS, retIns)

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

nKey:= LASTKEY()

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