Скачиваний:
1
Добавлен:
12.04.2025
Размер:
8.45 Mб
Скачать

Администрирование базы данных

При входе в систему под ролью администратора, появляются кнопки управления турами и заказами (Рисунок 39).

Рисунок 39- Появление кнопок управления для администратора

При переходе на страницу управления турами открывается список туров (Рисунок 40).

Рисунок 40 – Страница управления турами

При нажатии на кнопку Добавить тур, открывается страница для создания тура. Тип тура, сезон, город и отель можно выбирать из выпадающего списка. При нажатии на кнопку Сохранить тур открывается соединение с базой данных. Затем извлекаются данные о туре, генерируется уникальный ID и выполняется вставка данных в таблицу Tour. Далее, если загружается изображение, оно сохраняется в таблице Image, а также связывается с туром в таблице ImageTour. После этого вычисляется дата окончания поездки, и вставляются данные о поездке в таблицу Trip (Рисунок 41-43).

Рисунок 41- Форма создания тура в конструкторе

Рисунок 42- Форма для создания тура

Рисунок 43- Появление созданного тура в списке туров

Листинг 14- Кнопка добавления тура

protected void SaveTourButton_Click(object sender, EventArgs e)

{

String connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["travelConnectionString4"].ConnectionString

try

{

using (SqlConnection connection = new SqlConnection(connectionString))

{

connection.Open();

using (var transaction = connection.BeginTransaction())

{

try

{

string tourName = TourName.Text.Trim();

string description = Description.Text.Trim();

int duration = int.Parse(Duration.Text.Trim());

DateTime startDate;

if (!DateTime.TryParse(StartDate.Text.Trim(), out startDate))

{

throw new Exception("Неверный формат даты.");

}

int tourId = GetNextId("Tour", connection, transaction);

string query = @"

INSERT INTO Tour (Tour_ID, Name_T, Description_T, Duration_T, TypeT_ID)

VALUES (@Tour_ID, @Name, @Description, @Duration, @TypeT_ID)";

using (SqlCommand command = new SqlCommand(query, connection, transaction))

{

command.Parameters.AddWithValue("@Tour_ID", tourId);

command.Parameters.AddWithValue("@Name", tourName);

command.Parameters.AddWithValue("@Description", description);

command.Parameters.AddWithValue("@Duration", duration);

command.Parameters.AddWithValue("@TypeT_ID", TourType.SelectedValue);

command.ExecuteNonQuery();

}

// Работа с загрузкой изображения

string imagePath = SaveUploadedFile();

int imageId = -1;

if (!string.IsNullOrEmpty(imagePath))

{

imageId = GetNextImageId(connection, transaction);

string imageQuery = "INSERT INTO Image (ImageID, FilePath) VALUES (@ImageID, @FilePath)"; using (SqlCommand imageCommand = new SqlCommand(imageQuery, connection, transaction))

{

imageCommand.Parameters.AddWithValue("@ImageID", imageId);

imageCommand.Parameters.AddWithValue("@FilePath", imagePath);

imageCommand.ExecuteNonQuery();

}

string imageTourQuery = "INSERT INTO ImageTour (ImageTourID, TourID, ImageID) VALUES (@ImageTourID, @Tour_ID, @ImageID)";

using (SqlCommand imageTourCommand = new SqlCommand(imageTourQuery, connection, transaction))

{

int imageTourId = GetNextId("ImageTour", connection, transaction); imageTourCommand.Parameters.AddWithValue("@ImageTourID", imageTourId); imageTourCommand.Parameters.AddWithValue("@Tour_ID", tourId); imageTourCommand.Parameters.AddWithValue("@ImageID", imageId);

imageTourCommand.ExecuteNonQuery();

}

}

DateTime endDate = startDate.AddDays(duration);

string tripQuery = @"INSERT INTO Trip (Tour_ID, Price, StartDate, EndDate)VALUES (@Tour_ID, @Price, @StartDate, @EndDate)"; int tripId = GetNextId("Trip", connection, transaction);

using (SqlCommand tripCommand = new SqlCommand(tripQuery, connection, transaction))

{

tripCommand.Parameters.AddWithValue("@Tour_ID", tourId);

tripCommand.Parameters.AddWithValue("@Price",decimal.Parse(Price.Text.Trim()));

tripCommand.Parameters.AddWithValue("@StartDate", startDate);

tripCommand.Parameters.AddWithValue("@EndDate", endDate);

tripCommand.ExecuteNonQuery();

}

AddTourSeason(connection, transaction, tourId);

AddTourHotel(connection, transaction, tourId);

AddRoute(connection, transaction, tourId);

transaction.Commit();

SuccessMessage.Visible = true;

SuccessMessage.Text = "Тур успешно добавлен!";

}

catch (Exception ex)

{

transaction.Rollback();

ErrorMessage.Visible = true;

ErrorMessage.Text = "Ошибка: " + ex.Message;

}

}

}

}

catch (Exception ex)

{

ErrorMessage.Visible = true;

ErrorMessage.Text = "Ошибка: " + ex.Message;

}

}

При нажатии на кнопку Правка открывается страница редактирования тура (Рисунок 44-45).

Рисунок 44 – Страница редактирования тура

Рисунок 45- Изменение типа и описания тура

Листинг 15- Функция кнопки редактирования тура

protected void btnEdit_Click(object sender, EventArgs e)

