РефератыИнформатика, программированиеВеВедение реляционной БД на яз. CLIPPER 5.02

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


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



им. КОСЫГИНА


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


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


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


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


Выполнил:

Пономарев
А.Н.



гр.42-96


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



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


МОСКВА



1998


2.
ЗАДАНИЕ:

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



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

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



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



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

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

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

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

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

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

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



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

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



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

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

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



базы данных.

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

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

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

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

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


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

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

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


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


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


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



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

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



ПЭВМ IBM



Система
программирования
Clipper 5.2

3.
ИНДИВИДУАЛЬНОЕ
ЗАДАНИЕ.


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


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

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



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



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



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

СС:
1. Инвентарный
номер



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

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



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



между профилактиками



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



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


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



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


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


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


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


. . . . . . . . . .


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



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



а) По какому
файлу проводится
главный цикл
обработки ?



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


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

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


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


Пример:



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


Справка:



Синтаксис:


INDEX
ON
TO


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


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


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


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


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


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


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


Memo-поля
не могут быть
индексированы.

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


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


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


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



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

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


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


Пример:



а) set relat to bb->invnom into cc



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



б) set relat to cc->idst into aa additive



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



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



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


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


5.Структура
dbf-файлов (имя,
тип, формат,
каждого поля
):

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

IDST
NAMEST NORMA



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



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



3 Токарный
20



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


Имя
Тип Длина


IDST
Символ 3


NAMEST
Символ 12


NORMA
Число 3

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


INVNOM VIDPROF DATEPROF IDZAP



24 Смазка
09-01-98 1



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



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



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



626 Смазка
09-01-98 5



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



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



323 Регулировка
28-01-98 8



2 Регулировка
29-01-98 9



231 Регулировка
28-01-98 10



4 Регулировка
19-01-98 11



24 Регулировка
18-01-98 12



626 Чистка
31-03-98 13



323 Чистка
15-04-98 14



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



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



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



24 Чистка
02-04-98 18



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


Имя
Тип Длина


INVNOM
Символ 3



VIDPROF Символ
12



DATEPROF Дата
8


IDZAP
Символ 3

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

INVNOM
IDST


323
1



626 1


4
2



231 3



24 2


2
3



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


Имя
Тип Длина


INVNOM
Символ 3


IDST
Символ 3

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

INVNOM
FKDN NORMA IDZAPPP IDZAPSP


2
62 20 9
15


231
51 20 10
16


24
74 15 12
18


323
77 25 8
14


4
50 15 11
17


626
58 25 7
13



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


Имя
Тип Длина



INVNOM Символ
3


FKDN
Число 3



NORMA Число
3



IDZAPPP Символ
3



IDZAPSP Символ
3


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

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

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


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


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


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


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

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

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

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


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

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

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


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



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


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


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



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


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




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


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




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




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





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



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



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


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

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


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


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


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



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


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




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


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




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




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


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



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



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



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



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



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



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


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



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



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



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



3 ¦
Токарный
¦ 20



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



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


Тип
станка: Строгальный

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



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


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



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



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


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



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



2 ¦
Смазка
¦ 01/09/98



2 ¦
Регулировка
¦ 01/29/98



2 ¦
Чистка
¦ 04/01/98



231 ¦
Смазка
¦ 01/09/98



231 ¦
Регулировка
¦ 01/28/98



231 ¦
Чистка
¦ 03/20/98



24 ¦
Смазка
¦ 01/09/98



24 ¦
Регулировка
¦ 01/18/98



24 ¦
Чистка
¦ 04/02/98



323 ¦
Смазка
¦ 01/09/98



323 ¦
Регулировка
¦ 01/28/98



323 ¦
Чистка
¦ 04/15/98



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


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


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


Дата
профилактики:
01/09/98

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



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


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



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



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


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


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


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


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


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


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


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


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


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


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


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


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



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



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


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


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



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


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



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



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



¦
или ¦



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



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



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



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



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



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



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



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



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


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

Меню
№ 1:



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



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



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



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

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


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


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


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


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

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


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

Меню
№ 2:



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



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



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


При
выборе п.1 мы
попадаем в
редактор файла
aa.dbf - (“Нормативы

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

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

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

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


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

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



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


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


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


Enter
- Выбор задачи
в меню и редактирование
полей в редакторе


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


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


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


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


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


Табл.
№1


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



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



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



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



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



Тип
станка:


Табл.
№2


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



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



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



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



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



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



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



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

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

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

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

objs
= main2,aa,util,bb

.prg.obj:



CLIPPER $< /a/m/n

.obj.exe:



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

main2.obj
: main2.prg


aa.obj
: aa.prg


util.obj
: util.prg


bb.obj
: bb.prg

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

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


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


1)
aa.prg


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


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

2)
bb.prg


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


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

3)
main2.prg


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



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


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


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


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


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

