
ПИс7
.docxГУАП
КАФЕДРА № 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();
}
Вывод: создана страница управления турами, на которой администратор может добавлять, удалять и изменять тур. Также разработана страница управления заказами для подтверждения или удаления заказов.