МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОУ ВПО «НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ
ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
![]() |
Расчётно-графическая работа
по дисциплине «Базы данных»
Выполнил: Мельников :
Группа: АМ-610
Факультет: АВТФ
Вариант: 32
Новосибирск 2009
Задание
Сформировать несколько таблиц "Машины", "Механик", "Ремонт" и др. Предусмотреть: меню, печать на экран, ввод данных, редактирование, просмотр данных. С введением и использованием нескольких таблиц реализовать следующие типы запросов:
■ Для каждого вида автомобиля указать сведения о нем (тип, год выпуска, срок эксплуатации, место изготовления, цена, скорость, вместительность и т. п.).
■ Для каждого вида автомобиля выдать список, отсортированный:
■ по году выпуска,
■ в алфавитном порядке все виды,
■ по цене,
■ по сроку эксплуатации,
■ по стоимости ремонтных работ,
■ по виду ремонта.
■ Найти долю «старых» машин (срок эксплуатации больше заданного, ввод с клавиатуры) от общего числа машин.
■ Найти самый дорогой автомобиль (по каждому типу), самый дешевый, среднюю стоимость найти автомобили с ценой свыше 50 т. р. (и любая другая сумма, т. е. предусмотреть ввод цены с клавиатуры).
■ Найти все автомобили, поступившие из заданной страны (ввод страны), чья скорость больше заданной (ввод скорости).
■ Найти количество автомобилей в гараже (по каждому типу и в целом) с заданным сроком эксплуатации (ввод срока).
■ Найти все автомобили заданной вместительности (ввод) для заданного года выпуска.
■ Для каждого механика указать сведения о нем (ФИО, год рождения, стаж работы, вид ремонта и т. д.).
■ Найти самый дорогой вид ремонта, самый дешевый, среднюю стоимость ремонта для каждого механика и в целом, найти машины со стоимостью ремонтных работ в заданных пределах (предусмотреть ввод цены с клавиатуры) для каждого механика и в целом.
■ Количество отремонтированных машин за месяц, квартал; средняя стоимость ремонтных работ за этот же период.
■ Найти долю дешевых (по стоимости ремонтных работ) машин (меньше заданного, ввод ограничения) от общего числа машин (для каждого механика и в целом).
■ Найти всех механиков, чей стаж находится в заданных пределах (ввод интервала) для заданного вида ремонта (выбор).
Структура базы данных
Структура таблиц
Таблица «automobile»

Рисунок 1 – Структура таблицы «automobile»
Назначение: хранение общей информации об автомобилях, поступивших в сервис-центр.
Поля: государственный номер, название производителя, название модели, год выпуска, время эксплуатации, страна изготовитель, скорость, вместительность, стоимость, дата поступления, дата возврата.
Таблица «type_repair»

Рисунок 2 – Структура таблицы «type_repair»
Назначение: хранение наименований предоставляемых услуг.
Поля: уникальный идентификатор вида ремонта; наименование вида ремонта.
Таблица «country»

Рисунок 3 – Структура таблицы «country»
Назначение: хранение названий стран производителей автомобилей.
Поля: уникальный идентификатор страны; наименование страны.
Таблица «manufacturer_table»

Рисунок 4 – Структура таблицы «manufacturer_table»
Назначение: хранение наименований фирм производителей автомобилей.
Поля: уникальный идентификатор фирмы производителя; наименование фирмы.
Таблица «need_repair»

Рисунок 5 – Структура таблицы «need_repair»
Назначение: хранение информации о том, какой ремонт требуется автомобилю, кто его выполняет.
Поля: уникальный идентификатор работы; идентификатор автомобиля; идентификатор требуемого вида ремонта; идентификатор механика осуществляющего ремонт; дата начала ремонта; дата окончания ремонта; стоимость ремонта.
Последние четыре поля могут быть пустыми, это свидетельствует о том, что на эту работу ещё никто не назначен, либо работа ещё не окончена.
Таблица «mechanics»

Рисунок 6 – Структура таблицы «mechanics»
Назначение: хранение информации о механиках, работающих в автосервисе.
Поля: уникальный идентификатор сотрудника; имя; фамилия; отчество; дата рождения.
Таблица «ability_mechanic»

