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

Приложение е

Листинг – Файл TourDetails.aspx.cs

using System;

using System.Data.SqlClient;

using System.Web.UI;

namespace WebApplication3

{

public partial class TourDetails : Page

{

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

string tourID = Request.QueryString["TourID"];

if (!string.IsNullOrEmpty(tourID))

{

LoadTourDetails(tourID);

}

else

{

Response.Write("ID тура не найден.");

}

}

}

private void LoadTourDetails(string tourID)

{

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

using (SqlConnection conn = new SqlConnection(connectionString))

{

с

string query = @"

SELECT

T.Name_T AS Name_T,

T.Description_T AS Description_T,

T.Duration_T AS Duration_T,

ISNULL(I.FilePath, '') AS ImagePath,

ISNULL(S.Name_Season, 'Не указан') AS SeasonName,

ISNULL(H.Name_H, 'Не указан') AS HotelName,

ISNULL(L.Name_L, 'Не указан') AS LocalityName,

ISNULL(L.Country, 'Не указана') AS CountryName

FROM

Tour T

LEFT JOIN

TourSeason TS ON T.Tour_ID = TS.Tour_ID

LEFT JOIN

Season S ON TS.Season_ID = S.Season_ID

LEFT JOIN

TourHotel TH ON T.Tour_ID = TH.Tour_ID

LEFT JOIN

Hotel H ON TH.Hotel_ID = H.Hotel_ID

LEFT JOIN

Route R ON T.Tour_ID = R.Tour_ID

LEFT JOIN

Locality L ON R.Locality_ID = L.Locality_ID

LEFT JOIN

ImageTour IT ON T.Tour_ID = IT.TourID

LEFT JOIN

Image I ON IT.ImageID = I.ImageID

WHERE

T.Tour_ID = @TourID";

using (SqlCommand cmd = new SqlCommand(query, conn))

{

cmd.Parameters.AddWithValue("@TourID", tourID);

try

{

conn.Open();

SqlDataReader reader = cmd.ExecuteReader();

if (reader.Read())

{

TourNameLabel.Text = reader["Name_T"].ToString();

DescriptionLabel.Text = reader["Description_T"].ToString();

DurationLabel.Text = $"{reader["Duration_T"]} дней";

SeasonLabel.Text = reader["SeasonName"].ToString();

HotelNameLabel.Text = reader["HotelName"].ToString();

LocalityLabel.Text = reader["LocalityName"].ToString();

CountryLabel.Text = reader["CountryName"].ToString();

string imagePath = reader["ImagePath"].ToString();

if (!string.IsNullOrEmpty(imagePath))

{

TourImage.ImageUrl = imagePath;

}

else

{

TourImage.AlternateText = "Изображение отсутствует";

}

ViewState["Duration"] = reader["Duration_T"];

}

else

{

Response.Write("Информация о туре не найдена. Проверьте TourID.");

}

}

catch (Exception ex)

{

Response.Write($"Ошибка загрузки данных: {ex.Message}");

}

}

}

}

protected void StartDateTextBox_TextChanged(object sender, EventArgs e)

{

if (DateTime.TryParse(StartDateTextBox.Text, out DateTime startDate) && ViewState["Duration"] != null)

{

int duration = int.Parse(ViewState["Duration"].ToString());

DateTime endDate = startDate.AddDays(duration);

EndDateLabel.Text = endDate.ToString("yyyy-MM-dd");

EndDateLabel.CssClass = "success";

}

else

{

EndDateLabel.Text = "Некорректная дата начала.";

EndDateLabel.CssClass = "error";

}

}

protected void CheckAvailabilityButton_Click(object sender, EventArgs e)

{

string tourID = Request.QueryString["TourID"];

string startDate = StartDateTextBox.Text;

if (!int.TryParse(TicketCountTextBox.Text, out int ticketsRequested) || ticketsRequested <= 0)

{

AvailabilityLabel.Text = "Введите корректное количество путевок.";

AvailabilityLabel.CssClass = "error";

OrderButton.Visible = false;

return;

}

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

using (SqlConnection conn = new SqlConnection(connectionString))

{

string query = @"SELECT TripCount FROM Trip WHERE Tour_ID = @TourID AND StartDate = @StartDate";

using (SqlCommand cmd = new SqlCommand(query, conn))

{

cmd.Parameters.AddWithValue("@TourID", tourID);

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

conn.Open();

object result = cmd.ExecuteScalar();

if (result != null && int.TryParse(result.ToString(), out int availableTickets))

{

if (availableTickets >= ticketsRequested)

{

AvailabilityLabel.Text = "Достаточно мест для бронирования.";

AvailabilityLabel.CssClass = "success";

OrderButton.Visible = true;

}

else

{

AvailabilityLabel.Text = "Недостаточно мест для бронирования.";

AvailabilityLabel.CssClass = "error";

OrderButton.Visible = false;

}

}

else

{

AvailabilityLabel.Text = "Нет данных для выбранной даты.";

AvailabilityLabel.CssClass = "error";

OrderButton.Visible = false;

}

}

}

}

protected void OrderButton_Click(object sender, EventArgs e)

{

string tourID = Request.QueryString["TourID"];

string startDate = StartDateTextBox.Text;

int ticketsCount = int.Parse(TicketCountTextBox.Text);

Response.Redirect($"Order.aspx?TourID={tourID}&StartDate={startDate}&TicketsCount={ticketsCount}");

}

}

}

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