FoxPro_3сем_практика
.pdfFox 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