МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
ТЮМЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Кафедра «Компьютерные технологии»
прикладные программные продукты
Методические указания
к выполнению лабораторных работ
по курсу «Прикладные программные продукты» для студентов специальности:
351400«Прикладная информатика»
Тюмень 2007
Кафедра «Компьютерные технологии»
Для студентов специальности «Прикладная информатика»
Составил: доцент
Разработка клиентского приложения на СУБД Microsoft Visual Foxpro.
2.1. Создание соединения с SQL Server.
Запустите Visual FoxPro и создайте новый проект. В проекте создайте новую базу данных.
Используя мастер соединений FoxPro установите соединение с SQL Server:
Для этого войдите в созданную базу данных, раскройте ее консоль и выберите соединения «Connection» (рис.2.1)
![]() |
Рис.2.1. Создание соедиения с базой данных
Нажминте кнопку «New» и выберите «Connection string», запустите мастер создания соединения, нажав на кнопку (рис.2.2)
![]() |
Рис.2.2. Мастер соединения с сервером баз данных.
В появившемся окне «Select Data Source» нажмите на кнопку «New» и выберите драйвер «SQL Server». Нажмите кнопку «Далее» и в окне «Create New Data Source» введите имя, нажмите на кнопку «Далее» и «Готово». В с троке «Server» введите (local) и дважды нажмите на кнопку «Далее». В следующем диалоговом окне отметьте галочкой строку «Change the default database to» и из раскрывающегося списка выберите свою базу. Нажмите кнопки «Далее» и «Готово» и закончите работу мастера по созданию соединения, присвоив созданному соединению новое имя.
2.2. Создание удаленных представлений.
Создайте удаленные представления по всем таблицам SQL Server. Для этого выберите в консоли базы данных удаленные представления «Remote Views» (рис.3) и нажмите кнопку «New». Выберите созданное соединение и установите связь с сервером. Создайте удаленное представление для каждой таблицы SQL Server. Для всех представлений задайте свойство обновления данных из FoxPro на SQL Server. Для этого в конструкторе представлений откройте вкладку «Update Criteria» и включите опцию «Send SQL Updates».
2.3. Создание простых форм.
Создайте простую форму «предметы» (рис.2.3).
![]() |
Рис.2.3. Форма ПРЕДМЕТЫ.
Для этого в консоли проекта откройте раздел «Documents» и выберите объект «Forms». Для создания формы выберите мастер форм «Form Wisard» и создайте простую форму по таблице «предметы». Переименуйте названия кнопок. Для этого откройте форму в режиме конструктора, щелкните правой кнолпкой мыши на объекте класса кнопки и из контектсного меню выберите пунк «Edit». Войдите в свойства конкретной кнопки и измените свойство надпись «Caption».
Введите в форме 5 новых записей и проверьте их появление в таблице «предметы»на SQL Server.
Создайте простую форму УЧЕБНЫЙ_План по таблице «учебный_план» (рис.2.4).
![]() |
Рис.2.4. Форма УЧЕБНЫЙ_ПЛАН.
Создайте в форме 5 раскрывающихся списков c помощью инструмента «Combo Box». Используя BUILDER задайте иточник строк и поле для сохранения выбранного значения:
- поле со списком «специальность» - источник строк таблица «специальность», поле «специальность» (рис.2.5), сохранение в поле «специальность» таблицы «учебный план» (рис.2.6);
![]() |
Рис.2.5. Задание источника строк для поля со списким «Специальность».
![]() |
Рис.2.6. Сохранение данных для поля со списким «Специальность».
- поле со списком «дисциплина» - источник строк таблица «предметы», поле «предмет», сохранение в поле «дисциплина» таблицы «учебный план»;
- поле со списком «курсовая работа» - источник строк таблица «курсовая», поле «курс_р», сохранение в поле «курсовая_работа» таблицы «учебный план»;
- поле со списком «контрольная работа» - источник строк таблица «контрольная», поле «контрол_р», сохранение в поле «контрольная_работа» таблицы «учебный план»;
- поле со списком «форма контроля» - источник строк таблица «ф_контроля», поле «контроль», сохранение в поле «форма_контроля» таблицы «учебный план».
2.4. Создание формы просмотра данных «Учебный план специальности» (рис.2.7).
Создайте форму «Учебный план специальности» для просмотра учебного плана по конкретной специальности:
![]() |
Рис.2.7. Форма УЧЕБНЫЙ_ПЛАН_СПЕЦИАЛЬНОСТИ.
Для этого используя в мастере форм вариант создания простой формы Form Wisard создайте простую форму по таблице специальности. Удалите помещенные в форму поля и вместо них создайте поле со списком «специальность»:
- поле со списком «специальность» - источник строк таблица «специальности», поле «специальность», сохранение отсутствует.
Используя мастер отчетов, создайте отчет под именем «учебный_план» (рис.2.8)