4)
util.prg


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



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



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



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



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



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



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


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


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


func
db_index(prm)


s_scr(24,0,25,79)


CLOSE
ALL


SETCOLOR
("w/n")


@
24,0 CLEAR TO 25,79


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


use
bb


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


use
aa


index
on aa->idst to aa0002


use
cc


index
on cc->invnom to cc0003


use
dd


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


close
all


r_scr()


return
nil

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


func
db_open


close
all


use
aa index aa0002


use
bb index bb0001 new


use
cc index cc0003 new


use
dd index dd0004 new


return
nil

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


FUNCTION
db_compress()



s_scr(24,0,25,79)


CLOSE
ALL



SETCOLOR("w/n")


@
24,0 CLEAR TO 25,79


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


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


COPY
TO work


IF
ERRORLEVEL() = 0


USE



DELETE FILE aa.dbf



RENAME work.dbf TO aa.dbf


ENDIF


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


COPY
TO work


IF
ERRORLEVEL() = 0


USE



DELETE FILE bb.dbf



RENAME work.dbf TO bb.dbf


ENDIF


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


COPY
TO work


IF
ERRORLEVEL() = 0



USE



DELETE FILE cc.dbf



RENAME work.dbf TO cc.dbf



ENDIF


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


COPY
TO work


IF
ERRORLEVEL() = 0



USE



DELETE FILE dd.dbf



RENAME work.dbf TO dd.dbf



ENDIF


CLOSE
ALL



r_scr()


RETURN
NIL

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


PROCEDURE
hlp(callpnt,prm)


LOCAL
retcol,crow,ccol


IF
prm = NIL



prm := .F.


ENDIF


crow
= ROW()


ccol
= COL()


retcol
= SETCOLOR("w/n")


@
22,0 CLEAR TO 24,79


IF
callpnt = "GET"



// исправленный
HLP для GET 26.09.96


@
22,0 SAY "Enter/" + CHR(24) + '/' + CHR(25) +
'/PgUp/PgDn' ;


+
" -Завершить
редактирование
с сохранением
измененного
значения"


@
22,0 SAY "Enter/"+ CHR(24) + '/' + CHR(25) +
'/PgUp/PgDn' COLOR "r+/n"


@
23,1 SAY CHR(26) + ' / ' + CHR(27) + ' / ^' + CHR(26) ;


+
' / ^' + CHR(27) + ' / Home / End - Перемещение
курсора'


@
23,1 SAY CHR(26) + ' / ' + CHR(27) + ' / ^' + CHR(26) ;


+
' / ^' + CHR(27) + ' / Home / End' COLOR "r+/n"


@
24,1 SAY 'Esc - Отменить
редактирование
' ;



+ '( без
сохранения
измененного
значения )'


@
24,1 SAY "Esc" COLOR "r+/n"


ENDIF


IF
callpnt="AAED" .OR. callpnt="BBED"


SET
COLOR TO ("w/n")


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



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


+
' / ^' + CHR(27) + '/ Home / End - Перемещение
курсора'


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


@
23,23 TO 24,23 DOUBLE


@
23,25 SAY 'Esc - Возврат
на шаг назад
' COLOR "w/n"


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


@
23,54 TO 24,54 DOUBLE


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


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


SET
COLOR TO ("r+/n")


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



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


+
' / ^' + CHR(27) + '/ Home / End '


@
24,0 SAY 'Enter'


@
23,55 SAY 'F8'


@
24,55 SAY 'F3'


ENDIF


IF
callpnt="CCED" .OR. callpnt="DDED"


SET
COLOR TO ("w/n")


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



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


+
' / ^' + CHR(27) + '/ Home / End - Перемещение
курсора'


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


@
23,23 TO 24,23 DOUBLE


@
23,25 SAY 'Esc - Возврат
на шаг назад
' COLOR "w/n"


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


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


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


@
23,54 TO 24,54 DOUBLE


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


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


SET
COLOR TO ("r+/n")


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



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


+
' / ^' + CHR(27) + '/ Home / End '


@
24,0 SAY 'Enter'


@
23,55 SAY 'F8'


@
24,55 SAY 'F3'


ENDIF


SET
COLOR TO (retcol)



SETPOS(crow,ccol)


RETURN

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


func
vedom


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


set
printer on


select
dd


zap


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


?
lin


select
bb


set
relat to bb->invnom into cc


set
relat to cc->idst into aa additive


go
top


sitog:=0


do
while .not. eof()


tinvnom:=bb->invnom


tdata:=bb->dateprof


tidzap:=bb->idzap


tidst:=cc->idst


skip


if(bb->invnom=tinvnom).and.(bb->dateprof-tdata>aa->norma)


select
dd


append
blank


replace
dd->invnom with tinvnom


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


replace
dd->norma with aa->norma


replace
dd->idzappp with tidzap


