Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

FoxPro_3сем_практика

.pdf
Скачиваний:
2
Добавлен:
25.03.2021
Размер:
159.02 Кб
Скачать

Fox Pro, примеры выполнения тестов и икз

Задание теста 1

1.Сделать копию таблицы Klienty.dbf в формате XLS, в которую включить поля Firm, Glava,Oblast,Kod,City и подмножество записей с номерами от 51 до 150.

2.Создать пустую таблицу с именем klientyd.dbf со структурой, аналогичной структуре копии из предыдущего пункта и ввести в нее данные из файла klientyd.xls. 3.Физически удалить из таблицы klientyd.dbf записи с номерами 13-17 и 54-58. 4.Упорядочить таблицу по главе и по городу.

5.Представить на экране подмножество записей из klientyd.dbf, относящихся к гг.Москва и Ярославль.

Выполнение теста 1

USE klienty ALIAS KL SHARED IN 0 SELECT KL

COPY TO klientyd.XLS TYPE XLS FIELDS Firm,Glava,Oblast,Kod,City FOR RECNO()>50.and RECNO()<151

USE

USE klientyd.XLS ALIAS KL SHARED IN 0 SELECT KL

COPY STRUCTURE TO klientyd.dbf USE

USE klientyd.dbf ALIAS KL EXCLUSIVE IN 0 SELECT KL

APPEND FROM klientyd.xls GO 13

DELETE NEXT 5 GO 54

DELETE NEXT 5 PACK

INDEX ON GLAVA TO I_GL

INDEX ON CITY TO I_CIT

BROWSE FOR CITY="Москва".or.CITY="Ярославль"

Задание теста 2

1.Закрыть все открытые таблицы и БД.

2.Открыть БД KOM_FIRM.DBC. Отобразить на экране содержимое таблицы TOVARY.dbf, упорядоченное по коду фирмы-производителя товара.

3.Отобразить на экране ранее созданный обзор данных TEK_SVED.

4.Создать новый обзор данных ZAKAZY с полями дата поставки, название фирмыклиента, город.

Выполнение теста 2

CLOSE ALL

OPEN DATABASE KOM_FIRM.DBC USE TOVARY ALIAS TOV IN 0 SELECT TOV

INDEX ON KOD_PR TO I_PR BROWSE LAST

USE TEK_SVED IN 0 SELECT TEK_SVED BROWSE

CREATE VIEW

Задание теста 3

С помощью SQL-операторов:

Создать БД, включающую 2 таблицы: STUD – со сведениями о студентах и VYPLATY – со сведениями о выплатах студентам денежных средств (стипендии, гранты, оплата НИР…).

Структура STUD должна включать атрибуты: ФИО, №зачетки, группа, факультет, категория обучения (платное/госбюджетное).

Структура VYPLATY должна включать атрибуты: дата выплаты, №зачетки, сумма выплаты.

Внести в таблицы по 10 записей, относящихся к студентам разных групп и факультетов. Организовать связи между таблицами.

Создать обзор данных с атрибутами: дата выплаты, ФИО, сумма выплаты. Список студентов должен быть упорядочен по ФИО.

Написать SQL-запрос, позволяющий получить для одного из факультетов таблицу с атрибутами: дата выплаты, ФИО, группа, факультет, сумма выплаты.

Выполнение теста 3

CREATE DATABASE STUD

CREATE TABLE STUD (fio C(60),nomer N(10,0) PRIMARY KEY,gruppa N(3),facultet C(50),kategoriy C(15))

CREATE TABLE VYPLATY (dat D,nomer N(10,0),summa_vyplat N(10,2),FOREIGN KEY nomer TAG

nomer REFERENCES STUD)

INSERT INTO STUD (fio,nomer,gruppa,facultet,kategoriy);

VALUES ("А.А.Петров",100,3,"Химический","Платное")