Рисунок 7 – Структура таблицы «ability_mechanic»
Назначение: хранение информации о том, какие виды работ может осуществлять каждый механик.
Поля: уникальный идентификатор; идентификатор сотрудника; идентификатор вида оказываемой услуги; стаж (в днях); ориентировочная цена.
Графическое изображение связей таблиц базы данных

Рисунок 8 – Графическое изображение связей таблиц базы данных
Формы редактирования
Для каждой таблице имеется специальная форма, которая позволяет сделать редактирование таблиц более удобным, учитывая связи между таблицами.
Рассмотрим для примера форму редактирования таблицы «need_repair».

Рисунок 9 – Форма редактирования таблицы «need_repair»
С помощью группы кнопок снизу, мы можем просмотреть все записи таблицы, найти нужную запись, отредактировать запись, добавить новую или удалить имеющуюся.
Чтобы назначить автомобилю ремонт определенного вида, необходимо нажать на кнопку «Add» и заполнить лишь первые два поля:

Рисунок 10 – Назначение автомобилю определенного вида ремонта
Чтобы назначить механика на определенную работу, достаточно заполнить 2-е и 3-е поля:

Рисунок 11 – Назначение механика на работу
Чтобы работа считалась оконченной достаточно заполнить последние два поля:

Рисунок 12 – Работа выполнена
Остальные формы значительно проще, и имеет одно функциональное назначение, соответствующее назначению таблицы. Поэтому эти формы рассматривать не будем.
Содержание таблиц базы данных

Рисунок 13 – Содержимое таблицы «automobile»

Рисунок 14 – Содержимое таблицы «type_repair»

Рисунок 15 – Содержимое таблицы «country»

Рисунок 16 – Содержимое таблицы «need_repair»

Рисунок 17 – Содержимое таблицы «mechanics»

Рисунок 18 – Содержимое таблицы «manufacturer_table»

Рисунок 19 – Содержимое таблицы «ability_mechanic»
Запросы
■ Для каждого вида автомобиля выдать список, отсортированный:
■ по году выпуска,
■ в алфавитном порядке все виды,
■ по цене,
■ по сроку эксплуатации,
■ по стоимости ремонтных работ,
■ по виду ремонта.
PRIVATE selManufacturerId AS Integer
PRIVATE selManufacturerText AS Varchar
selManufacturerId = thisform. Manufacturer. IndexToItemId(thisform. Manufacturer. ListIndex)
selManufacturerText = thisform. Manufacturer. value
DO CASE
CASE thisform. SortBy. Value = 'году выпуска'
SELECT number, selManufacturerText as Manufacturer, model, release_year ;
FROM automobile WHERE manufacturer = selManufacturerId ;
ORDER BY release_year
CASE thisform. SortBy. Value = 'алфавиту все виды'
SELECT number, manufacturer_table. manufacturer, model ;
FROM automobile JOIN manufacturer_table ;
ON automobile. manufacturer = manufacturer_table. id ;
ORDER BY manufacturer_table. manufacturer, model
CASE thisform. SortBy. Value = 'цене'
SELECT number, selManufacturerText as Manufacturer, model, price ;
FROM automobile WHERE manufacturer = selManufacturerId ORDER BY price
CASE thisform. SortBy. Value = 'сроку экспуатации'
SELECT number, manufacturer_table. manufacturer, model, lifetime ;
FROM automobile WHERE manufacturer = selManufacturerId ;
ORDER BY lifetime
CASE thisform. SortBy. Value = 'стоимости ремонтных работ'
SELECT t1.number, selManufacturerText as Manufacturer, t1.model, ;
(SELECT SUM(price) FROM need_repair WHERE id_automobile = t1.id) ;
as price_repair FROM automobile as t1 ;
WHERE t1.manufacturer = selManufacturerId ORDER BY price_repair
CASE thisform. SortBy. Value = 'виду ремонта'
SELECT t1.number, selManufacturerText as Manufacturer, t1.model, ;
t3.type_repair as type_rep FROM automobile as t1, ;
need_repair as t2, type_repair as t3 ;
WHERE t2.id_automobile = t1.id AND t2.type_repair = t3.id ;
AND t1.manufacturer = selManufacturerId ORDER BY type_rep
ENDCASE

Рисунок 20 – Пример выполнения запроса, сортировка по году выпуска автомобилей фирмы Nissan
■ Найти долю «старых» машин (срок эксплуатации больше заданного, ввод с клавиатуры) от общего числа машин.
SELECT (SELECT COUNT(*) FROM automobile ;
WHERE lifetime >= Form2.Text1.Value)/COUNT(*) FROM automobile INTO ARRAY temp
Form2.Text2.Value = temp[1]

