
ПИс5
.docxГУАП
КАФЕДРА № 14
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
Старший преподаватель |
|
|
|
Н. В. Барклаевская |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №5 |
СОЗДАНИЕ САЙТА С ИСПОЛЬЗОВАНИЕМ ТЕХНОЛОГИИ ASP.NET. ЧАСТЬ 1. РАЗМЕТКА САЙТА. ФИЛЬТРАЦИЯ ДАННЫХ |
по курсу: ПРОЕКТИРОВАНИЕ ИНФОРМАЦИОННЫХ СИСТЕМ |
|
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ гр. № |
4116 |
|
|
|
|
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2024
Цель работы: создание сайта с использованием технологии ASP.NET, создание структуры сайта, а также главной, новостной, поисковой страниц. Реализация фильтрации данных.
Описание предметной области:
Туристическое агентство представляет собой организацию, которая занимается продажей туристических путёвок. Основными задачами агентства являются поиск и разработка туров, консультирование клиентов, оформление бронирований, обеспечение процесса оплаты и предоставление актуальной информации о турах и предложениях.
Разработана структура сайт, создано навигационное меню для перехода между страницами (Рисунок 1).
Рисунок 1- Разметка сайта
Создана Главная страница, которая приветствует пользователя (Рисунок 2)
Рисунок 2 – Главная страница
Далее создана Новостная страница, на которой находится список новостей, реализованный с помощью ListView. Источником данных является таблица Новости в базе данных (Рисунок 3)
Рисунок 3 – Страница Новости
Разработана страница поиска туров с фильтрацией по типу тура, стране, по типу и стране (Рисунок 4-6).
Рисунок 4- Разметка страницы Поиск туров
Рисунок 5- Настройка источника данных для GridView
Листинг 1- Функции для обработки нажатий на кнопки
protected void Button1_Click(object sender, EventArgs e)
{
string type = DropDownList1.SelectedValue;
SqlDataSource1.SelectCommand = GetSqlCommand(type, null);
GridView1.DataBind();
}
protected void Button2_Click(object sender, EventArgs e)
{
string country = DropDownList2.SelectedValue;
SqlDataSource1.SelectCommand = GetSqlCommand(null, country);
GridView1.DataBind();
}
protected void Button3_Click(object sender, EventArgs e)
{
string type = DropDownList1.SelectedValue;
string country = DropDownList2.SelectedValue;
SqlDataSource1.SelectCommand = GetSqlCommand(type, country);
GridView1.DataBind();
}
Листинг 2- Генерация SQL-запрос для фильтрации туров на основе типа и страны
private string GetSqlCommand(string type, string country)
{
string sql = @"SELECT
Tour.Tour_ID AS 'TourID',
Tour.Name_T AS 'Tour Name',
Tour.Description_T AS 'Description',
Tour.Duration_T AS 'Duration',
Type_T.Name_T AS 'Tour Type',
Season.Name_Season AS 'Season',
Hotel.Name_H AS 'Hotel Name',
Locality.Name_L AS 'Route Locality',
Locality.Country AS 'Country',
Image.FilePath AS 'Image Path'
FROM
Tour
JOIN
Type_T ON Tour.TypeT_ID = Type_T.TypeT_ID
JOIN
TourSeason ON Tour.Tour_ID = TourSeason.Tour_ID
JOIN
Season ON TourSeason.Season_ID = Season.Season_ID
JOIN
TourHotel ON Tour.Tour_ID = TourHotel.Tour_ID
JOIN
Hotel ON TourHotel.Hotel_ID = Hotel.Hotel_ID
JOIN
Route ON Tour.Tour_ID = Route.Tour_ID
JOIN
Locality ON Route.Locality_ID = Locality.Locality_ID
LEFT JOIN
ImageTour ON Tour.Tour_ID = ImageTour.TourID
LEFT JOIN
Image ON ImageTour.ImageID = Image.ImageID";
SqlDataSource1.SelectParameters.Clear();
if (!string.IsNullOrEmpty(type) && !string.IsNullOrEmpty(country))
{
sql += " WHERE Type_T.Name_T = @Type AND Locality.Country = @Country";
SqlDataSource1.SelectParameters.Add(new Parameter("Type", DbType.String, type));
SqlDataSource1.SelectParameters.Add(new Parameter("Country", DbType.String, country));
}
else if (!string.IsNullOrEmpty(type))
{
sql += " WHERE Type_T.Name_T = @Type";
SqlDataSource1.SelectParameters.Add(new Parameter("Type", DbType.String, type));
}
else if (!string.IsNullOrEmpty(country))
{
sql += " WHERE Locality.Country = @Country";
SqlDataSource1.SelectParameters.Add(new Parameter("Country", DbType.String, country));
}
return sql;
}
Рисунок 6- Страница Поиск туров
На рисунках 7-8 показана работа фильтрации.
Рисунок 7- Применение фильтрации по типу тура
Рисунок 8- Применение фильтрации по типу и стране
При нажатии на Выбор пользователь может открыть страницу тура для просмотра более подробной информации (Рисунок 9-10). Написана функция GridView1_SelectedIndexChanged, которая получает идентификатор выбранного тура и перенаправляет пользователя на страницу с подробной информацией, передавая идентификатор в качестве параметра в URL.
Листинг 3- Функция обработки нажатия кнопки для просмотра подробной информации о туре
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
int selectedTourID = Convert.ToInt32(GridView1.SelectedDataKey.Value);
Response.Redirect($"TourDetails.aspx?TourID={selectedTourID}");
Листинг 4- Функция отображения подробной информации о туре
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string tourID = Request.QueryString["TourID"];
if (!string.IsNullOrEmpty(tourID))
{
DataTable tourDetails = GetTourDetails(tourID);
if (tourDetails.Rows.Count > 0)
{
DataRow row = tourDetails.Rows[0];
TourNameLabel.Text = row["TourName"].ToString();
DescriptionLabel.Text = row["Description"].ToString();
DurationLabel.Text = row["Duration"].ToString();
SeasonLabel.Text = row["Season"].ToString();
HotelNameLabel.Text = row["HotelName"].ToString();
LocalityLabel.Text = row["Locality"].ToString();
CountryLabel.Text = row["Country"].ToString();
string imagePath = row["ImagePath"].ToString();
}
}
}
Рисунок 9- Подробная информация о туре
Рисунок 10- Просмотр подробной информации о туре
Вывод: ходе выполнения лабораторной работы была разработана структура сайта туристического агентства. Реализованы главная страница, новостная страница и страница поиска туров. Для получения данных из БД устанавливалось соединение с Microsoft SQL Server и настраивались источники данных.