{

if (Session["TourId"] == null)

{

lblMessage.Text = "Не выбран тур для редактирования.";

return;

}

int tourId = int.Parse(Session["TourId"].ToString());

string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["travelConnectionString4"].ConnectionString;

string query = @"

UPDATE Tour

SET Name_T = @Name,

Description_T = @Description,

Duration_T = @Duration,

TypeT_ID = @TypeT_ID,

Price = @Price,

StartDate = @StartDate,

EndDate = @EndDate,

Country = @Country,

Hotel_ID = @Hotel_ID

WHERE Tour_ID = @Tour_ID";

try

{

using (SqlConnection connection = new SqlConnection(connectionString))

{

SqlCommand command = new SqlCommand(query, connection);

command.Parameters.AddWithValue("@Name", txtTourName.Text);

command.Parameters.AddWithValue("@Description", txtDescription.Text);

command.Parameters.AddWithValue("@Duration", txtDuration.Text);

command.Parameters.AddWithValue("@TypeT_ID", ddlTourType.SelectedValue);

command.Parameters.AddWithValue("@Price", txtPrice.Text);

command.Parameters.AddWithValue("@StartDate", txtStartDate.Text);

command.Parameters.AddWithValue("@EndDate", txtEndDate.Text);

command.Parameters.AddWithValue("@Country", ddlCountry.SelectedValue); // Новое поле для страны

command.Parameters.AddWithValue("@Hotel_ID", ddlHotel.SelectedValue); // Новое поле для отеля

command.Parameters.AddWithValue("@Tour_ID", tourId);

connection.Open();

int rowsAffected = command.ExecuteNonQuery();

if (rowsAffected > 0)

{

lblSuccess.Text = "Данные тура успешно обновлены.";

}

else

{

lblMessage.Text = "Ошибка при сохранении данных.";

}

}

}

catch (Exception ex)

{

lblMessage.Text = "Ошибка сохранения: " + ex.Message;

}

}

Также реализована возможность удаления тура (Листинг 16).

Листинг 16- Функция кнопки удаления тура

private bool DeleteTour(int tourID)

{

string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["travelConnectionString4"].ConnectionString;

System.Diagnostics.Debug.WriteLine("Строка подключения: " + connectionString);

try

{

using (SqlConnection connection = new SqlConnection(connectionString))

{

connection.Open();

System.Diagnostics.Debug.WriteLine("Соединение установлено");

using (SqlTransaction transaction = connection.BeginTransaction())

{

try

{

string deleteImageTourQuery = "DELETE FROM ImageTour WHERE TourID = @TourID";

ExecuteDeleteQuery(deleteImageTourQuery, tourID, connection, transaction);

string deleteTripQuery = "DELETE FROM Trip WHERE Tour_ID = @TourID";

ExecuteDeleteQuery(deleteTripQuery, tourID, connection, transaction);

string deleteTourSeasonQuery = "DELETE FROM TourSeason WHERE Tour_ID = @TourID";

ExecuteDeleteQuery(deleteTourSeasonQuery, tourID, connection, transaction);

string deleteTourHotelQuery = "DELETE FROM TourHotel WHERE Tour_ID = @TourID";

ExecuteDeleteQuery(deleteTourHotelQuery, tourID, connection, transaction);

string deleteRouteQuery = "DELETE FROM Route WHERE Tour_ID = @TourID"; ExecuteDeleteQuery(deleteRouteQuery, tourID, connection, transaction);

string deleteTourQuery = "DELETE FROM Tour WHERE Tour_ID = @TourID";

ExecuteDeleteQuery(deleteTourQuery, tourID, connection, transaction);

transaction.Commit();

System.Diagnostics.Debug.WriteLine("Тур с ID " + tourID + " удален.");

return true;

}

catch (Exception ex)

transaction.Rollback();

System.Diagnostics.Debug.WriteLine("Ошибка при удалении тура: " + ex.Message);

return false;

}

}

}

}

catch (Exception ex)

{

System.Diagnostics.Debug.WriteLine("Ошибка подключения или транзакции: " + ex.Message);

return false;

}

}

На странице управления заказами, находится список заказов, в котором администратор может либо подтвердить заказ, либо удалить его (Рисунок 46).

Рисунок 46- Страница управления заказами

Листинг 17- Функция обновления статуса заказа

private void UpdateOrderStatus(int orderId, string newStatus)

{

string connectionString = "Data Source=localhost;Initial Catalog=travel;Integrated Security=True";

string query = "UPDATE Order_data SET OrderStatus = @OrderStatus WHERE Order_ID = @OrderID";

try

{

using (SqlConnection connection = new SqlConnection(connectionString))

{

SqlCommand command = new SqlCommand(query, connection);

command.Parameters.AddWithValue("@OrderStatus", newStatus);

command.Parameters.AddWithValue("@OrderID", orderId);

connection.Open();

command.ExecuteNonQuery();

connection.Close();

lblMessage.Text = "Статус заказа успешно обновлен.";

}

}

catch (Exception ex)

{

lblMessage.Text = "Ошибка обновления статуса: " + ex.Message;

}

finally

{

LoadOrders();

}

}

Листинг 18- Функция удаления заказа

private void DeleteOrder(int orderId)

{

string connectionString = "Data Source=localhost;Initial Catalog=travel;Integrated Security=True";

string query = "DELETE FROM Order_data WHERE Order_ID = @OrderID";

try

{

using (SqlConnection connection = new SqlConnection(connectionString))

{

SqlCommand command = new SqlCommand(query, connection);

command.Parameters.AddWithValue("@OrderID", orderId);

connection.Open();

command.ExecuteNonQuery();

connection.Close();

lblMessage.Text = "Заказ успешно удален.";

}

}

catch (Exception ex)

{

lblMessage.Text = "Ошибка удаления заказа: " + ex.Message;

}

finally

{

LoadOrders();

}

Соседние файлы в предмете Проектирование информационных систем