replace
dd->idzapsp with bb->idzap



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


select
bb


endif


enddo


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


?
lin


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


?
lin


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


?
lin


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


?
lin


select
dd


set
relat to dd->invnom into cc additive


go
top


do
while .not. eof()


tinvnom:=dd->invnom


idpop:=dd->idzappp


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


select
bb


go
top


do
while .not. eof()


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


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


endif


skip


enddo


select
dd


idpop:=dd->idzapsp


select
bb


go
top


do
while .not. eof()


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


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


endif


skip


enddo


select
dd


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


?
lin


skip


enddo


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


?
lin


set
color to w+/b


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


?
lin


set
printer off


sound()


inkey(0)


return
nil

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



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


func
sound


tone(300,1)


tone(100,1)


tone(300,1)


tone(100,1)


return
nil

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


FUNC
s_scr(t,l,b,r)


IF
t = NIL


t
:= 0


ENDIF


IF
l = NIL


l
:= 0


ENDIF


IF
b = NIL


b
:= MAXROW()


ENDIF


IF
r = NIL


r
:= MAXCOL()


ENDIF


AADD(
wind[1], t )


AADD(
wind[2], l )


AADD(
wind[3], b )


AADD(
wind[4], r )


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


AADD(
pos[1], ROW() )


AADD(
pos[2], COL() )


AADD(
colr, SETCOLOR() )


AADD(
curs, SETCURSOR() )


RETURN
.T.

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


FUNC
r_scr()


LOCAL
ln


ln
:= LEN(wind[1])


IF
ln == 0


@
24,0 SAY ' Ошибка - стек
для восстановления
параметров
пуст '



INKEY(0)


@
24,0


ENDIF



RESTSCREEN(wind[1,ln], wind[2,ln], wind[3,ln],
wind[4,ln], wind[5,ln] )



ASIZE(wind[1],ln-1)



ASIZE(wind[2],ln-1)



ASIZE(wind[3],ln-1)



ASIZE(wind[4],ln-1)



ASIZE(wind[5],ln-1)



SETPOS( pos[1,ln], pos[2,ln] )



ASIZE(pos[1],ln-1)



ASIZE(pos[2],ln-1)



SETCOLOR(colr[ln])



ASIZE(colr,ln-1)



SETCURSOR(curs[ln])



ASIZE(curs,ln-1)


RETURN
.T.

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


FUNC
basemet(cod)


LOCAL
ret , ei , i


LOCAL
crsm:={ ;



{K_DOWN , {|o| o:down() } } ;



, {K_UP , {|o| o:up() } } ;



, {K_PGDN , {|o| o:pagedown() } } ;



, {K_PGUP , {|o| o:pageup() } } ;



, {K_CTRL_PGDN , {|o| o:gobottom() } } ;



, {K_CTRL_PGUP , {|o| o:gotop() } } ;



, {K_RIGHT , {|o| o:right() } } ;



, {K_LEFT , {|o| o:left() } } ;



, {K_CTRL_RIGHT , {|o| o:panright() } } ;



, {K_CTRL_LEFT , {|o| o:panleft() } } ;



, {K_END , {|o| o:end() } } ;



, {K_HOME , {|o| o:home() } } ;



, {K_CTRL_END , {|o| o:panend() } } ;



, {K_CTRL_HOME , {|o| o:panhome() } } }


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


IF
i 0



ret := crsm[i,2]


ELSE



ret := NIL


ENDIF


RETURN
ret

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


PROCEDURE
Repl_Ins()


IF
READINSERT()



READINSERT(.F.)



SETCURSOR(SC_INSERT)


ELSE



READINSERT(.T.)



SETCURSOR(SC_NORMAL)


ENDIF


RETURN

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


FUNC
UpperC(prm)


LOCAL
n , i , smb , cs


n
:= LEN( prm )


FOR
i = 1 TO n


smb
:= SUBSTR( prm , i , 1 )


cs
:= ASC( smb )


DO
CASE



CASE cs >= 97 .AND. cs = 160 .AND. cs = 224 .AND. cs 80



RETURN


ENDIF


IF
x=NIL // Центр по X


x
:= (80-ml)/2


ENDIF


IF
y=NIL // Центр по Y


y
:= 24/2 - 1


ENDIF


IF
color NIL


c
:= SETCOLOR(color)


@
y,x SAY m



SETCOLOR(c)


ELSE


@
y,x SAY m


ENDIF


RETURN

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


файла
aa.dbf в окне t,l,b,r :


FUNCTION
aaCr(t,l,b,r)


LOCAL
brws,coln,cblk,chdr


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


cblk
:= {|| " " + aa->idst }


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


coln
:= TBColumnNew(chdr,cblk)



coln:width := 19



brws:AddColumn(coln)


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


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


coln
:= TBColumnNew(chdr,cblk)