Рисунок 21 – Пример выполнения запроса
■ Найти самый дорогой автомобиль (по каждому типу), самый дешевый, среднюю стоимость найти автомобили с ценой свыше 50 т. р. (и любая другая сумма, т. е. предусмотреть ввод цены с клавиатуры).
PRIVATE selManufacturerId AS Integer
PRIVATE selManufacturerText AS Varchar
selManufacturerId = thisform. Manufacturer. IndexToItemId(thisform. Manufacturer. ListIndex)
selManufacturerText = thisform. Manufacturer. value
-- Найти самый дорогой автомобиль
IF thisform. ignoreManufacturer. Value = 0 THEN
SELECT t1.number, selManufacturerText, t1.model, t1.release_year, ;
t1.price FROM automobile as t1, (SELECT MAX(price) as maxPrice ;
FROM automobile WHERE manufacturer = selManufacturerId) as t2 ;
WHERE manufacturer = selManufacturerId AND price = t2.maxPrice
ELSE
SELECT t1.number, t3.manufacturer, t1.model, t1.release_year, t1.price ;
FROM automobile as t1, manufacturer_table as t3, ;
(SELECT MAX(price) as maxPrice FROM automobile) as t2 ;
WHERE t1.manufacturer = t3.id AND price = t2.maxPrice
ENDIF
-- Найти самый дешевый автомобиль
IF thisform. ignoreManufacturer. Value = 0 THEN
SELECT t1.number, selManufacturerText, t1.model, t1.release_year, ;
t1.price FROM automobile as t1, (SELECT MIN(price) as minPrice ;
FROM automobile WHERE manufacturer = selManufacturerId) as t2 ;
WHERE manufacturer = selManufacturerId AND price = t2.minPrice
ELSE
SELECT t1.number, t3.manufacturer, t1.model, t1.release_year, t1.price ;
FROM automobile as t1, manufacturer_table as t3, ;
(SELECT MIN(price) as maxPrice FROM automobile) as t2 ;
WHERE t1.manufacturer = t3.id AND price = t2.maxPrice
ENDIF
-- Найти среднюю стоимость
IF thisform. ignoreManufacturer. Value = 0 THEN
SELECT AVG(price) FROM automobile WHERE manufacturer = selManufacturerId
ELSE
SELECT AVG(price) FROM automobile
ENDIF
-- Найти автомобили с ценой свыше
PRIVATE selPrice AS Integer
selPrice = thisform. Text1.value
IF thisform. ignoreManufacturer. Value = 0 THEN
SELECT number, selManufacturerText, model, release_year, price ;
FROM automobile WHERE manufacturer = selManufacturerId ;
AND price > selPrice
ELSE
SELECT t1.number, t3.manufacturer, t1.model, t1.release_year, t1.price ;
FROM automobile as t1, manufacturer_table as t3 ;
WHERE t1.manufacturer = t3.id AND price > selPrice
ENDIF

Рисунок 22 – Пример выполнения запроса, найти самый дорогой автомобиль
■ Найти все автомобили, поступившие из заданной страны (ввод страны), чья скорость больше заданной (ввод скорости).
RIVATE selCountryId AS Integer
PRIVATE selCountryText AS Varchar
PRIVATE selSpeed AS Integer
selCountryId = thisform. Country. IndexToItemId(thisform. Country. ListIndex)
selCountryText = thisform. Country. value
selSpeed = thisform. Text1.value
SELECT t1.number, t2.manufacturer, t1.model, selCountryText as place_making,;
t1.speed FROM automobile as t1, manufacturer_table as t2 ;
WHERE t1.manufacturer = t2.id AND t1.place_making = selCountryId ;
AND t1.speed >= selSpeed

