Поиск данных по различным атрибутам

Лабораторная работа

по курсу «Управление базами данных»

Выполнил: Куликов Д.А.

Группа: 03-217

Руководитель: Склеймин Ю.Б.

Москва, 2011г.

Содержание

Цель работы.. 3

Постановка задачи. 3

Выполнение работы.. 3

Правила ссылочной целостности. 4

Пользовательский интерфейс. 4

Описание кнопок. 5

Заключение. 8

Вывод. 8

Приложение А.. 8

Приложение В.. 12

Цель работы:

Изучение основных элементов языка FOXPRO и его применение для разработки информационных систем.

Постановка задачи: разработать информационную систему, которая могла бы послужить прототипом телефонного справочника. Создать программу, которая позволяет редактировать содержимое справочника.

Выполнение работы

Для начала определим содержание таблиц, из которых состоит проект, а также связи между таблицами.

Наша база будет содержать справочники фамилий, имен, отчеств, наименований улиц, а также сводную таблицу (дочернюю). В ней помимо данных из справочников (родительских таблиц) будут указаны номера дома, корпуса, квартиры и телефона.

Связи таблиц будем использовать типа «один-ко-многим», так как значения из родительских таблиц могут повторяться в дочерней. А для выполнения ссылочной целостности будем использовать дополнительный атрибут - первичный ключ.

Структура сводной таблицы:

cod FAM NAM otch Street dom flat Telephone
N10 N5 N5 N5 N5 C 8 N4 C 12

поиск данных по различным атрибутам - student2.ru

       
  поиск данных по различным атрибутам - student2.ru   поиск данных по различным атрибутам - student2.ru
поиск данных по различным атрибутам - student2.ru поиск данных по различным атрибутам - student2.ru поиск данных по различным атрибутам - student2.ru поиск данных по различным атрибутам - student2.ru поиск данных по различным атрибутам - student2.ru поиск данных по различным атрибутам - student2.ru поиск данных по различным атрибутам - student2.ru
Структура справочников:


NAM  
cod N5
name C15
FAM  
поиск данных по различным атрибутам - student2.ru cod поиск данных по различным атрибутам - student2.ru N5
fam C15

поиск данных по различным атрибутам - student2.ru поиск данных по различным атрибутам - student2.ru

Street  
cod N5
val C15
OTCH  
cod N5
val C25

поиск данных по различным атрибутам - student2.ru поиск данных по различным атрибутам - student2.ru

(См. Приложение А)

поиск данных по различным атрибутам - student2.ru На справочники ссылаются поля:

-FAM

-NAME

-OTCH

-Street

Правила ссылочной целостности

поиск данных по различным атрибутам - student2.ru

Cascade- При изменении значений полей первичного ключа или ключа-кандидата в родительской таблице, автоматически осуществляется каскадное изменение всех соответствующих значений в дочерней таблице.

Restrict- Не позволяет изменять значения полей первичного ключа или ключа-кандидата в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, содержащая ссылку на изменяемую запись.

Ignore- Позволяет изменять значения полей первичного ключа или ключа-кандидата в родительской таблице независимо от существования связанных записей в дочерней таблице. Целостность данных при этом не поддерживается

Пользовательский интерфейс

Пользовательский интерфейс представляет собой форму, в которой представлены окна для формирования критериев поиска и добавления записей, кнопки добавления и удаления записей и сама таблица результатов.

поиск данных по различным атрибутам - student2.ru

Описание кнопок

При запуске справочника мы видим заполненную таблицу результатов(полная база данных). В случае необходимости получения имеющихся данных в базе достаточно нажать кнопку «поиск» при нулевых значениях атрибутов поиска.

поиск данных по различным атрибутам - student2.ru

При работе пользователя с базой данных ему предоставлены также следующие возможности (программные коды кнопок приведены в приложении B).

1)Добавление записи в базу данных.

поиск данных по различным атрибутам - student2.ru

Примечание: при условии что в родительских таблицах уже существовали добавляемые данные (для Ф.И.О. и улицы), а номера дома, корпуса, квартиры и телефона могут быть любыми.

2) Вывод данных по интересующим параметрам (фамилия, имя, отчество и т.д.). Далее представлен запрос по фамилии, другие варианты можно посмотреть в приложении А. Запрос выполняется при нажатии кнопки «поиск».

поиск данных по различным атрибутам - student2.ru

Примечание: Параметры запроса выбираются из уже существующих, и при нажатии кнопки «поиск» отображаются в таблице результатов, которая окажется пустой при отсутствии таковой записи в базе.

3) Удаление записи из базы. При нажатии кнопки «Редактировать» высветится новая форма, в которой надо отметить строки на удаление и нажать кнопку «Удалить» уже в новой форме.