coln:width := 35



brws:AddColumn(coln)


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


chdr
:= " Норма,дней"


coln
:= TBColumnNew(chdr,cblk)



coln:width := 12



brws:AddColumn(coln)



brws:colsep := CHR(186)



brws:headsep := CHR(205)



brws:colorspec := "w+/b,gr+/rb"


RETURN
brws

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


FUNCTION
aaEd(brws)


LOCAL
ret_fl,sel,otb , w


LOCAL
cc,rr,nrc:=0,i


LOCAL
ret:=NIL


LOCAL
t := brws:nTop , l := brws:nLeft , b := brws:nBottom , r :=
brws:nRight


LOCAL
t_ := 5 , l_ := 6 , b_ := 15 , r_ := 74


s_scr()


s_r_s()



SETCOLOR( "N/W" )


CLS



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


hlp("AAED")


SELECT
aa


SET
ORDER TO 2


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


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


ret_fl
:= .F.


DO
WHILE .NOT. ret_fl


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


DO
WHILE ( NEXTKEY() == 0 ) .AND. ( .NOT. brws:stabilize() )


ENDDO


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


nrc
:= RECNO()


rr
:= ROW()


cc
:= COL()



SETCOLOR("bg+/b")


@
t-2 , l+1 SAY " Нормативы
профилактики
оборудования:"


@
b+2 , l+1 SAY " Тип станка:
"


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



SETPOS(rr,cc)


ENDIF



SETCOLOR("gr+/rb")


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


nkey
:= Inkey(0)


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


blk
:= basemet( nKey )


IF
blk NIL



EVAL( blk , brws )


ELSE


DO
CASE



CASE ( bHotkey := SETKEY( nKey ) ) NIL



EVAL( bHotkey , PROCNAME() , PROCLINE() , READVAR() )



CASE ( nKey = K_F8 )



DELETE



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



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



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



SKIP



SKIP -1



IF RECNO() = RECCOUNT()+1



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



ENDIF



brws:RefreshAll()



nrc := 0



CASE nKey = K_ESC



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



CASE ( nKey = K_ENTER )



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



aaGet(brws ;



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



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



CASE nKey == K_F3



APPEND BLANK



brws:RefreshAll()



ENDCASE


ENDIF


ENDDO


SET
RELAT TO



s_r_s(.T.)


r_scr()


RETURN
ret

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


PROCEDURE
aaGet( brws , z0 )


LOCAL
r , c , w , w2 , otb


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


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


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



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



// а не
REFRESHCURRENT() )


LOCAL
col


r
:= ROW()


c
:= COL()


//
Проверка обновления
экрана, корректности
базы и т.д.



ForceStable(brws)


//
Установка
клавиш Up-Arrow и
Down-Arrow как клавиш
выхода из


//
команды
READ



retexit := READEXIT(.T.)



// Установка
клавиши INS для
переключения



// режима
вставка/замена



// и соответствующего
изменения вида
курсора


retins
:= SetKey( K_INS, {|| Repl_Ins()} )



// эквивалентно
Set Key K_INS To Procedure Repl_Ins



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



retcurs := SetCursor( IF(ReadInsert(), SC_NORMAL,
SC_INSERT ) )



s_scr()


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


@
brws:nTop-3,0


@
brws:nTop-3,0 SAY z0



hlp("GET")



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


indch
:= .F.


DO
CASE


CASE
brws:colpos = 1


w
:= aa->idst


@
r,c+2 GET w



READ



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



REPLACE aa->idst WITH w



indch := .T.



ENDIF


CASE
brws:colpos = 2



n := aa->namest



@ r,c+2 GET n



READ



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



REPLACE aa->namest WITH n



ENDIF


CASE
brws:colpos = 3


w
:= aa->norma


@
r,c+1 GET w



READ



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



REPLACE aa->norma WITH w



ENDIF


ENDCASE



SETCOLOR(retcol)


r_scr()



SETPOS(r,c)


IF
indch



brws:RefreshAll()


ELSE



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


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


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


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



SetCursor(retcurs)



READEXIT(retexit)



SetKey(K_INS, retIns)


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


nKey
:= LASTKEY()


IF
nKey == K_UP .OR. nKey == K_DOWN .OR. ;



nKey == K_PGUP .OR. nKey == K_PGDN


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



KEYBOARD( CHR(nKey) )


ENDIF


RETURN


Примечание:
В отчёте не
описаны п.п.:



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



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



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



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


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

10.
Результаты
тестового
примера:

а)
Содержимое
выводного
файла dd.dbf:

INVNOM
FKDN NORMA IDZAPPP IDZAPSP


2
62 20 9
15


231
51 20 10
16


24
74 15 12
18


323
77 25 8
14


4
50 15 11
17


626
58 25 7
13

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


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


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


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


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


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


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


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


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


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


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


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


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


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


