- •Пояснительная записка
- •Введение
- •Анализ предметной области
- •Структура базы данных
- •Клиент для работы с бд
- •Меню соединения с базой данных
- •Главное меню приложения
- •Просмотр базы данных
- •Регистрация ремонтов
- •План на текущий месяц
- •Просроченные ремонты
- •Анализ видов ремонта
- •По срокам
- •По дате окончания
- •По стоимости
- •Поиск ремонтов
- •По виду
- •По марке
- •За период
- •За все время
- •За месяц
- •Заключение
- •Источники
За период
Данная форма позволяет просмотреть ремонты, зарегистрированные в БД за какой-то период времени.
Пользователь может задать начало и конец интервала времени, ремонты за который его интересуют, и выбрать, какие из них отображать: завершенные, незавершенные или все.
SQL-запрос, возвращающий нужные данные:
select r.repair_startdate,
r.machine_code,
rt.repairtype_name,
rt.repairtype_cost,
r.repair_note
from repair r
inner join repairtype rt on r.repairtype_code = rt.repairtype_code
where r.repair_startdate >= :start
and r.repair_startdate <= :end
and r.repair_done like :done
order by r.repair_startdate
Реализация в приложении почти ничем не отличается от предыдущих двух пунктов, разница только в текстах запросов, передаваемых объектам OleDbCommand.
За год
Через данный пункт меню вызывается форма, на которой можно увидеть график регистрации ремонтов за год. Внешний вид:
Пользователь может задать год, за который он хочет получить график. При нажатии на кнопку «ОК» происходит выполнение нужного запроса и создание на его основе графика регистрации ремонтов. Код запроса:
select m.month_code as MONTH_CODE,
rt.repairtype_name as REPAIRTYPE_NAME,
count(r.machine_code) as REPAIRS
from MONTHS m
left join REPAIR r
on extract(month from r.repair_startdate) = m.month_code
inner join repairtype rt
on r.repairtype_code = rt.repairtype_code
where r.repair_startdate >= :start
and r.repair_startdate <= :end
group by m.month_code, rt.repairtype_name
Функция реализации данного меню в приложении слишком большая, чтобы приводить ее целиком. По структуре ее можно разбить на две части. Первая часть типична и похожа на приведенные выше фрагменты кода, в ней осуществляется выполнение запроса и запись его результатов в объект DataTable. Во второй части происходит обращение к функциям приложения Microsoft Excel черезCOM-библиотеку Microsoft Excel ObjectLibrary12.0. Наше приложение экспортирует данные изDataTableв таблицу Excel, и строит по ним график, который потом преобразуется в картинку форматаBMPи вставляется в объектPictureBoxна форме. Все это проделывается в фоновом режиме, так что пользователь видит только конечный результат.
Выше на картинке показан пример работы данной функции.
За все время
В данном окне выполнятся анализ всех имеющихся в базе данных записей о ремонтах. Ремонты разделяются по видам, подсчитывается количество зарегистрированных ремонтов по отдельным видам, после чего строится график, иллюстрирующий долю ремонтов каждого вида от их общего числа.
Форма выглядит следующим образом:
SQL-запрос, вычисляющий необходимые данные:
select rt.REPAIRTYPE_NAME,
case when c.NUM is not null then c.NUM else 0 end
from REPAIRTYPE rt
left join
(select rt.REPAIRTYPE_NAME as REPAIRTYPE_NAME, count(*) as NUM
from REPAIRTYPE rt
inner join REPAIR r
on r.REPAIRTYPE_CODE = rt.REPAIRTYPE_CODE
group by rt.REPAIRTYPE_NAME) as c
on rt.REPAIRTYPE_NAME = c.REPAIRTYPE_NAME
Реализация данной функции похожа на предыдущий пункт. После выполнения запроса так же происходит обращение к функциям Excel и экспорт графика из Excel в PictureBoxна форме.
Отчеты
В данном меню пользователю предлагается создать электронный документ с отчетом о ремонтах, выполненных за год, либо за месяц. Отчет пишется приложением в формате Word2007, с использованиемCOM-компонентовMicrosoftWordObjectLibrary12.0.