
- •Лабораторная работа № 3 Тема: Разработка многоуровневого меню для работы с базой данных.
- •DBase-меню
- •Определение реакции меню:
- •Активация меню:
- •Функции выбора из меню:
- •Горизонтальное bar-меню:
- •Определение pad-пунктов меню:
- •Функции выбора из меню(для передачи параметров в процедуры):
- •Отключение меню:
- •Порядок выполнения:
- •Пример программы
Функции выбора из меню(для передачи параметров в процедуры):
MENU() - возвращает имя активного BAR-меню;
PAD() - возвращает имя PAD-пункта, выбранного в BAR-меню;
PROMPT() - возвращает строку-приглашение, содержащуюся в PAD-элементе, выбранном в BAR-меню.
Отключение меню:
DEACTIVATE MENU - удаление активного BAR-меню с экрана/окна, но не из памяти.
RELEASE PAD <PAD-пункт> / ALL OF <имя BAR-меню> - удаляет указанный PAD-пункт BAR-меню из памяти и с экрана/окна. Можно удалить и все пункты PAD-меню (ALL) (кроме системного меню). Включение операнда EXTENDED удаляет также и все подчинённые меню следующего уровня.
Пример:
Построим горизонтальное меню с именем MAINMENU и содержащим “РЕДАКТИРОВАНИЕ”, “ПОИСК”, “КОНЕЦ”.
При выборе любого из пунктов меню вызывается процедура РРР, в которую передаются параметры MENU(), PAD(), где они и печатаются:
CLEAR
DEFINE MENU mainmenu
DEFINE PAD redak OF mainmenu PROMPT ‘\<РЕДАКТИРОВАНИЕ’ AT 1,10
DEFINE PAD poisk OF mainmenu PROMPT ‘\<ПОИСК’ AT 1,32
DEFINE PAD konec OF mainmenu PROMPT ‘\<КОНЕЦ’ AT 1,50
ON SELECTION PAD redak OF mainmenu DO ppp WITH MENU(),PAD()
ON SELECTION PAD poisk OF mainmenu DO ppp WITH MENU(),PAD()
ON SELECTION PAD konec OF mainmenu DO ppp WITH MENU(),PAD()
ACTIVATE MENU mainmenu
PROCEDURE ppp
PARAMETR mmenu, mpad
? mmenu, mpad
RETURN
Вызванная процедура после своего завершения возвращает управление в вызывающую программу на строку ACTIVATE mainmenu до нажатия клавиши Escape.
Замечание: поскольку во всех случаях идёт обращение к процедуре РРР, в данном примере можно использовать только одну команду ON SELECTION MENU mainmenu DO ppp WITH MENU(), PAD() вместо трёх ON SELECTION PAD.
Порядок выполнения:
1. Разработать управляющую программу для работы с БД, осуществляющую по выбору из меню:
- просмотр БД;
- пополнение БД;
- поиск с возможностью редактирования БД ( обновление и удаление);
- выход из БД.
Выполнить поиск по нескольким полям из каждого файла БД.
Пример программы
use fam.dbf
store space(20) to _fam
store space(2) to _nrab
set date british
clear
define popup menu1 from 18,2 shadow
define bar 1 of menu1 prompt 'Просмотр'
define bar 2 of menu1 prompt 'Поиск'
define bar 3 of menu1 prompt 'Создание'
define bar 4 of menu1 prompt 'Выход'
on selection bar 1 of menu1 do pmenu1 with popup(),prompt(),bar()
on selection bar 3 of menu1 do pmenu1 with popup(),prompt(),bar()
on selection bar 4 of menu1 do pmenu1 with popup(),prompt(),bar()
on bar 2 of menu1 activate popup menu2
activate popup menu1
define popup menu2 from 18,12 shadow
define bar 1 of menu2 prompt 'Фамилия'
define bar 2 of menu2 prompt 'Номер'
on selection popup menu2 do pmenu2 with popup(),prompt(),bar()
activate popup menu2
procedure pmenu1
parameter mpopup,mprompt,mbar
if bar()=4
deactivate popup
endif
if bar()=1
list
endif
if bar()=3
clear
append
endif
return
procedure pmenu2
parameter mpopup,mprompt,mbar
if bar()=1
clear
@ 4,19 to 6,70 doubl
@ 5,20 say 'Введите фамилию: ' get _fam
read
locate for fam=trim(_fam)
endif
if bar()=2
clear
@ 4,19 to 6,70 doubl
@ 5,20 say 'Введите номер: ' get _nrab
read
locate for nrab=trim(_nrab)
endif
clear
@4,30 say 'ДАHHЫЕ '
@5,9 TO 15,70 doubl
@5,51 say ' Сегодня '+dtoc(date())+' '
@6,11 say 'Фамилия : ' get fam
@7,11 say 'Имя: ' get im
@8,11 say 'Номер: ' get nrab
@11,10 to 11,69
@12,12 say 'Выход с сохр-м изм-ий - ^End, ...БЕЗ - Esc'
read cycle
return