/>


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



им. КОСЫГИНА


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


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


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


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


Выполнил:

Пономарев
А.Н.



гр.42-96


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



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


МОСКВА



1998


2.
ЗАДАНИЕ:

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



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

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



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



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

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

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

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

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

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

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



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

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



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

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

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



базы данных.

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

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

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

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

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


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

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

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


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


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


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



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

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



ПЭВМ IBM



Система
программирования
Clipper 5.2

3.
ИНДИВИДУАЛЬНОЕ
ЗАДАНИЕ.


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


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

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



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



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



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

СС:
1. Инвентарный
номер



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

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



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



между профилактиками



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



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


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



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


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


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


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


. . . . . . . . . .


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



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



а) По какому
файлу проводится
главный цикл
обработки ?



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


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

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


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


Пример:



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


Справка:



Синтаксис:


INDEX
ON
TO


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


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


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


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


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


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


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


Memo-поля
не могут быть
индексированы.

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


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


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


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



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

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


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


Пример:



а) set relat to bb->invnom into cc



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



б) set relat to cc->idst into aa additive



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



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



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


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


5.Структура
dbf-файлов (имя,
тип, формат,
каждого поля
):

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

IDST
NAMEST NORMA



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



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



3 Токарный
20



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


Имя
Тип Длина


IDST
Символ 3


NAMEST
Символ 12


NORMA
Число 3

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


INVNOM VIDPROF DATEPROF IDZAP



24 Смазка
09-01-98 1



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



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



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



626 Смазка
09-01-98 5



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



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



323 Регулировка
28-01-98 8



2 Регулировка
29-01-98 9



231 Регулировка
28-01-98 10



4 Регулировка
19-01-98 11



24 Регулировка
18-01-98 12



626 Чистка
31-03-98 13



323 Чистка
15-04-98 14



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



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



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



24 Чистка
02-04-98 18



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


Имя
Тип Длина


INVNOM
Символ 3



VIDPROF Символ
12



DATEPROF Дата
8


IDZAP
Символ 3

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

INVNOM
IDST


323
1



626 1


4
2



231 3



24 2


2
3



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


Имя
Тип Длина


INVNOM
Символ 3


IDST
Символ 3

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

INVNOM
FKDN NORMA IDZAPPP IDZAPSP


2
62 20 9
15


231
51 20 10
16


24
74 15 12
18


323
77 25 8
14


4
50 15 11
17


626
58 25 7
13



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


Имя
Тип Длина



INVNOM Символ
3


FKDN
Число 3



NORMA Число
3



IDZAPPP Символ
3



IDZAPSP Символ
3


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

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

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


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


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


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


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

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

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

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


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

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

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


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



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


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


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



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


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




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


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




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




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





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



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



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


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

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


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


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


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



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


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




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


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




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




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


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



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



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



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



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



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



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


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



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



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



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



3 ¦
Токарный
¦ 20



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



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


Тип
станка: Строгальный

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



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


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



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



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


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



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



2 ¦
Смазка
¦ 01/09/98



2 ¦
Регулировка
¦ 01/29/98



2 ¦
Чистка
¦ 04/01/98



231 ¦
Смазка
¦ 01/09/98



231 ¦
Регулировка
¦ 01/28/98



231 ¦
Чистка
¦ 03/20/98



24 ¦
Смазка
¦ 01/09/98



24 ¦
Регулировка
¦ 01/18/98



24 ¦
Чистка
¦ 04/02/98



323 ¦
Смазка
¦ 01/09/98



323 ¦
Регулировка
¦ 01/28/98



323 ¦
Чистка
¦ 04/15/98



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


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


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


Дата
профилактики:
01/09/98

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



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


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



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



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


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


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


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


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


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


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


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


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


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


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


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


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



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



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


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


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



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


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



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



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



¦
или ¦



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



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



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



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



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



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



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



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



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


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

Меню
№ 1:



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



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



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



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

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


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


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


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


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

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


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

Меню
№ 2:



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



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



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


При
выборе п.1 мы
попадаем в
редактор файла
aa.dbf - (“Нормативы

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

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

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

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


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

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



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


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


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


Enter
- Выбор задачи
в меню и редактирование
полей в редакторе


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


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


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


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


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


Табл.
№1


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



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



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



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



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



Тип
станка:


Табл.
№2


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



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



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



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



¦
¦



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



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



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



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

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

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

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

objs
= main2,aa,util,bb

.prg.obj:



CLIPPER $< /a/m/n

.obj.exe:



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

main2.obj
: main2.prg


aa.obj
: aa.prg


util.obj
: util.prg


bb.obj
: bb.prg

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

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


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


1)
aa.prg


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


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

2)
bb.prg


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


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

3)
main2.prg


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



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


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


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


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


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

4)
util.prg


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



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



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



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



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



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



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


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


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


