Система продажи билетов в кинотеатре
Министерство Образования Российской Федерации
Таганрогский Государственный Радиотехнический Университет
Кафедра Математического Обеспечения и Применения ЭВМ
Отчет по курсовой работе
на тему:
«Система продажи билетов в кинотеатре»
по курсу:
«Программирование для интернет»
Выполнил:
Проверил:
Хаджинов А. А.
Таганрог 2004
Тема курсовой работы.
Разработать WEB-приложение «Система продажи билетов в кинотеатре».
Требования к разрабатываемой системе:
- Должен быть интерфейс для клиента и администратора
- Интерфейс должен быть максимально простым и функциональным
- Интерфейс клиента предназначен для проведения покупки или заказа билетов
- Интерфейс администратора предназначен для просмотра и редактирования всех данных «Системы продажи билетов в кинотеатре»
- Все данные должны храниться в удаленной базе данных
«Система продажи билетов в кинотеатре».
Описание интерфейса.
Web-приложение «Система продажи билетов в кинотеатре», далее будет называться приложение. Приложение было разработано с помощь PHP и MySQL. По средством MySQL реализовано хранение всех данных системы. База данных, реализованная на MySQL, размещается на удаленном компьютере. Для получения данных из базы данных, система формирует, по средством функций PHP, SQL запросы. Ответы на SQL запросы обрабатываются с помощью функций системы, реализованных на PHP, и выводятся на форму приложения.
В данном приложение, создан интерфейс для клиентов (посетителей) и для администратора системы.
Интерфейс посетителя.
При входе на сайт, посетитель вызывает страницу «index.php».
На этой странице выводится:
- приветствие посетителю
- Список фильмов, отсортированный по датам
- Кнопка для выбора «даты»
Выбирая «дату» посетитель переходит к файлу «seanses.php».
Опишем, как происходит вывод данной формы.
Вначале, с помощью функций «echo», формируются статичные надписи приветствия.
Далее строчками:
@ $db = mysql_pconnect('localhost',
'root', 'root');
if (!$db)
{
echo 'Ошибка: Не удалось установить соединение
с базой данных. Пожалуйста, повторите
попытку позже.';
exit;
}
mysql_select_db('movie');
Мы подключаемся к удаленной базе данных, расположенной на хосте «localhost». Подключаемся к базе данных под пользователем «root» с паролем «root». Далее проверяем, удалось или не удалось соединиться с базой. Если не удалось, то выводим сообщение об ошибке. Иначе все хорошо и выбираем текущую базу «movie».
Далее строчками:
$query = "select month.id_day,
films.name from month, films where month.id_film = films.id_film order
by month.id_day";
$result = mysql_query($query);
$num_results = mysql_num_rows($result);
В переменную «query», формируется SQL запрос, с помощью которого будут получены записи, содержащие следующие поля:
- Дата
- Имя фильма
Из таблицы «month». Полученные записи должны содержать поля «Id_day» = выбранному дню. И отсортированы по дате в порядке возрастания. Этот запрос отправляется MYSQL серверу базы данных. Далее мы анализируем ответ от сервера.
Далее строчками:
for ($i=0; $i <$num_results;
$i++)
{
$row = mysql_fetch_row($result);
echo "<tr><td>";
$a=htmlspecialchars(
echo $a;
echo "</td>";
echo "<td>";
echo htmlspecialchars(stripslashes(
echo "</td>";
echo "</tr>";
}
Пример страницы «index.php».
Если на данный SQL запрос были найдены записи, то переменная «num_result» будет больше нуля. И с помощью функции «mysql_fetch_row», извлекаются записи из возвратившегося ответа. Далее формируется таблица, содержимое которой визуализует данные в базе данных.
Далее для определения списка дат и формирования наиболее удобного пользовательского интерфейса.
Строчками:
$query_day = "select DISTINCT
id_day from month order by id_day";
$result_day = mysql_query($query_day);
$num_results_day = mysql_num_rows($result_day);
В переменной «query_day» формируется SQL запрос к таблице «month». Результатом данного запроса будет список дат в базе данных. Далее запрос отсылается на MySQL сервер, а получаемый ответ обрабатывается строчками формирования структуры тега «select» следующими строчками:
echo '<table border=0 cellspacing=10
cellpadding=10 align="center"><tr><td>
<select name="film_data">';
for ($i=0; $i <$num_results_day; $i++)
{
$row_day = mysql_fetch_row($result_day);
$b=htmlspecialchars(
echo '<option value ='.$b.">$b";
}
echo '</select></td><td>';
Если списка фильмов нет, то пользователю будет выведено сообщение: «Список фильмов пуст»
Пример страницы «seanses.php».
На этой странице выводится:
- Выбранная дата и список фильмов в этот день
- Список фильмов, отсортированный по номерам сеансов, время начала и конца сеансов
- Кнопка для выбора «номера сеанса»
Выбирая «номер сеанса» посетитель переходит к файлу «place.php».
Опишем, как происходит вывод данной формы.
Вначале, с помощью функций «echo», формируются статичные надписи приветствия.
Далее строчками:
@ $db = mysql_pconnect('localhost',
'root', 'root');
if (!$db)
{
echo 'Ошибка: Не удалось установить соединение
с базой данных. Пожалуйста, повторите
попытку позже.';
exit;
}
mysql_select_db('movie');
Мы подключаемся к удаленной базе данных, расположенной на хосте «localhost». Подключаемся к базе данных под пользователем «root» с паролем «root». Далее проверяем, удалось или не удалось соединиться с базой. Если не удалось, то выводим сообщение об ошибке. Иначе все хорошо и выбираем текущую базу «movie».
Далее строчками:
mysql_select_db('movie');
$query = "select films.name, month.id_seanse_num, seanse.time_start,
seanse.time_end from month, films, seanse where month.id_day =$film_data_int
and month.id_film=films.id_film and month.id_seanse_num=seanse.id_
$result = mysql_query($query);
$num_results = mysql_num_rows($result);
В переменную «query», формируется SQL запрос, с помощью которого будут получены записи, содержащие следующие поля:
- Название фильма
- № сеанса
- Время начала сеанса
- Время конца сеанса
Из таблиц «month», «films», «seanse». Полученные записи должны содержать поля month.id_day равное выбранному дню, month.id_film равное выбранному фильму, month.id_seanse_num равное выбранному сеансу. И отсортированы по дате в порядке возрастания. Этот запрос отправляется MYSQL серверу базы данных. Далее мы анализируем ответ от сервера.
Далее строчками:
for ($i=0; $i <$num_results;
$i++)
{
$row = mysql_fetch_row($result);
echo "<tr><td>";
echo htmlspecialchars(stripslashes(
echo "</td>";
echo "<td>";
echo htmlspecialchars(stripslashes(
echo "</td>";
echo "<td>";
echo htmlspecialchars(stripslashes(
echo "</td>";
echo "<td>";
echo htmlspecialchars(stripslashes(
echo "</td>";
echo "</tr>";
}
echo "</table>";
Если на данный SQL запрос были найдены записи, то переменная «num_results» будет больше нуля. И с помощью функции «mysql_fetch_row», извлекаются записи из возвратившегося ответа. Далее формируется таблица, содержимое которой визуализует 4 поля записей, полученных данных из базы данных.
Далее для определения списка сеансов и формирования наиболее удобного пользовательского интерфейса.
Строчками:
$query_seanse_num
= "select DISTINCT id_seanse_num from month where id_day=$film_data_int";
$result_seanse_num = mysql_query($query_seanse_num)
$num_results_seanse_num = mysql_num_rows($result_seanse_
В переменной «query_seanse_num» формируется SQL запрос к таблице «month». Результатом данного запроса будет список сеансов для выбранного дня в базе данных. Ответом на данный SQL запрос будут записи, у которых поле id_day равно выбранному дню. Далее запрос отсылается на MySQL сервер, а получаемый ответ обрабатывается строчками формирования структуры тега «select» следующими строчками:
echo '<form action="place.php"
method="post">
<INPUT TYPE=HIDDEN name="film_data" ';
echo "value=$film_data>";
echo 'Выберите сеанс:<br />
<table border=0 cellspacing=10 cellpadding=10><tr><td>
<select name="seanse_num">';
for ($i=0; $i <$num_results_seanse_num; $i++)
{
$row_seanse_num = mysql_fetch_row($result_
$b=htmlspecialchars(
echo '<option value ='.$b.">$b";
}
echo '</select></td><td>';
echo '<input type="submit" value="OK"></td></tr></table>
</form>';
Этими строчками мы создаем элемент «select», поля выбора которого, содержат номера сеансов, доступных в выбранный день.
Если список сеансов нет, то пользователю будет выведено сообщение: «Список сеансов пуст»
Пример страницы «place.php».
На этой странице выводится:
- Список мест, выбранный день и сеанс
- Информация о номерах мест, ценах мест, и свободны или заняты места
- Кнопка для выбора «номера места»
- Поле для ввода ФИО посетителя
- Кнопка «Заказать»
Вводя желаемые данные и нажимая на кнопку «Заказать», посетитель переходит к файлу «order.php».
Опишем, как происходит вывод данной формы.
Вначале, с помощью функций «echo», формируются статичные надписи приветствия.
Далее строчками:
@ $db = mysql_pconnect('localhost',
'root', 'root');
if (!$db)
{
echo 'Ошибка: Не удалось установить соединение
с базой данных. Пожалуйста, повторите
попытку позже.';
exit;
}
mysql_select_db('movie');
Мы подключаемся к удаленной базе данных, расположенной на хосте «localhost». Подключаемся к базе данных под пользователем «root» с паролем «root». Далее проверяем, удалось или не удалось соединиться с базой. Если не удалось, то выводим сообщение об ошибке. Иначе все хорошо и выбираем текущую базу «movie».
Далее строчками:
$query = "select id_place,
price, ordered from places where id_day =$film_data_int and id_seanse_num=$seanse_num
order by id_place";
$result = mysql_query($query);
$num_results = mysql_num_rows($result);
В переменную «query», формируется SQL запрос, с помощью которого будут получены записи, содержащие следующие поля:
- Номер места
- Цена места
- Свободно место или он уже заказано.
Из таблицы «places». Полученные записи должны содержать поля Id_day равные выбранному дню, id_seans_num равные выбранному сеансу. И отсортированы по номеру мест в порядке возрастания. Этот запрос отправляется MYSQL серверу базы данных. Далее мы анализируем ответ от сервера.
Далее строчками:
for ($i=0; $i <$num_results;
$i++)
{
$row = mysql_fetch_row($result);
if (($i%10==0))
{
if ($a==0)
{ echo "<tr>";
$b=($i / 10)+1;
echo "<td >$b-ый ряд</td>";
$a=1; }
else
{ echo "</tr><br/><tr>";
$b=($i / 10)+1;
echo "<td >$b-ый ряд</td>";
}
}
if (! htmlspecialchars(stripslashes(
{
echo '<td bgcolor="#00ff00" align="center">';
echo '№ '.htmlspecialchars(
echo htmlspecialchars(stripslashes(
}
else
{
echo '<td bgcolor="#FFFFFF" align="center">';
echo '№ '.htmlspecialchars(
}
echo "</td>";
}
echo "</tr></table>";
Если на данный SQL запрос были найдены записи, то переменная «num_results» будет больше нуля. И с помощью функции «mysql_fetch_row», извлекаются записи из возвратившегося ответа. Далее формируется таблица, содержимое которой визуализует данные в базе данных. Зал состоит из 10 мест в одном ряду. Для отображения реального размещения мест в кинотеатре, необходимо чтобы таблица мест была двумерной и отражала номера рядов и положение мест в рядах. Каждое место имеет свою цену. В порядке обхода всех записей полученных от сервера. Проверяется деление на цело на 10 порядковый номер места, для определения, не начался ли новый ряд. В первой ячейке ряда выводится номер ряда. В остальных ячейках выводится информация о номере места и его цене. Если место свободно, то соответствующая ячейка в рисуемой таблице, будет окрашена в зеленый цвет и будет выведена информация в этой ячейке, о номере места и его цене. Если место занято, то соответствующая ячейка будет окрашена в белый цвет, и будет написан лишь номер места.
Далее для определения списка свободных мест и формирования наиболее удобного пользовательского интерфейса.
Строчками:
$query_place = "select
DISTINCT id_place from places where id_day =$film_data_int and id_seanse_num=$seanse_num
and ordered=0 order by id_place";
$result_place = mysql_query($query_place);
$num_results_place = mysql_num_rows($result_place);
В переменной
«query_place» формируется SQL запрос к таблице
«places». Результатом данного запроса будет
список свободных мест. Т.е. это записи
таблицы «places». У которых «id_day» равен выбранному
дню, id_seanse_num равен выбранному номеру сеанса
в выбранный день и поле «ordered» равное
«0». Далее запрос отсылается на MySQL сервер,
а получаемый ответ обрабатывается строчками
формирования структуры тега «select» следующими
строчками:
if ($num_results_place>0)
{
echo '<form action="order.php" method="post">';
echo '<INPUT TYPE=HIDDEN name="film_data"'."value=$
echo '<INPUT TYPE=HIDDEN name="seanse_num"'."value=$
echo 'Выберите номер места:<br />
<select name="id_place">';
for ($i=0; $i <$num_results_place; $i++)
{
$row_place = mysql_fetch_row($result_place)
$b=htmlspecialchars(
echo '<option value ='.$b.">$b";
}
echo '</select><br />
Ваше ФИО:<br />
<input name="client_name" type="text">
<br />
<input type="submit" value="Заказать">
</form>';
echo '<a href="index.php"><p align="center"
>Перейти на главную страницу</p></a>';
}
Если переменная «num_results_places» больше нуля, что соответствует свободным места в выбранный день и выбранный сеанс. То по этим полученным данным формируется тег «select», значения которого будет номера свободных мест. Тег «select» используется для облегчения интерфейса посетителя и предотвращения ошибок ввода со стороны посетителя.
Если все места заняты, то пользователю будет выведено сообщение:
«Все места заняты. Дождитесь следующего сеанса»
| Вы
заказали:
Дата: 2004-12-21 Фильм: Romeo + Juilet № сеанса: 2 Время: 12:00:00 - 13:40:00 № места: 1 Приятного просмотра. Перейти на главную страницу |
Пример страницы «order.php».
На этой странице выводится информация о произведенном заказе:
- Дата фильма
- Название фильма
- № сеанса
- Время начала и конца сеанса
- № места
Вводя желаемые данные и нажимая на кнопку «Заказать», посетитель переходит к файлу «order.php».
Опишем, как происходит вывод данной формы.
Вначале, с помощью функций «echo», формируются статичные надписи приветствия.
Далее строчками:
@ $db = mysql_pconnect('localhost',
'root', 'root');
if (!$db)
{
echo 'Ошибка: Не удалось установить соединение
с базой данных. Пожалуйста, повторите
попытку позже.';
exit;
}
mysql_select_db('movie');
Мы подключаемся к удаленной базе данных, расположенной на хосте «localhost». Подключаемся к базе данных под пользователем «root» с паролем «root». Далее проверяем, удалось или не удалось соединиться с базой. Если не удалось, то выводим сообщение об ошибке. Иначе все хорошо и выбираем текущую базу «movie».
Далее строчками:
$query = "select id_place
from places where id_day =$film_data_int and id_seanse_num=$seanse_num
and id_place=$id_place and ordered=0 order by id_place";
$result = mysql_query($query);
$num_results = mysql_num_rows($result);
В переменную «query», формируется SQL запрос, с помощью которого будут получена запись поля, у которой значение полей id_day равно выбранному дню, id_seanse_num равно выбранному сеансу в выбранный день, id_place равно выбранному месту и поле «ordered» равно «0». Если от сервера вернется запись базы данных, то это означает, что в выбранный день и сеанс, данное выбранное место свободно и его можно занять посетителем.
Далее строчками:
$query_time = "select
seanse.time_start, seanse.time_end from seanse where seanse.id_seanse_num=$seanse_
$result_time = mysql_query($query_time);
$num_results_time = mysql_num_rows($result_time);
if ($num_results_time>0)
{
$row=mysql_fetch_row($result_
$time_start=htmlspecialchars(
$time_end=htmlspecialchars(
}
Формируем
в переменную «query_time» SQL запрос, ответом
на который будут поля времени начала
и конца выбранного сеанса из таблицы
«seanse». Если такая запись найдена, то в
переменные «time_start», «time_end» будет записано
время начала и конца сеанса.
Далее строчками:
$query_name = "select
DISTINCT films.name from month, films, seanse where month.id_day =$film_data_int
and month.id_film=films.id_film and month.id_seanse_num=$seanse_
$result_name = mysql_query($query_name);
$num_results_name = mysql_num_rows($result_name);
if ($num_results_name>0)
{
$row=mysql_fetch_row($result_
$film_name=htmlspecialchars(
}
Формируем в переменную «query_name» SQL запрос, ответом на который будут имя выбранного фильма из таблицы «films».
Далее строчками:
$query = "insert into
orders values
('NULL', '".$client_name."', '".$film_data_int."',
'".$seanse_num."', '".$id_place."', '".$client_date."',
'".$client_time."')";
$result = mysql_query($query);
Формируется SQL запрос на добавление записи в таблицу «orders», добавляемая запись будет содержать ФИО посетителя, день фильма, номер сеанса, номер места, дата и время заказа.
Далее строчками:
$query_update = "update
places set ordered=1 where id_day=$film_data_int and id_seanse_num=$seanse_num
and id_place=$id_place";
$result2 = mysql_query($query_update);
Формируется SQL запрос, результатом которого будет обновление записи в таблице «places». Запись, у которой поля «id_day» равны выбранной дате, id_seanse_num равна номеру выбранного сеанса, «id_place» равное выбранному месту. У данной выбранной записи будет изменено поле «ordered» на значение «1».
Далее строчками:
if ($result &&
$result2)
{
echo '<p class="style2">Вы заказали:</p>';
echo '<p class="style1">Дата: '.$film_data.'</p>';
echo '<p class="style1">Фильм: '.$film_name.'</p>';
echo '<p class="style1">№ сеанса: '.$seanse_num.'</p>';
echo '<p class="style1">Время: '.$time_start.'
- '.$time_end.'</p>';
echo '<p class="style1">№ места: '.$id_place.'</p>';
echo '<p class="style2" align="center">Приятного
просмотра.</p></br>';
echo '<a href="index.php"><p align="center"
>Перейти на главную страницу</p></a>';
}
Проверяем, если все SQL запросы вернули положительный результат, что означает, что все нужные записи добавлен и обновлены, пользователю выводятся данные о заказе.
Если возникла ошибка при заказе места, то пользователю будет выведено сообщение:
«Ошибка: попробуйте ещё раз»
Интерфейс администратора.
При входе на сайт, администратор вызывает страницу «admin.html».
На этой странице выводится:
- приветствие администратору
- Поле ввода логина и пароля
Вводя логин и пароль, администратор переходит к файлу «admin.php».
Вот пример содержания этой страницы:
Пример страницы «admin.php».
На этой странице выводится:
- Список выбора таблицы для просмотра и редактирования.
Выбирая таблицу, администратор переходит к файлу «tables.php».
Вот пример содержания этой страницы:
Пример страницы «tables.php».
На данном примере показано содержание таблицы «month».
Опишем, как происходит вывод данной формы.
Вначале, с помощью функций «echo», формируются статичные надписи приветствия.
Далее строчками:
@
$db = mysql_pconnect('localhost', 'root', 'root');
if (!$db)
{
echo 'Ошибка: Не удалось установить соединение
с базой данных. Пожалуйста, повторите
попытку позже.';
exit;
}
mysql_select_db('movie');
Мы подключаемся к удаленной базе данных, расположенной на хосте «localhost». Подключаемся к базе данных под пользователем «root» с паролем «root». Далее проверяем, удалось или не удалось соединиться с базой. Если не удалось, то выводим сообщение об ошибке. Иначе все хорошо и выбираем текущую базу «movie».
Далее строчками:
$query_day = "select
DISTINCT id_day from month order by id_day";
$result_day = mysql_query($query_day);
$num_results_day = mysql_num_rows($result_day);
В переменную «query», формируется SQL запрос, с помощью которого будут получены записи все даты из таблицы «month» для формирования тега выбора даты «select».
Если даты найдены, то значение переменной num_results_day больше нуля. Если это так, то формируем тег «select» для выбора даты следующими строчками:
echo '<form action="tables.php"
method="post">
<INPUT TYPE=HIDDEN name="login" value='.$login.'>
<INPUT TYPE=HIDDEN name="pwd" value='.$pwd.'>
<input type=HIDDEN name="table"'." value=$table>";
echo 'Выберите дату:';
echo '<table border=1 cellspacing=1 cellpadding=10><tr><td>
<select name="id_day">';
for ($i=0; $i <$num_results_day; $i++)
{
$row_day = mysql_fetch_row($result_day);
$b=htmlspecialchars(
echo '<option value ='.$b.">$b";
}
echo '<option value ="">Все';
echo '</select></td><td>';
echo '<input type="submit" value="OK"></td></tr></table>
</form>';
Здесь извлекаются значения, из возвратившегося запросы, и формируются соответствующий «html» код.