Рис.2.8. Отчет по учебному плану специальности.
Для просмотра учебного плана по конкретной специальности запрограммируйте реакцию кнопки «Просмотр учебного плана». Для этого в событии «Click» кнопки поместите следующий программный код:
z1=bo1.Value
REPORT FORM reports\учебный_план. frx TO PRINTER prompt PREVIEW ;
FOR специальность=z1
2.5. Создание формы «Студенты»
Для ввода информации по студентам создайте форму «Студенты»
1. Используя мастер форм FormWizard создайте простую форму «СТУДЕНТЫ» по таблице СТУДЕНТЫ, используя при создании формы одно поле «id_студент».
2. Модифицируйте созданную форму:
2.1. Удалите поле «id_студент».
2.2. Задайте русские надписи для перехода по записям формы.
2.3. Добавьте в окружение формы удаленные представления таблиц КУРСЫ, ПОТОКИ, СПЕЦИАЛЬНОСТИ.
2.4. Добавьте в форму две вкладки (рис.1)

Рис.1
и замените заголовки Page1 на «Основная информация» и Page2 на «Дополнительная информация». Для этого щелкните правой кнопкой мыши на вкладке Page1 и выберите в контекстном меню EDIT. Повторно щелкните правой кнопкой мыши на вкладке Page1 и выберите свойства вкладки PROPERTIES. Измените свойство надпись CAPTION для обеих вкладок.
2.5. Измените свойство активации обеих вкладок формы при их открытии ACTIVATE EVENT. Для этого выберите свойства вкладки PROPERTIES, выберите вкладку Methods, событие ACTIVATE EVENT и введите для него следующий код:
_screen. ActiveForm. refresh()
2.6. Модифицируйте первую вкладку (рис.2) и вторую вкладку (рис.3), добавив в них поля таблицы СТУДЕНТЫ и поля со списками СПЕЦИАЛЬНОСТЬ, КУРС, ПОТОК.
Для добавления простых полей используйте инструмент TEXT BOX и построитель BUILDER для задания источника строк для поля в графе FIELD NAME (рис.4).

Рис.2

Рис.3

