МОСКОВСЬКА ДЕРЖАВНА текстильної академії ім. Косигіна p>
Кафедра ІТ та ВТ p>
К У Р С О В А Р О Б О Т А p>
Тема: "Розробка програмного забезпечення, ведення бази даних і отримання відомості з частковими сумами. " p>
за курсом:" Алгоритмічні мови і технологія програмування " p>
Виконав: p>
Пономарьов А.Н. гр.42-96 p>
Керівник: доц. Стрельников Б.А. ас. Степанова О.П. p>
МОСКВА p>
1998
2. ЗАВДАННЯ: p>
ТЕМА КУРСОВОЇ РОБОТИ: Реалізація алгоритму обробки даних і ведення реляційної бази даних. P>
ВИХІДНІ ДАНІ: p>
Індивідуальне завдання з описом бази даних та виробленої в результаті її обробки відомості з частковими і повними сумами. P>
ПЕРЕЛІК ПІДЛЯГАЮТЬ РОЗРОБЦІ ПИТАНЬ (ЗМІСТ РОЗРАХУНКОВО-
ПОЯСНЮВАЛЬНА ЗАПИСКА) p>
1. Розробити структури файлів і створити макет бази даних. P>
2. Розробити алгоритм обробки даних для отримання відомості. P>
3. Скласти і налагодити програму отримання відомості. P>
4. Розробок. форми екранних кадрів і меню для ведення базиданних. p>
5. Скласти і налагодити програму реалізації екранного кадру для перегляду основних (ой) таблиць (и). P>
6. Доповнити програму п.5 можливістю видалення і додавання рядків до таблиці. P>
7. Доповнити програму п.5 можливістю зміни інф-ії в таблиці. P>
8. Скласти і налагодити процедури оперативного ведення довідників бази даних. P>
9. Разраб.едіную систему меню для ведення бази даних та її обробки з метою отриманнявідомості. p>
10. Розробити систему інтерфейсу користувача (підказки про клавіші, на які передбачена реакція системи і допомогукористувачеві). p>
ПЕРЕЛІК Графічний матеріал p>
1. Структури файлів бази даних та їх заповнення для тестового прикладу. P>
2. Макети екранних кадрів та склад підказок для пунктів очікування вводу від користувача. P>
3. Відомість, що отримується в результаті виконання тестового прикладу. P>
МАТЕМАТИЧНІ МОДЕЛІ p>
Забезпечити модульну структуру програми.
(Програма складається з декількох PRG-файлів, включаючи PRG-файл типових утиліт. Кожен PRG-файл складається з функцій або процедур, забезпечених коментарями.) p>
ТЕХНІЧНІ ЗАСОБИ: p>
ПЕОМ IBM p>
Система програмування Clipper 5.2 p>
3. ІНДИВІДУАЛЬНЕ ЗАВДАННЯ. P>
Є файли: АА - нормативи профілактики обладнання, p>
ВВ - профілактики і СС - склад устаткування p>
АА: 1. Ідентифікатор типу верстата ВВ: 1. Інвентарний номер верстата p>
2. Найменування типу верстата 2. Вид профілактики p>
3. Норма кол-ва днів між 3. Дата профілактики профілактики 4.
Ідентифікатор запису p>
СС: 1. Інвентарний номер p>
2. Ідентифікатор типу верстата p>
Виявити всі випадки перевищення нормативних інтервалів міжпрофілактика і вивести їх в вивідний файл DD: p>
1. Інв. № p>
2. Фактичне кол-воднів між профілактики p>
3. Нормативне к-ть днів p>
4. Іден-торзапису пред. проф-ки p>
5. Іден-тор запису слід. проф-ки
На принтер вивести відомість, упорядковану за спаданням кол-ва простроченихднів: p>
Порушення норм техобслуговування
Інв. №/Тип Дата/Вид пред.проф-ки Дата/Вид след.проф-ки Прострочено, днів
Інв. №/Тип Дата/Вид пред.проф-ки Дата/Вид след.проф-ки Прострочено, днів
Інв. №/Тип Дата/Вид пред.проф-ки Дата/Вид след.проф-ки Прострочено, днів p>
. . . . . . . . . . p>
Загальна к-ть днів прострочення СУМА p>
4.Аналіз обробки БД для її отримання: p>
а) За яким файлу проводиться головний цикл обробки? p>
Головний цикл обробки в підпрограмі vedom - (п.п., яка здійснювала -вляєтся виявлення всіх випадків перевищення нормативних інтервалів міжпрофілактика, виведення їх у вивідний файл "DD", а також здійснює видачувідомості на принтер) проводиться по файлу bb.dbf. p>
б) Як він має бути впорядкований? p>
Він повинен бути впорядкований в хронологічному порядку.
Приклад: index on bb-> invnom + dtoc (bb-> dateprof) to bb0001
Довідка: p>
Синтаксис: p>
INDEX ON TO
INDEX - команда обробки бази даних, яка створює файли,містять індекси бази даних на основі значення аргументу. При використанні індексного файлу записи бази данихобробляються в послідовності, заданої ключовим виразом, однакфізичний порядок проходження записів бази даних залишається незмінним.
INDEX забезпечує послідовність записів,упорядковану по значенням ключового вирази. Для ключів типу
CHARACTER - у відповідності зі значенням ASCII коду кожного символуусередині рядка, для ключів типу NUMERIC - у відповідності з числовимпорядком, для ключів типу дата - в хронологічному порядку і длялогічних - вважається, що істина (. Т.) - більш високого порядку.
Memo-поля не можуть бути індексовані. P>
в) Чи застосовуються фільтри? P>
Хоча команда SET FILTER робить так, що файл в робочій області p>
виглядає що складається з підмножини записів, насправдіпослідовно обробляються всі його записи. p>
Фільтри не застосовуються, так як час роботи з фільтрованої інефільтроване робочою областю виявляється одним і тим же. p>
г) Чи є зв'язку "хазяїн-слуга" і по яких полях? p>
У підпрограмі vedom є зв'язку.
Приклад: а) set relat to bb-> invnom into cc p>
Зв'язок по полю "invnom". б) set relat to cc-> idst into aa additive p>
Зв'язок по полю "idst". в) set relat to dd-> invnom into cc additive p>
Зв'язок по полю "invnom".
.................................................. ..........................< br>.................................................. .
5.Структура dbf-файлів (ім'я, тип, формат, кожного поля): p>
a) Структура файлу aa.dbf: p>
IDST NAMEST NORMA p>
1 стругальний 25 p>
2 Свердлильний 15 p>
3 Токарний 20
......................... ..................................................
........................... p>
Назва Тип Довжина p>
IDST Символ 3 p >
NAMEST Символ 12 p>
NORMA Число 3 p>
б) Структура файлу bb.dbf: p>
INVNOM VIDPROF DATEPROF IDZAP p>
24 Смазка 09-01-98
1 p>
4 Смазка 09-01-98
2 p>
231 Смазка 09-01-98
3 p>
2 Смазка 09-01-98
4 p>
626 Смазка 09-01-98
5 p>
323 Смазка 09-01-98
6 p>
626 Регулювання 01-02-98 7 p>
323 Регулювання 28-01-98 8 p>
2 Регулювання 29-01-98 9 p>
231 Регулювання 28-01-98 10 p>
4 Регулювання 19-01-98
11 p>
24 Регулювання 18-01-98 12 p>
626 Чистка 31-03-98
13 p>
323 Чистка 15-04-98
14 p>
2 Чистка 01-04-98
15 p>
231 Чистка 20-03-98
16 p>
4 Чистка 10-03-98
17 p>
24 Чистка 02-04-98
18
.......... .................................................. ...............< br>........................... p>
Назва Тип Довжина p>
INVNOM Символ 3 p >
VIDPROF Символ 12 p>
DATEPROF Дата 8 p>
IDZAP Символ 3 p>
в) Структура файлу сс.dbf: p>
INVNOM IDST p>
323 1 p>
626 1 p>
4 2 p>
231 3 p>
24 2 p>
2 3
.......................................... .................................< br>........................... p>
Назва Тип Довжина p>
INVNOM Символ 3 p >
IDST Символ 3 p>
г) Структура файлу dd.dbf: p>
INVNOM FKDN NORMA IDZAPPP IDZAPSP p>
2 62 20 9 p> < p> 15 p>
231 51 20 10 p>
16 p>
24 74 15 12 p>
18 p>
323 77 25 8 p>
14 p>
4 50 15 11 p>
17 p>
626 58 25 7 p>
13 p>
............................................. ...............................< br>......................... p>
Назва Тип Довжина p>
INVNOM Символ 3 p> < p> FKDN Число 3 p>
NORMA Число 3 p>
IDZAPPP Символ 3 p>
IDZAPSP Символ 3
.................................................. ..........................< br>.................................................. ... p>
6. Принципи підготовки даних для тестового прикладу і заповненнявихідних даних. p>
Ці дані були вибрані довільно - "з голови":
1) Ідентифікатор типу верстата
2) Інвентарний номер верстата
3) Вид профілактики
4) Найменування типу верстата p>
Ідентифікатор запису у файлі bb.dbf заповнювався за спаданням (від 1 до 18),де 1 - перший запис, а 18 - остання. p>
Норма кол-ва днів між профілактики була обрана довільна. p>
Дата профілактики вибиралася так, щоб норма кол-ва днів міжпрофілактика була перевищена для всіх видів профілактик.
.................................................. ..........................< br>.................................................. . p>
7. Система меню. P>
а) Які екранні кадри? P>
Екранний кадр № 1: p>
Московська державна текстильна академія (МГТА) p>
БАЗА ДАНИХ Порушення норм техобслуговування: p>
Курсова робота по курсу: p>
"Алгоритмічні мови обробки даних і технологія програмування" p>
студента гр 42/96
Пономарьова О.М. p>
************************* p>
Керівник: p>
доц. Стрельников Б.А. p>
ас. Степанова О.П. p>
Відразу приступити до роботи з Базою Даних p>
Заново побудувати всі індекси Бази Даних p>
Провести компресію Бази Даних p>
Вихід з Бази Даних p>
Екранний кадр № 2: p>
Московська державна текстильна академія (МГТА) p>
БАЗА ДАНИХ Порушення норм техобслуговування: p>
Курсова робота по курсу: p>
"Алгоритмічні мови обробки даних і технологія програмування" p>
студента гр 42/96
Пономарьова О.М. p>
************************* p>
Керівник: p>
доц. Стрельников Б.А. p>
ас. Степанова О.П. p>
Виберіть одну з наступних завдань p>
Ведення файлу "Нормативи профілактикиобладнання " p>
Ведення файлу" Профілактика " p>
Отримання відомості порушення нормтехобслуговування p>
Вихід з Бази Даних p>
Екранний кадр № 3: p>
Нормативи профілактики обладнання: p>
Ідент. типу верстата Найменування типу верстата Норма, днів
--------------------------------------- -----------------------------------< br>---------------- p>
1 | стругальний p>
| 25 p>
2 | Свердлильний p> < p> | 15 p>
3 | Токарний p>
| 20 p>
| p>
| p>
| p >
| p>
| p>
| p>
| p>
| p>
| p> < p> | p>
| p>
| p>
| p>
| p>
| p>
| p>
| p>
|
------------------------------ --------------------------------------------< br>----------------- p>
Тип верстата: стругальний p>
(/ (/ (/ (/ ^ (PgUp/PgDn/^ (/ Home/End - Переміщення курсору p>
| Esc - Повернення на крок назад | F8
- Видалити рядок
Enter - Редагування |
| F3 - Вставити рядок p>
Екранний кадр № 4: p>
Профілактики: p>
Інв. № верстата Вид профілактики Дата профілактики
------ -------------------------------------------------- ------------------< br>-------------- p>
2 | Мастило |
01/09/98 p>
2 | Регулювання |
01/29/98 p>
2 | Чистка |
04/01/98 p>
231 | Мастило |
01/09/98 p>
231 | Регулювання | 01/28/98 p>
231 | Частка |
03/20/98 p>
24 | Мастило |
01/09/98 p>
24 | Регулювання | 01/18/98 p>
24 | Чищення |
04/02/98 p>
323 | Мастило |
01/09/98 p>
323 | Регулювання | 01/28/98 p>
323 | Частка |
04/15/98
------------------------------------------ --------------------------------< br>-------------- p>
Інв. № верстата: 2 p>
Вид профілактики: Смазка p>
Дата профілактики: 01/09/98 p>
(/ (/ (/ (/ ^ (PgUp/PgDn/^ (/ Home/End - Переміщення курсору p>
| Esc - Повернення на крок назад | F8 < br>- Видалити рядок
Enter - Редагування |
| F3 - Вставити рядок p>
Екранний кадр № 5: p>
Таблиця порушення норм техобслуговування:
-------------------------------------------------- --------------------------< br>--------------------------------< br>| Інв. | Найменування | Дата | Вид предвор. | Дата | вид слід. P>
| прострочив. |
| Номер | типу верстата | | профілактики | |профілактики | днів |
|------------------------------------------------- --------------------------< br>---------------------------------|< Br>| 24 | Свердлильний | 01/18/98 | Регулювання | 04/02/98 | Частка p>
| 59 |
| 323 | стругальний | 01/28/98 | Регулювання | 04/15/98 | Частка p>
| 52 |
| 2 | Токарний | 01/29/98 | Регулювання | 04/01/98 | Частка p>
| 42 |
| 4 | Свердлильний | 01/19/98 | Регулювання | 03/10/98 | Частка p>
| 35 |
| 626 | стругальний | 02/01/98 | Регулювання | 03/31/98 | Частка p>
| 33 |
| 231 | Токарний | 01/28/98 | Регулювання | 03/20/98 | Частка p>
| 31 |
-------------------------------------------------- --------------------------< br>--------------------------------- p>
Всього прострочена днів - 252 p> < p> Екранний кадр № 6: p>
Московська державна текстильна академія (МГТА) p>
БАЗА ДАНИХ Порушення норм техобслуговування: p>
Курсова робота по курсу: p>
"Алгоритмічні мови обробки даних і технологія програмування" p>
------------------------------- -----------------------------------< br>---------------- а О.Н. p>
| Зберегти всі внесені зміни та продовжити
|***** P>
| роботу з Базою даних - тобто зробити проміжний SAVE | p>
| або p>
| p>
| Завершити роботу з базою даних зі збереженням всіх
|. А. p>
| змін p>
|. P>
| Зберегти і продовжити Завершити роботу p>
| p>
-------------------------------------------------- ----------------< br>---------------- p>
Виберіть одну з наступних завдань p>
Ведення файлу "Нормативи профілактики обладнання" p>
Ведення файлу "Профілактика" p>
Отримання відомості порушення норм техобслуговування p>
Вихід з Бази Даних p>
б) Пункти меню, що в них робиться? p>
Меню № 1: p>
1) Відразу приступити до роботи з Базою
Даних p>
2) Заново побудувати всі індекси Бази Даних p>
3) Провести компресію Бази Даних p>
4) Вихід з Бази Даних p>
При виборі п.1, якщо індекси вже є ми потрапляємо в меню № 2. p>
При виборі п.2 заново відбувається побудова всіх індексів Б.Д. p>
При виборі п.3 виробляється компресія (ущільнення) Б.Д. p>
При виборі п.4 з'являється горизонтальне підменю: p>
а) Зберегти і продовжити б) Завершитироботу p>
П.а) Зберегти всі внесені зміни та продовжити p>
п.б) Завершити роботу з базою даних зі збереженням всіх змін p>
Меню № 2:
1) Ведення файлу "Нормативи профілактики обладнання" p>
2) Ведення файлу "Профілактика" p>
3) Одержання відомості порушеннянорм техобслуговування p>
4) Вихід з Бази Даних p>
При виборі п.1 ми потрапляємо в редактор файлу aa.dbf - ( "Нормативи p>
профілактики обладнання") , де ми можемо його переглядати таредагувати. p>
При виборі п.2 ми потрапляємо в редактор файлу bb.dbf - ( "Профілактика"),де ми можемо його переглядати й редагувати. p>
При виборі п.3 відбувається виявлення всіх випадків перевищення нормативнихінтервалів між профілактики, виведення їх у вивідний файл "DD", а такожвидача відомості на принтер. p>
При виборі п.4 виконуються дії аналогічні п.4 в меню № 1.
.................................................. ..........................< br>.................................................. ... p>
8. Ведення БД. P>
Якими табл. представлено ведення БД, за якою табл. вказуєтьсяпоточна робоча область, її слуги, колонки таблиці, набір клавіш на якіпередбачена реакція системи. p>
Клавіші на які реагує система:
(/ (/ (/ (/; PgUp/PgDn; Home/End - Переміщення курсору
Enter - Вибір завдання в меню і редагування полів у редакторі
Esc - Повернення на крок назад. Скасування редагування (без збереження ізменненого значення)
F8 - Видалити рядок
F3 - Вставити рядок
F10 - Вихід із завдання зі збереженням всієї інформації або вихід беззбереження інформації p>
Таблиці ведення Б.Д.: p>
Табл. № 1 p>
Нормативи профілактики обладнання: p>
Ідент. типу верстата Найменування типу верстата Норма, днів
--------------------------------------- -----------------------------------< br>--------------------- p>
| p>
| p>
| p> < p> | p>
| p>
| p>
| p>
| p>
| p>
|
---------------------------------------------- -----------------------------< br>--------------------- p>
Тип верстата:
Табл. № 2 p>
Профілактики: p>
Інв. № верстата Вид профілактики Дата профілактики
--------------------- -------------------------------------------------- ---
-------------------- p>
| p>
| p>
| | p> < p> | | p>
| | p>
| | p>
| | p>
| | p>
| |
| | p>
| |
-------------------------------------------------- --------------------------< br>-------------------- p>
Інв. № верстата: p>
Вид профілактики: p>
Дата профілактики: p>
......................................... ...................................< br>.................................................. ... p>
9. Структура програми: p>
а) Вміст rmk-файлу "kursv.rmk": p>
objs = main2, aa, util, bb p>
. Prg.obj: p>
CLIPPER $
. obj.exe: p>
RTLINK OUTPUT $ * FI $ (objs)/PLL: base52 p>
main2.obj: main2. prgaa.obj: aa.prgutil.obj: util.prgbb.obj: bb.prg p>
kurs_ok.exe: main2.obj aa.obj util.obj bb.obj p>
б) Імена та зміст prg-файлів. По кожній функції: ім'я, призначення,параметри, тип даних і сенс, повернене значення, робочі змін Цінні таїх призначення. p>
Програмні файли:
1) aa.prg p>
У цій програмі реалізовано:
1. Створення TBrowse-об'єкта для перегляду-редагування файлу aa.dbf ввікні. p>
2) bb.prg p>
У цій програмі реалізовано:
1. Створення TBrowse-об'єкта для перегляду-редагування файлу bb.dbf ввікні. p>
3) main2.prg p>
У цій програмі реалізовано: p>
1.Організація меню. p>
2. Індексування файлів. P>
3. Ущільнення файлу. P>
4. Виявлення всіх випадків перевищення нормативних інтервалів між профілактики, виведення їх у вивідний файл
"DD", а також видача відомості на принтер. P>
5. Виведення на екран інформації про "гарячі" клавіші. P>
4) util.prg p>
Ця програма містить набір стандартних утиліт: p>
1. Збереження екрану, відновлення екрану. P>
2. Переклад у верхній регістр як латиниці, так і кирилиці. P>
3. Координати, повідомлення, колір. P>
4. Вихід із завдання зі збереженням всієї інформації - реакція на клавішу F10. P>
5. Подача звукового сигналу для сигналізації успішного виконання поставленого завдання: p>
Опис основних підпрограм:
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 bbindex on bb-> invnom + dtoc (bb-> dateprof) to bb0001use aaindex on aa-> idst to aa0002use ccindex on cc-> invnom to cc0003use ddindex on dd-> (norma-fkdn) to dd0004close allr_scr ()return nil p>
2) п.п. відкриття індексів:func db_openclose alluse aa index aa0002use bb index bb0001 newuse cc index cc0003 newuse dd index dd0004 newreturn nil p>
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 p>
IF ERRORLEVEL () = 0 p>
USE p>
DELETE FILE aa.dbf p>
RENAME work.dbf TO aa.dbf p>
ENDIF
USE bb// ущільнення файла bb.dbf
COPY TO work p>
IF ERRORLEVEL () = 0 p>
USE p>
DELETE FILE bb.dbf p>
RENAME work.dbf TO bb.dbf
ENDIF p>
USE cc// ущільнення файла cc.dbf p>
COPY TO work p>
IF ERRORLEVEL () = 0 p>
USE p>
DELETE FILE cc.dbf p>
RENAME work.dbf TO cc.dbf p>
ENDIF p>
USE dd// ущільнення файла dd.dbf p>
COPY TO work p>
IF ERRORLEVEL () = 0 p>
USE p>
DELETE FILE dd.dbf p>
RENAME work.dbf TO dd.dbf p>
ENDIF p>
CLOSE ALL r_scr ()
RETURN NIL p>
4) п.п . видачі інформації про клавіші, на які реагує система p>
"Help":
PROCEDURE hlp (callpnt, prm) p>
LOCAL retcol, crow, ccol p>
IF prm = NIL prm: =. F. p>
ENDIF crow = ROW () ccol = COL () retcol = SETCOLOR ( "w/n") p>
@ 22,0 CLEAR TO 24,79 p>
IF callpnt = "GET" p>
// исправленний HLP для GET 26.09.96 p>
@ 22,0 SAY "Enter /" + CHR (24) + '/' + CHR (25) + '/ PgUp/PgDn'; p> < p> + "-Завершити редагування із збереженням зміненогозначення " p>
@ 22,0 SAY" Enter/"+ CHR (24) + '/' + CHR (25) + '/ PgUp/PgDn' COLOR
"r +/n" p>
@ 23,1 SAY CHR (26) + '/' + CHR (27) + '/ ^' + CHR (26); p>
+ '/^ '+ CHR (27) +'/Home/End - Переміщення курсору ' p>
@ 23,1 SAY CHR (26) +'/'+ CHR (27) +'/^ '+ CHR (26); p>
+ '/ ^' + CHR (27) + '/ Home/End' COLOR "r +/n" p>
@ 24,1 SAY 'Esc - Скасувати редагування '; p>
+' (без збереження зміненогозначення) ' p>
@ 24,1 SAY "Esc" COLOR "r +/n"
ENDIF
IF callpnt = "AAED". OR. callpnt = "BBED" p>
SET COLOR TO ( "w/n") p>
@ 22,1 SAY chr (24) + "/" + chr (25) + "/ "+ CHR (26) + '/'; p>
+ CHR (27) + '/ ^' + CHR (26) +" PgUp/PgDn "; p>
+ '/ ^ '+ CHR (27) +'/Home/End - Переміщення курсору ' p>
@ 24,0 SAY' Enter - Редагування ' p>
@ 23,23 TO 24,23 DOUBLE p>
@ 23,25 SAY 'Esc - Повернення на крок назад' COLOR "w/n" p>
@ 23,25 SAY 'Esc' COLOR "r +/n" p >
@ 23,54 TO 24,54 DOUBLE p>
@ 23,55 SAY 'F8 - Видалити рядок' p>
@ 24,55 SAY 'F3 - Вставити рядок'
SET COLOR TO ( "r +/n") p>
@ 22,1 SAY chr (24) + "/" + chr (25) + "/" + CHR (26) + '/'; p>
+ CHR (27) + '/ ^' + CHR (26) + "PgUp/PgDn"; p>
+ '/ ^' + CHR (27 ) + '/ Home/End' p>
@ 24,0 SAY 'Enter' p>
@ 23,55 SAY 'F8' p>
@ 24,55 SAY 'F3'
ENDIF
IF callpnt = "CCED". OR. callpnt = "DDED" p>
SET COLOR TO ( "w/n") p>
@ 22,1 SAY chr (24) + "/" + chr (25) + "/ "+ CHR (26) + '/'; p>
+ CHR (27) + '/ ^' + CHR (26) +" PgUp/PgDn "; p>
+ '/ ^ '+ CHR (27) +'/Home/End - Переміщення курсору ' p>
@ 24,0 SAY' Enter - Редагування ' p>
@ 23,23 TO 24,23 DOUBLE p>
@ 23,25 SAY 'Esc - Повернення на крок назад' COLOR "w/n" p>
@ 23,25 SAY 'Esc' COLOR "r +/n" p >
@ 24,25 SAY '^ Enter - Вибір значення' COLOR "w/n" p>
@ 24,25 SAY '^ Enter' COLOR "r +/n" p>
@ 23,54 TO 24,54 DOUBLE p>
@ 23,55 SAY 'F8 - Видалити рядок' p>
@ 24,55 SAY 'F3 - Вставити рядок' p>
SET COLOR TO ( "r +/n") p>
@ 22,1 SAY chr (24) + "/" + chr (25) + "/" + CHR (26) + '/ '; p>
+ CHR (27) +'/^ '+ CHR (26) + "PgUp/PgDn"; p>
+'/^ '+ CHR (27) +'/Home/End ' p>
@ 24,0 SAY' Enter ' p>
@ 23,55 SAY' F8 ' p>
@ 24,55 SAY' F3 '
ENDIF p>
SET COLOR TO (retcol) p>
SETPOS (crow, ccol)
RETURN p>
5) п.п. виявлення всіх випадків перевищення нормативних інтервалів між профілактики, виведення їх у вивідний файл
"DD", а також видачі відомості на принтер: func vedomlocal tinvnom, sitog, tdata, tidzap, tidst, idpopset printer onselect ddzaplin: = space (17) + "Таблиця порушення норм техобслуговування:"
? linselect bbset relat to bb-> invnom into ccset relat to cc-> idst into aa additivego topsitog: = 0do while. not. eof ()tinvnom: = bb-> invnomtdata: = bb-> dateproftidzap: = bb-> idzaptidst: = cc-> idstskipif (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 bbendifenddolin :="+--------------------------------------------- ------------------------< br>--------+"< br>? linlin: = "| Інв. | Найменування | Дата | Вид предвор. | Дата | вид слід.
| Прострочив. | "
? linlin: = "| номер | типу верстата | | профілактики | | профілактики
| Днів | "
? linlin :="|-----+--------------+--------+--------------+ --------+--------------< br>+--------|"< Br>? linselect ddset relat to dd-> invnom into cc additivego topdo while. not. eof ()tinvnom: = dd-> invnomidpop: = dd-> idzappplin: = "|" + dd-> invnom + "|"select bbgo topdo while. not. eof ()if (tinvnom = bb-> invnom). and. (idpop = bb-> idzap)lin: = lin + aa-> namest + "|" + dtoc (bb-> dateprof) + "|" + bb-> vidprofendifskipenddoselect ddidpop: = dd-> idzapspselect bbgo topdo while. not. eof ()if (tinvnom = bb-> invnom). and. (idpop = bb-> idzap)lin: = lin + "|" + dtoc (bb-> dateprof) + "|" + bb-> vidprof + "|"endifskipenddoselect ddlin: = lin + str (dd-> fkdn-dd-> norma, 4) + "|"
? linskipenddolin :="+--------------------------------------------- ------------------------< br>--------+"< br>? linset color to w +/blin: = "Всього прострочена днів -" + str (sitog, 5)
? linset printer offsound ()inkey (0)return nil p>
6) п.п. подачі звукового сигналу для сигналізації успішного виконання поставленого завдання:func soundtone (300,1)tone (100,1)tone (300,1)tone (100,1)return nil p>
7) п.п. збереження зкрана:
FUNC s_scr (t, l, b, r) p>
IF t = NIL t: = 0 p>
ENDIF p>
IF l = NIL l: = 0
ENDIF p>
IF b = NIL b: = MAXROW () p>
ENDIF p>
IF r = NIL r: = MAXCOL ()
ENDIF p>
AADD (wind [1], t) p>
AADD (wind [2], l) p>
AADD (wind [ 3], b) p>
AADD (wind [4], r) p>
AADD (wind [5], SAVESCREEN (t, l, b, r)) p>
AADD (pos [1], ROW ()) p>
AADD (pos [2], COL ()) p>
AADD (colr, SETCOLOR ()) p >
AADD (curs, SETCURSOR ()) p>
RETURN. T. p>
8) п.п. відновлення зкрана:
FUNC r_scr () p>
LOCAL ln ln: = LEN (wind [1]) p>
IF ln == 0 p>
@ 24,0 SAY 'Помилка -- стек для відновлення параметрів порожній ' p>
INKEY (0) p>
@ 24,0 p>
ENDIF p>
RESTSCREEN (wind [1, ln ], wind [2, ln], wind [3, ln], wind [4, ln], wind [5, ln]) p>
ASIZE (wind [1], ln-1) p>
ASIZE (wind [2], ln-1) p>
ASIZE (wind [3], ln-1) p>
ASIZE (wind [4], ln - 1) p>
ASIZE (wind [5], ln-1) p>
SETPOS (pos [1, ln], pos [2, ln]) p>
ASIZE (pos [1], ln-1) p>
ASIZE (pos [2], ln-1) p>
SETCOLOR (colr [ln]) p>
ASIZE (colr, ln-1) p>
SETCURSOR (curs [ln]) p>
ASIZE (curs, ln-1) p>
RETURN. T. p>
9) п.п. визначення - чи натиснута клавіша типового методу, якщо так - топовертає блок коду з відповідним методом, якщо ні - то повертає
NIL. Параметр функції - INKEY-код натиснутою клавіші.
FUNC basemet (cod) p>
LOCAL ret, ei, i p>
LOCAL crsm: = (; p>
(K_DOWN, (| o | o: down () )); p>
, (K_UP, (| o | o: up ())); p>
, (K_PGDN, (| o | o: pagedown ()));
, (K_PGUP, (| o | o: pageup ())); p>
, (K_CTRL_PGDN, (| o | o: gobottom ())); p> < p>, (K_CTRL_PGUP, (| o | o: gotop ())); p>
, (K_RIGHT, (| o | o: right ())); p>
, ( K_LEFT, (| o | o: left ())); p>
, (K_CTRL_RIGHT, (| o | o: panright ())); p>
, (K_CTRL_LEFT, (| o | o: panleft ())); p>
, (K_END, (| o | o: end ())); p>
, (K_HOME, (| o | o: home ())); p>
, (K_CTRL_END, (| o | o: panend ())); p>
, (K_CTRL_HOME, (| o | o: panhome ()) )) i: = ASCAN (crsm, (| ei | cod = ei [1])) p>
IF i 0 ret: = crsm [i, 2] p>
ELSE ret: = NIL p>
ENDIF
RETURN ret p>
10) п.п. перемикання режиму вставка/заміна та виду курсору:
PROCEDURE Repl_Ins () p>
IF READINSERT () p>
READINSERT (. F.) p>
SETCURSOR (SC_INSERT) p>
ELSE p >
READINSERT (. T.) p>
SETCURSOR (SC_NORMAL) p>
ENDIF
RETURN p>
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) p>
DO CASE p>
CASE cs> = 97. AND. cs = 160. AND. cs = 224. AND. cs 80 p>
RETURN
ENDIF
IF x = NIL// Центр з X x: = (80-ml)/2 p>
ENDIF
IF y = NIL// Центр з Y y: = 24/2 - 1
ENDIF
IF color NIL c: = SETCOLOR (color) p>
@ y, x SAY m p>
SETCOLOR (c)
ELSE p>
@ y, x SAY m
ENDIF
RETURN p>
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 p>
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 p>
** оптимізована з використанням буфера клавіатури стабілізація p>
DO WHILE (NEXTKEY () == 0). AND. (. NOT. Brws: stabilize ()) p>
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) p>
IF blk NIL p>
EVAL (blk, brws) p>
ELSE p>
DO CASE p>
CASE (bHotkey: = SETKEY (nKey)) NIL p>
EVAL (bHotkey, PROCNAME (), PROCLINE (), READVAR ()) p>
CASE (nKey = K_F8) p >
DELETE p>
// помацати файловий вказівник, якщо p>
// возвращаетя EOF () -. T. після Down-Up, p>
// значить файл порожній p>
SKIP p>
SKIP -1 p>
IF RECNO () = RECCOUNT () 1 ret_fl: =. T.// Завершення перегляду p>
ENDIF brws: RefreshAll () nrc: = 0 p>
CASE nKey = K_ESC ret_fl: =. T.// Завершення перегляду p>
CASE (nKey = K_ENTER) p>
// Редагування поточного елемента даних aaGet (brws; p>
, "Редагування файлу aa.dbf") nrc: = 0// оновити верхній рядок p>
CASE nKey == K_F3 p>
APPEND BLANK brws: RefreshAll () p>
ENDCASE
ENDIF
ENDDO
SET RELAT TO s_r_s (. T.) r_scr ()
RETURN ret p>
16) п.п. виконання GET в поточній колонці файлу aa.dbf:
PROCEDURE aaGet (brws, z0) p>
LOCAL r, c, w, w2, otb p>
LOCAL retcurs, retexit// форма курсору і режим виходу з READ p>
LOCAL retins, retcol// режим вставка-заміна в READ p>
LOCAL indch: =. F.// Прапор змін значень полів, що входять до p>
// індекснове вираз (тоді потрібно REFRESHALL (), p>
// а не REFRESHCURRENT ()) p>
LOCAL col r: = ROW () c: = COL () p>
// Перевірка оновлення екрану, коректності бази і т.д. p>
ForceStable (brws) p>
// Установка клавіш Up-Arrow і Down-Arrow як клавіш виходу з p>
// команди READ retexit: = READEXIT (. T.) p>
// Установка клавіші INS для перемикання p>
// режиму вставка/заміна p>
// і відповідної зміни вигляду курсора retins: = SetKey (K_INS, (| | Repl_Ins ())) p>
// еквівалентно Set Key K_INS To Procedure
Repl_Ins p>
// Установка вигляду курсору по поточному стану режиму retcurs: = SetCursor (IF (ReadInsert (), SC_NORMAL, SC_INSERT)) s_scr () retcol: = SETCOLOR ( "w +/g") p >
@ brws: nTop-3, 0 p>
@ brws: nTop-3, 0 SAY z0 hlp ( "GET") p>
SETCOLOR ( "gr +/n, w +/g ") indch: =. F.
DO CASE p>
CASE brws: colpos = 1 w: = aa-> idst p>
@ r, c 2 GET w p>
READ p>
IF. NOT. (LASTKEY () = K_ESC). OR. (aa-> idst == w) p>
REPLACE aa-> idst WITH w indch: =. T. p>
ENDIF p>
CASE brws: colpos = 2 n: = aa-> namest p>
@ r, c 2 GET n p>
READ p>
IF. NOT. (LASTKEY () = K_ESC). OR. (aa-> namest == n) p>
REPLACE aa-> namest WITH n p>
ENDIF p>
CASE brws: colpos = 3 w: = aa-> norma p>
@ r, c 1 GET w p>
READ p>
IF. NOT. ((LASTKEY () = K_ESC). OR. (aa-> norma = w)) p>
REPLACE aa-> norma WITH w
ENDIF
ENDCASE
SETCOLOR (retcol) r_scr ()
SETPOS (r, c)
IF indch brws: RefreshAll ()
ELSE brws: RefreshCurrent ()// Забезпечити перемальовування поточного рядка,
ENDIF// оскільки змінювався елемент даних p>
// Відновлення форми курсору і режиму виходу з READ по стрільцям p>
// і процедури по клавіші K_INS
SetCursor (retcurs) p>
READEXIT (retexit) p>
SetKey (K_INS, retIns) p>
// Перевірка вимоги відходу з поточного запису після GET nKey: = LASTKEY () p>
IF nKey == K_UP. OR. nKey == K_DOWN. OR. ; NKey == K_PGUP. OR. nKey == K_PGDN p>
// керування курсором - перехід до іншого запису p>
KEYBOARD (CHR (nKey)) p>
ENDIF
RETURN p>
Примітка: У звіті не описані п.п.: а) для створення TBrowse-об'єкта для перегляду-редагування файлу bb.dbf у вікні t, l, b, r; б) для перегляду файлів bb.dbf з обробкою натискає клавішу і викликомвідповідних методів або користувача функцій; в) для виконання GET в поточній колонці файлу bb.dbf:
Оскільки ці підпрограми практично аналогічні підпрограм для файлу aa.dbf
!!!
.................................................. ..........................< br>.................................................. ... p>
10. Результати тестового прикладу: p>
а) Вміст вивідного файлу dd.dbf: p>
INVNOM FKDN NORMA IDZAPPP IDZAPSP p>
2 62 20 9 p>
15 p>
231 51 20 10 p>
16 p>
24 74 15 12 p>
18 p>
323 77 25 8 p>
14 p>
4 50 15 11 p>
17 p>
626 58 25 7 p>
13 p>
б) Вміст файлу (print.prn), що виводиться на принтер: p>
Таблиця порушення норм техобслуговування:
-------------------------------------------------- --------------------------< br>-------------------------------------< br>| Інв. | Найменування | Дата | Вид предвор. | Дата | видслед. | Прострочив. |
| Номер | типу верстата | | профілактики | |профілактики | днів |
|------------------------------------------------- --------------------------< br>-------------------------------------|< Br>| 24 | Свердлильний | 01/18/98 | Регулювання | 04/02/98 | Частка p>
| 59 |
| 323 | стругальний | 01/28/98 | Регулювання | 04/15/98 | Частка p>
| 52 |
| 2 | Токарний | 01/29/98 | Регулювання | 04/01/98 |
Чистка | 42 |
| 4 | Свердлильний | 01/19/98 | Регулювання | 03/10/98 | Частка p>
| 35 |
| 626 | стругальний | 02/01/98 | Регулювання | 03/31/98 | Частка p>
| 33 |
| 231 | Токарний | 01/28/98 | Регулювання | 03/20/98 | Частка p>
| 31 |
-------------------------------------------------- --------------------------< br>------------------------------------- p>
Всього прострочена днів - 252