INSERT INTO STUD (fio,nomer,gruppa,facultet,kategoriy); VALUES ("А.Б.Хорошов",60,1,"Биологический","Госбюджетное") INSERT INTO STUD (fio,nomer,gruppa,facultet,kategoriy); VALUES ("В.В.Иванов",115,4,"Химический","Госбюджетное") INSERT INTO STUD (fio,nomer,gruppa,facultet,kategoriy); VALUES ("И.В.Сидоров",110,4,"Химический","Платное") INSERT INTO STUD (fio,nomer,gruppa,facultet,kategoriy); VALUES ("А.А.Пирогова",150,5,"Радиотехнический","Платное") INSERT INTO STUD (fio,nomer,gruppa,facultet,kategoriy);

VALUES ("А.Н.Борисова",153,5,"Радиотехнический","Госбюджетное") INSERT INTO STUD (fio,nomer,gruppa,facultet,kategoriy);

VALUES ("Л.В.Зайцева",50,1,"Биологический","Платное")

INSERT INTO STUD (fio,nomer,gruppa,facultet,kategoriy);

VALUES ("А.Г.Смольникова",70,2,"Гуманитарный","Госбюджетное") INSERT INTO STUD (fio,nomer,gruppa,facultet,kategoriy);

VALUES ("В.П.Андреев",71,2,"Гуманитарный","Платное")

INSERT INTO STUD (fio,nomer,gruppa,facultet,kategoriy); VALUES ("П.И.Старостин",98,3,"Химический","Госбюджетное") INSERT INTO VYPLATY (dat,nomer,summa_vyplat);

VALUES (CTOD("01.01.2019"),100,100)

INSERT INTO VYPLATY (dat,nomer,summa_vyplat); VALUES (CTOD("01.01.2019"),60,500)

INSERT INTO VYPLATY (dat,nomer,summa_vyplat); VALUES (CTOD("02.01.2019"),115,500)

INSERT INTO VYPLATY (dat,nomer,summa_vyplat); VALUES (CTOD("01.01.2019"),110,100)

INSERT INTO VYPLATY (dat,nomer,summa_vyplat); VALUES (CTOD("01.01.2019"),150,100)

INSERT INTO VYPLATY (dat,nomer,summa_vyplat); VALUES (CTOD("02.01.2019"),153,600)

INSERT INTO VYPLATY (dat,nomer,summa_vyplat); VALUES (CTOD("03.01.2019"),50,100)

INSERT INTO VYPLATY (dat,nomer,summa_vyplat); VALUES (CTOD("01.01.2019"),70,700)

INSERT INTO VYPLATY (dat,nomer,summa_vyplat); VALUES (CTOD("03.01.2019"),71,100)

INSERT INTO VYPLATY (dat,nomer,summa_vyplat); VALUES (CTOD("01.01.2019"),98,700)

CREATE SQl VIEW VIEW1 AS SELECT VYPLATY.dat,STUD.fio,VYPLATY.summa_vyplat;

FROM STUD INNER JOIN VYPLATY ON STUD.nomer=VYPLATY.nomer ORDER BY STUD.fio

SELECT dat,fio,gruppa,facultet,summa_vyplat FROM STUD,VYPLATY;

WHERE STUD.nomer=VYPLATY.nomer and facultet="Биологический" ORDER BY fio INTO TABLE BIOLOG

Индивидуальное задание

Исходные данные: таблица с данными об услугах, оказанных Центрами коллективного пользования приборами (ЦКП) и связанных с предоставлением приборной базы для проведения научно-исследовательских работ пользователям в вузах, исследовательских и коммерческих организациях России – PRIBUSL.DBF. Каждая строка таблицы – описание услуги, оказанных одному пользователю на одном типе приборов в одном году. Описание полей таблицы – в файле PRIBUSL. XLS.

Провести исследование с целью:

1)Изучить по информации 2009 года распределение суммарного числа оказанных услуг по направлениям исследований. Результат расчета представить в виде таблицы с колонками: направление исследований, суммарное число оказанных услуг. Таблица должна быть упорядочена в алфавитном порядке по названиям направлений исследований.

2)Подсчитать по тем же данным, что и в п.1, суммарные числа использований при оказании услуг приборов, изготовленных в Италии в разных регионах страны. Результат расчета представить в виде таблицы с колонками: регион, суммарное число использований итальянских приборов. Таблица должна быть упорядочена в алфавитном порядке по названию региона.

3)Результаты п.2 представить в виде гистограммы с указанием региона и суммарного числа услуг.