Рис.4
2.6 Создание форм отбора данных.
2.6.1. Создайте форму «Информация по группе» для просмотра информации по студентам с выборкой по специальностям и группам.
|
Для этого:
2.6.1.1 Создайте форму в режиме конструктора.
2.6.1.2 Добавьте в окружение формы удаленные представления по таблицам «специальности» и «студенты».
2.6.1.3 Создайте поле со списком для выбора специальности и используя Builder свяжите его с удаленным представлением «специальности».
2.6.1.4 Создайте свободные поля для ввода курса и потока.
2.6.1.5 Добавьте в форму объект Grid и используя Builder свяжите его с удаленным представлением «студенты».
2.6.1.6 Запрограммируйте фильтрацию данных в объекте Grid. Фильтрами являются значения, введенные в поле со списком «специальность» и значения полей «курс» и «поток». Для этого для всех полей формы в событии InteractiveChange добавьте следующий программный код:
THISFORM. LockScreen = .T.
*MESSAGEBOX(thisform. Text1.Value)
IF ISBLANK(thisform. Text1.Value) AND ISBLANK(thisform. Text2.Value)
SELECT студенты. id_ студент, студенты. номер_дела, студенты. фамилия, ;
студенты. имя, студенты. отчество, студенты. специальность, ;
студенты. курс, студенты. поток ;
FROM студенты ;
where студенты. специальность = VAL(bo1.Value) ;
ORDER BY студенты. Фамилия ;
INTO CURSOR Custs
ELSE
IF ISBLANK(thisform. Text1.Value) then
SELECT студенты. id_ студент, студенты. номер_дела, студенты. фамилия, ;
студенты. имя, студенты. отчество, студенты. специальность, ;
студенты. курс, студенты. поток ;
FROM студенты ;
Where студенты. специальность = VAL(bo1.Value) ;
AND студенты. поток = VAL(thisform. Text2.Value) ;
ORDER BY студенты. Фамилия ;
INTO CURSOR Custs
ELSE
SELECT студенты. id_ студент, студенты. номер_дела, студенты. фамилия, ;
студенты. имя, студенты. отчество, студенты. специальность, ;
студенты. курс, студенты. поток ;
FROM студенты ;
where студенты. специальность = VAL(bo1.Value) ;
AND студенты. курс = VAL(thisform. Text1.Value) ;
ORDER BY студенты. Фамилия ;
INTO CURSOR Custs
ENDIF
ENDIF
thisform. grid1.recordsource = "Custs"
THISFORM. Refresh
THISFORM. LockScreen = .F.
2.6.1.7. Создайте в форме три кнопки, как показано на рисунке 11.1. Каждая из кнопок будет выводить в виде отчета информацию по студентам.
Кнопка «Печать списка группы» открывает отчет, показанный на рис.11.2:

рис.11.2
Отчет создается по таблице проекта FoxPro. Перейдите в раздел TABLES Вашего проекта и создайте новую таблицу «группа» со следующими параметрами (рис.11.3):

рис.11.3
Создайте отчет по таблице «группа», как показано на рис.11.2 и рис.11.4.

рис.11.4
Кнопка «Печать ведомости» открывает отчет, показанный на рис.11.5 и рис.11.6. Отчет создается по таблице «ГРУППА»:

Рис.11.5

Рис.11.6
Кнопка «Общая информация» открывает отчет, показанный на рис.11.7. Отчет создается по таблице «ГРУППА»:

рис.11.7
2.6.2. Создайте форму «преподаватели» (рис.14.1)