поиск данных по различным атрибутам - student2.ru

4)При необходимости пользователь может добавить фамилию, имя, отчество или улицу. Для этого на главной форме нужно нажать на соответствующую кнопку, после чего высветится новая форма(форма добавления или удаления записей из родительской таблицы).

поиск данных по различным атрибутам - student2.ru

поиск данных по различным атрибутам - student2.ru

5)Редактирование базы данных. При нажатии кнопки «Редактировать» высветится новая форма, в которой можно изменить данные любой строки и сохранить изменения нажатием кнопки «Сохранить» уже в новой форме.

поиск данных по различным атрибутам - student2.ru

6)Выходной документ(отчет) выводится при нажатии кнопки «Печать».

поиск данных по различным атрибутам - student2.ru

Заключение

В процессе выполнения работы были освоены и изучены методы объектно-ориентированного языка программирования Visual FoxPro. Была решена задача по разработке базы данных в виде телефонного справочника, содержание которого можно редактировать.

Вывод

Разработанная нами программа работает корректно, цели в изучении основных элементов языка Visual FoxPro и в его применении для обработки баз данных достигнуты, можно считать, что работа выполнена в полном объеме.

Приложение А

Связи таблиц

поиск данных по различным атрибутам - student2.ru

Поиск данных по различным атрибутам

Поиск по фамилии

поиск данных по различным атрибутам - student2.ru

Поиск по имени

поиск данных по различным атрибутам - student2.ru

Поиск по отчеству

поиск данных по различным атрибутам - student2.ru

Поиск по улице

поиск данных по различным атрибутам - student2.ru

Поиск по номеру дома

поиск данных по различным атрибутам - student2.ru

Поиск по номеру квартиры

поиск данных по различным атрибутам - student2.ru

Поиск по номеру телефона

поиск данных по различным атрибутам - student2.ru

Приложение В

1)Программный код кнопки «добавить»:

IF !empty(THISFORM.CFam.value)

IF !empty(THISFORM.CNam.value)

IF !empty(THISFORM.COTCH.value)

IF !empty(THISFORM.CSTREET.value)

IF !empty(THISFORM.DOM.value)

IF !empty(THISFORM.FLAT.value)

IF !empty(THISFORM.TELEPHONE.value)

SELECT MAIN

CALCULATE MAX(COD) TO WSP

WSP=WSP+1

DIMENSION PER_ARR(8)

PER_ARR[1]=WSP

PER_ARR[2]=FAM.COD

PER_ARR[3]=NAM.COD

PER_ARR[4]=OTCH.COD

PER_ARR[5]=STREET.COD

PER_ARR[6]=CAST(thisform.DOM.value AS INT)

PER_ARR[7]=CAST(thisform.FLAT.value AS INT)

PER_ARR[8]=thisform.TELEPHONE.value

APPEND FROM ARRAY PER_ARR

messagebox('Запись добавлена!')

ENDIF

ENDIF

ENDIF

ENDIF

ENDIF

ENDIF

ELSE

messagebox('Заполните все поля!')

endif

thisform.Refresh

2)Программный код кнопки «удалить»:

SELECT TABLE7

DELETE

SELECT MAIN

DELETE ALL

SET DELETED on

SELECT table7

DIMENSION PER_ARR1(8)

SCAN

PER_ARR1[1]=TABLE7.COD

SELECT FAM

SCAN FOR FAM.FAM=TABLE7.FAM

PER_ARR1[2]=FAM.COD

ENDSCAN

SELECT NAM

SCAN FOR NAM.NAME=TABLE7.NAME

PER_ARR1[3]=NAM.COD

ENDSCAN

SELECT OTCH

SCAN FOR OTCH.VAL=TABLE7.OTCH

PER_ARR1[4]=OTCH.COD

ENDSCAN

SELECT STREET

SCAN FOR STREET.VAL=TABLE7.STREET

PER_ARR1[5]=STREET.COD

ENDSCAN

PER_ARR1[6]=CAST(TABLE7.DOM AS INT)

PER_ARR1[7]=CAST(TABLE7.FLAT AS INT)

PER_ARR1[8]=TABLE7.TELEPHONE

INSERT INTO MAIN FROM ARRAY PER_ARR1

SELECT TABLE7

ENDSCAN

messagebox('Записи успешно удалены')

THISFORM.Refresh

3)Программный код кнопки «поиск»:

SELECT Table7

DELETE ALL

DIMENSION PER_ARR(8)

SELECT MAIN

SCAN

SCATTER TO PER_ARR1

PER_ARR[1]=PER_ARR1[1]

SELECT FAM

SCAN FOR FAM.COD=PER_ARR1[2]

PER_ARR[2]=FAM.FAM

ENDSCAN

SELECT NAM

