
- •Введение
- •Анализ предметной области
- •Диаграммы прецедентов
- •Диаграммы взаимодействия
- •Диаграммы поведения
- •Проектирование бд с использованием case-средств
- •Создание сайта с использованием ms Visual Studio Разметка и наполнение сайта
- •Реализация личного кабинета пользователя
- •Фильтрация данных
- •Администрирование базы данных
- •Заключение
- •Список использованной литературы
- •Приложение а
- •Приложение б
- •Приложение в
- •Приложение г
- •Приложение д
- •Приложение е
- •Приложение ж
- •Приложение з
- •Приложение и
Приложение ж
Листинг – Файл Order.aspx.cs
using System;
using System.Data.SqlClient;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication3
{
public partial class WebForm4 : Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
try
{
string tourID = Request.QueryString["TourID"];
string startDateText = Request.QueryString["StartDate"];
string ticketsCountText = Request.QueryString["TicketsCount"];
if (string.IsNullOrEmpty(tourID) || string.IsNullOrEmpty(startDateText) || string.IsNullOrEmpty(ticketsCountText))
{
throw new Exception("Некорректные данные.");
}
if (!int.TryParse(ticketsCountText, out int ticketsCount) || ticketsCount <= 0)
{
throw new Exception("Неверное количество билетов.");
}
ViewState["TicketsCount"] = ticketsCount;
ViewState["TourID"] = tourID;
ViewState["StartDate"] = startDateText;
LoadTourDetails(tourID);
StartDateLabel.Text = startDateText;
GeneratePassengerFields(ticketsCount);
CalculateTotalPrice(tourID, ticketsCount);
}
catch (Exception ex)
{
ErrorMessage.Text = $"Ошибка: {ex.Message}";
}
}
else
{
if (ViewState["TicketsCount"] != null)
{
int ticketsCount = (int)ViewState["TicketsCount"];
GeneratePassengerFields(ticketsCount);
}
}
}
private void LoadTourDetails(string tourID)
{
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["travelConnectionString4"].ConnectionString;
try
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
string query = @"
SELECT t.Name_T, t.Description_T, tr.StartDate, tr.EndDate
FROM Tour t
INNER JOIN Trip tr ON t.Tour_ID = tr.Tour_ID
WHERE t.Tour_ID = @TourID";
using (SqlCommand cmd = new SqlCommand(query, conn))
{
cmd.Parameters.AddWithValue("@TourID", tourID);
conn.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
{
TourNameLabel.Text = reader["Name_T"].ToString();
DescriptionLabel.Text = reader["Description_T"].ToString();
StartDateLabel.Text = Convert.ToDateTime(reader["StartDate"]).ToString("dd.MM.yyyy");
EndDateLabel.Text = reader["EndDate"] != DBNull.Value
? Convert.ToDateTime(reader["EndDate"]).ToString("dd.MM.yyyy")
: "Дата не указана";
}
else
{
throw new Exception("Тур не найден.");
}
}
}
}
}
catch (Exception ex)
{
ErrorMessage.Text = $"Ошибка загрузки данных тура: {ex.Message}";
}
}
private void GeneratePassengerFields(int ticketsCount)
{
for (int i = 1; i <= ticketsCount; i++)
{
Label label = new Label { Text = $"Пассажир {i}:", CssClass = "passenger-label" };
TextBox nameBox = new TextBox { ID = $"PassengerName_{i}", CssClass = "passenger-input", Attributes = { ["placeholder"] = "ФИО" } };
TextBox dobBox = new TextBox { ID = $"PassengerDOB_{i}", CssClass = "passenger-input", TextMode = TextBoxMode.Date };
Label dobLabel = new Label { Text = "Дата рождения:", CssClass = "dob-label" };
PassengersPanel.Controls.Add(label);
PassengersPanel.Controls.Add(new Literal { Text = "<br/>" });
PassengersPanel.Controls.Add(nameBox);
PassengersPanel.Controls.Add(new Literal { Text = "<br/>" });
PassengersPanel.Controls.Add(dobLabel);
PassengersPanel.Controls.Add(new Literal { Text = "<br/>" });
PassengersPanel.Controls.Add(dobBox);
PassengersPanel.Controls.Add(new Literal { Text = "<hr/>" });
}
}
private void CalculateTotalPrice(string tourID, int ticketsCount)
{
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["travelConnectionString4"].ConnectionString;
try
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
string query = @"SELECT Price 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", DateTime.Parse(StartDateLabel.Text));
conn.Open();
object result = cmd.ExecuteScalar();
if (result != null)
{
decimal pricePerTicket = Convert.ToDecimal(result);
decimal totalPrice = pricePerTicket * ticketsCount;
TotalPriceLabel.Text = $"Общая стоимость: {totalPrice:C}";
}
else
{
ErrorMessage.Text = "Ошибка: Цена не найдена.";
}
}
}
}
catch (Exception ex)
{
ErrorMessage.Text = $"Ошибка расчета стоимости: {ex.Message}";
}
}
protected void ConfirmOrderButton_Click(object sender, EventArgs e)
{
try
{
string tourID = Request.QueryString["TourID"];
string startDateText = StartDateLabel.Text;
int ticketsCount = int.Parse(Request.QueryString["TicketsCount"]);
if (string.IsNullOrEmpty(tourID) || string.IsNullOrEmpty(startDateText) || ticketsCount <= 0)
{
ErrorMessage.Text = "Проверьте введенные данные.";
return;
}
if (Session["UserId"] == null)
{
ErrorMessage.Text = "Пользователь не авторизован.";
return;
}
ProcessOrder(tourID, startDateText, ticketsCount);
SuccessMessage.Text = "Ваш заказ успешно оформлен!";
}
catch (Exception ex)
{
ErrorMessage.Text = $"Ошибка оформления заказа: {ex.Message}";
}
}
private void ProcessOrder(string tourID, string startDateText, int ticketsCount)
{
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["travelConnectionString4"].ConnectionString;
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
SqlTransaction transaction = conn.BeginTransaction();
try
{
int tripID = GetTripID(conn, transaction, tourID, startDateText);
int orderID = InsertOrder(conn, transaction, tripID, ticketsCount);
AddPassengers(conn, transaction, orderID, ticketsCount);
UpdateTripCount(conn, transaction, tripID, ticketsCount);
transaction.Commit();
}
catch
{
transaction.Rollback();
throw;
}
}
}
private int GetTripID(SqlConnection conn, SqlTransaction transaction, string tourID, string startDateText)
{
string query = @"
SELECT Trip_ID
FROM Trip
WHERE Tour_ID = @TourID AND StartDate = @StartDate";
using (SqlCommand cmd = new SqlCommand(query, conn, transaction))
{
cmd.Parameters.AddWithValue("@TourID", tourID);
cmd.Parameters.AddWithValue("@StartDate", DateTime.Parse(startDateText));
object result = cmd.ExecuteScalar();
if (result == null)
{
throw new Exception("Поездка не найдена.");
}
return Convert.ToInt32(result);
}
}
private int InsertOrder(SqlConnection conn, SqlTransaction transaction, int tripID, int ticketsCount)
{
string query = @"
INSERT INTO Order_data (OrderDate, Client_ID, PeopleCount, Trip_ID)
OUTPUT INSERTED.Order_ID
VALUES (GETDATE(), @ClientID, @PeopleCount, @TripID)";
using (SqlCommand cmd = new SqlCommand(query, conn, transaction))
{
cmd.Parameters.AddWithValue("@ClientID", Session["UserId"]);
cmd.Parameters.AddWithValue("@PeopleCount", ticketsCount);
cmd.Parameters.AddWithValue("@TripID", tripID);
return (int)cmd.ExecuteScalar();
}
}
private void AddPassengers(SqlConnection conn, SqlTransaction transaction, int orderID, int ticketsCount)
{
string query = @"
INSERT INTO Permit (Order_ID, LastName, FirstName, MiddleName, DOB)
VALUES (@OrderID, @LastName, @FirstName, @MiddleName, @DOB)";
for (int i = 1; i <= ticketsCount; i++)
{
string passengerName = ((TextBox)PassengersPanel.FindControl($"PassengerName_{i}"))?.Text;
string passengerDOB = ((TextBox)PassengersPanel.FindControl($"PassengerDOB_{i}"))?.Text;
string[] nameParts = passengerName?.Split(' ');
if (nameParts == null || nameParts.Length < 2)
{
throw new Exception($"Ошибка в данных пассажира {i}. Укажите ФИО в формате: 'Фамилия Имя Отчество'.");
}
string lastName = nameParts[0];
string firstName = nameParts[1];
string middleName = nameParts.Length > 2 ? nameParts[2] : "";
if (string.IsNullOrEmpty(passengerDOB) || !DateTime.TryParse(passengerDOB, out DateTime dob))
{
throw new Exception($"Ошибка в данных пассажира {i}. Укажите корректную дату рождения.");
}
using (SqlCommand cmd = new SqlCommand(query, conn, transaction))
{
cmd.Parameters.AddWithValue("@OrderID", orderID);
cmd.Parameters.AddWithValue("@LastName", lastName);
cmd.Parameters.AddWithValue("@FirstName", firstName);
cmd.Parameters.AddWithValue("@MiddleName", middleName);
cmd.Parameters.AddWithValue("@DOB", dob);
cmd.ExecuteNonQuery();
}
}
}
private void UpdateTripCount(SqlConnection conn, SqlTransaction transaction, int tripID, int ticketsCount)
{
string query = @"
UPDATE Trip
SET TripCount = TripCount - @TicketsCount
WHERE Trip_ID = @TripID";
using (SqlCommand cmd = new SqlCommand(query, conn, transaction))
{
cmd.Parameters.AddWithValue("@TicketsCount", ticketsCount);
cmd.Parameters.AddWithValue("@TripID", tripID);
cmd.ExecuteNonQuery();
}
}
}
}