Методика решения

В Visual FoxPro создано меню menu1.mnx, содержащее 4 предложения, реакции на которые – три процедуры с программным кодом для заданий 1, 2, 3 и кодом для выхода из программы. По данному меню сгенерирована программа menu1.mpr. Затем создана программа main.prg для открытия таблицы pribusl.dbf и реализации меню. Создан проект proj1.pjx, в его состав включены исходная таблица pribusl.dbf, меню menu1.mnx и программу main.prg.

Для пункта 3 задания в Excel создана пустая таблица diagram.xlt. Значения из таблицы, полученной в пункте 2, при решении копируются в пустую таблицу. По этим значениям строится гистограмма (строятся столбцы, скрываются линии сетки, устанавливаются подписи к осям). В случае неудачного экспорта таблицы из Visual Fox Pro в Excel выводится сообщение «Ошибка».

Содержание процедуры-реакции на Zadanie1

SELECT k as 'Направление_исследования', SUM(VAL(e)) as 'Суммарное_число_оказанных_услуг' FROM pribusl WHERE f='2009' GROUP BY k ORDER BY k ASC INTO CURSOR zd1

BROWSE LAST

Содержание процедуры-реакции на Zadanie2 SELECT d as 'Регион', SUM(VAL(e)) as

'Суммарное_число_использования_итальянских_приборов' FROM pribusl WHERE h='Италия' GROUP BY d ORDER BY d ASC INTO CURSOR zd2

BROWSE LAST

Содержание процедуры-реакции на Zadanie3 TRY

xl = createobject("Excel.Application") xl.Workbooks.Open("d:\USLUGI\diagram.xlt") loDSheet=xl.Application.Sheets(1)

GO TOP row = 1

DO WHILE !EOF()

loDSheet.Cells(row, 1).Value = zd2.Регион loDSheet.Cells(row, 2).Value =

zd2.Суммарное_число_использования_итальянских_приборов

IF !EOF()

row = row + 1 SKIP

ENDIF

ENDDO xl.Application.Charts.Add

xl.Application.Charts(1).SetSourceData(loDSheet.Range(loDSheet.Cells(1,1),loDSheet.C ells(row-1, 2)))

xl.Application.Charts(1).PlotBy = 2 xl.Application.Charts(1).HasLegend = .F. xl.Application.Charts(1).ChartType=51 With xl.Application.Charts(1)

.HasAxis(1) = .T.

.HasAxis(2) = .T. ENDWITH

xl.Application.Charts(1).Axes(1).CategoryType = -4105 With xl.Application.Charts(1).Axes(1)

.HasMajorGridlines = .F.

.HasMinorGridlines = .F. EndWith

With xl.Application.Charts(1).Axes(2)

.HasMajorGridlines = .F.

.HasMinorGridlines = .F. EndWith

xl.Application.Charts(1).WallsAndGridlines2D = .F. xl.Application.Charts(1).PlotArea.Select

With xl.Application

.Selection.Border.Weight = 2

.Selection.Border.LineStyle = -4142

.Selection.Interior.ColorIndex = -4142 ENDWITH xl.Application.Charts(1).ChartArea.Select xl.Application.Charts(1).ChartArea.Copy xl.Application.Sheets("Лист1").Select With xl.Application

.Range(.Cells(1, 5), .Cells(1, 5)).Select EndWith xl.Application.Sheets("Лист1").Paste xl.Visible = .t.

CATCH TO EX MESSAGEBOX("Ошибка") xl.Workbooks(1).close(.F.) xl.Quit

ENDTRY

Содержание процедуры-реакции на Quit: SET SYSMENU TO DEFAULT

CLEAR EVENTS RETURN

Cодержание программы main.prg: * SET-Section P_SYSTEM=SYS(16)

P_SYSTEM=LEFT(P_SYSTEM,RAT('\',P_SYSTEM)) SET DEFAULT TO &P_SYSTEM

SET PATH TO &P_SYSTEM SET EXACT ON

SET DATE BRIT Close data all clear

USE pribusl.dbf SHARED

*MAIN-Section do menu1.mpr read events

*CLOSE-Section close data all