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

Диаграммы взаимодействия

Реализована диаграмма последовательности для прецедента «Авторизация» с точки зрения зарегистрированного пользователя (Рисунок 5).

Рисунок 5- Диаграмма последовательности для прецедента «Авторизация»

Также создана диаграмма кооперации для прецедента «Авторизация» и диаграммы последовательности и кооперации для прецедента «Бронирование тура» (Рисунок 6-8).

Рисунок 6 - Диаграмма кооперации для прецедента «Авторизаци

Рисунок 7 - Диаграмма последовательности для прецедента «Бронирование тура»

Рисунок 8 - Диаграмма кооперации для прецедента «Бронирование тура»

Диаграммы поведения

Реализована диаграмма состояний для объекта Путевка (Рисунок 9).

Рисунок 9- Диаграмма состояний для объекта Путевка

Затем создана диаграмма активности для процесса бронирования путевки (Рисунок 10). В процессе создания диаграммы выделены следующие сущности: Пользователи, Тур, Страна, Тип, Путевка, Заказ.

Рисунок 10 - Диаграмма активности для процесса бронирования путевки

Далее создана диаграмма активности с дорожками для процесса формирования путевки (Рисунок 11). В процессе создания диаграммы активности также использовались сущности Тур и Путевка.

Рисунок 11 - Диаграмма активности с дорожками для процесса формирования путевки

Проектирование бд с использованием case-средств

Выделены основные сущности:

Клиент - пользователь системы, который может заказывать туры, оставлять отзывы и участвовать в поездках.

Тур - комплексное предложение для путешествия.

Маршрут - это путь, который охватывает тур.

Населенный пункт - это город или деревня, включенные в маршрут тура.

Вид тура - это категория, к которой относится тур.

Сезон - это временной период, в течение которого проводится тур.

Отель – это место проживания, предоставляемое клиентам в рамках тура.

Сотрудник - это человек, ответственный за организацию тура

Поездка - это конкретное путешествие, связанное с туром.

Путевка - это документ, подтверждающий бронирование тура для

клиента.

Заказ - это заявка на бронирование тура, оформленная клиентом.

Статус - это текущее состояние заказа.

Отзыв - это комментарий и оценка тура, которую оставляет клиент после путешествия.

В среде Erwin созданы логическая и физическая диаграммы (Рисунок 12-

13)

Рисунок 12- Логическая модель базы данных

Рисунок13- Физическая модель базы данных

Создано соединение SQL, и сгенерирована диаграмма базы данных (Рисунок 14-16).

Рисунок 14- Генерация кода

Рисунок 15- Сгенерированный код

Рисунок 16- ER-диаграмма базы данных

Создание сайта с использованием ms Visual Studio Разметка и наполнение сайта

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

Рисунок 16- Разметка сайта

Создана Главная страница, которая приветствует пользователя (Рисунок 17)

Рисунок 17 – Главная страница

Далее создана Новостная страница, на которой находится список новостей, реализованный с помощью ListView. Источником данных является таблица Новости в базе данных (Рисунок 18)

Рисунок 18 – Страница Новости

Реализация личного кабинета пользователя

Реализована регистрация пользователей. Введенные данные проверяются на корректность, выполняется подключение к базе данных, вычисляется новый идентификатор клиента, данные заносятся в таблицу Client. (Рисунок 19).

Рисунок 19- Форма регистрации пользователей

На рисунке 20 показано добавление пользователя в таблицу Клиент

Рисунок 20 – Добавление пользователя в таблицу Клиент

Листинг 1- Команда кнопки регистрации пользователя

protected void btnRegister_Click(object sender, EventArgs e)

{

// считывание данных из полей формы

string name = txtName.Text.Trim();

string surname = txtSurname.Text.Trim();

string patronymic = txtPatronymic.Text.Trim();

string dobText = txtDOB.Text.Trim();

string phone = txtPhone.Text.Trim();

string login = txtLogin.Text.Trim();

string password = txtPassword.Text.Trim();

if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(surname) || string.IsNullOrEmpty(phone) || string.IsNullOrEmpty(login) || string.IsNullOrEmpty(password))

{

lblMessage.Text = "Все поля должны быть заполнены.";

return;

}

if (!DateTime.TryParse(dobText, out DateTime dob))

{

lblMessage.Text = "Некорректная дата рождения.";

return;

}

string connectionString = "Data Source=localhost;Initial Catalog=travel;Integrated Security=True";

try

{

using (SqlConnection connection = new SqlConnection(connectionString))

{

connection.Open();

string maxIdQuery = "SELECT ISNULL(MAX(Client_ID), 0) + 1 FROM Client";

int newClientID;

using (SqlCommand maxIdCommand = new SqlCommand(maxIdQuery, connection))

{

newClientID = (int)maxIdCommand.ExecuteScalar();

}

string insertQuery = "INSERT INTO Client (Client_ID, Name_C, Surname_C, Patronymic_C, DOB_C, Phone_C, LoginC, PasswordC) " + "VALUES (@ClientID, @Name, @Surname, @Patronymic, @DOB, @Phone, @Login, @Password)";

using (SqlCommand insertCommand = new SqlCommand(insertQuery, connection))

{

insertCommand.Parameters.AddWithValue("@ClientID", newClientID);

insertCommand.Parameters.AddWithValue("@Name", name);

insertCommand.Parameters.AddWithValue("@Surname", surname);

insertCommand.Parameters.AddWithValue("@Patronymic", patronymic);

insertCommand.Parameters.AddWithValue("@DOB", dob);

insertCommand.Parameters.AddWithValue("@Phone", phone);

insertCommand.Parameters.AddWithValue("@Login", login);

insertCommand.Parameters.AddWithValue("@Password", password);

int rowsAffected = insertCommand.ExecuteNonQuery();

if (rowsAffected > 0)

{

lblMessage.ForeColor = System.Drawing.Color.Green;

lblMessage.Text = "Регистрация прошла успешно!";

}

else

{

lblMessage.Text = "Ошибка регистрации. Попробуйте снова.";

}

}

}

}