рис.14.1
Создайте форму «преподаватель». Для этого:
1. Создайте форму в режиме конструктора, поместив в ее окружение удаленные представления: «преподаватели», «дисцип_препод», «предметы» и «специальности».
2. Создайте макет формы, как показано на рис.14.1 и после этого удалите из окружения формы представления: «преподаватели» и «дисцип_препод».
3. Поместите следующий программный код в событие Load созданной формы для открытия представлений«преподаватель» и «дисцип_препод» установления связей между ними:
USE преподаватель IN 51 && открытие прнедставления "преподаватель" в области 51
USE дисцип_препод IN 52 && открытие прнедставления "дисцип_препод" в области 52
* Создаем связи между таблицами
SELECT дисцип_препод
INDEX ON связь_препод TAG индекс
SET ORDER TO индекс
SELECT преподаватель
SET RELATION TO id_преподаватель INTO дисцип_препод
3. Разместите поля и объект Grid в данной форме, как показано на рисунке.
4. Создайте следующие управляющие кнопки формы:
Кнопка «Первая»
SELECT преподаватель
GO top
thisform. Refresh
Кнопка «Вперед»
SELECT преподаватель
IF NOT EOF()
SKIP 1
IF EOF()
GO bottom
ENDIF
endif
thisform. Refresh
Кнопка «Назад»
SELECT преподаватель
IF NOT bOF()
SKIP -1
IF bOF()
GO top
ENDIF
endif
thisform. Refresh
Кнопка «Последняя»
SELECT преподаватель
GO bottom
thisform. Refresh
Кнопка «Добавить преподавателя»
LOCAL L1
L1 = MESSAGEBOX('Добавить преподавателя?',4,'Внимание!')
IF L1 =6
SELECT преподаватель
GO bottom
DIMENSION d(9)
d(2)= ''
d(3)= ''
d(4)= ''
d(5)= ''
d(6)= ''
d(7)= ''
d(8)= ''
d(9)= ''
APPEND FROM ARRAY d
Thisform. Refresh
= TABLEUPDATE(.T.)
SELECT 51
Requery(51)
thisform. Refresh
GO bottom
thisform. Refresh
thisform. Text2.SetFocus
ENDIF
Кнопка «Добавить дисциплину»
LOCAL L1
L1 = MESSAGEBOX('Добавить дисциплину?',4,'Внимание!')
IF L1=6
DIMENSION d(5)
d(2)= thisform. text1.Value
*d(3)=''
*d(4)=''
*d(5)=''
SELECT дисцип_препод
APPEND FROM ARRAY d
Thisform. Refresh
= TABLEUPDATE(.T.)
Requery(52)
thisform. Refresh
GO bottom
thisform. grid1.column4.SetFocus
ENDIF
Кнопка «Удалить преподавателя»
LOCAL L1
L1 = MESSAGEBOX('Удалить преподавателя?',4,'Внимание!')
IF L1=6
SELECT 51
SCATTER FIELDS id_преподаватель TO d3
DELETE FOR id_преподаватель = d3(1)
Thisform. Refresh
= TABLEUPDATE(.T.)
Requery(51)
thisform. Release
ENDIF
Кнопка «Удалить предмет»
LOCAL L1
L1 = MESSAGEBOX('Удалить предмет?',4,'Внимание!')
IF L1=6
SELECT 52
SCATTER FIELDS id_дисц_препод TO d3
DELETE FOR id_дисц_препод = d3(1)
Thisform. Refresh
= TABLEUPDATE(.T.)
Requery(52)
thisform. Refresh
ENDIF
5. Создайте выподающие списки для выбора дисциплины и специальности в объекте Grid.
Для этого:
- перейдите в режим конструктора, переведите Grid в режим Edit, активизируйте инструмент «Поле со списком » и щелкните в первой строке объекта Grid в поле «Дисциплина»;
- Зайдите в свойства колонки Column4 (Дисциплина) и в свойстве CurrentControl поменяйте значение Text1 на Combo1;
- Зайдите в свойства Combo1 колонки Column4 и установите для списка Combo1 источник строк. Для этого в свойстве RowSourse установите таблицу источник – представление «предметы» и тип поля в свойстве RowSourseType в значение «6 - Fields» .
- Отрегулируйте ширину ячейки объекта Grid в режим Edit.
6. Задайте автоматическое обновление поля id_дисциплина при задании новой дисциплины в объекте Grid1. Для этого для события InteractiveCange элемента управления Combo1 в колонке Column4 объекта grid1 вставьте следующий программный код:
DIMENSION x(1)
SELECT Предметы
select предметы. id_предмет From предметы ;
WHERE предметы. предмет = thisform. grid1.Column4.Combo1.Value INTO ARRAY x
thisform. grid1.Column3.Text1.Value = x(1)
thisform. Refresh
Аналогичный программный код составьте для элемента управления Combo1 в колонке Column6 объекта grid1.
2.6.3. Создайте форму «ведомость_1» для внесения оценок в экзаменационные ведомости и вызова формы «ведомость_2».
1. Создание формы «ведомость_1» (рис.12.1)