SCAN FOR NAM.COD=PER_ARR1[3]

PER_ARR[3]=NAM.NAME

ENDSCAN

SELECT OTCH

SCAN FOR OTCH.COD=PER_ARR1[4]

PER_ARR[4]=OTCH.VAL

ENDSCAN

SELECT STREET

SCAN FOR STREET.COD=PER_ARR1[5]

PER_ARR[5]=STREET.VAL

ENDSCAN

PER_ARR[6]=PER_ARR1[6]

PER_ARR[7]=PER_ARR1[7]

PER_ARR[8]=PER_ARR1[8]

INSERT INTO TABLE7 FROM ARRAY PER_ARR

SELECT MAIN

ENDSCAN

SELECT TABLE7

SCAN

I=0

IF (ALLTRIM(TABLE7.FAM)=ALLTRIM(THISFORM.CFam.value)) OR empty(THISFORM.CFam.value)

IF (ALLTRIM(TABLE7.NAME)=ALLTRIM(THISFORM.CNam.value)) OR empty(THISFORM.CNam.value)

IF (ALLTRIM(TABLE7.OTCH)=ALLTRIM(THISFORM.COTCH.value)) OR empty(THISFORM.COTCH.value)

IF (ALLTRIM(TABLE7.STREET)=ALLTRIM(THISFORM.CSTREET.value)) OR empty(THISFORM.CSTREET.value)

IF (ALLTRIM(TABLE7.DOM)=ALLTRIM(THISFORM.DOM.value)) OR empty(THISFORM.DOM.value)

IF (ALLTRIM(TABLE7.FLAT)=ALLTRIM(THISFORM.FLAT.value)) OR empty(THISFORM.FLAT.value)

IF (ALLTRIM(TABLE7.TELEPHONE)=ALLTRIM(THISFORM.TELEPHONE.value)) OR empty(THISFORM.TELEPHONE.value)

I=1

ENDIF

ENDIF

ENDIF

ENDIF

ENDIF

ENDIF

ENDIF

IF I=0

DELETE

ENDIF

SELECT TABLE7

ENDSCAN

SET DELETED ON

THISFORM.Refresh

4) Программный код кнопки «Печать»:

select main

report form report1.frx noeject noconsole to printer preview

5) Программный код кнопки «Сохранить»:

SET DELETED on

SELECT main

cou=RECCOUNT()

DIMENSION k(cou,8)

cou=0

SELECT TABLE7

SCAN

cou=cou+1

i=0

k[cou,1]=CAST(table7.cod as int)

SELECT FAM

SCAN

IF FAM.FAM=ALLTRIM(TABLE7.FAM)

k[cou,2]=fam.cod

i=1

ENDIF

ENDSCAN

IF I=1

SELECT NAM

SCAN

IF NAM.NAME=ALLTRIM(TABLE7.NAME)

k[cou,3]=nam.cod

i=2

ENDIF

ENDSCAN

IF I=2

SELECT OTCH

SCAN

IF OTCH.VAL=ALLTRIM(TABLE7.OTCH)

k[cou,4]=otch.cod

I=3

ENDIF

ENDSCAN

IF I=3

SELECT STREET

SCAN

IF STREET.VAL=ALLTRIM(TABLE7.STREET)

k[cou,5]=street.cod

k[cou,6]=CAST(table7.dom as int)

k[cou,7]=CAST(table7.flat as int)

k[cou,8]=table7.telephone

I=4

ENDIF

ENDSCAN

ENDIF

ENDIF

ENDIF

IF i<>4

MESSAGEBOX('Вы ввели некорректное значение одного из параметров у пользователя №'+table7.cod)

i=5

EXIT

ENDIF

SELECT table7

ENDSCAN

IF i<>5

SELECT main

FOR coul=1 TO cou

UPDATE main SET main.fam=k[coul,2],main.name=k[coul,3],main.otch=k[coul,4],main.street=k[coul,5],main.dom=k[coul,6],main.flat=k[coul,7],main.telephone=k[coul,8] WHERE main.cod=k[coul,1]

ENDFOR

MESSAGEBOX('Данные успешно изменены и сохранены')

ENDIF

SET DELETED ON

thisform.Load

thisform.Refresh

6) Программный код кнопки «Добавить» в родительских таблицах(все коды в родительских таблицах совпадают, разница лишь в названии таблиц):

SELECT fam

SET DELETED OFF

CALCULATE MAX(COD) TO PER_MAX

PER_MAX=PER_MAX+1

DIMENSION PER_ARR(2)

PER_ARR[1]=PER_MAX

PER_ARR[2]=' '

INSERT INTO FAM FROM ARRAY PER_ARR(2)

SET DELETED ON

THISFORM.Refresh

Наши рекомендации