- •Пояснительная записка
- •Введение
- •Анализ предметной области
- •Структура базы данных
- •Клиент для работы с бд
- •Меню соединения с базой данных
- •Главное меню приложения
- •Просмотр базы данных
- •Регистрация ремонтов
- •План на текущий месяц
- •Просроченные ремонты
- •Анализ видов ремонта
- •По срокам
- •По дате окончания
- •По стоимости
- •Поиск ремонтов
- •По виду
- •По марке
- •За период
- •За все время
- •За месяц
- •Заключение
- •Источники
По срокам
В данном окне можно выбрать такие виды ремонта, длительность которых не превышает указанное число дней. Интерфейс формы:
Количество дней вводится пользователем в текстовое поле. Кнопка «ОК» вызывает процедуру выполнения запроса, которая заполняет таблицу.
Код SQL-запроса:
select rt.REPAIRTYPE_CODE,
rt.REPAIRTYPE_NAME,
rt.REPAIRTYPE_DURATION,
rt.REPAIRTYPE_COST,
rt.REPAIRTYPE_NOTE
from REPAIRTYPE rt
where rt.REPAIRTYPE_DURATION < :dur
Реализация в приложении:
/* виды ремонтов по длительности */
private void btnRepairTypeDurationOK_Click(object sender, EventArgs e) {
string dur = txtRepairTypeDuration.Text;
int d = 0;
try {
d = int.Parse(dur);
} catch (Exception ex) {
MessageBox.Show(ex.Message, "Ошибка");
return;
}
if (d < 1) {
MessageBox.Show("Задана длительность меньше одного дня", "Ошибка");
return;
}
OleDbCommand cmd = new OleDbCommand("<текст запоса>", con, trans);
cmd.Parameters.AddWithValue("dur", dur);
OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
dtRepairTypeDuration.Clear();
adapter.Fill(dtRepairTypeDuration);
dgRepairTypeDuration.DataSource = dtRepairTypeDuration;
adapter.Dispose();
cmd.Dispose();
}
Результат работы запроса (с заданной длительностью, например, 50 дней):
По дате окончания
На этой форме пользователь может посмотреть, какие виды ремонта получится закончить к определенном сроку, если начать с сегодняшнего дня.
SQL-запрос, решающий данную задачу:
select rt.REPAIRTYPE_CODE,
rt.REPAIRTYPE_NAME,
rt.REPAIRTYPE_DURATION,
rt.REPAIRTYPE_COST,
rt.REPAIRTYPE_NOTE
from REPAIRTYPE rt
where current_date + rt.REPAIRTYPE_DURATION >= :startdate
and current_date + rt.REPAIRTYPE_DURATION <= :enddate
Запрос возвращает все виды ремонтов, дата окончания которых укладывается в интервал между :startdateи:enddate. Эти параметры задаются через компоненты формы. Внешний вид формы с примером выполнения запроса:
Реализация в приложении:
/* типы ремонта по возможной дате окончания */
private void btnRepairTypesDateOK_Click(object sender, EventArgs e) {
string start = txtRepairTypesDateStart.Text;
string end = txtRepairTypesDateEnd.Text;
// проверка введенной даты
try {
DateTime dstart = DateTime.Parse(start);
DateTime dend = DateTime.Parse(end);
} catch (Exception ex) {
MessageBox.Show(ex.Message, "Ошибка");
return;
}
// запрос
OleDbCommand cmd = new OleDbCommand("<текст запроса>", con, trans);
cmd.Parameters.AddWithValue("startdate", start);
cmd.Parameters.AddWithValue("enddate", end);
OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
dtRepairTypeDate.Clear();
adapter.Fill(dtRepairTypeDate);
dgRepairTypeDate.DataSource = dtRepairTypeDate;
adapter.Dispose();
cmd.Dispose();
}
По стоимости
В данном окне вы можете выбрать такие виды ремонта, стоимость которых укладывается в некоторый диапазон цен. Вот как выглядит окно с результатами уже выполненного запроса:
Как видно по рисунку, параметры запроса берутся из текстовых полей «От» и «До». Выполнение запроса происходит при нажатии на кнопку «ОК».
Код запроса:
select REPAIRTYPE_CODE,
REPAIRTYPE_NAME,
REPAIRTYPE_DURATION,
REPAIRTYPE_COST,
REPAIRTYPE_NOTE
from REPAIRTYPE
where REPAIRTYPE_COST >= :lower and REPAIRTYPE_COST <= :upper
Реализация в приложении:
/* типы ремонта - в интервале стоимости */
private void btnRepairTypeCostOK_Click(object sender, EventArgs e) {
// проверка допустимых значений
float lower = 0, upper = 0;
try {
lower = float.Parse(txtRepairTypeCostFrom.Text);
upper = float.Parse(txtRepairTypeCostTo.Text);
} catch (Exception ex) {
MessageBox.Show("Неверный числовой формат", "Ошибка преобразования");
return;
}
if ((lower < 0) || (upper < lower)) {
MessageBox.Show("Неверный интервал стоимости", "Ошибка");
return;
}
/*
... запрос, вставка результата в таблицу. см. реализацию предыдущих
пунктов
*/
}