catch (Exception ex)

{

lblMessage.Text = "Ошибка: " + ex.Message;

}

}

Затем реализована авторизация пользователя (Рисунок 21-22). При нажатии на кнопку Вход, выполняется проверка логина и пароля пользователя в базе данных, если данные корректны, программа сохраняет информацию о пользователе в сессии и перенаправляет на главную страницу, если неверны, отображает сообщение об ошибке (Листинг 2).

Также написана функция для проверки, авторизован ли пользователь, в зависимости от этого, появляются или скрываются элементы интерфейса. Также реализовано приветствие пользователя, если он вошел в систему. После нажатии авторизованного пользователя на кнопку Выход, происходит очищение данных сессии, и элементы интерфейса становятся видимыми для неавторизованного пользователя (Листинг 3)

Рисунок 21 – Главная страница до авторизации

Рисунок 22 - Главная страница после авторизации пользователя

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

protected void btnLogin_Click(object sender, EventArgs e)

{

string login = txtUsername.Text.Trim();

string password = txtPassword.Text.Trim();

if (string.IsNullOrEmpty(login) || string.IsNullOrEmpty(password))

{

lblMessage.Text = "Введите логин и пароль.";

lblMessage.ForeColor = System.Drawing.Color.Red;

return;

}

string connectionString = "Data Source=localhost;Initial Catalog=travel;Integrated Security=True";

string query = @"

SELECT 'Client' AS UserType, Client_ID AS UserId, Name_C AS FirstName

FROM Client WHERE LoginC = @Login AND PasswordC = @Password

UNION ALL

SELECT 'Employee' AS UserType, Employee_ID AS UserId, Name_E AS FirstName

FROM Employee WHERE LoginE = @Login AND PasswordE = @Password";

try

{

using (SqlConnection connection = new SqlConnection(connectionString))

{

connection.Open();

using (SqlCommand command = new SqlCommand(query, connection))

{

command.Parameters.AddWithValue("@Login", login);

command.Parameters.AddWithValue("@Password", password);

SqlDataReader reader = command.ExecuteReader();

if (reader.HasRows)

{

reader.Read();

// Сохранение данных в сессии

Session["UserType"] = reader["UserType"].ToString();

Session["UserId"] = reader["UserId"].ToString();

Session["UserName"] = reader["FirstName"].ToString();

lblMessage.ForeColor = System.Drawing.Color.Green;

lblMessage.Text = "Вход выполнен успешно!";

Response.Redirect("Home.aspx");

}

else

{

lblMessage.Text = "Неверный логин или пароль.";

lblMessage.ForeColor = System.Drawing.Color.Red;

}

}

}

}

catch (Exception ex)

{

lblMessage.Text = "Ошибка: " + ex.Message;

lblMessage.ForeColor = System.Drawing.Color.Red;

}

}

Листинг 3- Функция кнопки выхода

protected void btnLogout_Click(object sender, EventArgs e)

{

Session.Clear();

txtUsername.Visible = true;

txtPassword.Visible = true;

lblLogin.Visible = true;

lblPassword.Visible = true;

btnLogin.Visible = true;

btnRegister.Visible = true;

btnLogout.Visible = false;

lblMessage.Text = "Вы успешно вышли.";

lblMessage.ForeColor = System.Drawing.Color.Green;

Response.Redirect("Home.aspx");

}

При переходе на страницу Редактирование профиля, пользователь может изменить свои данные (Рисунок 23-25).

Рисунок 23- Форма для редактирования данных пользователя

Рисунок 24- Обновление номера телефона пользователя

Рисунок 25- Проверка обновления данных

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

protected void btnSave_Click(object sender, EventArgs e)

{

if (Session["UserId"] == null)

{

lblMessage.Text = "Вы не авторизованы. Пожалуйста, войдите в систему.";

return;

}

int clientId = int.Parse(Session["UserId"].ToString());

string connectionString = "Data Source=localhost;Initial Catalog=travel;Integrated Security=True";

string query = @"

UPDATE Client

SET Name_C = @Name,

Surname_C = @Surname,

Patronymic_C = @Patronymic,

DOB_C = @DOB,

Phone_C = @Phone

WHERE Client_ID = @ClientID";

try

{

using (SqlConnection connection = new SqlConnection(connectionString))

{ SqlCommand command = new SqlCommand(query, connection);

command.Parameters.AddWithValue("@Name", txtName.Text);

command.Parameters.AddWithValue("@Surname", txtSurname.Text);

command.Parameters.AddWithValue("@Patronymic", txtPatronymic.Text);

command.Parameters.AddWithValue("@DOB", Convert.ToDateTime(txtDOB.Text));

command.Parameters.AddWithValue("@Phone", txtPhone.Text);

command.Parameters.AddWithValue("@ClientID", clientId);

connection.Open();

int rowsAffected = command.ExecuteNonQuery();

if (rowsAffected > 0)

{

lblSuccess.Text = "Данные успешно обновлены!";

lblMessage.Text = "";

}

else

{

lblMessage.Text = "Ошибка обновления данных.";

}

}

}

catch (Exception ex)

{

lblMessage.Text = "Ошибка сохранения данных: " + ex.Message;

}

}

}

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