МОСКОВСКАЯГОСУДАРСТВЕННАЯТЕКСТИЛЬНАЯАКАДЕМИЯ
им. КОСЫГИНА
Кафедра ИТи ВТ.
К У Р СО В А Я Р А Б О ТА
Тема : “Разработка програмногообеспечения, ведение базыданных и получениеведомости счастичнымисуммами.“
по курсу:“Алгоритмическиеязыки и технологияпрограмирования“
Выполнил: ПономаревА.Н.
гр.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 ПономарёваА.Н.
*************************
Руководитель:
доц.СтрельниковБ.А.
асс.Степанова О.П.
Сразуприступитьк работе с БазойДанных
Зановопостроить всеиндексы БазыДанных
ПровестикомпрессиюБазы Данных
Выходиз Базы Данных
Московскаягосударственнаятекстильнаяакадемия ( МГТА)
БАЗА ДАННЫХ Нарушениенорм техобслуживания:
Курсоваяработа по курсу :
"Алгоритмическиеязыки обработкиданных и технологияпрограммирования"
студентагр 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 ПономарёваА.Н.
*************************
Руководитель:
доц.СтрельниковБ.А.
асс.Степанова О.П.
Сразуприступитьк работе с БазойДанных
Зановопостроить всеиндексы БазыДанных
ПровестикомпрессиюБазы Данных
Выходиз Базы Данных
Московскаягосударственнаятекстильнаяакадемия ( МГТА)
БАЗА ДАННЫХ Нарушениенорм техобслуживания:
Курсоваяработа по курсу :
"Алгоритмическиеязыки обработкиданных и технологияпрограммирования"
студентагр 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