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

ГУАП

КАФЕДРА № 14

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

Старший преподаватель

Н. В. Барклаевская

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №7

СОЗДАНИЕ САЙТА С ИСПОЛЬЗОВАНИЕМ ТЕХНОЛОГИИ ASP.NET. ЧАСТЬ 3. АДМИНИСТРИРОВАНИЕ

по курсу: ПРОЕКТИРОВАНИЕ ИНФОРМАЦИОННЫХ СИСТЕМ

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ гр. №

4116

подпись, дата

инициалы, фамилия

Санкт-Петербург 2024

Цель работы: создание сайта с использованием технологии ASP.NET, разработать страницы: добавление товара или услуги, редактирование товара или услуги, администрирование заказов.

Описание предметной области:

Туристическое агентство представляет собой организацию, которая занимается продажей туристических путёвок. Основными задачами агентства являются поиск и разработка туров, консультирование клиентов, оформление бронирований, обеспечение процесса оплаты и предоставление актуальной информации о турах и предложениях.

Ход работы

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

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

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

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

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

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

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

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

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

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;

}

}

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

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

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

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

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;

}

}

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

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

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;

}

}

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

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

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

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();

}

}

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

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();

}

Вывод: создана страница управления турами, на которой администратор может добавлять, удалять и изменять тур. Также разработана страница управления заказами для подтверждения или удаления заказов.

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