рис.12.1
1.1 Создайте форму в режиме конструктора. Поместите в окружение формы удаленные представления «специальности» и «предметы».
1.2 Создайте поле со списком «Специальность» по представлению «специальности», источник строк – поле СПЕЦИАЛЬНОСТЬ.
1.3 Создайте свободные поля «Курс» и «Поток».
1.4 Создайте поле со списком «Предмет» по представлению «предметы», источник строк – поле ПРЕДМЕТ.
1.5 Создайте кнопку «Показать ведомость» и запрограммируйте событие CLICK.
Блок-схема программы представлена на рис.12.2.
![]() |
рис.12.2
Алгоритм программы на событие Click:
1. Запрос данных из в удаленного предсталения «успеваемость_студ» в Visual Foxpro по параметрам отбора.
1.1. Запомните в глобальные переменные параметры отбора формы «ведомость 1».
1.2. Откройте удаленные представления «успеваемость_студ» и «оценка_студ» в номерных областях.
1.3. Подсчитайте количество записей в удаленном представлении «успеваемость_студ» в Visual Foxpro по параметрам отбора. Если записей нет, то выполните пункт 4 (см. рис.12.2). Если записи есть, то перейдите к пункту 2 (рис.12.2), закройте форму «ведомость 1» и откройте форму «ведомость 2» и переходите к пункту 3 (рис.12.2).
2.6.3. Создайте форму «ведомость_2» для занесения оценок по дисциплинам (рис.13.1)

рис.13.1
Создайте данную форму в режиме конструктора, добавьте в окружение формы удаленные представления «оценка_студ» и «успеваемость_студ». Разместите в верхней части формы свободные поля и свяжите их с соответствующими полями удаленного представления «успеваемость_студ». Создайте объект GRID и свяжите его с удаленным представлением «оценка_студ». Для полей ОЦЕНКА, КОНТР_КУРС и ЗАЧЕТ объекта GRID создайте раскрывающиеся списки для ввода оценок. Удалите удаленные представления «оценка_студ» и «успеваемость_студ» из формы, так как они будут программно открыты в номерных областях памяти в предыдущей форме. Запрограммируйте событие LOAD по следующей схеме:
1 – отфильтруйте данные удаленного представления УСПЕВАЕМОСТЬ_СТУД по параметрам отбора первой формы;
2 – введите операторы:
GO TOP
thisform. Refresh
для активизации формы ВЕДОМОСТЬ_2
3 – создайте программную связь между удаленными представлениями УСПЕВАЕМОСТЬ_СТУД и ОЦЕНКА_СТУД.
2.6.5. Создайте форму «успеваемость студента» (рис.15.1)

Рис.15.1.
Раскрывающийся список студент содержит состав только запрошенной группы. Для этого запрограммируйте событие InteractiveCange поля ПОТОК - отфильтруйте данные удаленного представления «Студенты» по параметрам отбора формы и укажите его в качестве источника строк раскрывающегося списка СТУДЕНТЫ.
Кнопка «Данные по студенту» выводит полную информацию по успеваемости студента за весь период обучения с помощью отчета (рис.15.3). Отчет должен содержать список всех дисциплин согласно учебного плана специальности и полученные студентом оценки по данным дисциплинам. Вывод дисциплин упорядочить по шифру и семестру:

Рис.15.3
Для формирования и вывода отчета:
1 – Создайте таблицу Visual Foxpro для хранения данных отчета (рис.15.3) и задайте название ДАННЫЕ_ПО_СТУДЕНТУ.

