МОСКОВСКАЯ
ГОСУДАРСТВЕННАЯ
ТЕКСТИЛЬНАЯ
АКАДЕМИЯ
им. КОСЫГИНА
Кафедра ИТ
и ВТ.
К У Р С
О В А Я Р А Б О Т
А
Тема : “Разработка
програмного
обеспечения,
ведение базы
данных и получение
ведомости с
частичными
суммами.“
по курсу:
“Алгоритмические
языки и технология
програмирования
“
Выполнил:
Пономарев
А.Н.
гр.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 <= 122
cs := cs - 32
prm := STUFF( prm , i , 1 , CHR( cs ) )
CASE cs >= 160 .AND. cs <= 175
cs := cs - 32
prm := STUFF( prm , i , 1 , CHR( cs ) )
CASE cs >= 224 .AND. cs <= 239
cs := cs - 80
prm := STUFF( prm , i , 1 , CHR( cs ) )
ENDCASE
NEXT
RETURN
prm
12)
п.п. выхода из
задачи с сохранением
всей информации
- реакция на
клавишу F10:
PROCEDURE
fquit()
LOCAL
reply
reply := ALERT("Сохранить
все внесенные
изменения и
продолжить;"
;
+ "работу с
Базой данных
- т.е. сделать
промежуточный
SAVE или;" ;
+ " Завершить
работу с базой
данных с сохранением
всех изменений
;";
, {" Сохранить
и продолжить
" , " Завершить
работу " } )
IF ( reply = 1 ) .OR. ( reply = 0 )
DBCOMMITALL()
ELSE
QUIT
ENDIF
RETURN
13)
п.п. вывода сообщения
на экран с заданными
координатами
и цветом:
PROCEDURE
msgs(x,y,m,color)
LOCAL
ml,c
IF
m = NIL
RETURN
ENDIF
ml=LEN(m)
IF
ml=0 && .OR. ml > 80
RETURN
ENDIF
IF
x=NIL // Центр по X
x
:= (80-ml)/2
ENDIF
IF
y=NIL // Центр по Y
y
:= 24/2 - 1
ENDIF
IF
color <> NIL
c
:= SETCOLOR(color)
@
y,x SAY m
SETCOLOR(c)
ELSE
@
y,x SAY m
ENDIF
RETURN
14)
п.п. создания
TBrowse-объекта для
просмотра-редактирования
файла
aa.dbf в окне t,l,b,r :
FUNCTION
aaCr(t,l,b,r)
LOCAL
brws,coln,cblk,chdr
brws
:= TBrowseDb(t,l,b,r)
cblk
:= {|| " " + aa->idst }
chdr
:= "Идент. типа
станка"
coln
:= TBColumnNew(chdr,cblk)
coln:width := 19
brws:AddColumn(coln)
cblk
:= {|| " " + aa->namest}
chdr
:= " Наименование
типа станка"
coln
:= TBColumnNew(chdr,cblk)
coln:width := 35
brws:AddColumn(coln)
cblk
:= {|| STR( aa->norma,7) }
chdr
:= " Норма,дней"
coln
:= TBColumnNew(chdr,cblk)
coln:width := 12
brws:AddColumn(coln)
brws:colsep := CHR(186)
brws:headsep := CHR(205)
brws:colorspec := "w+/b,gr+/rb"
RETURN
brws
15)
п.п. просмотра
файла aa.dbf с обработкой
нажимаемых
клавиш и вызовом
соответствующих
методов или
пользовательских
функций:
FUNCTION
aaEd(brws)
LOCAL
ret_fl,sel,otb , w
LOCAL
cc,rr,nrc:=0,i
LOCAL
ret:=NIL
LOCAL
t := brws:nTop , l := brws:nLeft , b := brws:nBottom , r :=
brws:nRight
LOCAL
t_ := 5 , l_ := 6 , b_ := 15 , r_ := 74
s_scr()
s_r_s()
SETCOLOR( "N/W" )
CLS
SETCOLOR( "gr+/b,w+/gr")
hlp("AAED")
SELECT
aa
SET
ORDER TO 2
@
t-2 , l-1 CLEAR TO b+2 , r+1
@
b+1, l TO b+1, r
ret_fl
:= .F.
DO
WHILE .NOT. ret_fl
**
оптимизированная
с использованием
буфера клавиатуры
стабилизация
DO
WHILE ( NEXTKEY() == 0 ) .AND. ( .NOT. brws:stabilize() )
ENDDO
IF
( NEXTKEY() == 0 ) .AND. ( RECNO() <> nrc)
nrc
:= RECNO()
rr
:= ROW()
cc
:= COL()
SETCOLOR("bg+/b")
@
t-2 , l+1 SAY " Нормативы
профилактики
оборудования:"
@
b+2 , l+1 SAY " Тип станка:
"
@
b+2 , COL()+1 SAY aa->namest COLOR "w+/b"
SETPOS(rr,cc)
ENDIF
SETCOLOR("gr+/rb")
**
ожидаем нажатия
клавиши
nkey
:= Inkey(0)
//
если нажата
клавиша типового
метода - вызовем
его
blk
:= basemet( nKey )
IF
blk <> NIL
EVAL( blk , brws )
ELSE
DO
CASE
CASE ( bHotkey := SETKEY( nKey ) ) <> NIL
EVAL( bHotkey , PROCNAME() , PROCLINE() , READVAR() )
CASE ( nKey = K_F8 )
DELETE
// потрогаем
файловый указатель,
если
// возвращаетя
EOF() - .T. после Down-Up,
// значит
файл пуст
SKIP
SKIP -1
IF RECNO() = RECCOUNT()+1
ret_fl := .T. // завершение
просмотра
ENDIF
brws:RefreshAll()
nrc := 0
CASE nKey = K_ESC
ret_fl := .T. // завершение
просмотра
CASE ( nKey = K_ENTER )
// Редактирование
текущего элемента
данных
aaGet(brws ;
, " Редактирование
файла aa.dbf" )
nrc := 0 // обновить
верхнюю строку
CASE nKey == K_F3
APPEND BLANK
brws:RefreshAll()
ENDCASE
ENDIF
ENDDO
SET
RELAT TO
s_r_s(.T.)
r_scr()
RETURN
ret
16)
п.п. выполнения
GET в текущей колонке
файла aa.dbf:
PROCEDURE
aaGet( brws , z0 )
LOCAL
r , c , w , w2 , otb
LOCAL
retcurs,retexit // форма курсора
и режим выхода
из READ
LOCAL
retins, retcol // режим
вставка-замена
в READ
LOCAL
indch := .F. // флаг изменений
значений полей,
входящих в
// индекснове
выражение
(тогда нужно
REFRESHALL(),
// а не
REFRESHCURRENT() )
LOCAL
col
r
:= ROW()
c
:= COL()
//
Проверка обновления
экрана, корректности
базы и т.д.
ForceStable(brws)
//
Установка
клавиш Up-Arrow и
Down-Arrow как клавиш
выхода из
//
команды
READ
retexit := READEXIT(.T.)
// Установка
клавиши INS для
переключения
// режима
вставка/замена
// и соответствующего
изменения вида
курсора
retins
:= SetKey( K_INS, {|| Repl_Ins()} )
// эквивалентно
Set Key K_INS To Procedure Repl_Ins
// Установка
вида курсора
по текущему
состоянию
режима
retcurs := SetCursor( IF(ReadInsert(), SC_NORMAL,
SC_INSERT ) )
s_scr()
retcol
:= SETCOLOR("w+/g")
@
brws:nTop-3,0
@
brws:nTop-3,0 SAY z0
hlp("GET")
SETCOLOR("gr+/n,w+/g")
indch
:= .F.
DO
CASE
CASE
brws:colpos = 1
w
:= aa->idst
@
r,c+2 GET w
READ
IF .NOT.( LASTKEY() = K_ESC ).OR.( aa->idst == w )
REPLACE aa->idst WITH w
indch := .T.
ENDIF
CASE
brws:colpos = 2
n := aa->namest
@ r,c+2 GET n
READ
IF .NOT.( LASTKEY() = K_ESC ).OR.( aa->namest == n )
REPLACE aa->namest WITH n
ENDIF
CASE
brws:colpos = 3
w
:= aa->norma
@
r,c+1 GET w
READ
IF .NOT.( ( LASTKEY() = K_ESC ) .OR. ( aa->norma = w
) )
REPLACE aa->norma WITH w
ENDIF
ENDCASE
SETCOLOR(retcol)
r_scr()
SETPOS(r,c)
IF
indch
brws:RefreshAll()
ELSE
brws:RefreshCurrent() // Обеспечить
перерисовку
текущей строки,
ENDIF
// поскольку
изменялся
элемент данных
//
Восстановление
формы курсора
и режима выхода
из READ по стрелкам
//
и процедуры
по клавише
K_INS
SetCursor(retcurs)
READEXIT(retexit)
SetKey(K_INS, retIns)
//
Проверка требования
ухода с текущей
записи после
GET
nKey
:= LASTKEY()
IF
nKey == K_UP .OR. nKey == K_DOWN .OR. ;
nKey == K_PGUP .OR. nKey == K_PGDN
//
управление
курсором -- переход
к другой записи
KEYBOARD( CHR(nKey) )
ENDIF
RETURN
Примечание:
В отчёте не
описаны п.п.:
а) для создания
TBrowse-объекта для
просмотра-редактирования
файла bb.dbf в окне
t,l,b,r ;
б) для просмотра
файла bb.dbf с обработкой
нажимаемых
клавиш и вызовом
соответствующих
методов или
пользовательских
функций;
в) для выполнения
GET в текущей колонке
файла bb.dbf:
Т.к. эти подпрограммы
практически
аналогичны
подпрограммам
для файла aa.dbf !!!
.................................................................................................................................
10.
Результаты
тестового
примера:
а)
Содержимое
выводного
файла dd.dbf:
INVNOM
FKDN NORMA IDZAPPP IDZAPSP
2
62 20 9
15
231
51 20 10
16
24
74 15 12
18
323
77 25 8
14
4
50 15 11
17
626
58 25 7
13
б)
Содержимое
файла (print.prn), выводимого
на принтер:
Таблица
нарушение норм
техобслуживания:
-----------------------------------------------------------------------------------------------------------------
¦
Инв. ¦ Наименование
¦ Дата ¦ Вид
предвор. ¦ Дата
¦ вид след.
¦ Просроч.¦
¦номер
¦ типа станка
¦ ¦ профилактики
¦ ¦ профилактики
¦ дней ¦
¦----------------------------------------------------------------------------------------------------------------¦
¦
24 ¦ Сверлильный
¦01/18/98 ¦ Регулировка
¦04/02/98 ¦ Чистка
¦ 59 ¦
¦
323 ¦ Строгальный
¦01/28/98 ¦ Регулировка
¦04/15/98 ¦ Чистка
¦ 52 ¦
¦
2 ¦ Токарный
¦01/29/98 ¦ Регулировка
¦04/01/98 ¦ Чистка
¦ 42 ¦
¦
4 ¦ Сверлильный
¦01/19/98 ¦ Регулировка
¦03/10/98 ¦ Чистка
¦ 35 ¦
¦
626 ¦ Строгальный
¦02/01/98 ¦ Регулировка
¦03/31/98 ¦ Чистка
¦ 33 ¦
¦
231 ¦ Токарный
¦01/28/98 ¦ Регулировка
¦03/20/98 ¦ Чистка
¦ 31 ¦
-----------------------------------------------------------------------------------------------------------------
Всего
просроченно
дней - 252
МОСКОВСКАЯ
ГОСУДАРСТВЕННАЯ
ТЕКСТИЛЬНАЯ
АКАДЕМИЯ
им. КОСЫГИНА
Кафедра ИТ
и ВТ.
К У Р С
О В А Я Р А Б О Т
А
Тема : “Разработка
програмного
обеспечения,
ведение базы
данных и получение
ведомости с
частичными
суммами.“
по курсу:
“Алгоритмические
языки и технология
програмирования
“
Выполнил:
Пономарев
А.Н.
гр.42-96
Руководитель:
доц.
Стрельников
Б.А.
асс. Степанова
О.П.
МОСКВА
1998
2.
ЗАДАНИЕ:
ТЕМА
КУРСОВОЙ РАБОТЫ:
Реализация
алгоритма
обработки
данных
и ведения
реляционной
базы данных.
ИСХОДНЫЕ
ДАННЫЕ:
Индивидуальное
задание с описанием
базы данных
и получаемой
в
результате
ее обработки
ведомости с
частичными
и полными суммами.
ПЕРЕЧЕНЬ
ПОДЛЕЖАЩИХ
РАЗРАБОТКЕ
ВОПРОСОВ (
СОДЕРЖАНИЕ
РАСЧЕТНО-ПОЯСНИТЕЛЬНОЙ
ЗАПИСКИ )
1.
Разработать
структуры
файлов и создать
макет базы
данных.
2.
Разработать
алгоритм обработки
данных для
получения
ведомости.
3.
Составить и
отладить программу
получения
ведомости.
4.
Разраб. формы
экранных кадров
и меню для ведения
базыданных.
5.
Составить и
отладить программу
реализации
экранного кадра
для
просмотра
основных(ой)
таблиц(ы).
6.
Дополнить
программу п.5
возможностью
удаления и
добавления
строк в таблицу.
7.
Дополнить
программу п.5
возможностью
изменения
инф-ии в
таблице.
8.
Составить и
отладить процедуры
оперативного
ведения справочников
базы данных.
9.
Разраб.единую
систему меню
для ведения
базы данных
и ее
обработки
с целью получения
ведомости.
10.
Разработать
систему интерфейса
пользователя
(подсказки о
клавишах,
на которые
предусмотрена
реакция системы
и помощь пользователю).
ПЕРЕЧЕНЬ
ГРАФИЧЕСКОГО
МАТЕРИАЛА
1.
Структуры
файлов базы
данных и их
заполнение
для тестового
примера.
2.
Макеты экранных
кадров и состав
подсказок для
пунктов ожидания
ввода
от пользователя.
3.
Ведомость,
получаемая
в результате
выполнения
тестового
примера.
МАТЕМАТИЧЕСКИЕ
МОДЕЛИ
Обеспечить
модульную
структуру
программы.
(
программа
состоит из
нескольких
PRG-файлов, включая
PRG-файл
типовых
утилит. Каждый
PRG-файл состоит
из функций или
процедур,
снабженных
комментариями.
)
ТЕХНИЧЕСКИЕ
СРЕДСТВА:
ПЭВМ IBM
Система
программирования
Clipper 5.2
3.
ИНДИВИДУАЛЬНОЕ
ЗАДАНИЕ.
Имеются
файлы: АА - нормативы
профилактики
оборудования,
ВВ
- профилактики
и СС - состав
оборудования
АА:
1. Идентификатор
типа станка
ВВ: 1. Инвентарный
номер станка
2. Наименование
типа станка
2. Вид профилактики
3. Норма
кол-ва дней
между 3. Дата
профилактики
профилактиками
4. Идентификатор
записи
СС:
1. Инвентарный
номер
2. Идентификатор
типа станка
Выявить
все случаи
превышения
нормативных
интервалов
между профилактиками
и вывести их
в выводной файл
DD:
1. Инв.№
2. Фактическое
кол-во дней
между профилактиками
3. Нормативное
кол-во дней
4. Иден-тор
записи пред.
проф-ки
5. Иден-тор записи
след. проф-ки
На
принтер вывести
ведомость,
упорядоченную
по убыванию
кол-ва просроченных
дней:
Нарушения норм
техобслуживания
Инв.№
/Тип Дата/Вид
пред.проф-ки
Дата /Вид след.проф-ки
Просрочено,
дней
Инв.№
/Тип Дата /Вид
пред.проф-ки
Дата /Вид след.проф-ки
Просрочено,
дней
Инв.№
/Тип Дата /Вид
пред.проф-ки
Дата /Вид след.проф-ки
Просрочено,
дней
. . . . . . . . . .
Общее
кол-во дней
просрочки
СУММА
4.Анализ
обработки БД
для её получения
:
а) По какому
файлу проводится
главный цикл
обработки ?
Главный цикл
обработки в
подпрограмме
vedom - (п.п.,
которая осущест-
вляет
выявление всех
случаев превышения
нормативных
интервалов
между профилактиками,
вывод их в выводной
файл “DD”, а также
осуществляет
выдачу
ведомости на
принтер) проводится
по файлу bb.dbf
.
б)
Как он должен
быть упорядочен
?
Он
должен быть
упорядочен
в хронологическом
порядке.
Пример:
index on bb->invnom + dtoc(bb->dateprof) to
bb0001
Справка:
Синтаксис:
INDEX
ON <ключевое
выражение>
TO <имя индексного
файла>
INDEX
- команда обработки
базы данных,
которая создает
файлы,
содержащие
индексы базы
данных на основе
значения аргумента
<ключевое
выражение>.
При использовании
индексного
файла записи
базы данных
обрабатываются
в последовательности,
заданной ключевым
выражением,
однако физический
порядок следования
записей базы
данных остается
неизменным.
INDEX обеспечивает
последовательность
записей,
упорядоченную
по значениям
ключевого
выражения. Для
ключей типа
CHARACTER
- в соответствии
со значением
ASCII кода каждого
символа
внутри
строки, для
ключей типа
NUMERIC - в соответствии
с числовым
порядком,
для ключей типа
дата - в хронологическом
порядке и для
логических
- считается,
что истина
(.Т.) - более высокого
порядка.
Memo-поля
не могут быть
индексированы.
в)
Применяются
ли фильтры ?
Хотя
команда SET FILTER делает
так, что файл
в рабочей области
выглядит
состоящим из
подмножества
записей, на
самом деле
последовательно
обрабатываются
все его записи.
Фильтры не
применяются,
т.к время работы
с фильтрованной
и нефильтрованной
рабочей областью
оказывается
одним и тем же.
г)
Имеются ли
связи ”хозяин-слуга”
и по каким полям
?
В
подпрограмме
vedom имеются
связи.
Пример:
а) set relat to bb->invnom into cc
Связь по
полю “invnom”.
б) set relat to cc->idst into aa additive
Связь по
полю “idst”.
в) set relat to dd->invnom into cc additive
Связь по
полю “invnom”.
...............................................................................................................................
5.Структура
dbf-файлов (имя,
тип, формат,
каждого поля
):
a)
Структура
файла aa.dbf :
IDST
NAMEST NORMA
1 Строгальный
25
2 Сверлильный
15
3 Токарный
20
......................................................................................................
Имя
Тип Длина
IDST
Символ 3
NAMEST
Символ 12
NORMA
Число 3
б)
Структура
файла bb.dbf :
INVNOM VIDPROF DATEPROF IDZAP
24 Смазка
09-01-98 1
4 Смазка
09-01-98 2
231 Смазка
09-01-98 3
2 Смазка
09-01-98 4
626 Смазка
09-01-98 5
323 Смазка
09-01-98 6
626 Регулировка
01-02-98 7
323 Регулировка
28-01-98 8
2 Регулировка
29-01-98 9
231 Регулировка
28-01-98 10
4 Регулировка
19-01-98 11
24 Регулировка
18-01-98 12
626 Чистка
31-03-98 13
323 Чистка
15-04-98 14
2 Чистка
01-04-98 15
231 Чистка
20-03-98 16
4 Чистка
10-03-98 17
24 Чистка
02-04-98 18
......................................................................................................
Имя
Тип Длина
INVNOM
Символ 3
VIDPROF Символ
12
DATEPROF Дата
8
IDZAP
Символ 3
в)
Структура
файла сс.dbf :
INVNOM
IDST
323
1
626 1
4
2
231 3
24 2
2
3
......................................................................................................
Имя
Тип Длина
INVNOM
Символ 3
IDST
Символ 3
г)
Структура
файла dd.dbf :
INVNOM
FKDN NORMA IDZAPPP IDZAPSP
2
62 20 9
15
231
51 20 10
16
24
74 15 12
18
323
77 25 8
14
4
50 15 11
17
626
58 25 7
13
.....................................................................................................
Имя
Тип Длина
INVNOM Символ
3
FKDN
Число 3
NORMA Число
3
IDZAPPP Символ
3
IDZAPSP Символ
3
.................................................................................................................................
6.
Принципы подготовки
данных для
тестового
примера и
заполнения
исходных данных.
Эти
данные были
выбраны произвольно
- “из головы”:
1)
Идентификатор
типа станка
2)
Инвентарный
номер станка
3)
Вид профилактики
4)
Наименование
типа станка
Идентификатор
записи в файле
bb.dbf заполнялся
по убыванию
(от 1 до 18), где 1- первая
запись, а 18- последняя.
Норма
кол-ва дней
между профилактиками
была выбрана
произвольна.
Дата
профилактики
выбиралась
так, чтобы норма
кол-ва дней
между профилактиками
была превышена
для всех видов
профилактик.
...............................................................................................................................
7.
Система меню.
а)
Какие экранные
кадры ?
Экранный
кадр № 1:
Московская
государственная
текстильная
академия ( МГТА
)
БАЗА
ДАННЫХ Нарушение
норм техобслуживания:
Курсовая
работа по курсу
:
"Алгоритмические
языки обработки
данных и технология
программирования"
студента
гр 42/96 Пономарёва
А.Н.
*************************
Руководитель:
доц.
Стрельников
Б.А.
асс.
Степанова О.П.
Сразу
приступить
к работе с Базой
Данных
Заново
построить все
индексы Базы
Данных
Провести
компрессию
Базы Данных
Выход
из Базы Данных Экранный
кадр № 2:
Московская
государственная
текстильная
академия ( МГТА
)
БАЗА
ДАННЫХ Нарушение
норм техобслуживания:
Курсовая
работа по курсу
:
"Алгоритмические
языки обработки
данных и технология
программирования"
студента
гр 42/96 Пономарёва
А.Н.
*************************
Руководитель:
доц.
Стрельников
Б.А.
асс.
Степанова О.П.
Выберите
одну из следующих
задач
Ведение
файла "Нормативы
профилактики
оборудования"
Ведение
файла "Профилактика"
Получение
ведомости
нарушение норм
техобслуживания
Выход
из Базы Данных
Экранный
кадр № 3:
Нормативы
профилактики
оборудования:
Идент.
типа станка
Наименование
типа станка
Норма,дней
------------------------------------------------------------------------------------------
1 ¦
Строгальный
¦ 25
2 ¦
Сверлильный
¦ 15
3 ¦
Токарный
¦ 20
¦
¦
¦
¦
¦
¦
¦
¦
¦
¦
¦
¦
¦
¦
¦
¦
¦
¦
-------------------------------------------------------------------------------------------
Тип
станка: Строгальный
/
Ї
/ ®
/ ¬
/ ^®
PgUp / PgDn / ^¬/
Home / End - Перемещение
курсора
¦
Esc - Возврат на
шаг назад ¦F8
- Удалить строку
Enter
- Редактирование
¦ ¦F3
- Вставить строку
Экранный
кадр № 4:
Профилактики:
Инв.№
станка Вид
профилактики
Дата профилактики
----------------------------------------------------------------------------------------
2 ¦
Смазка
¦ 01/09/98
2 ¦
Регулировка
¦ 01/29/98
2 ¦
Чистка
¦ 04/01/98
231 ¦
Смазка
¦ 01/09/98
231 ¦
Регулировка
¦ 01/28/98
231 ¦
Чистка
¦ 03/20/98
24 ¦
Смазка
¦ 01/09/98
24 ¦
Регулировка
¦ 01/18/98
24 ¦
Чистка
¦ 04/02/98
323 ¦
Смазка
¦ 01/09/98
323 ¦
Регулировка
¦ 01/28/98
323 ¦
Чистка
¦ 04/15/98
----------------------------------------------------------------------------------------
Инв.№
станка: 2
Вид
профилактики:
Смазка
Дата
профилактики:
01/09/98
/
Ї
/ ®
/ ¬
/ ^®
PgUp / PgDn / ^¬/
Home / End - Перемещение
курсора
¦
Esc - Возврат на
шаг назад ¦F8
- Удалить строку
Enter
- Редактирование
¦ ¦F3
- Вставить строку
Экранный
кадр № 5:
Таблица
нарушение норм
техобслуживания:
------------------------------------------------------------------------------------------------------------
¦
Инв. ¦ Наименование
¦ Дата ¦ Вид
предвор. ¦
Дата ¦ вид след.
¦Просроч.¦
¦номер
¦ типа станка
¦ ¦ профилактики
¦ ¦ профилактики
¦ дней ¦
¦------------------------------------------------------------------------------------------------------------¦
¦
24 ¦ Сверлильный
¦01/18/98¦ Регулировка
¦04/02/98¦ Чистка
¦ 59 ¦
¦
323 ¦ Строгальный
¦01/28/98¦ Регулировка
¦04/15/98¦ Чистка
¦ 52 ¦
¦
2 ¦ Токарный
¦01/29/98¦ Регулировка
¦04/01/98¦ Чистка
¦ 42 ¦
¦
4 ¦ Сверлильный
¦01/19/98¦ Регулировка
¦03/10/98¦ Чистка
¦ 35 ¦
¦
626 ¦ Строгальный
¦02/01/98¦ Регулировка
¦03/31/98¦ Чистка
¦ 33 ¦
¦
231 ¦ Токарный
¦01/28/98¦ Регулировка
¦03/20/98¦ Чистка
¦ 31 ¦
-------------------------------------------------------------------------------------------------------------
Всего
просроченно
дней - 252
Экранный
кадр № 6:
Московская
государственная
текстильная
академия ( МГТА
)
БАЗА
ДАННЫХ Нарушение
норм техобслуживания:
Курсовая
работа по курсу
:
"Алгоритмические
языки обработки
данных и технология
программирования"
----------------------------------------------------------------------------------а
А.Н.
¦ Сохранить
все внесенные
изменения и
продолжить
¦*****
¦ работу
с Базой данных
- т.е. сделать
промежуточный
SAVE ¦
¦
или ¦
¦ Завершить
работу с базой
данных с сохранением
всех ¦.А.
¦
изменений
¦.
¦ Сохранить
и продолжить
Завершить
работу ¦
----------------------------------------------------------------------------------
Выберите
одну из следующих
задач
Ведение
файла "Нормативы
профилактики
оборудования"
Ведение
файла "Профилактика"
Получение
ведомости
нарушение норм
техобслуживания
Выход
из Базы Данных
б)
Пункты меню,
что в них делается
?
Меню
№ 1:
1) Сразу
приступить
к работе с Базой
Данных
2) Заново
построить все
индексы Базы
Данных
3) Провести
компрессию
Базы Данных
4) Выход
из Базы Данных
При
выборе п.1, если
индексы уже
имеются мы
попадаем в меню
№ 2.
При
выборе п.2 заново
происходит
построение
всех индексов
Б.Д .
При
выборе п.3 производится
компрессия
(уплотнение)
Б.Д .
При
выборе п.4 появляется
горизонтальное
подменю:
а) Сохранить
и продолжить
б) Завершить
работу
П.а)
Сохранить все
внесенные
изменения и
продолжить
П.б)
Завершить
работу с базой
данных с сохранением
всех изменений
Меню
№ 2:
1) Ведение
файла "Нормативы
профилактики
оборудования"
2) Ведение
файла "Профилактика"
3) Получение
ведомости
нарушение норм
техобслуживания
4) Выход
из Базы Данных
При
выборе п.1 мы
попадаем в
редактор файла
aa.dbf - (“Нормативы
профилактики
оборудования”),
где мы можем
его просматривать
и редактировать.
При
выборе п.2 мы
попадаем в
редактор файла
bb.dbf - (“Профилактика”),
где мы можем
его просматривать
и редактировать.
При
выборе п.3 происходит
выявление всех
случаев превышения
нормативных
интервалов
между профилактиками,
вывод их в выводной
файл “DD”, а также
выдача ведомости
на принтер.
При
выборе п.4 выполняются
действия аналогичные
п.4 в меню № 1.
.................................................................................................................................
8.
Ведение БД .
Какими табл.
представлено
ведение БД, по
какой табл.
указывается
текущая рабочая
область, её
слуги, колонки
таблицы, набор
клавиш на которые
предусмотрена
реакция системы.
Клавиши на
которые реагирует
система:
/
Ї
/ ®
/ ¬
/; PgUp / PgDn; Home / End
- Перемещение
курсора
Enter
- Выбор задачи
в меню и редактирование
полей в редакторе
Esc
- Возврат на
шаг назад. Отмена
редактирования
(без сохранения
изменненого
значения)
F8
- Удалить строку
F3
- Вставить строку
F10
- Выход из задачи
с сохранением
всей информации
или выход без
сохранения
информации
Таблицы
ведения Б.Д.:
Табл.
№1
Нормативы
профилактики
оборудования:
Идент.
типа станка
Наименование
типа станка
Норма, дней
-----------------------------------------------------------------------------------------------
¦
¦
¦
¦
¦
¦
¦
¦
¦
¦
------------------------------------------------------------------------------------------------
Тип
станка:
Табл.
№2
Профилактики:
Инв.№
станка Вид
профилактики
Дата профилактики
----------------------------------------------------------------------------------------------
¦
¦
¦
¦
¦
¦
¦
¦
¦
¦
¦
¦
¦
¦
¦
¦
¦
¦
¦
¦
------------------------------------------------------------------------------------------------
Инв.№
станка:
Вид
профилактики:
Дата
профилактики:
.................................................................................................................................
9.
Структура
программы :
а)
Содержимое
rmk-файла “kursv.rmk”:
objs
= main2,aa,util,bb
.prg.obj:
CLIPPER $< /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 <= 122
cs := cs - 32
prm := STUFF( prm , i , 1 , CHR( cs ) )
CASE cs >= 160 .AND. cs <= 175
cs := cs - 32
prm := STUFF( prm , i , 1 , CHR( cs ) )
CASE cs >= 224 .AND. cs <= 239
cs := cs - 80
prm := STUFF( prm , i , 1 , CHR( cs ) )
ENDCASE
NEXT
RETURN
prm
12)
п.п. выхода из
задачи с сохранением
всей информации
- реакция на
клавишу F10:
PROCEDURE
fquit()
LOCAL
reply
reply := ALERT("Сохранить
все внесенные
изменения и
продолжить;"
;
+ "работу с
Базой данных
- т.е. сделать
промежуточный
SAVE или;" ;
+ " Завершить
работу с базой
данных с сохранением
всех изменений
;";
, {" Сохранить
и продолжить
" , " Завершить
работу " } )
IF ( reply = 1 ) .OR. ( reply = 0 )
DBCOMMITALL()
ELSE
QUIT
ENDIF
RETURN
13)
п.п. вывода сообщения
на экран с заданными
координатами
и цветом:
PROCEDURE
msgs(x,y,m,color)
LOCAL
ml,c
IF
m = NIL
RETURN
ENDIF
ml=LEN(m)
IF
ml=0 && .OR. ml > 80
RETURN
ENDIF
IF
x=NIL // Центр по X
x
:= (80-ml)/2
ENDIF
IF
y=NIL // Центр по Y
y
:= 24/2 - 1
ENDIF
IF
color <> NIL
c
:= SETCOLOR(color)
@
y,x SAY m
SETCOLOR(c)
ELSE
@
y,x SAY m
ENDIF
RETURN
14)
п.п. создания
TBrowse-объекта для
просмотра-редактирования
файла
aa.dbf в окне t,l,b,r :
FUNCTION
aaCr(t,l,b,r)
LOCAL
brws,coln,cblk,chdr
brws
:= TBrowseDb(t,l,b,r)
cblk
:= {|| " " + aa->idst }
chdr
:= "Идент. типа
станка"
coln
:= TBColumnNew(chdr,cblk)
coln:width := 19
brws:AddColumn(coln)
cblk
:= {|| " " + aa->namest}
chdr
:= " Наименование
типа станка"
coln
:= TBColumnNew(chdr,cblk)
coln:width := 35
brws:AddColumn(coln)
cblk
:= {|| STR( aa->norma,7) }
chdr
:= " Норма,дней"
coln
:= TBColumnNew(chdr,cblk)
coln:width := 12
brws:AddColumn(coln)
brws:colsep := CHR(186)
brws:headsep := CHR(205)
brws:colorspec := "w+/b,gr+/rb"
RETURN
brws
15)
п.п. просмотра
файла aa.dbf с обработкой
нажимаемых
клавиш и вызовом
соответствующих
методов или
пользовательских
функций:
FUNCTION
aaEd(brws)
LOCAL
ret_fl,sel,otb , w
LOCAL
cc,rr,nrc:=0,i
LOCAL
ret:=NIL
LOCAL
t := brws:nTop , l := brws:nLeft , b := brws:nBottom , r :=
brws:nRight
LOCAL
t_ := 5 , l_ := 6 , b_ := 15 , r_ := 74
s_scr()
s_r_s()
SETCOLOR( "N/W" )
CLS
SETCOLOR( "gr+/b,w+/gr")
hlp("AAED")
SELECT
aa
SET
ORDER TO 2
@
t-2 , l-1 CLEAR TO b+2 , r+1
@
b+1, l TO b+1, r
ret_fl
:= .F.
DO
WHILE .NOT. ret_fl
**
оптимизированная
с использованием
буфера клавиатуры
стабилизация
DO
WHILE ( NEXTKEY() == 0 ) .AND. ( .NOT. brws:stabilize() )
ENDDO
IF
( NEXTKEY() == 0 ) .AND. ( RECNO() <> nrc)
nrc
:= RECNO()
rr
:= ROW()
cc
:= COL()
SETCOLOR("bg+/b")
@
t-2 , l+1 SAY " Нормативы
профилактики
оборудования:"
@
b+2 , l+1 SAY " Тип станка:
"
@
b+2 , COL()+1 SAY aa->namest COLOR "w+/b"
SETPOS(rr,cc)
ENDIF
SETCOLOR("gr+/rb")
**
ожидаем нажатия
клавиши
nkey
:= Inkey(0)
//
если нажата
клавиша типового
метода - вызовем
его
blk
:= basemet( nKey )
IF
blk <> NIL
EVAL( blk , brws )
ELSE
DO
CASE
CASE ( bHotkey := SETKEY( nKey ) ) <> NIL
EVAL( bHotkey , PROCNAME() , PROCLINE() , READVAR() )
CASE ( nKey = K_F8 )
DELETE
// потрогаем
файловый указатель,
если
// возвращаетя
EOF() - .T. после Down-Up,
// значит
файл пуст
SKIP
SKIP -1
IF RECNO() = RECCOUNT()+1
ret_fl := .T. // завершение
просмотра
ENDIF
brws:RefreshAll()
nrc := 0
CASE nKey = K_ESC
ret_fl := .T. // завершение
просмотра
CASE ( nKey = K_ENTER )
// Редактирование
текущего элемента
данных
aaGet(brws ;
, " Редактирование
файла aa.dbf" )
nrc := 0 // обновить
верхнюю строку
CASE nKey == K_F3
APPEND BLANK
brws:RefreshAll()
ENDCASE
ENDIF
ENDDO
SET
RELAT TO
s_r_s(.T.)
r_scr()
RETURN
ret
16)
п.п. выполнения
GET в текущей колонке
файла aa.dbf:
PROCEDURE
aaGet( brws , z0 )
LOCAL
r , c , w , w2 , otb
LOCAL
retcurs,retexit // форма курсора
и режим выхода
из READ
LOCAL
retins, retcol // режим
вставка-замена
в READ
LOCAL
indch := .F. // флаг изменений
значений полей,
входящих в
// индекснове
выражение
(тогда нужно
REFRESHALL(),
// а не
REFRESHCURRENT() )
LOCAL
col
r
:= ROW()
c
:= COL()
//
Проверка обновления
экрана, корректности
базы и т.д.
ForceStable(brws)
//
Установка
клавиш Up-Arrow и
Down-Arrow как клавиш
выхода из
//
команды
READ
retexit := READEXIT(.T.)
// Установка
клавиши INS для
переключения
// режима
вставка/замена
// и соответствующего
изменения вида
курсора
retins
:= SetKey( K_INS, {|| Repl_Ins()} )
// эквивалентно
Set Key K_INS To Procedure Repl_Ins
// Установка
вида курсора
по текущему
состоянию
режима
retcurs := SetCursor( IF(ReadInsert(), SC_NORMAL,
SC_INSERT ) )
s_scr()
retcol
:= SETCOLOR("w+/g")
@
brws:nTop-3,0
@
brws:nTop-3,0 SAY z0
hlp("GET")
SETCOLOR("gr+/n,w+/g")
indch
:= .F.
DO
CASE
CASE
brws:colpos = 1
w
:= aa->idst
@
r,c+2 GET w
READ
IF .NOT.( LASTKEY() = K_ESC ).OR.( aa->idst == w )
REPLACE aa->idst WITH w
indch := .T.
ENDIF
CASE
brws:colpos = 2
n := aa->namest
@ r,c+2 GET n
READ
IF .NOT.( LASTKEY() = K_ESC ).OR.( aa->namest == n )
REPLACE aa->namest WITH n
ENDIF
CASE
brws:colpos = 3
w
:= aa->norma
@
r,c+1 GET w
READ
IF .NOT.( ( LASTKEY() = K_ESC ) .OR. ( aa->norma = w
) )
REPLACE aa->norma WITH w
ENDIF
ENDCASE
SETCOLOR(retcol)
r_scr()
SETPOS(r,c)
IF
indch
brws:RefreshAll()
ELSE
brws:RefreshCurrent() // Обеспечить
перерисовку
текущей строки,
ENDIF
// поскольку
изменялся
элемент данных
//
Восстановление
формы курсора
и режима выхода
из READ по стрелкам
//
и процедуры
по клавише
K_INS
SetCursor(retcurs)
READEXIT(retexit)
SetKey(K_INS, retIns)
//
Проверка требования
ухода с текущей
записи после
GET
nKey
:= LASTKEY()
IF
nKey == K_UP .OR. nKey == K_DOWN .OR. ;
nKey == K_PGUP .OR. nKey == K_PGDN
//
управление
курсором -- переход
к другой записи
KEYBOARD( CHR(nKey) )
ENDIF
RETURN
Примечание:
В отчёте не
описаны п.п.:
а) для создания
TBrowse-объекта для
просмотра-редактирования
файла bb.dbf в окне
t,l,b,r ;
б) для просмотра
файла bb.dbf с обработкой
нажимаемых
клавиш и вызовом
соответствующих
методов или
пользовательских
функций;
в) для выполнения
GET в текущей колонке
файла bb.dbf:
Т.к. эти подпрограммы
практически
аналогичны
подпрограммам
для файла aa.dbf !!!
.................................................................................................................................
10.
Результаты
тестового
примера:
а)
Содержимое
выводного
файла dd.dbf:
INVNOM
FKDN NORMA IDZAPPP IDZAPSP
2
62 20 9
15
231
51 20 10
16
24
74 15 12
18
323
77 25 8
14
4
50 15 11
17
626
58 25 7
13
б)
Содержимое
файла (print.prn), выводимого
на принтер:
Таблица
нарушение норм
техобслуживания:
-----------------------------------------------------------------------------------------------------------------
¦
Инв. ¦ Наименование
¦ Дата ¦ Вид
предвор. ¦ Дата
¦ вид след.
¦ Просроч.¦
¦номер
¦ типа станка
¦ ¦ профилактики
¦ ¦ профилактики
¦ дней ¦
¦----------------------------------------------------------------------------------------------------------------¦
¦
24 ¦ Сверлильный
¦01/18/98 ¦ Регулировка
¦04/02/98 ¦ Чистка
¦ 59 ¦
¦
323 ¦ Строгальный
¦01/28/98 ¦ Регулировка
¦04/15/98 ¦ Чистка
¦ 52 ¦
¦
2 ¦ Токарный
¦01/29/98 ¦ Регулировка
¦04/01/98 ¦ Чистка
¦ 42 ¦
¦
4 ¦ Сверлильный
¦01/19/98 ¦ Регулировка
¦03/10/98 ¦ Чистка
¦ 35 ¦
¦
626 ¦ Строгальный
¦02/01/98 ¦ Регулировка
¦03/31/98 ¦ Чистка
¦ 33 ¦
¦
231 ¦ Токарный
¦01/28/98 ¦ Регулировка
¦03/20/98 ¦ Чистка
¦ 31 ¦
-----------------------------------------------------------------------------------------------------------------
Всего
просроченно
дней - 252 |