func
db_index(prm)


s_scr(24,0,25,79)


CLOSE
ALL


SETCOLOR
("w/n")


@
24,0 CLEAR TO 25,79


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


use
bb


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


use
aa


index
on aa->idst to aa0002


use
cc


index
on cc->invnom to cc0003


use
dd


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


close
all


r_scr()


return
nil

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


func
db_open


close
all


use
aa index aa0002


use
bb index bb0001 new


use
cc index cc0003 new


use
dd index dd0004 new


return
nil

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


FUNCTION
db_compress()



s_scr(24,0,25,79)


CLOSE
ALL



SETCOLOR("w/n")


@
24,0 CLEAR TO 25,79


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


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


COPY
TO work


IF
ERRORLEVEL() = 0


USE



DELETE FILE aa.dbf



RENAME work.dbf TO aa.dbf


ENDIF


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


COPY
TO work


IF
ERRORLEVEL() = 0


USE



DELETE FILE bb.dbf



RENAME work.dbf TO bb.dbf


ENDIF


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


COPY
TO work


IF
ERRORLEVEL() = 0



USE



DELETE FILE cc.dbf



RENAME work.dbf TO cc.dbf



ENDIF


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


COPY
TO work


IF
ERRORLEVEL() = 0



USE



DELETE FILE dd.dbf



RENAME work.dbf TO dd.dbf



ENDIF


CLOSE
ALL



r_scr()


RETURN
NIL

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


PROCEDURE
hlp(callpnt,prm)


LOCAL
retcol,crow,ccol


IF
prm = NIL



prm := .F.


ENDIF


crow
= ROW()


ccol
= COL()


retcol
= SETCOLOR("w/n")


@
22,0 CLEAR TO 24,79


IF
callpnt = "GET"



// исправленный
HLP для GET 26.09.96


@
22,0 SAY "Enter/" + CHR(24) + '/' + CHR(25) +
'/PgUp/PgDn' ;


+
" -Завершить
редактирование
с сохранением
измененного
значения"


@
22,0 SAY "Enter/"+ CHR(24) + '/' + CHR(25) +
'/PgUp/PgDn' COLOR "r+/n"


@
23,1 SAY CHR(26) + ' / ' + CHR(27) + ' / ^' + CHR(26) ;


+
' / ^' + CHR(27) + ' / Home / End - Перемещение
курсора'


@
23,1 SAY CHR(26) + ' / ' + CHR(27) + ' / ^' + CHR(26) ;


+
' / ^' + CHR(27) + ' / Home / End' COLOR "r+/n"


@
24,1 SAY 'Esc - Отменить
редактирование
' ;



+ '( без
сохранения
измененного
значения )'


@
24,1 SAY "Esc" COLOR "r+/n"


ENDIF


IF
callpnt="AAED" .OR. callpnt="BBED"


SET
COLOR TO ("w/n")


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



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


+
' / ^' + CHR(27) + '/ Home / End - Перемещение
курсора'


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


@
23,23 TO 24,23 DOUBLE


@
23,25 SAY 'Esc - Возврат
на шаг назад
' COLOR "w/n"


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


@
23,54 TO 24,54 DOUBLE


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


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


SET
COLOR TO ("r+/n")


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



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


+
' / ^' + CHR(27) + '/ Home / End '


@
24,0 SAY 'Enter'


@
23,55 SAY 'F8'


@
24,55 SAY 'F3'


ENDIF


IF
callpnt="CCED" .OR. callpnt="DDED"


SET
COLOR TO ("w/n")


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



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


+
' / ^' + CHR(27) + '/ Home / End - Перемещение
курсора'


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


@
23,23 TO 24,23 DOUBLE


@
23,25 SAY 'Esc - Возврат
на шаг назад
' COLOR "w/n"


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


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


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


@
23,54 TO 24,54 DOUBLE


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


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


SET
COLOR TO ("r+/n")


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



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


+
' / ^' + CHR(27) + '/ Home / End '


@
24,0 SAY 'Enter'


@
23,55 SAY 'F8'


@
24,55 SAY 'F3'


ENDIF


SET
COLOR TO (retcol)



SETPOS(crow,ccol)


RETURN

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


func
vedom


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


set
printer on


select
dd


zap


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


?
lin


select
bb


set
relat to bb->invnom into cc


set
relat to cc->idst into aa additive


go
top


sitog:=0


do
while .not. eof()


tinvnom:=bb->invnom


tdata:=bb->dateprof


tidzap:=bb->idzap


tidst:=cc->idst


skip


if(bb->invnom=tinvnom).and.(bb->dateprof-tdata>aa->norma)


select
dd


append
blank


replace
dd->invnom with tinvnom


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


replace
dd->norma with aa->norma


replace
dd->idzappp with tidzap


replace
dd->idzapsp with bb->idzap



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


select
bb


endif