Рисунок 23 – Пример выполнения запроса: найти все автомобили, прибывшие из Германии, чья скорость выше 200 км/ч
■ Найти количество автомобилей в гараже (по каждому типу и в целом) с заданным сроком эксплуатации (ввод срока).
PRIVATE selManufacturerId AS Integer
PRIVATE selManufacturerText AS Varchar
PRIVATE selLifetime AS Integer
selManufacturerId = thisform. Manufacturer. IndexToItemId(thisform. Manufacturer. ListIndex)
selManufacturerText = thisform. Manufacturer. value
selLifetime = thisform. Text1.value
IF thisform. ignoreManufacturer. Value = 0 THEN
SELECT number, selManufacturerText as manafacturer, model, lifetime ;
FROM automobile WHERE manufacturer = selManufacturerId ;
AND lifetime = selLifetime AND issue_date is null
ELSE
SELECT number, selManufacturerText as manafacturer, model, lifetime ;
FROM automobile WHERE lifetime = selLifetime ;
AND issue_date is null
ENDIF

Рисунок 24 – Пример выполнения запроса: найти все автомобили в гараже марки Nissan, чей срок эксплуатации равен двум годам
■ Найти все автомобили заданной вместительности (ввод) для заданного года выпуска.
PRIVATE selReleaseYear AS Varchar
PRIVATE selCapac AS Integer
selReleaseYear = thisform. Text1.value
selCapac = thisform. Text2.value
SELECT t1.number, t2.manufacturer, t1.model, t1.release_year, ;
t1.capaciousness FROM automobile as t1 ;
JOIN manufacturer_table as t2 ON t1.manufacturer = t2.id ;
JOIN country as t3 ON t1.place_making = t3.id ;
WHERE t1.release_year = selReleaseYear AND t1.capaciousness = selCapac

Рисунок 25 – Пример выполнения запроса
■ Найти самый дорогой вид ремонта, самый дешевый, среднюю стоимость ремонта для каждого механика и в целом, найти машины со стоимостью ремонтных работ в заданных пределах (предусмотреть ввод цены с клавиатуры) для каждого механика и в целом.

Рисунок 26 – Форма для первых трех запросов
PRIVATE selMechanicId AS Integer
PRIVATE selMechanicText AS Varchar
selMechanicId = thisform. Mechanics. IndexToItemId(thisform. Mechanics. ListIndex)
selMechanicText = thisform. Mechanics. value
-- Найти самый дорогой вид ремонта
IF thisform. ignoreMechanic. Value = 0 THEN
SELECT selMechanicText as Mechanic, t1.number, t2.manufacturer, ;
t1.model, t4.type_repair, t3.price FROM automobile as t1, ;
manufacturer_table as t2, need_repair as t3, type_repair as t4, ;
(SELECT MAX(price) as maxPrice FROM need_repair ;
WHERE id_mechanic = selMechanicId) as t5 ;
WHERE t1.manufacturer = t2.id AND t1.id = t3.id_automobile AND ;
t3.id_mechanic = selMechanicId AND t3.type_repair = t4.id ;
AND t3.price = t5.maxPrice
ELSE
SELECT TRIM(t6.family)+' '+TRIM(t6.name)+' '+TRIM(t6.patronymic) ;
as mechanic, t1.number, t2.manufacturer, t1.model, ;
t4.type_repair, ;t3.price FROM automobile as t1, ;
manufacturer_table as t2, need_repair as t3, type_repair as t4, ;
(SELECT MAX(price) as maxPrice FROM need_repair) as t5, ;
mechanics as t6 WHERE t1.manufacturer = t2.id ;
AND t1.id = t3.id_automobile AND t3.type_repair = t4.id ;
AND t3.id_mechanic = t6.id AND t3.price = t5.maxPrice
ENDIF
![]()
Рисунок 27 – Пример выполнения запроса
-- Найти самый дешевый вид ремонта
PRIVATE selMechanicId AS Integer
PRIVATE selMechanicText AS Varchar
selMechanicId = thisform. Mechanics. IndexToItemId(thisform. Mechanics. ListIndex)
selMechanicText = thisform. Mechanics. value
IF thisform. ignoreMechanic. Value = 0 THEN
SELECT selMechanicText as Mechanic, t1.number, t2.manufacturer, ;
t1.model, t4.type_repair, t3.price FROM automobile as t1, ;
manufacturer_table as t2, need_repair as t3, type_repair as t4, ;
(SELECT MIN(price) as tPrice FROM need_repair ;
WHERE id_mechanic = selMechanicId) as t5 ;
WHERE t1.manufacturer = t2.id AND t1.id = t3.id_automobile ;
AND t3.id_mechanic = selMechanicId AND t3.type_repair = t4.id ;
AND t3.price = t5.tPrice
ELSE
SELECT TRIM(t6.family)+' '+TRIM(t6.name)+' '+TRIM(t6.patronymic) ;
as mechanic, t1.number, t2.manufacturer, t1.model, ;
t4.type_repair, t3.price FROM automobile as t1, ;
manufacturer_table as t2, need_repair as t3, type_repair as t4, ;
(SELECT MIN(price) as tPrice FROM need_repair) as t5, ;
mechanics as t6 WHERE t1.manufacturer = t2.id ;
AND t1.id = t3.id_automobile AND t3.type_repair = t4.id ;
AND t3.id_mechanic = t6.id AND t3.price = t5.tPrice
ENDIF

Рисунок 28 – Пример выполнения запроса
-- Найти среднюю стоимость ремонта
PRIVATE selMechanicId AS Integer
PRIVATE selMechanicText AS Varchar
selMechanicId = thisform. Mechanics. IndexToItemId(thisform. Mechanics. ListIndex)
selMechanicText = thisform. Mechanics. value
IF thisform. ignoreMechanic. Value = 0 THEN
SELECT selMechanicText as mechanic, AVG(price) as avgprice ;
FROM need_repair WHERE id_mechanic = selMechanicId
ELSE
SELECT AVG(price) as avgprice FROM need_repair
ENDIF
![]()
Рисунок 29 – Пример выполнения запроса
-- Найти машины со стоимостью ремонтных работ в заданных пределах (предусмотреть ввод цены с клавиатуры) для каждого механика и в целом
PRIVATE selMechanicsId AS Integer
PRIVATE selMechanicsText AS Varchar
PRIVATE min AS Integer
PRIVATE max AS Integer
selMechanicsId = thisform. Mechanics. IndexToItemId(thisform. Mechanics. ListIndex)
selMechanicsText = thisform. Mechanics. value
min = thisform. Text1.value
max = thisform. Text2.value
IF thisform. ignoreMech. Value = 0 THEN
SELECT selMechanicsText as mechanic, t1.number, t3.manufacturer, ;
t1.model, t2.price_repair FROM automobile as t1, ;
(SELECT id_automobile, SUM(price) as price_repair ;
FROM need_repair WHERE id_mechanic = selMechanicsId ;
GROUP BY id_automobile) as t2, manufacturer_table as t3 ;
WHERE t1.id = t2.id_automobile AND t1.manufacturer = t3.id ;
AND t2.price_repair BETWEEN min AND max
ELSE
SELECT t1.number, t3.manufacturer, t1.model, t2.price_repair ;
FROM automobile as t1, (SELECT id_automobile, ;
SUM(price) as price_repair FROM need_repair ;
GROUP BY id_automobile) as t2, manufacturer_table as t3 ;
WHERE t1.id = t2.id_automobile AND t1.manufacturer = t3.id ;
AND t2.price_repair BETWEEN min AND max
ENDIF

Рисунок 30 – Пример выполнения запроса
■ Количество отремонтированных машин за месяц, квартал; средняя стоимость ремонтных работ за этот же период.
SELECT COUNT(*) FROM automobile WHERE id NOT in ;
(SELECT DISTINCT id_automobile FROM need_repair ;
WHERE NOT BETWEEN(date_end, DATE(YEAR(DATE()), MONTH(DATE()), 1), DATE()) ;
OR price is NULL)
![]()
Рисунок 31 – Количество отремонтированных машин за месяц
SELECT AVG(t2.price_repair) FROM automobile as t1, (SELECT id_automobile, ;
SUM(price) as price_repair FROM need_repair GROUP BY id_automobile) as t2 ;
WHERE t1.id = t2.id_automobile AND t1.id NOT in (SELECT DISTINCT ;
id_automobile FROM need_repair ;
WHERE NOT BETWEEN(date_end, DATE(YEAR(DATE()), MONTH(DATE()), 1), DATE()) ;
OR price is NULL)
![]()
Рисунок 32 – Средняя стоимость ремонтных работ за месяц
STORE MONTH(DATE( )) TO gcMonth
DO CASE
CASE gcMonth <= 3
STORE DATE(YEAR(DATE()), 1, 1) TO gdDate
CASE gcMonth <= 6
STORE DATE(YEAR(DATE()), 4, 1) TO gdDate
CASE gcMonth <= 9
STORE DATE(YEAR(DATE()), 7, 1) TO gdDate
CASE gcMonth <= 12
STORE DATE(YEAR(DATE()), 10, 1) TO gdDate
ENDCASE
SELECT COUNT(*) FROM automobile ;
WHERE id NOT in (SELECT DISTINCT id_automobile FROM need_repair ;
WHERE NOT BETWEEN(date_end, gdDate, DATE()) OR price is NULL)
![]()
Рисунок 33 – Количество отремонтированных машин за квартал
SELECT AVG(t2.price_repair) FROM automobile as t1, (SELECT id_automobile, ;
SUM(price) as price_repair FROM need_repair GROUP BY id_automobile) as t2 ;
WHERE t1.id = t2.id_automobile AND t1.id NOT in (SELECT DISTINCT ;
id_automobile FROM need_repair ;
WHERE NOT BETWEEN(date_end, gdDate, DATE()) OR price is NULL)
![]()
Рисунок 34 – Средняя стоимость ремонтных работ за квартал
■ Найти долю дешевых (по стоимости ремонтных работ) машин (меньше заданного, ввод ограничения) от общего числа машин (для каждого механика и в целом).
PRIVATE selMechanicsId AS Integer
PRIVATE selMechanicsText AS Varchar
PRIVATE constrain AS Integer
selMechanicsId = thisform. Mechanics. IndexToItemId(
thisform. Mechanics. ListIndex)
selMechanicsText = thisform. Mechanics. value
constrain = thisform. Text3.value
IF thisform. ignoreMech. Value = 0 THEN
SELECT t2.price_repair FROM automobile as t1, ;
(SELECT id_automobile, SUM(price) as price_repair ;
FROM need_repair WHERE id_mechanic = selMechanicsId ;
GROUP BY id_automobile) as t2 WHERE t1.id = t2.id_automobile ;
INTO CURSOR temp
ELSE
SELECT t2.price_repair FROM automobile as t1, (SELECT id_automobile, ;
SUM(price) as price_repair FROM need_repair ;
GROUP BY id_automobile) as t2 WHERE t1.id = t2.id_automobile ;
INTO CURSOR temp
ENDIF
SELECT (SELECT COUNT(*) FROM temp WHERE price_repair < constrain)/COUNT(*) ;
FROM temp INTO ARRAY proz
thisform. Text2.Value = proz[1]

Рисунок 35 – Пример выполнения запроса
■ Найти всех механиков, чей стаж находится в заданных пределах (ввод интервала) для заданного вида ремонта (выбор).
PRIVATE selTypeId AS Integer
PRIVATE selTypeText AS Varchar
PRIVATE min AS Integer
PRIVATE max AS Integer
selTypeId = thisform. TYPE_REPAIR_COMBO. IndexToItemId(thisform. TYPE_REPAIR_COMBO. ListIndex)
selTypeText = thisform. TYPE_REPAIR_COMBO. value
min = thisform. Text1.value
max = thisform. Text2.value
SELECT selTypeText as type_repair, t1.length_service, ;
TRIM(t2.family)+' '+TRIM(t2.name)+' '+TRIM(t2.patronymic) as mechanic ;
FROM ability_mechanics as t1 JOIN mechanics as t2 ON t1.id_mechanic = t2.id;
WHERE t1.type_repair = selTypeId AND BETWEEN(t1.length_service, min, max)

Рисунок 36 – Пример выполнения запроса
Меню

Рисунок 37 – Меню
Меню состоит из двух разделов и пункта «выход».
Первый раздел – «Редактирование». Содержит пункты позволяющие получить доступ к формам редактирования таблиц баз данных.
Второй раздел – «Запросы». Содержит пункты позволяющие осуществить запросы в соответствии с заданием на расчетно-графическую работу.
Пункт «Выход» позволяет перейти к стандартному меню FoxPro.
Выводы
В ходе работы была спроектирована структура базы данных, реализованы запросы различной сложности. С целью упрощения взаимодействия между пользователем и базой данных, был разработан графический интерфейс для каждой поставленной в задании задачи. И сформировано меню, которое объединяет различные формы в единую систему.
В ходе работы были обобщены и закреплены навыки работы со средой разработки visual FoxPro, полученные в ходе лабораторных работ. И также получены новые знания, связанные с языком программирования среды FoxPro и построением пользовательских форм.
Список литературы
1. Документация по Microsoft Visual FoxPro 9.0



