Главная Рефераты по рекламе Рефераты по физике Рефераты по философии Рефераты по финансам Рефераты по химии Рефераты по хозяйственному праву Рефераты по цифровым устройствам Рефераты по экологическому праву Рефераты по экономико-математическому моделированию Рефераты по экономической географии Рефераты по экономической теории Рефераты по этике Рефераты по юриспруденции Рефераты по языковедению Рефераты по юридическим наукам Рефераты по истории Рефераты по компьютерным наукам Рефераты по медицинским наукам Рефераты по финансовым наукам Рефераты по управленческим наукам Психология и педагогика Промышленность производство Биология и химия Языкознание филология Издательское дело и полиграфия Рефераты по краеведению и этнографии Рефераты по религии и мифологии Рефераты по медицине Рефераты по сексологии Рефераты по информатике программированию Краткое содержание произведений |
Реферат: Ведение реляционной БД на яз. 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:down() } ; , {K_UP , o:up() } ; , {K_PGDN , o } ; , {K_PGUP , } ; , {K_CTRL_PGDN , } ; , {K_CTRL_PGUP , o } ; , {K_RIGHT , } ; , {K_LEFT , o } ; , {K_CTRL_RIGHT , o } ; , {K_CTRL_LEFT , } ; , {K_END , o:end() } ; , {K_HOME , o:home() } ; , {K_CTRL_END , o:panend() } ; , {K_CTRL_HOME , } } i := ASCAN( crsm, ) 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 cs := cs - 32 prm := STUFF( prm , i , 1 , CHR( cs ) ) CASE cs >= 160 .AND. cs cs := cs - 32 prm := STUFF( prm , i , 1 , CHR( cs ) ) CASE cs >= 224 .AND. cs cs := cs - 80 prm := STUFF( prm , i , 1 , CHR( cs ) ) ENDCASE NEXT 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:down() } ; , {K_UP , } ; , {K_PGDN , o } ; , {K_PGUP , o:pageup() } ; , {K_CTRL_PGDN , o } ; , {K_CTRL_PGUP , o:gotop() } ; , {K_RIGHT , o:right() } ; , {K_LEFT , } ; , {K_CTRL_RIGHT , o:panright() } ; , {K_CTRL_LEFT , o } ; , {K_END , } ; , {K_HOME , } ; , {K_CTRL_END , o:panend() } ; , {K_CTRL_HOME , o:panhome() } } i := ASCAN( crsm, 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 cs := cs - 32 prm := STUFF( prm , i , 1 , CHR( cs ) ) CASE cs >= 160 .AND. cs cs := cs - 32 prm := STUFF( prm , i , 1 , CHR( cs ) ) CASE cs >= 224 .AND. cs cs := cs - 80 prm := STUFF( prm , i , 1 , CHR( cs ) ) ENDCASE NEXT 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 := chdr := "Идент. типа станка" coln := TBColumnNew(chdr,cblk) coln:width := 19 brws:AddColumn(coln) cblk := chdr := " Наименование типа станка" coln := TBColumnNew(chdr,cblk) coln:width := 35 brws:AddColumn(coln) cblk := 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, ) // эквивалентно 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 |
|
|