- •Содержание
- •1. Описание предметной области
- •1.1 Назначение информационной системы
- •1.2. Характеристика документов и атрибутов предметной области
- •2. Проектирование информационной системы
- •2.1. Построение инфологической модели
- •2.2. Описание информационных объектов
- •3. Объекты базы данных Microsoft Access
- •3.1. Таблицы
- •3.2. Запросы
- •3.3. Экранные формы ввода и редактирования данных
- •3.4. Отчеты
- •3.5. Макросы
- •3.6. Главная кнопочная форма
- •Список использованной литературы
3.2. Запросы
Для формирования отчетных документов, а также отбора необходимой информации в ходе формирования путевых листов, разработан ряд запросов.
Запрос «График техосмотров» определяет для каждой машины срок очередного техосмотра (на основании данных о периодичности техосмотров для данной марки) и располагает полученные записи в хронологическом порядке очередных техосмотров. Текст запроса на языке SQL:
SELECT Автомобиль.ГосНомер, Марка.Марка, Автомобиль.Год, Автомобиль.Техосмотр, Автомобиль!Техосмотр+Марка!ПериодТО AS [Следующий техосмотр]
FROM Марка INNER JOIN Автомобиль ON Марка.КодМарки = Автомобиль.Марка
ORDER BY Автомобиль!Техосмотр+Марка!ПериодТО;
Рис. 3. Запрос «График техосмотров» в режиме конструктора
Результаты запроса:
График техосмотров |
||||
Гос. № |
Марка |
Год выпуска |
Последний техосмотр |
Следующий техосмотр |
О386УГ77 |
ГАЗ-2410 |
2005 |
23.09.08 |
22.12.08 |
Т341ГШ77 |
ГАЗ-3110 |
1997 |
03.10.08 |
01.01.09 |
М398ГН77 |
ГАЗ-3110 |
1997 |
16.10.08 |
14.01.09 |
У402ОЕ77 |
ГАЗ-2410 |
2005 |
17.10.08 |
15.01.09 |
У876ВП77 |
ГАЗ-3110 |
1993 |
27.10.08 |
25.01.09 |
Р874ИТ77 |
ГАЗ-2410 |
2004 |
31.10.08 |
29.01.09 |
М093РТ77 |
ГАЗ-2404 |
2003 |
03.11.08 |
01.02.09 |
Т712КД77 |
ГАЗ-2404 |
2003 |
04.11.08 |
02.02.09 |
Р983ПО77 |
ГАЗ-2404 |
2004 |
17.11.08 |
15.02.09 |
З837ОТ77 |
ГАЗ-2404 |
2005 |
29.11.08 |
27.02.09 |
П865ВГ77 |
ГАЗ-2410 |
2004 |
03.12.08 |
03.03.09 |
Запрос «Закрепленная машина» используется в ходе ввода данных в путевой лист. После выбора водителя, фигурирующего в путевом листе, этот запрос определяет автомобиль, за которым закреплен данный водитель, а также последнее (то есть максимальное) показание спидометра при возвращении этой машины в таксопарк, которое вносится в очередной путевой лист как значение по умолчанию. Текст запроса на языке SQL:
SELECT Водитель.Машина, Max([Путевой лист].СпидВозвр) AS Спидометр
FROM (Автомобиль INNER JOIN Водитель ON Автомобиль.ГосНомер = Водитель.Машина) LEFT JOIN [Путевой лист] ON Автомобиль.ГосНомер = [Путевой лист].Машина
WHERE (((Водитель.КодВодителя)=[Forms]![Путевой лист]![Водитель]))
GROUP BY Водитель.Машина;
Рис. 4. Запрос «Закрепленная машина» в режиме конструктора
Поскольку результаты запроса зависят от того, какой водитель внесен в путевой лист, они не приводятся в данной записке.
Следующий запрос — «Пробег машины» — по назначению аналогичен предыдущему: поскольку водитель может отправиться в рейс не на той машине, за которой он закреплен, данные о машине в путевом листе могут быть введены отдельно. Рассматриваемый запрос как раз и учитывает такую ситуацию, вычисляя последнее зарегистрированное показание спидометра данной машины. Текст запроса на языке SQL:
SELECT Max([Путевой лист].СпидВозвр) AS Спидометр
FROM [Путевой лист]
WHERE ((([Путевой лист].Машина)=[Forms]![Путевой лист]![Машина]));
Рис. 5. Запрос «Пробег машины» в режиме конструктора
Поскольку результаты запроса зависят от того, какая машина внесена в путевой лист, они не приводятся в данной записке.
Запрос «Средняя выручка по водителям» готовит данные для соответствующего выходного документа. Текст запроса на языке SQL:
SELECT Водитель.ФИО, Водитель.Категория, Avg([Путевой лист].Выручка) AS [Средняя выручка]
FROM Водитель INNER JOIN [Путевой лист] ON Водитель.КодВодителя = [Путевой лист].Водитель
GROUP BY Водитель.ФИО, Водитель.Категория
ORDER BY Avg([Путевой лист].Выручка) DESC;
Рис. 6. Запрос «Средняя выручка по водителям» в режиме конструктора
Результаты запроса:
Средняя выручка по водителям |
||
ФИО |
Категория |
Средняя выручка |
Филимонов Олег Константинович |
D |
1 242,00р. |
Самойленко Станислав Васильевич |
B |
1 185,00р. |
Панченко Сергей Алексеевич |
B |
1 125,00р. |
Семашко Юрий Львович |
C |
1 095,00р. |
Панкратов Юрий Иванович |
C |
1 065,00р. |
Шпак Антон Семенович |
B |
1 059,00р. |
Уборевич Кирилл Александрович |
C |
990,00р. |
Чибис Василий Анатольевич |
B |
970,00р. |
Макаренко Евгений Игоревич |
B |
930,00р. |
Коршунов Игорь Васильевич |
C |
840,00р. |
Коваль Владимир Владимирович |
B |
825,00р. |
Игнатович Александр Михайлович |
B |
729,00р. |
Тарасов Иван Григорьевич |
C |
720,00р. |
Костюк Евгений Алексеевич |
D |
720,00р. |
Емельяненко Игорь Александрович |
C |
579,00р. |
Остальные запросы готовят данные для отчетов за заданный период. Период указывается пользователем в форме «Отчетный период»; по умолчанию в форму вносится период, соответствующий текущему месяцу.
Запрос «Статистика по автомобилям» вычисляет для каждой автомашины количество рейсов, суммарный пробег, фактический и нормативный расход топлива, и на основании последних данных — перерасход. Текст запроса на языке SQL:
SELECT Автомобиль.ГосНомер, Марка.Марка, Count([Путевой лист].№) AS Рейсов, Sum([Путевой лист]!СпидВозвр-[Путевой лист]!СпидВыезд) AS Километров, Sum([Путевой лист].Расход) AS [Расход топлива], Sum(([Путевой лист]!СпидВозвр-[Путевой лист]!СпидВыезд)*Марка!Расход/100) AS [Нормативный расход], [Расход топлива]-[Нормативный расход] AS Перерасход
FROM Марка INNER JOIN (Автомобиль INNER JOIN [Путевой лист] ON Автомобиль.ГосНомер = [Путевой лист].Машина) ON Марка.КодМарки = Автомобиль.Марка
WHERE ((([Путевой лист].Дата)>=[Forms]![Отчетный период]![Начало] And ([Путевой лист].Дата)<=[Forms]![Отчетный период]![Конец]))
GROUP BY Автомобиль.ГосНомер, Марка.Марка;
Результаты запроса:
Статистика по автомобилям |
||||||
Гос. № |
Марка |
Рейсов |
Километров |
Расход топлива |
Нормативный расход |
Перерасход |
З837ОТ77 |
ГАЗ-2404 |
5 |
645 |
63,1000003814697 |
69,0149987697601 |
-5,9149983882904 |
М093РТ77 |
ГАЗ-2404 |
2 |
280 |
28,8000001907349 |
29,9599994659424 |
-1,15999927520752 |
М398ГН77 |
ГАЗ-3110 |
4 |
470 |
70 |
47,9399991035461 |
22,0600008964539 |
О386УГ77 |
ГАЗ-2410 |
2 |
190 |
21,8999996185303 |
18,2400007247925 |
3,65999889373779 |
П865ВГ77 |
ГАЗ-2410 |
2 |
233 |
26 |
22,3680008888245 |
3,63199911117554 |
Р874ИТ77 |
ГАЗ-2410 |
4 |
540 |
56,5 |
51,8400020599365 |
4,65999794006348 |
Р983ПО77 |
ГАЗ-2404 |
2 |
276 |
30 |
29,5319994735718 |
0,46800052642822 |
Т341ГШ77 |
ГАЗ-3110 |
2 |
270 |
41 |
27,5399994850159 |
13,4600005149841 |
Т712КД77 |
ГАЗ-2404 |
2 |
203 |
19,6000003814697 |
21,7209996128082 |
-2,1209992313385 |
У402ОЕ77 |
ГАЗ-2410 |
2 |
279 |
28 |
26,7840010643005 |
1,21599893569946 |
У876ВП77 |
ГАЗ-3110 |
5 |
665 |
81,5 |
67,8299987316132 |
13,6700012683868 |
Рис. 7. Запрос «Статистика по автомобилям» в режиме конструктора
Запрос «Статистика по водителям» вычисляет количество рейсов, километраж, расход топлива и объем выручки для каждого водителя за заданный период. Текст запроса на языке SQL:
Рис. 8. Запрос «Статистика по водителям» в режиме конструктора
SELECT Водитель.ФИО, Count([Путевой лист].№) AS Рейсов, Sum([Путевой лист]!СпидВозвр-[Путевой лист]!СпидВыезд) AS Километров, Sum([Путевой лист].Расход) AS [Расход топлива], Sum([Путевой лист].Выручка) AS [Объем выручки]
FROM Водитель INNER JOIN [Путевой лист] ON Водитель.КодВодителя = [Путевой лист].Водитель
WHERE ((([Путевой лист].Дата)>=[Forms]![Отчетный период]![Начало] And ([Путевой лист].Дата)<=[Forms]![Отчетный период]![Конец]))
GROUP BY Водитель.ФИО
ORDER BY Водитель.ФИО;
Результаты запроса:
Статистика по водителям |
||||
ФИО |
Рейсов |
Километров |
Расход топлива |
Объем выручки |
Емельяненко Игорь Александрович |
2 |
283 |
20,5 |
1 158,00р. |
Игнатович Александр Михайлович |
2 |
279 |
28 |
1 458,00р. |
Коваль Владимир Владимирович |
2 |
233 |
26 |
1 650,00р. |
Коршунов Игорь Васильевич |
2 |
165 |
30 |
1 680,00р. |
Костюк Евгений Алексеевич |
2 |
203 |
19,6000003814697 |
1 440,00р. |
Макаренко Евгений Игоревич |
3 |
430 |
50,5 |
2 790,00р. |
Панкратов Юрий Иванович |
2 |
260 |
30,5 |
2 130,00р. |
Панченко Сергей Алексеевич |
2 |
276 |
30 |
2 250,00р. |
Самойленко Станислав Васильевич |
2 |
305 |
40 |
2 370,00р. |
Семашко Юрий Львович |
2 |
235 |
31 |
2 190,00р. |
Тарасов Иван Григорьевич |
2 |
190 |
21,8999996185303 |
1 440,00р. |
Уборевич Кирилл Александрович |
2 |
280 |
26 |
1 980,00р. |
Филимонов Олег Константинович |
2 |
270 |
41 |
2 484,00р. |
Чибис Василий Анатольевич |
3 |
362 |
42,6000003814697 |
2 910,00р. |
Шпак Антон Семенович |
2 |
280 |
28,8000001907349 |
2 118,00р. |
Запрос «Статистика по маркам» вычисляет количество автомобилей данной марки, использовавшихся в заданном периоде, нормативный расход топлива на 100 км для автомобилей заданной марки, суммарный пробег автомобилей этой марки в отчетном периоде и фактический расход топлива (суммарный и на 100 км пробега). Текст запроса на языке SQL:
SELECT Марка.Марка, Count(Автомобиль.ГосНомер) AS Автомобилей, Марка.Расход, Sum([Путевой лист]!СпидВозвр-[Путевой лист]!СпидВыезд) AS Километров, Sum([Путевой лист].Расход) AS [Расход топлива], [Расход топлива]/[Километров]*100 AS [Фактический расход]
FROM Марка INNER JOIN (Автомобиль INNER JOIN [Путевой лист] ON Автомобиль.ГосНомер = [Путевой лист].Машина) ON Марка.КодМарки = Автомобиль.Марка
WHERE ((([Путевой лист].Дата)>=[Forms]![Отчетный период]![Начало] And ([Путевой лист].Дата)<=[Forms]![Отчетный период]![Конец]))
GROUP BY Марка.Марка, Марка.Расход;
Рис. 9. Запрос «Статистика по маркам» в режиме конструктора
Результаты запроса:
Статистика по маркам |
|||||
Марка |
Автомобилей |
Расход топлива на 100 км |
Километров |
Расход топлива |
Фактический расход |
ГАЗ-2404 |
11 |
10,7 |
1404 |
141,500000953674 |
10,0783476462731 |
ГАЗ-2410 |
10 |
9,6 |
1242 |
132,39999961853 |
10,66022541212 |
ГАЗ-3110 |
11 |
10,2 |
1405 |
192,5 |
13,7010676156584 |