Рис.15.3
2. Запрограммируйте заполнение таблицы ДАННЫЕ_ПО_СТУДЕНТУ по следующему алгоритму:
Создайте многотабличный запрос по удаленным представлениям ОЦЕНКА_СТУД, УСПЕВАЕМОСТЬ_СТУД, ПРЕДМЕТЫ и УЧЕБНЫЙ_План используя левое объединение по удаленному представлению УЧЕБНЫЙ_ПЛАН. Результаты запроса поместите в массив и полученный массив добавьте в созданную таблицу Visual Foxpro, предварительно удалив из нее все данные.
3. Создайте отчет по таблице ДАННЫЕ_ПО_СТУДЕНТУ.
4. Выведите отчет на экран.
2.7. Создайте набор форм для просмотра и корректировки заполненных ведомостей.
В Visual FoxPro вы можете объединить несколько форм в набор форм. Для этого служит команда Create Form Set (Создать набор форм) из меню Form (Форма), создающая объект FormSet.
Создадим объект FormSet из двух форм. Первая форма содержит в объекте GRID1 данные о ведомостях удаленного представления УСПЕВАЕМОСТЬ_СТУД, а вторая — в объекте GRID2 содержимое самой ведомости из удаленного представления ОЦЕНКА_СТУД (рис.2.7.1).
Перемещаясь по записям Grid1 автоматически выводим соответствующую ведомость в Grid2.

Рис.2.7.1 Набор форм для корректировки и просмотра ведомостей.
Для создания набора форм выполните следующие действия:
1. Откройте свой проект.
2. Откройте окно конструктора для создания новой формы.
3. Выберите в меню Form (Форма) команду Create Form Set (Создать набор форм).
4. Откройте окно Data Environment (Среда окружения) и добавьте в окружение удаленные представления УСПЕВАЕМОСТЬ_СТУД и ОЦЕНКА_СТУД.
5. Скорректируйте свойство caption (Надпись) для первой формы.
6. В форме создайте объект Grid1, разместив в нем необходимые поля удаленного представления УСПЕВАЕМОСТЬ_СТУД.
7. Для добавления второй формы выполните команду Add New Form (Добавить новую форму) из меню Form (Форма). В окне конструктора форм откроется вторая форма.
8. Скорректируйте свойство caption (Надпись) для второй формы
9. Во второй форме создайте объект Grid2, разместив в нем поля удаленного представления ОЦЕНКА_СТУД.
10. Расположите формы на экране таким образом, чтобы они были удобны для поочередного просмотра (Рис.2.7.1).
11. Удалите из окружения созданных форм окружение удаленные представления УСПЕВАЕМОСТЬ_СТУД и ОЦЕНКА_СТУД.
12. Запрограммируйте событие LOAD первой формы: откройте в номерных областях оба удаленных представления.
13. Запрограммируйте событие LOAD второй формы: задайте программную связь между удаленными представлениями.
14. Сохраните форму.
2.8. Создайте меню для Вашего проекта (рис.13.1)
|
|
|
|
|
|
|
|
|
Рис.13.1. Меню программы
При создании нового меню выберите пункт MENU (рис.13.2) для создания выподающего меню:

рис.13.2
Задайте следующие пункты главного меню (рис.13.3)

рис.13.3
Пункты «1 – Ввод данных» и «2 - Отчеты» открывают выпадающее меню и имеют тип SUBMENU. Пункт «3 – Выход» запускает на выполнение команду выхода из главного меню QUIT и имеет тип COMMAND.
Для создания первого выпадающего меню нажмите кнопку CREATE в строке меню «1 – Ввод данных» и задайте следующие пункты:

Аналогично создайте второе выпадающее меню.
17. Создайте файл запуска проекта и программу запуска
Программа запуска проекта:
SET path to ;forms;programs;reports
*_shell="do cleanup IN progs\basa"
SET TALK OFF
SET DELETED ON &&
SET SAFETY OFF
SET PALETTE OFF
SET CONFIRM ON
SET DATE GERMAN
OPEN DATABASE имя базы
SET STATUS BAR OFF
CLEAR
CLEAR SCREEN
CLEAR ALL
_SCREEN. Height=600
_SCREEN. Width=800
_SCREEN. Picture='КОВЫЛЬ. BMP'
SET MULTILOCKS ON
PUSH MENU _MSYSMENU
DO MENU1.MPR
READ EVENTS
CLEAR WINDOW
CLOSE DATABASES
CLOSE ALL
CLEAR ALL
POP MENU _MSYSMENY
SET SYSMENU TO DEFAULT
Файл запуска проекта создайте с помощью построителя проекта Build Action:











