Датологическая модель является моделью логического уровня и представляет собой отображение логических связей между элементами данных безотносительно к их содержанию и среде хранения. Эта модель строится в терминах информационных единиц, допустимых в той конкретной СУБД, в среде которой мы проектируем базу данных.
Этап создания датологической модели называется датологическим проектированием. Описание логической структуры базы данных на языке СУБД называется схемой.
ПРОГРАММЫ
SET TALK OFF
SET DATE GERMAN
CLEAR ALL
SET DELETED ON
SET ESCAPE OFF
SET HELP OFF
SET BELL OFF
CLEAR MACROS
ON KEY
*DO Titul
CLOSE DATABASES
DELETE FILE video. idx
DELETE FILE nosit. idx
DELETE FILE post. idx
USE video
INDEX ON tip_nosit TO video COMPACT
USE nosit
INDEX ON tip_nosit TO nosit COMPACT
USE post
INDEX ON kod_post TO post COMPACT
USE video IN A INDEX video
USE nosit IN B INDEX nosit
USE post IN C INDEX post
SELECT A
SET RELATION TO tip_nosit INTO B
SET RELATION TO kod_post INTO C
ON KEY LABEL Ctrl+PgUp GO TOP
ON KEY LABEL Ctrl+PgDn GO BOTTOM
ON KEY LABEL Ctrl+Q DO EndProc WITH 1
DEFINE WINDOW MainWindow FROM 0,0 TO 24,79 IN SCREEN;
TITLE ' Справочник "ВИДЕО КИОСК" ';
DOUBLE SHADOW FILL '-' COLOR GR+/N
DEFINE WINDOW ViewWindow FROM 0,0 TO 21,77;
IN WINDOW MainWindow;
DOUBLE CLOSE FLOAT GROW ZOOM
DEFINE WINDOW HintWindow FROM 22,0 TO 22,77 IN WINDOW MainWindow;
NONE COLOR GR+/GR
DEFINE WINDOW HelpWindow FROM 5,17 TO 16,63;
TITLE ' ПОМОЩЬ ' COLOR W+/G
DEFINE WINDOW PrintWindow FROM 5,8 TO 19,67;
TITLE 'Вывод на устройство PC';
DOUBLE SHADOW COLOR GR+/GR
DEFINE WINDOW AddWindow FROM 3,13 TO 18,67;
TITLE ' Дополнение базы данных ';
FLOAT SHADOW SYSTEM COLOR SCHEME 8
DEFINE WINDOW FindWindow FROM 5,13 TO 19,70;
TITLE 'Информация о фильме' DOUBLE
SET MESSAGE WINDOW MainWindow
DEFINE MENU MainMenu BAR AT LINE 0 IN WINDOW MainWindow;
COLOR SCHEME 10
DEFINE PAD DataMenu OF MainMenu PROMPT 'ДАННЫЕ';
MESSAGE 'Работа с базами данных'
DEFINE PAD SearchMenu OF MainMenu PROMPT 'ПОИСК';
MESSAGE 'Поиск данных по ключу'
DEFINE PAD FiltrMenu OF MainMenu PROMPT 'ФИЛЬТРАЦИЯ';
MESSAGE 'Фильтр просмотра данных'
DEFINE PAD QuitMenu OF MainMenu PROMPT 'ВЫХОД';
MESSAGE 'Выход из программы'
ON SELECTION PAD DataMenu OF MainMenu ACTIVATE POPUP DataPopup
|
ON SELECTION PAD SearchMenu OF MainMenu ACTIVATE POPUP SearchPopup
ON SELECTION PAD FiltrMenu OF MainMenu ACTIVATE POPUP FiltrPopup
ON SELECTION PAD QuitMenu OF MainMenu ACTIVATE POPUP QuitPopup
DEFINE POPUP DataPopup FROM 1,0 IN WINDOW MainWindow COLOR SCHEME 10
DEFINE BAR 1 OF DataPopup PROMPT 'Просмотр данных';
MESSAGE 'Просмотр данных без внесения изменений'
DEFINE BAR 2 OF DataPopup PROMPT 'Редактирование данных';
MESSAGE 'Просмотр данных с возможностью изменения данных'
ON SELECTION POPUP DataPopup DO BrowseData WITH BAR()
DEFINE POPUP PrintPopup FROM 8,32;
TITLE 'Вывод данных' IN SCREEN COLOR SCHEME 10
DEFINE BAR 1 OF PrintPopup PROMPT 'На экран';
MESSAGE 'Вывод данных на экран'
DEFINE BAR 2 OF PrintPopup PROMPT 'В файл';
MESSAGE 'Вывод данных в файл'
DEFINE BAR 3 OF PrintPopup PROMPT 'На принтер';
MESSAGE 'Вывод данных на принтер'
ON SELECTION POPUP PrintPopup DO Print
DEFINE POPUP SearchPopup FROM 1,8 IN WINDOW MainWindow COLOR SCHEME 10
DEFINE BAR 1 OF SearchPopup PROMPT 'по названию фильма';
MESSAGE 'Поиск данных по названию фильма'
DEFINE BAR 2 OF SearchPopup PROMPT 'по типу';
MESSAGE 'Поиск данных по типу'
DEFINE BAR 3 OF SearchPopup PROMPT 'по коду';
MESSAGE 'Поиск данных по коду'
ON SELECTION POPUP SearchPopup DO SearchProc
DEFINE POPUP FiltrPopup FROM 1,15 IN WINDOW MainWindow COLOR SCHEME 10
DEFINE BAR 1 OF FiltrPopup PROMPT 'по названию фильма';
MESSAGE 'Фильтрация данных по названию фильма'
DEFINE BAR 2 OF FiltrPopup PROMPT 'по типу';
MESSAGE 'Фильтрация данных по типу'
DEFINE BAR 3 OF FiltrPopup PROMPT 'по коду';
MESSAGE 'Фильтрация данных по коду'
DEFINE BAR 4 OF FiltrPopup PROMPT 'по качеству';
MESSAGE 'Фильтрация данных по качеству'
ON SELECTION POPUP FiltrPopup DO FiltrProc
DEFINE POPUP QuitPopup FROM 1,27 IN WINDOW MainWindow COLOR SCHEME 10
DEFINE BAR 1 OF QuitPopup PROMPT '\<Выход в FoxPro'
DEFINE BAR 2 OF QuitPopup PROMPT 'Выход в Ms-Dos'
ON SELECTION POPUP QuitPopup DO EndProc WITH 2
ACTIVATE WINDOW MainWindow
ACTIVATE MENU MainMenu
DO EndProc WITH 1
PROCEDURE Titul
SET CURSOR OFF
DEFINE WINDOW TitleWindow FROM 0,0 TO 24,79 DOUBLE
ACTIVATE WINDOW TitleWindow
TEXT
ENDTEXT
Key=INKEY(20)
RELEASE WINDOW TitleWindow
RETURN
PROCEDURE PrintRec
? ' '
? 'Название фильма: ',A. nazv_f
? 'Тип носителя: ',A. tip_nosit
|
? 'Название носителя: ',B. nazv_nosit
? 'Продолжительность: ',A. prodol
? 'Качество: ',A. kachestvo
? 'Цена: ',A. zena
? 'Код поставщика: ',A. kod_post
? 'Название поставщика: ',C. nazv_post
? 'Адрес поставщика: ',C. adres_post
? 'Телефон поставщика: ',C. telef_post
? 'Жанр: ',A. janr
? 'Главный артист: ',A. gl_artist
? 'Код фильма: ',A. kod_f
RETURN
PROCEDURE Print
SET CURSOR OFF
y=BAR()
ACTIVATE WINDOW PrintWindow
DO CASE
CASE y=1
SCAN
Do PrintRec
WAIT 'Любая клавиша - Продолжить, Esc - ОТКАЗ' WINDOW
IF LASTKEY() =27
EXIT
ENDIF
ENDSCAN
CASE y=2
WAIT 'Данные записываются в файл INFO. DAT Любая клавиша - ЗАПИСЬ, Esc - ОТКАЗ' WINDOW
IF LASTKEY() #27
SET PRINTER TO info. dat ADDITIVE
SET PRINTER ON
SCAN
Do PrintRec
ENDSCAN
SET PRINTER OFF
ENDIF
CASE y=3
SET PRINTER TO LPT1
IF PRINTSTATUS()
SET PRINTER ON
SCAN
Do PrintRec
ENDSCAN
SET PRINTER OFF
ELSE
WAIT 'Принтер не готов' WINDOW NOWAIT
ENDIF
ENDCASE
DEACTIVATE WINDOW PrintWindow
DEACTIVATE POPUP
RETURN
PROCEDURE AddRec
PUSH KEY CLEAR
SET CURSOR ON
ACTIVATE WINDOW AddWindow
@ 1,1 TO 11,51
SCATTER MEMVAR BLANK
@2,2 SAY 'НАЗВАНИЕ ФИЛЬМА: ' GET m. nazv_f DEFAULT SPACE(20)
@3,2 SAY 'ТИП НОСИТЕЛЯ: ' GET m. tip_nosit PICTURE '999'
@4,2 SAY 'ПРОДОЛЖИТЕЛЬНОСТЬ: ' GET m. prodol DEFAULT SPACE(12)
@5,2 SAY 'КАЧЕСТВО: ' GET m. kachestvo DEFAULT SPACE(18)
@6,2 SAY 'ЦЕНА: ' GET m. zena
@7,2 SAY 'КОД ПОСТАВЩИКА: ' GET m. kod_post PICTURE '999'
@8,2 SAY 'ЖАНР: ' GET m. janr DEFAULT SPACE(15)
@9,2 SAY 'ГЛАВНЫЙ АРТИСТ: ' GET m. gl_artist DEFAULT SPACE(17)
@10,2 SAY 'КОД ФИЛЬМА: ' GET m. kod_f PICTURE '999'
@12,14 GET choice FUNCTION '*th \! Добавить; \? Выход' DEFAULT 2 SIZE 1,10,6
READ CYCLE MODAL
IF choice=1
APPEND BLANK
GATHER MEMVAR
ENDIF
DEACTIVATE WINDOW AddWindow
ENDIF
POP KEY
RETURN
FUNCTION Refresh
SHOW GETS OFF
RETURN
FUNCTION PopShow
@ 12,3 SAY VideoArray(FocKlub) SIZE 1,36
RETURN
PROCEDURE DelRec
WAIT 'Вы действительно хотите удалить запись? (ДА-любая клавиша, НЕТ-ESC)? ' WINDOW
IF LASTKEY() #27
POP KEY
DELETE
PACK
DO BrowseData WITH 2
ENDIF
RETURN
PROCEDURE Help
PUSH KEY CLEAR
SET CURSOR OFF
ACTIVATE WINDOW HelpWindow
TEXT
^N - дополнение базы новой записью
^D - удаление текущей записи
^P - вывод/печать всех записей
|
--------------------------------------------
^PgUp - переход в начало базы
^PgDn - переход в конец базы
--------------------------------------------
^Q - выход из окна редактирования
(внесенная информация сохраняется)
Esc - то же, но информация не сохраняется
ENDTEXT
WAIT ''
DEACTIVATE WINDOW HelpWindow
SET CURSOR ON
POP KEY
RETURN
FUNCTION Hlp
SET CURSOR OFF
@ 0,0 FILL TO 0,77 COLOR GR/GR
Hint=''
DO CASE
CASE VARREAD() ='Nazvan_f'
Hint='Название фильма'
CASE VARREAD() ='Tip_nosit'
Hint='Тип носитель'
CASE VARREAD() ='Prodol'
Hint='Продолжительность'
CASE VARREAD() ='Kachestvo'
Hint='Качество'
CASE VARREAD() ='Zena'
Hint='Цена'
CASE VARREAD() ='Kod_post'
Hint='Код поставщика'
CASE VARREAD() ='Janr'
Hint='Жанр'
CASE VARREAD() ='Gl_artist'
Hint='Главный артист'
CASE VARREAD() ='Kod_f'
Hint='Код фильма'
ENDCASE
@0,(78-LEN(Hint)) /2 SAY Hint
RETURN
PROCEDURE BrowseData
PARAMETER y
DO CASE
CASE BAR() =1. OR. y=1
TitleStr='БАЗА ДАННЫХ'
STR1='NOAPPEND NODELETE NOMODIFY'
CASE BAR() =2. OR. y=2
PUSH KEY
ON KEY LABEL Ctrl+N DO AddRec
ON KEY LABEL Ctrl+D DO DelRec
ON KEY LABEL Ctrl+P ACTIVATE POPUP PrintPopup
ON KEY LABEL F1 DO Help
TitleStr='F1 - Вызов окна помощи РЕДАКТИРОВАНИЕ '
STR1=''
ENDCASE
ACTIVATE WINDOW HintWindow
GO TOP
BROWSE TITLE TitleStr;
FIELDS A. nazv_f: H='Название фильма': W=Hlp(),;
A. tip_nosit: H='Тип носителя': W=Hlp(),;
B. nazv_nosit: H='Название носителя': R: W=Hlp(),;
A. prodol: H='Продолжительность': W=Hlp(),;
A. kachestvo: H='Качество': W=Hlp(),;
A. zena: H='Цена': W=Hlp(),;
A. kod_post: H='Код поставщика': W=Hlp(),;
C. nazv_post: H='Название поставщика': R: W=Hlp(),;
C. adres_post: H='Адрес поставщика': R: W=Hlp(),;
C. telef_post: H='Телефон поставщика': R: W=Hlp(),;
A. janr: H='Жанр': W=Hlp(),;
A. gl_artist: H='Главный артист': W=Hlp(),;
A. kod_f: H='Код фильма': W=Hlp();
WINDOW ViewWindow &STR1 COLOR GR+/N
DO CASE
CASE BAR() =1. OR. y=1
SET FILTER TO
CASE BAR() =1. OR. y=2
POP KEY
ENDCASE
DEACTIVATE WINDOW HintWindow
DEACTIVATE POPUP
RETURN
PROCEDURE SearchProc
SET CURSOR ON
y=BAR()
str=PROMPT()
DEFINE WINDOW SearchWindow FROM 7,20 TO 12,60;
TITLE 'Поиск '+ str
ACTIVATE WINDOW SearchWindow
@ 1,1 SAY 'Укажите ключ: '
DO CASE
CASE y=1
@ 1,15 GET a DEFAULT SPACE(20)
CASE y=2
@ 1,15 GET a DEFAULT SPACE(3)
CASE y=3
@ 1,15 GET a PICTURE '999' DEFAULT 0
ENDCASE
@3,11 GET choice FUNCTION '*th \! Поиск; \? Выход' DEFAULT 2 SIZE 1,7,4
READ CYCLE
RELEASE WINDOW SearchWindow
SET CURSOR OFF
IF choice=1
ACTIVATE WINDOW FindWindow
IF y=1. OR. y=2
a=Zag(ALLTRIM(a),. f)
ENDIF
IsFind=. F.
Find=. F.
SCAN
DO CASE
CASE y=1
Find=Zag(ALLTRIM(A. nazv_f),. f) =a
CASE y=2
Find=A. tip_nosit=a
CASE y=3
Find=A. kod_post=a
ENDCASE
IF Find
IsFind=. T.
? 'Название фильма: ',A. nazv_f
? 'Тип носителя: ',A. tip_nosit
? 'Название носителя: ',B. nazv_nosit
? 'Продолжительность: ',A. prodol
? 'Качество: ',A. kachestvo
? 'Цена: ',A. zena
? 'Код поставщика: ',A. kod_post
? 'Название поставщика: ',C. nazv_post
? 'Адрес поставщика: ',C. adres_post
? 'Телефон поставщика: ',C. telef_post
? 'Жанр: ',A. janr
? 'Главный артист: ',A. gl_artist
? 'Код фильма: ',A. kod_f
WAIT 'Продолжить поиск? (ДА - любая клавища, НЕТ - ESC) ' WINDOW
IF LASTKEY() =27
EXIT
ENDIF
ENDIF
ENDSCAN
IF! IsFind
WAIT 'ПОИСК НЕ УДАЧНЫЙ' WINDOW
ENDIF
DEACTIVATE WINDOW FindWindow
ENDIF
DEACTIVATE POPUP SearchPopup
RETURN
PROCEDURE FiltrProc
SET CURSOR ON
y=BAR()
str=PROMPT()
DEFINE WINDOW FiltrWindow FROM 7,20 TO 12,60;
TITLE 'Фильтрация '+ str
ACTIVATE WINDOW FiltrWindow
@ 1,1 SAY 'Укажите ключ: '
DO CASE
CASE y=1
@ 1,15 GET a DEFAULT SPACE(20)
CASE y=2
@ 1,15 GET a DEFAULT SPACE(3)
CASE y=3
@ 1,15 GET a PICTURE '999' DEFAULT 0
CASE y=4
@ 1,15 GET a DEFAULT SPACE(18)
ENDCASE
@3,11 GET choice FUNCTION '*th \! Фильтр; \? Выход' DEFAULT 2 SIZE 1,6,4
READ CYCLE
DEACTIVATE WINDOW FiltrWindow
SET CURSOR OFF
IF choice=1
DO CASE
CASE y=1
SET FILTER TO a. nazv_f=alltrim(a)
CASE y=2
SET FILTER TO a. tip_nosit=a
CASE y=3
SET FILTER TO a. kod_post=a
CASE y=4
SET FILTER TO a. kachestvo=alltrim(a)
ENDCASE
DO BrowseData WITH 1
ENDIF
RETURN
FUNCTION Zag
PARAMETER p,k
PUSH KEY clear
s='абвгдежзийклмнопрстуфхцчшщыьъэюя'
z='АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЬЪЭЮЯ'
IF k
REPLACE &p WITH CHRTRAN(&p,s,z)
ELSE
POP KEY
RETURN CHRTRAN(p,s,z)
ENDIF
POP KEY
RETURN
PROCEDURE EndProc
PARAMETER y
DO CASE
CASE BAR() =1. OR. y=1
ON KEY
SET HELP ON
SET RELATION TO
SET FILTER TO
DEACTIVATE WINDOW ALL
DEACTIVATE MENU
DEACTIVATE POPUP
CLEAR ALL
CANCEL
CASE BAR() =2. OR. y=2
QUIT
ENDCASE
POP KEY
CLOSE DATABASES
RETURN
Список использованной литературы
1. Четвериков В.Н, Ревунков Г.И., Самохволов Э.Н. Базы и банки данных.