Создание базы данных “Библиотека”, страница 4

      books.date_writing = thisform.date_writing.value and;             

        books.cost = thisform.cost.value;           

    into array b

thisform.author.value=b(1)

endif 

pack

Нажатие кнопки «Назад»

thisform.release()

do form main

Нажатие кнопки «Просмотр»

Browse


Реализация запросов к БД

n 1. Для каждого автора выдать список книг, отсортированный:

n по году выпуска,

n в алфавитном порядке все книги,

n по стоимости.

Форма:

Код:

dimension a(1)

*нашли Id автора

select authors.id_author from authors;

  where thisform.author.value=lname into array a

c=a(1) 

*выполнили запрос с нужным порядком сортировки

select books.book_name,countries.country,books.date_writing,books.cost from books,countries;

  where id_author=c and books.id_c=countries.id_c order by date_writing

Для разных сортировок меняется поле, следующее за ключевым словом ORDER BY

n 2. Найти долю «старых » книг (срок эксплуатации больше заданного, ввод с клавиатуры) от общего числа книг.

Форма:

Код:

close tables all

use books

d=reccount()

*Текущий год

cur_data=YEAR(DATE())-VAL(thisform.age.value)

*Посчитали сколько книг эксплуатируюца столько-то лет

COUNT FOR cur_data>YEAR(date_writing) to c

*Отобразим

MessageBox(STR(c/d*100)+"%")

n 3. Найти самую дорогую книгу (по каждому автору), самую дешевую, среднюю стоимость.

Форма:

Код:

dimension a(1)

dimension b(1)

select authors.id_author from authors;

  where thisform.author.value=lname into array a

c=a(1) 

*Выбор макс(мин,ср) стоимости

select MAX(books.cost) from books;

  where id_author=c into array b

m=b(1)

*Отобразим

MessageBox("MAX cost is "+STR(m))

Для нахождения минимальной и средней стоимостей функция MAX меняется на MIN и AVG, соответственно.

n 4. Найти книги с ценой свыше 100 р. (и любая другая сумма, т.е. предусмотреть ввод цены с клавиатуры).

Форма:

Код:

c=VAL(thisform.cost.value)

select lname,book_name,cost from books,authors;

  where cost>c and books.id_author=authors.id_author

n 5. Найти все книги, поступившие из заданной страны (ввод страны), чья стоимость больше заданной (ввод стоимости).

Форма:

Код:

dimension a(1)

select countries.id_c from countries;

  where thisform.country.value=country into array a

c=a(1) 

d=VAL(thisform.cost.value)

select book_name,cost,country from books,countries;

  where cost>d and countries.id_c=c and books.id_c=c

n 6. Найти количество книг, выпущенных за определенный период (год, 5 лет, 10 лет), за этот же период определить среднюю стоимость, самую дорогую, самую дешевую.

Форма:

Код:

dimension b(1)

*Начало периода

s=VAL(thisform.start_year.value)

*Конец периода

e=VAL(thisform.end_year.value)

*Запрос

select MAX(books.cost) from books;

  where YEAR(date_writing)>=s and YEAR(date_writing)<=e into array b

m=b(1)

*Отобразим

MessageBox("MAX cost for this interval is "+STR(m))

Для нахождения минимальной и средней wty функция MAX меняется на MIN и AVG, соответственно.

n 7. Найти количество книг в библиотеке (по каждому типу и в целом) с заданным годом выпуска (ввод года).

Форма:

Код:

c=VAL(thisform.year_writing.value)

count for YEAR(books.date_writing)=c to d

MessageBox("В "+STR(c)+" было получено "+STR(d)+" книг(а)(и)")

n 8. Найти долю книг, поступивших из заданной страны (ввод страны) от общего числа книг.

Форма:

Код:

dimension a(1)

select countries.id_c from countries;

  where thisform.country.value=country into array a

c=a(1) 

dimension b(1)

dimension d(1)

select count(*) FROM books into array b

bb=b(1)

select count(*) FROM books into array d;

  where books.id_c=c and countries.id_c=c

dd=d(1)

MessageBox("Доля книг из страны "+thisform.country.value;

  +" Составляет "+STR((dd/bb)*100)+"%")


Отчет приложения

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

Внешний вид отчета:

 Группирование данных осуществляется по полю lname - «Фамилия автора»

Заключение

Была освоена  в достаточном объеме система управления базами данных Microsoft Visual FoxPro 6.0, получены навыки по созданию баз данных, изучены некоторые особенности Local SQL, неизвестные автору ранее.

Список используемой литературы

1. Local SQL Guide (Поставка с Borland Database Engine из Borland C++ Builder 5.0)

2. MSDN v6.0 (Поставка с Visual Studio 6.0)