enddo


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


?
lin


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


?
lin


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


?
lin


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


?
lin


select
dd


set
relat to dd->invnom into cc additive


go
top


do
while .not. eof()


tinvnom:=dd->invnom


idpop:=dd->idzappp


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


select
bb


go
top


do
while .not. eof()


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


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


endif


skip


enddo


select
dd


idpop:=dd->idzapsp


select
bb


go
top


do
while .not. eof()


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


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


endif


skip


enddo


select
dd


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


?
lin


skip


enddo


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


?
lin


set
color to w+/b


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


?
lin


set
printer off


sound()


inkey(0)


return
nil

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



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


func
sound


tone(300,1)


tone(100,1)


tone(300,1)


tone(100,1)


return
nil

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


FUNC
s_scr(t,l,b,r)


IF
t = NIL


t
:= 0


ENDIF


IF
l = NIL


l
:= 0


ENDIF


IF
b = NIL


b
:= MAXROW()


ENDIF


IF
r = NIL


r
:= MAXCOL()


ENDIF


AADD(
wind[1], t )


AADD(
wind[2], l )


AADD(
wind[3], b )


AADD(
wind[4], r )


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


AADD(
pos[1], ROW() )


AADD(
pos[2], COL() )


AADD(
colr, SETCOLOR() )


AADD(
curs, SETCURSOR() )


RETURN
.T.

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


FUNC
r_scr()


LOCAL
ln


ln
:= LEN(wind[1])


IF
ln == 0


@
24,0 SAY ' Ошибка - стек
для восстановления
параметров
пуст '



INKEY(0)


@
24,0


ENDIF



RESTSCREEN(wind[1,ln], wind[2,ln], wind[3,ln],
wind[4,ln], wind[5,ln] )



ASIZE(wind[1],ln-1)



ASIZE(wind[2],ln-1)



ASIZE(wind[3],ln-1)



ASIZE(wind[4],ln-1)



ASIZE(wind[5],ln-1)



SETPOS( pos[1,ln], pos[2,ln] )



ASIZE(pos[1],ln-1)



ASIZE(pos[2],ln-1)



SETCOLOR(colr[ln])



ASIZE(colr,ln-1)



SETCURSOR(curs[ln])



ASIZE(curs,ln-1)


RETURN
.T.

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


FUNC
basemet(cod)


LOCAL
ret , ei , i


LOCAL
crsm:={ ;



{K_DOWN , {|o| o:down() } } ;



, {K_UP , {|o| o:up() } } ;



, {K_PGDN , {|o| o:pagedown() } } ;



, {K_PGUP , {|o| o:pageup() } } ;



, {K_CTRL_PGDN , {|o| o:gobottom() } } ;



, {K_CTRL_PGUP , {|o| o:gotop() } } ;



, {K_RIGHT , {|o| o:right() } } ;



, {K_LEFT , {|o| o:left() } } ;



, {K_CTRL_RIGHT , {|o| o:panright() } } ;



, {K_CTRL_LEFT , {|o| o:panleft() } } ;



, {K_END , {|o| o:end() } } ;



, {K_HOME , {|o| o:home() } } ;



, {K_CTRL_END , {|o| o:panend() } } ;



, {K_CTRL_HOME , {|o| o:panhome() } } }


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


IF
i 0



ret := crsm[i,2]


ELSE



ret := NIL


ENDIF


RETURN
ret

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


PROCEDURE
Repl_Ins()


IF
READINSERT()



READINSERT(.F.)



SETCURSOR(SC_INSERT)


ELSE



READINSERT(.T.)



SETCURSOR(SC_NORMAL)


ENDIF


RETURN

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


FUNC
UpperC(prm)


LOCAL
n , i , smb , cs


n
:= LEN( prm )


FOR
i = 1 TO n


smb
:= SUBSTR( prm , i , 1 )


cs
:= ASC( smb )


DO
CASE



CASE cs >= 97 .AND. cs = 160 .AND. cs = 224 .AND. cs 80



RETURN


ENDIF


IF
x=NIL // Центр по X


x
:= (80-ml)/2


ENDIF


IF
y=NIL // Центр по Y


y
:= 24/2 - 1


ENDIF


IF
color NIL


c
:= SETCOLOR(color)


@
y,x SAY m



SETCOLOR(c)


ELSE


@
y,x SAY m


ENDIF


RETURN

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


файла
aa.dbf в окне t,l,b,r :


FUNCTION
aaCr(t,l,b,r)


LOCAL
brws,coln,cblk,chdr


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


cblk
:= {|| " " + aa->idst }


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


coln
:= TBColumnNew(chdr,cblk)



coln:width := 19



brws:AddColumn(coln)


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


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


coln
:= TBColumnNew(chdr,cblk)



coln:width := 35



brws:AddColumn(coln)


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


chdr
:= " Норма,дней"


coln
:= TBColumnNew(chdr,cblk)



coln:width := 12



brws:AddColumn(coln)



brws:colsep := CHR(186)



brws:headsep := CHR(205)



brws:colorspec := "w+/b,gr+/rb"


RETURN
brws

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


FUNCTION
aaEd(brws)


LOCAL
ret_fl,sel,otb , w


LOCAL
cc,rr,nrc:=0,i


LOCAL
ret:=NIL


LOCAL
t := brws:nTop , l := brws:nLeft , b := brws:nBottom , r :=
brws:nRight


LOCAL
t_ := 5 , l_ := 6 , b_ := 15 , r_ := 74


s_scr()


s_r_s()



SETCOLOR( "N/W" )


CLS



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


hlp("AAED")


SELECT
aa


SET
ORDER TO 2


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


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


ret_fl
:= .F.


DO
WHILE .NOT. ret_fl


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


DO
WHILE ( NEXTKEY() == 0 ) .AND. ( .NOT. brws:stabilize() )


ENDDO


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


nrc
:= RECNO()


rr
:= ROW()


cc
:= COL()



SETCOLOR("bg+/b")


@
t-2 , l+1 SAY " Нормативы
профилактики
оборудования:"


@
b+2 , l+1 SAY " Тип станка:
"


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



SETPOS(rr,cc)


ENDIF



SETCOLOR("gr+/rb")


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


nkey
:= Inkey(0)


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


blk
:= basemet( nKey )


IF
blk NIL



EVAL( blk , brws )


ELSE


DO
CASE



CASE ( bHotkey := SETKEY( nKey ) ) NIL



EVAL( bHotkey , PROCNAME() , PROCLINE() , READVAR() )



CASE ( nKey = K_F8 )



DELETE



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



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



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



SKIP



SKIP -1



IF RECNO() = RECCOUNT()+1



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



ENDIF



brws:RefreshAll()



nrc := 0



CASE nKey = K_ESC



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



CASE ( nKey = K_ENTER )



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



aaGet(brws ;



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



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



CASE nKey == K_F3



APPEND BLANK



brws:RefreshAll()



ENDCASE


ENDIF


ENDDO


SET
RELAT TO



s_r_s(.T.)


r_scr()


RETURN
ret

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


PROCEDURE
aaGet( brws , z0 )


LOCAL
r , c , w , w2 , otb


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


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


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



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



// а не
REFRESHCURRENT() )


LOCAL
col


r
:= ROW()


c
:= COL()


//
Проверка обновления
экрана, корректности
базы и т.д.



ForceStable(brws)


//
Установка
клавиш Up-Arrow и
Down-Arrow как клавиш
выхода из


//
команды
READ



retexit := READEXIT(.T.)



// Установка
клавиши INS для
переключения



// режима
вставка/замена



// и соответствующего
изменения вида
курсора


retins
:= SetKey( K_INS, {|| Repl_Ins()} )



// эквивалентно
Set Key K_INS To Procedure Repl_Ins



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



retcurs := SetCursor( IF(ReadInsert(), SC_NORMAL,
SC_INSERT ) )



s_scr()


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


@
brws:nTop-3,0


@
brws:nTop-3,0 SAY z0



hlp("GET")



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


indch
:= .F.


DO
CASE


CASE
brws:colpos = 1


w
:= aa->idst


@
r,c+2 GET w



READ



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



REPLACE aa->idst WITH w



indch := .T.



ENDIF


CASE
brws:colpos = 2



n := aa->namest



@ r,c+2 GET n



READ



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



REPLACE aa->namest WITH n



ENDIF


CASE
brws:colpos = 3


w
:= aa->norma


@
r,c+1 GET w



READ



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



REPLACE aa->norma WITH w



ENDIF


ENDCASE



SETCOLOR(retcol)


r_scr()



SETPOS(r,c)


IF
indch



brws:RefreshAll()


ELSE



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


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


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


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



SetCursor(retcurs)



READEXIT(retexit)



SetKey(K_INS, retIns)


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


nKey
:= LASTKEY()


IF
nKey == K_UP .OR. nKey == K_DOWN .OR. ;



nKey == K_PGUP .OR. nKey == K_PGDN


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



KEYBOARD( CHR(nKey) )


ENDIF


RETURN


Примечание:
В отчёте не
описаны п.п.:



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



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



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



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


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

10.
Результаты
тестового
примера:

а)
Содержимое
выводного
файла dd.dbf:

INVNOM
FKDN NORMA IDZAPPP IDZAPSP


2
62 20 9
15


231
51 20 10
16


24
74 15 12
18


323
77 25 8
14


4
50 15 11
17


626
58 25 7
13

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


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


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


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


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


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


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


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


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


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


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


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


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


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

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

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

Слов:36128
Символов:129000
Размер:251.95 Кб.