Создание сайта Библиотека онлайн

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное образовательное учреждение

высшего профессионального образования

"Чувашский государственный университет им. И.Н. Ульянова"

Факультет информатики и вычислительной техники

Кафедра "Информационно-вычислительных систем"

Дисциплина "Базы данных"







Пояснительная записка к курсовой работе

Тема: "Библиотека"



Выполнил:

студент гр. ИВТ 12-05

Никитин А.Е.

Проверил:

Буланкина Е.Ю.






Чебоксары 2008


Содержание


1. Задание

2. Анализ. Предметная область

2.1 Перечень и описание функций приложения обработки базы данных

2.2 Перечень и описание сущностей и атрибутов базы данных

3. Проектирование. Нормализация базы данных. Схема данных

3.1 Описание нормализации базы данных (методом ER-диаграмм)

3.2 Схема данных

3.3 Перечень и описание таблиц и их полей (с указанием типов данных и ограничений) в сводной таблице

4. Программная часть. Руководство программиста

4.1 Обращение к программе

4.2 Входные и выходные данные

4.2.1 Словесное описание

4.2.2 Описание функций

5. Сопровождение. Руководство пользователя

5.1 Просмотр сайта

5.2 Описание

6. Список использованной литературы

7. Приложение


1. Задание

Библиотека

Разработать систему, помогающую обслуживать библиотеку. Система должна предусматривать режимы ведения системного каталога, отражающего перечень областей знаний, по которым имеются книги в библиотеке. Внутри библиотеки области знаний в систематическом каталоге могут иметь уникальный внутренний номер и полное наименование. Каждая книга может содержать сведения из нескольких областей знаний. Каждая книга в библиотеке может присутствовать в нескольких экземплярах.

В библиотеке ведется картотека читателей.

На каждого читателя в картотеку заносятся следующие сведения:

Фамилия, Имя , Отчество

домашний адрес

телефон (Будем считать, что у нас два телефона - рабочий и домашний)

дата рождения

Каждому читателю присваивается уникальный номер читательского билета.

Каждый читатель может одновременно держать на руках не более 5 книг. Читатель не должен одновременно держать более одного экземпляра книги одного названия.

Каждая книга, хранящаяся в библиотеке, характеризуется следующими параметрами:

уникальный шифр

название

фамилия автора (может отсутствовать)

фамилии соавторов (могут отсутствовать)

место издания (город)

издательство

год издания

количество страниц.

количество экземпляров книги в библиотеке

Каждая книга в библиотеке может присутствовать в нескольких экземплярах. Каждый экземпляр имеет следующие характеристики:

уникальный инвентарный номер

шифр книги, который совпадает с уникальным шифром из описания книг

присутствие в библиотеке.

В случае отсутствия данного экземпляра книги должны быть записаны следующие сведения:

номер билета читателя, который взял книгу

дата выдачи книги

дата возврата.

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

Предусмотреть следующие ограничения на информацию в системе:

Не может быть информации о соавторах, если нет информации об авторе. Книга может не иметь ни автора, ни соавтора.

В библиотеке должны быть записаны читатели не моложе 17 лет.

В библиотеке присутствуют книги, изданные начиная с 1960 по текущий год

Каждый читатель может держать на руках не более 5 книг.

Каждый читатель при регистрации в библиотеке должен дать телефон для связи он может быть рабочим или домашним.

Каждая область знаний может содержать ссылки на множество книг, но каждая книга может относиться к различным областям.


2. Анализ. Предметная область


2.1 Перечень и описание функций приложения обработки базы данных


1. Хранение информации о книгах и читателях.

2. Поиск и просмотр информации книг.

3. Хранение информации о обороте книг.

4. Просмотр статистики по книге.

5. Соблюдение ограничений, наложенных библиотекой(количество книг одновременно на руках, читатели не могут быть моложе определенного возраста, книги с годом издательства не раньше определенного года).

6. Предоставление определённого уровня доступа к некоторым функциям.


2.2 Перечень и описание сущностей базы данных


Область знаний: Это скорее справочная информация, о ней известно название и ее уникальный номер.

Книга: О книге известны название, имена авторов и соавторов (причем при не поле соавторов не может быть заполнено при пустующем поле автора), год и место издания, издательство, количество страниц и подобных книг. Книги: У книги есть свой уникальный инвентарный номер, а так же флаг, ее наличия в библиотеке в данный момент.

Заказы: При передаче читателю книги в заказах записывается информация о том какую книгу он взял и на какой читательский билет, а так же дату получения и предполагаемого возврата.

Читатели: Нам известен номер читательских билетов, имена, фамилии, отчества, даты рождения, адреса, номера телефонов (либо рабочий либо домашний).

3. Проектирование. Нормализация базы данных. Схема данных


3.1 Описание нормализации базы данных (методом ER-диаграмм).


Требуется добавить в таблицу "Книги" внешний ключ #Книги, а в таблицу "Заказы" два внешних ключа "#Читательского билета" и "#Инвентарный". Так же при нормализации отношения между сущностями "Книга – Область Знаний" мы получим еще одну таблицу, куда войдут первичные ключа каждой из сущностей.


Область Знаний


#Обл. Знаний

Название Обл.Знаний

Книга


#Книги

Название

Автор

Соавтор

Год издания

Место издания

Издательство

Количество страниц

Количество книг

Книги


#Инвентарный

#Книги

Наличие в Библиотеке

Заказы


#Заказа

#Читателя

#Инвентарный

Дата получения

Дата Возврата

Возврат

Читатели


#Чит. Билета

Фамилия

Имя

Отчество

Дата Рождения

#Телефона

Адрес



3.2 Схема данных


В итоге получим схему данных

Область Знаний Книг


#Обл. Знаний

#Книги

Книга


#Книги

Название

Автор

Соавтор

Год издания

Место издания

Издательство

Количество страниц

Количество книг

Книги


#Инвентарный

#Книги

Наличие в Библиотеке

Заказы


#Заказа

#Читателя

#Инвентарный

Дата получения

Дата Возврата

Возврат

Читатели


#Чит. Билета

Фамилия

Имя

Отчество

Дата Рождения

#Телефона

Адрес

Область Знаний


#Обл. Знаний

Название Обл.Знаний



3.3 Перечень и описание таблиц и их полей (с указанием типов данных и ограничений) в сводной таблице


AreaOfKnowlede

num_aok

Номер области знаний

int(11)

-

name_aok

Название области знаний

varchar(15)

-

AreaOfKnowledeBook

num_aok

Номер области знаний

int(11)

-

num_book

Номер книги

int(11)

-

Book

num_book

Номер книги

int(11)

-

name_book

Название книги

varchar(100)

-

author

Автор книги

varchar(25)


coauthor

Соавторы книги

varchar(100)

Не может быть заполнен при пустом поле "author"

palace_publ

Место издания

varchar(25)

-

year_publ

Год издания

year(4)

Не раньше 1960года

publishers

Издательство

varchar(40)

-

amount_pages

Число страниц

int(11)

-

amount

Число подобных книг

int(11)

-

Books

num_inventory

Инвентарный номер книги

int(11)

-

num_book

Номер книги

int(11)

-

presence

Присутствие в библиотеке

int(11)

-

Orders

num_order

Номер заказа книги

int(11)

-

num_reader

Номер читательского билета

int(11)

-

num_inventory


int(11)

-

date_issue


date

-

date_return


date

-

returned


smallint(6)

-

Readers

num_reader

Номер читательского билета

int(11)

-

surname

Фмилия

varchar(15)

-

name

Имя

varchar(15)

-

patronymic_name

Отчество

varchar(15)

-

address

Адрес

varchar(50)

-

phone

Номер телефона

varchar(15)

-

birthday

Дата рождения

date

Не моложе 17 лет


4. Программная часть. Руководство программиста


4.1 Обращение к программе


Для обращения к программе есть поля ввода данных и кнопки, а так же гиперссылки для удобства перемещения по сайту


4.2 Входные и выходные данные


4.2.1 Словесное описание

Читателю, зашедшему на данную страницу разрешен лишь просмотр о библиотеке, просмотр некоторой ограниченной информации о книгах, а так же поиск различными методами.

Администратор или же библиотекарь, имеет доступ, по средствам ввода пароля, к более широким функциям, таким как: регистрация / редактирование информации читателя, добавление / редактирование / удаление книги, записать/списать книгу на/с читателя, а так же добавление или удаление области знаний книг. Так же Библиотекарь может видеть более широкую информацию о книгах, т.е. ее статистику, где она находится и у кого в руках побывала и полную информацию о читателе.


4.2.2 Описание функций

В коде были написаны использованы функции класса "page":

Функция для установки основного содержимого страницы:


function SetContent($newcontent){$this->content=$newcontent;}


Функция для установки заголовка страницы:


function SetTitle($newtitle){$this->title=$newtitle;}


Функция для установки отображения страницы:


function Display()


{

echo "\n\n";

$this -> DisplayTitle();

$this -> DisplayKeywords();

$this -> DisplayStyles();

echo "\n";

$this -> DisplayHeader();

$this -> DisplayMenu($this->subbuttons, $this->buttons);

echo $this->content."\n";

$this -> DisplayFooter();

echo " \n\n";

}


Функция для отображения заголовка страницы:


function DisplayTitle(){echo " $this->title \n";}


Функция для отображения головной части страницы:


function DisplayHeader()


Функция для отображения меню и подменю страницы:


function DisplayMenu($subbtns, $btns)


Функция для отображения нижней и боковой части страницы:


function DisplayFooter()


Так же в классе page были использованы функции: Возвращяет true если выбрана страница с именем $url:


function IsURLCurrentPage($url)

{

if (strpos($GLOBALS[SCRIPT_NAME], $url)==false)

return false;

else

return true;

}


Функция для отображения кнопок:


function DisplayButton($width, $name, $url, $active = true)

{

if ($active)

{echo "$name\n";

}

else {

echo "$name\n";

}

5. Сопровождение. Руководство пользователя


5.1 Просмотр сайта


Просмотр сайта осуществляется при помощи гиперссылок и кнопок.


5.2 Описание


При выполнении любого действия ваши действия будут подкрепляться сообщениями. Это могут быть как сообщения об ошибках, так и сообщения об удачном выполнении поставленной задачи


6. Список использованной литературы


  1. Андрей Шкрыль. Программируем для web-сайта. "БХВ-Петербург", Санкт-Петебург, 2006.

  2. Т.Карпова. Базы данных. Модели, разработка, реализация. "Питер", Санкт-Птербург, 2002.

  3. Алексей Гончаров. Самоучитель HTML.

  4. А. Качанов, В. Ткаченко, А. Головин. Букварь по PHP и MySQL Версия 1.1 (от 16.05.2000)


7. Приложение


Содержание файла "inc/page.inc"


class Page

{

var $title="Библиотека: Объявления.";

var $keywords="Главная";

var $content;

var $buttons=array(

"Главная" => "index.php",

"Книги" => "books.php",

"Пользователь" => "users.php",

"Библиотекарская" => "libry.php"

);

var $subbuttons=array(

array(

"Объявления" => "index.php",

"Информация" => "index_info.php"

),

array(

"Список всех книг" => "books.php",

"Области знаний" => "books_aok.php",

"Поиск Книг" => "books_search.php"

),

array(

"Читатель" => "users.php"

),

array(

"Логин" => "libry.php",

"Действие" => "libry_add.php"

)

);

//-----------------------------------------------------------

function SetContent($newcontent)

{

$this->content=$newcontent;

}

//-----------------------------------------------------------

function SetTitle($newtitle)

{

$this->title=$newtitle;

}

//-----------------------------------------------------------

function SetKeywords($newkeywords)

{

$this->keywords=$newkeywords;

}

//-----------------------------------------------------------

function SetButtons($newbuttons)

{

$this->buttons=$newbuttons;

}

//-----------------------------------------------------------

function SetSubButtons($newsubbuttons)

{

$this->subbuttons=$newsubbuttons;

}

//-----------------------------------------------------------

function Display()

{

echo "\n\n";

$this -> DisplayTitle();

$this -> DisplayKeywords();

$this -> DisplayStyles();

echo "\n";

$this -> DisplayHeader();

$this -> DisplayMenu($this->subbuttons, $this->buttons);

echo $this->content."\n";

$this -> DisplayFooter();

echo "\n\n";

}

//-----------------------------------------------------------

function DisplayTitle()

{

echo " $this->title \n";

}

//-----------------------------------------------------------

function DisplayKeywords()

{

//echo"keywords\">"

echo "\n";

}

//-----------------------------------------------------------

function DisplayStyles()

{

}

//-----------------------------------------------------------

function IsURLCurrentPage($url)

{

if (strpos($GLOBALS[SCRIPT_NAME], $url)==false)

{

return false;

}

else {

return true;

}

}

//-----------------------------------------------------------

function DisplayHeader()

{

#echo htmlspecialchars("");

echo "\n";

echo " echo "\n";

echo "\n";

echo " echo "\n";

echo " \n";

echo "\n";

}

//-----------------------------------------------------------

function DisplayMenu($subbtns, $btns)

{

//---Колонка подменю---

echo "\n";

echo "<td height=\"100%\">\n";

//---Добавляются пункты подменю---

for($i=0; $i

{

while(list($subname, $suburl) = each($subbtns[$i]))

{

if($this->IsURLCurrentPage(substr($suburl,0,5)))

{

if($this->IsURLCurrentPage($suburl))

{

echo "$subname
\n";

}

else {

echo "$subname
\n";

}

}

}

}

//---Дорисовывается колонка подменю---

echo " td>\n";

echo " \n";

echo " \n";

echo " \n";

echo " \n";

echo " <td>\n";

//---Отрисовывается центральная колонка---

echo " echo "\n";

echo "\n";

echo "\n";

echo "\n";

echo " echo "\n";

#echo "\n";

reset($btns);

$width = 98/count($btns);

while (list($name, $url) = each($btns))

{

$this->DisplayButton($width, $name, $url,!$this->IsURLCurrentPage(substr($url,0,5)));

}

echo "\n";

echo "\n";

echo " echo "\n";

echo "\n";

echo "\n";

echo "\n";

echo " echo "\n";

echo "\n";

echo "\n";

echo "\n";

echo "\n";

}

//-----------------------------------------------------------

function DisplayButton($width, $name, $url, $active = true)

{

if ($active)

{

echo "$name\n";

}

else {

echo "$name\n";

}

}

//-----------------------------------------------------------

function DisplayFooter()

{

echo "\n";

echo "\n";

echo "\n";

echo "\n";

echo "\n";

echo "\n";

echo " echo "\n";

echo "\n";

echo "\n";

echo "\n";

echo "\n";

echo "

";

echo "\n";

echo "\n";

echo "

".date("jS F Y")."
\n";

echo "\n";

echo "\n\n";

echo "\n";

echo "

\n";

echo "\n";

echo "\n";

echo "\n";

echo "\n";

echo "\n";

echo "<marquee scrollamount=\"2\">Просьба возвращать книги вовремя. И помните в Библиотеке должна быть тишина!marquee>td>tr>table>\n";

}

//-----------------------------------------------------------

}

?>


Содержание файла "inc/check.inc":


$surname=trim($surname);

$name=trim($name);

$patronymic=trim($patronymic);

$day=trim($day);

$month=trim($month);

$year=trim($year);

$phone=trim($phone);

$address=trim($address);

if(strlen($surname)==0)$error=$error."\tвы не заполнили поле \"Фамилия\"
\n";

if(strlen($name)==0)$error=$error."\tвы не заполнили поле \"Имя\"
\n";

if(strlen($patronymic)==0)$error=$error."\tвы не заполнили поле \"Отчество\"
\n";

if($day==0 || $month==0 || $year==0)$error=$error."\tвы не заполнили поле \"день вашего рождения\"
\n";

//elseif (!checkdate($mouth, $day, $year))$error=$error."\tвы ввели не правильный формат даты вашего рождения
\n";

elseif (time() - mktime(0, 0, 0, $mouth, $day, $year)< $g_limit_years*365*24*60*60) $error=$error."\tВы не достигли 17-ти летия
\n";

if(strlen($phone)==0)$error=$error."\tвы не записали свой номер телефона
\n";

if(strlen($address)==0)$error=$error."\tвы не заполнили поле \"адрес\"
\n";

?>


Содержание файла "inc/connect_bd.inc"


$db_name="Library";

$host="localhost";

$user="root";

$passw="";

$link=mysql_connect($host,$user,$passw) or die(mysql_errno($link).mysql_error($link));

$db=mysql_select_db($db_name,$link) or die(mysql_errno($link).mysql_error($link));

?>


Содержание файла "inc/global_vars.inc":


$source_vars=mysql_query("select * from `glb_vars` limit 0,1", $link);

$result=mysql_fetch_array($source_vars);

$g_adm_pass=$result["adm_pass"];

$g_limit_years=$result["lim_years"];

$g_limit_days=$result["lim_days"];

$g_limit_books=$result["lim_books"];

$g_limit_publ_book=$result["lim_publ_book"];

$g_limit_hr=$result["lim_hr"];

$g_color_error=$result["color_error"];

?>


Содержание файла "index.php":


require ("inc/page.inc");

$homepage = new page();

$homepage ->SetTitle("Библиотека: Объявления");

$homepage -> SetContent("

Объявления.

Просрочившим сдачу книг начисляется двойная пеня с 1-го января этого года.

");

$homepage -> Display();

?>


Содержание файла "index_info.php":


include ("inc/connect_bd.inc");

include ("inc/global_vars.inc");

$source=mysql_query("select count(`num_reader`) from `Readers`", $link) or die(mysql_errno($link).mysql_error($link));

$result=mysql_fetch_row($source);

$num_rdrs_reg=$result[0];

$source=mysql_query("select count(`num_inventory`), count(distinct `num_book`) from `Books`", $link) or die(mysql_errno($link).mysql_error($link));

$result=mysql_fetch_row($source);

$num_bk_all=$result[0];

$num_bk_unc=$result[1];

$source=mysql_query("select count(`num_book`) from `Books` where `presence`>0", $link) or die(mysql_errno($link).mysql_error($link));

$result=mysql_fetch_row($source);

$num_bk_read=$result[0];

$text="

\n

<legend>Информация по книгамlegend><br>\n

&nbsp;&bull;Всего книг/Уникальных: <b>".$num_bk_all."b>/<b>".$num_bk_unc."b><br>\n

&nbsp;&bull;В данный момент на руках у читателей <b>".$num_bk_read."b> книг.<br>\n

&nbsp;&bull;Книги выдаются на <b>".$g_limit_days."b> дней.<br>\n

&nbsp;&bull;В библиотеке находятся книги, не старше <b>".$g_limit_publ_book."b> года издательства.<br>\n

&nbsp;&bull;Можно взять до <b>".$g_limit_books."b> книг одновременно.<br><br>\n


\n

\n

Информация по читателям
\n

&nbsp;&bull;Зарегистрировано читателей <b>".$num_rdrs_reg."b>.<br>\n

&nbsp;&bull;Зарегистрироватся можно лицам не моложе <b>".$g_limit_years."b> лет.<br><br>\n

\n";

require ("inc/page.inc");

$homepage = new page();

$homepage ->SetTitle("Библиотека: Информация о Библиотеке");

$homepage -> SetContent("

Информация о Библиотеке.

".$text);

$homepage -> Display();

?>


Содержание файла "books.php":


require ("inc/connect_bd.inc");

require ("inc/global_vars.inc");

require ("inc/page.inc");

$homepage = new page();

$homepage ->SetTitle("Библиотека: Книги");

if(!isset($book_id))

{

$text="<p>\tНаша библиотека располагает данными книгами перечислеными ниже по алфавиту. Вы можете просмотреть информацию о книге, щелкнув по ее названию.p>\n

\n";

$query=mysql_query("select `name_book`, `num_book` from `Book` order by `name_book`", $link);

$num=mysql_num_rows($query);

for($i=1; $i<=$num; $i++)

{

$arr=mysql_fetch_row($query);

$text=$text."• ".stripslashes($arr[0])."\n";

}

$text=$text."\n";

}

else {

$query=mysql_query("select `num_inventory` from `Books` where `presence`='0' and `num_book`='$book_id'", $link) or die(mysql_errno($link).": ".mysql_error($link));

$presence=mysql_num_rows($query);

mysql_free_result($query);

$query=mysql_query("select * from `Book` where `num_book`='$book_id'", $link) or die(mysql_errno($link).": ".mysql_error($link));

$arr=mysql_fetch_array($query);

if(!strcmp($HTTP_COOKIE_VARS["password"], $g_adm_pass))

{

$edit_btn="

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n";

$source=mysql_query("select `num_inventory`, `num_reader`, `surname`, `name`, `patronymic_name`, `date_issue`, `date_return`, `returned`, `num_reader` from (`Books` join `Orders` using(`num_inventory`)) join `Readers` using(`num_reader`) where `num_book`='$book_id' order by `num_inventory`, `num_order`", $link) or die(mysql_errno($link).": ".mysql_error($link));

$count=mysql_num_rows($source);

if($count>0)

{

$stats="#Чит. Билетаtd><td>Читательtd><td>Дата полученияtd><td>Дата возвратаtd><td>Дней просроченоtd>tr>";

for($i=0; $i<$count; $i++)

{

$in=mysql_fetch_row($source);

if($in[0]!=$inv || $i==0)$stats=$stats."

Книга с инв. номером #".$in[0]."
";

if($in[7]<0)

{

$in[7]="Не возвращена";

$in[6]="<small>Не возвращенаsmall>";

}

$stats=$stats."".$in[1]."".$in[2]." ".$in[3]." ".$in[4]."".$in[5]."".$in[6]."".$in[7]."";

$inv=$in[0];

}

$stats=$stats."";

}

else $stats="\t<small>Эту книгу никто не брал, статистика отсутствуетsmall><br>\n";

}

$text="


\n

Название: ".stripslashes($arr["name_book"])."\n

Автор: ".stripslashes($arr["author"])."\n

Соавторы: ".stripslashes($arr["coauthor"])."\n

Место издательства: ".stripslashes($arr["place_publ"])."\n

Год издательства: ".$arr["year_publ"]."\n

Издательство: ".stripslashes($arr["publishers"])."\n

Кол-во страниц: ".$arr["amount_pages"]."\n

В наличии: ".$presence."/".$arr["amount"]."\n


\n

\n

  Назад 
 
 
 
 
 ".$edit_btn."

".$stats;

}

$homepage -> SetContent("

Книги.

".$text);

$homepage -> Display();

?>


Содержание файла "books_aok.php":


require ("inc/connect_bd.inc");

require ("inc/page.inc");

$homepage = new page();

$homepage ->SetTitle("Библиотека: Области знаний");

$result=mysql_query("select * from `AreaOfKnowledge`", $link) or die(mysql_errno($link).mysql_error($link));

while($row=mysql_fetch_array($result))

{

$tr =$tr."".$row["name_aok"]."";

}

$sp="


Наименование области знанийb>td>tr>".$tr."table>";


$homepage -> SetContent("


Области знаний.

здесь представлен перечень областей знаний, по которым имеются книги в библиотеке.

Вы можете просмотреть список всех книг, относящихся к этой области знаний, щёлкнув по названию.


".$sp."
");

$homepage -> Display();

?>


Содержание файла "books_search.php":


require ("inc/connect_bd.inc");

require ("inc/page.inc");

$homepage = new page();

$homepage ->SetTitle("Библиотека: Поиск книг");

if(!isset($searchterm) && !isset($searchtype))

{

$sp="<p>Здесь вы можете найти интересующую вас книгуp>\n

 \n

Задать поиск по:
\n

\n

\n

\n

\n

select><br>\n


Введите искомый термин:<br>\n



\n

\n

\n";

}

else {

$searchterm=trim($searchterm);

$searchterm = addslashes($searchterm);

if($searchtype==1)$sql="select `num_book`, `name_book`, `author` from `Book` where `author` like '%".$searchterm."%' or coauthor like '%".$searchterm."%' order by `name_book`";

if($searchtype==3)$sql="select distinct(`num_book`), `name_book`, `author` from (`AreaOfKnowledgeBook` join `AreaOfKnowledge` using(`num_aok`)) join `Book` using(`num_book`) where `name_aok` like '%".$searchterm."%' order by `name_book`";

if($searchtype==2)$sql="select `num_book`, `name_book`, `author` from `Book` where `name_book` like '%".$searchterm."%' order by `name_book`";

$result = mysql_query($sql, $link) or die(mysql_errno($link).mysql_error($link));

$num_result=mysql_num_rows($result);

$sp=$sp."<p>В результате поиска по ключевому слову <b>\"".$searchterm."\"b> было найдено ".$num_result." книг(и)p><br>\n

\n";

for($i=0; $i<$num_result; $i++)

{

$num=$i+1;

$row=mysql_fetch_array($result);

$sp=$sp."


".$num.".Название:

".$row["name_book"]."

Автор:".$row["author"]."\n";

}

$sp=$sp."


Назад\n";

}

$homepage -> SetContent("

Поиск книг.

".$sp);

$homepage -> Display();

?>


Содержание файла "users.php":


include ("inc/connect_bd.inc");

include ("inc/global_vars.inc");

$pass=$HTTP_COOKIE_VARS["password"];

if(!strcmp($g_adm_pass, $pass))

{

if(isset($id))

{

$source=mysql_query("select UNIX_TIMESTAMP(`birthday`), `num_reader`, `surname`, `name`, `patronymic_name`, `phone`, `address` from `Readers` where `num_reader`='".$id."'", $link) or die(mysql_errno($link).": ".mysql_error($link));

if(mysql_num_rows($source)!=1)$text="Читательского билета с номером #".$id." не существует.
\n";

else {

$result=mysql_fetch_array($source);

$array_bday=getdate($result[0]);

$bday=$array_bday["mday"]." ".$array_bday["month"]." ".$array_bday["year"];

$text="
\n

\n

Номер читательского билета:\n

\n

Фамилия:\n

\n

Имя:\n

\n

Отчество:\n

\n

<tr><td>День рождения:td>\n

\n

Телефон:\n

\n

<tr><td>Домашний адрес:td>\n

\n

\n

Назад

 
 
 
 
 

\n

\n";

$res=mysql_query("select `num_inventory`, b.num_book, `name_book`, UNIX_TIMESTAMP(`date_issue`), UNIX_TIMESTAMP(`date_return`), `returned`

from `Orders` join (`Book` b join `Books` bs using(`num_book`)) using (`num_inventory`) where `num_reader`='".$id."'", $link);

$num=mysql_num_rows($res);

for($i=0; $i<$num; $i++)

{

$result=mysql_fetch_array($res);

$array_date=getdate($result[3]);

$day_iss=$array_date["mday"]." ".$array_date["month"]." ".$array_date["year"];

$array_date=getdate($result[4]);

$day_ret=$array_date["mday"]." ".$array_date["month"]." ".$array_date["year"];

if($result["returned"]>=0)

{

$tbl_ret=$tbl_ret."".$result["num_inventory"]."".$result["name_book"]."".$day_iss."".$day_ret."".$result["returned"]."";

}

else {

$tbl_not=$tbl_not."".$result["num_inventory"]."".$result["name_book"]."".$day_iss."";

}

}

if(strlen($tbl_ret)!=0)

{

$tbl_ret="\nНомерНазваниеДата полученияДата возвратаДней просрочено".$tbl_ret."

\n";

}

else $tbl_ret=" \tВозвращеных книг не имеется\n";

if(strlen($tbl_not)!=0)

{

$tbl_not="\nНомерНазваниеДата получения".$tbl_not."

\n";

}

else $tbl_not=" \tКниг на руках не имеется\n";

$text=$text."

Взятые книги.

\n

<p>Книги выдаются на ".$g_limit_days." дней. Если книга требуется вам еще на некоторый срок, то следует перерегистрировать заказ книгиp>

<b>Книги на руках:b><br>".$tbl_not."<br><b>Возвращеные книги:b><br>".$tbl_ret;

}

}

else $text=$text."<p>Введите номер читательского билета, что бы посмотреть данные о читателе.p>

 ";

}

else $text=$text."<p>На эту страницу допущены только библитекариp>";

include ("inc/page.inc");

$homepage = new page();

$homepage ->SetTitle("Библиотека: Пользователи");

$homepage -> SetContent("

Страничка пользователя.

".$text);

$homepage -> Display();

?>


Содержание файла "libry.php":


require ("inc/connect_bd.inc");

require ("inc/global_vars.inc");

$login=false;

$pass_cmp=$HTTP_COOKIE_VARS["password"];

if(strcmp($logout, "Выйти")==0)

{

setrawcookie('password');

$pass_cmp="";

}

if(isset($pass))

{

if(!strcmp($pass, $g_adm_pass))

{

setrawcookie('password', $pass);

$pass_cmp=$pass;

$login=true;

}

else $login_err="Пароль не верен! ";

}

if(strlen($pass_cmp) && !strcmp($pass_cmp, $g_adm_pass))

{

if(isset($chpass))

{

if(isset($check))

{

if(strlen($chpass_old)==0)$error=$error."Вы не ввели действующй пароль
\n";

else {

if(strcmp($chpass_old, $g_adm_pass))$error=$error."Вы ввели не корректный действующий пароль
\n";

else {

if(strlen($chpass1)==0)$error=$error."Вы не ввели новый пароль
\n";

else {

if(strlen($chpass2)==0)$error=$error."Вы не ввели повтор нового пароля<br>\n";

else {

if(strcmp($chpass1, $chpass2))$error=$error."Несовпадение нового пароля и его повтора<br>\n";

else {

if(strlen($chpass1)<6 || strlen($chpass1)>12)$error=$error."Пароль должен быть не более 12 символов, и не меньше 6<br>\n";

}

}

}

}

}

if(strlen($error)==0)

{

mysql_query("update `glb_vars` set `adm_pass`='$chpass1'", $link);

$form="Пароль удачно изменен<br>\n

\n

\n

\n

form>";

}

else {

$form="Вы не можете изменить пароль, поскольку имеется ошибка:<br>".$error."<br>

";

}

}

else {

$form="<center><p><b>Изменить пароль.b>p>center><p>Помните, что пароль должен быть не более 12 символов, и не меньше 6.p>

\n

\n

Введите старый пароль:\n

Ведите новый пароль:
\n

Повторите ввод нового пароля: \n


\n

\n

\n";

}

}

if(!isset($chpass))

{

$form="<p>Здравствуйте, библиотекарь.p>\n

\n

\n

\n

\n

\n


\n";

}

$login=true;

}

else {

if(!$login)

{

$form=$login_err."<p>Страница доступна только библиотекарю. Пожалуйста введите пароль.p>\n

<form method=\"post\">\n

\n

\n

Введите пароль:
\n

\n

\n

\n

\n";

}

}

require ("inc/page.inc");

$homepage = new page();

$homepage ->SetTitle("Библиотека: Логин Библиотекаря");

$homepage -> SetContent("

Логин Библиотекаря:

".$form);

$homepage -> Display();

?>


Содержание файла " libry _add.php":


require ("inc/connect_bd.inc");

require ("inc/global_vars.inc");

$pass=$HTTP_COOKIE_VARS["password"];

if(!strcmp($pass, $g_adm_pass))

{

$action1="Добавить книгу";

$action4="Удалить книгу";

$action2="Взять книгу";

$action3="Вернуть книгу";

$action5="Зарегистрировать читателя";

$action6="Область знаний";

if(!isset($action))

{

$text="


\n

\n

\n

\n

\n

\n

\n";

}

else {

if(strcmp($action, $action5)==0)

{

if(isset($hddn))

{

require("inc/check.inc");

if(strlen($error)!=0)

{

$text="Вы допустили ошибку в поле/полях:
".$error."Заполните все поля



";

}

else {

$res=mysql_query("select max(num_reader) from `Readers`", $link) or die(mysql_errno($link).": ".mysql_error($link));

$array=mysql_fetch_row($res);

$num=$array[0];

$num=$num+1;

$address=addslashes($address);

$birthday=$year."-".$month."-".$day;

if(mysql_query("insert into `Readers` values('$num', '$surname', '$name', '$patronymic', '$address', '$phone', '$birthday')", $link) or die(mysql_errno($link).": ".mysql_error($link)))

{

$text="

Вы удачно зарегистрировали ".$surname." ".$name." ".$patronymic.". Номер читательского билета: #".$num."

";

}

$text=$text."

";

}

}

if(!isset($num))

{

$text=$text."

 \n

\n

Фамилия:\n

\n

Имя:\n

\n

Отчество:\n

\n

День рождения:\n

\n

Число: \n

\n

Месяц: \n

\n

Год: \n

\n

\n

Телефон:\n

\n

Домашний адрес:\n

\n




\n

Назад\">
\n

\n";

}

}

if(strcmp($action, $action1)==0)

{

$text="

Добавление/изменение книг.


\n";

if(isset($add))

{

$name_book=trim($name_book);

$author=trim($author);

$coauthor=trim($coauthor);

$place_publ=trim($place_publ);

$year_publ=trim($year_publ);

$year_publ=(int)$year_publ;

$publishers=trim($publishers);

$amount_pages=trim($amount_pages);

$amount_pages=(int)$amount_pages;

$amount=trim($amount);

$amount=(int)$amount;

$aok_count=count($aok);

if(!strlen($name_book))$error=$error."\tНе введено название книги
\n";

if(!strlen($place_publ))$error=$error."\tНе записано место издательства
\n";

if(!$year_publ)$error=$error."\tНе записан год издательства
\n";

else if(!is_int($year_publ))$error=$error."\tГод - не целое число
\n";

if($year_publ-$g_limit_publ_book<0)$error=$error."\tВ библиотеке не должны хранится книгименьше чем 1960 года издания
\n";

if(!strlen($publishers))$error=$error."\tВпишите издательство
\n";

if(!$amount_pages)$error=$error."\tВпишите количество страниц в книге
\n";

else if(!is_int($amount_pages))$error=$error."\tЧисло страниц - не целое число
\n";

if(!$amount && !isset($edit))$error=$error."\tВведите количество таких же книг, завезенных в библиотеку этой партией
\n";

else if(!is_int($amount))$error=$error."\tЧисло книг - не целое число
\n";

if(!strlen($author) && strlen($coauthor))$error=$error."\tЗаполнение строки соавторов без записи автора не возможно
\n";

if($aok_count==0)$error=$error."\tНе выбрана область знаний книг(и)
\n";

if(strlen($error)!=0){$text=$text."Ошибки: ".$error."\n";}

else {

if(!isset($edit))

{

$res=mysql_query("select max(`num_book`) from `Book`", $link) or die(mysql_errno($link).": ".mysql_error($link));

$result=mysql_fetch_row($res);

$num_books=$result[0]+1;

$res=mysql_query("select max(`num_inventory`) from `Books`", $link) or die(mysql_errno($link).": ".mysql_error($link));

$result=mysql_fetch_row($res);

$inventory=$result[0];

$name_book=addslashes($name_book);

$author=addslashes($author);

$coauthor=addslashes($coauthor);

$place_publ=addslashes($place_publ);

$publishers=addslashes($publishers);

mysql_query("insert into `Book` values('$num_books', '$name_book', '$author', '$coauthor', '$place_publ', '$year_publ', '$publishers', '$amount_pages', '$amount')", $link) or die(mysql_errno($link).": ".mysql_error($link));

for($i=0; $i<$amount; $i++)

{

$inventory++;

$inv_txt=$inv_txt."
#".$inventory;

mysql_query("insert into `Books` values('$inventory', '$num_books', 0)", $link) or die(mysql_errno($link).": ".mysql_error($link));

}

$text=$text."Добавлено книг: ".$amount.". Инвентарные номера этих книг:

".$inv_txt."

\n

Назад\">

\n";

$updates=true;

}

else {

$updates=true;

$text=$text."Книга \"".$name_book."\" была отредактирована";

mysql_query("update `Book` set `name_book`='$name_book', `author`='$author', `coauthor`='$coauthor', `place_publ`='$place_publ', `year_publ`='$year_publ', `publishers`='$publishers', `amount_pages`='$amount_pages' where `num_book`='$num_book'", $link) or die(mysql_errno($link).": ".mysql_error($link));

mysql_query("delete from `AreaOfKnowledgeBook` where `num_book`='$num_book'", $link) or die(mysql_errno($link).": ".mysql_error($link));

}

for($i=0; $i

{

mysql_query("insert into `AreaOfKnowledgeBook` values('$num_books', '$aok[$i]')", $link) or die(mysql_errno($link).": ".mysql_error($link));

}

}

}

if(!isset($updates))

{

$query=mysql_query("select `num_aok`, `name_aok` from `AreaOfKnowledge`", $link);

$num_rows=mysql_num_rows($query);

$area=$area."

Жанр/Обл. Знаний\n";

for($i=0; $i<$num_rows; $i++)

{

$array=mysql_fetch_row($query);

$area=$area."";

}

$area=$area."

\n";

if(isset($edit))

{

$txt1="  ";

$txt2="Изменить\">\n

\n

\n";

}

else {

$txt1="Количество книг в поступлении:\n\n";

$txt2="\n";

}

$text=$text."

".$area."\n

\n

\n

Название книги:\n

\n

Имя автора:\n

\n

Имена соавторов:\n

\n

Место издания:\n

\n

Год издания:\n

\n

Издательство:\n

\n

Количество страниц:\n

\n".$txt1."

 


\n".$txt2."\n

Назад\">\n

 \n

\n";

}

}

if(strcmp($action, $action2)==0)

{

$text="

Оформить заказ читателя на книгу


\n";

if(isset($add))

{

$query=mysql_query("select `surname`, `name`, `patronymic_name` from `Readers` where `num_reader`='".$num_reader."'", $link);

if(mysql_num_rows($query)!=1){$error=$error."\tЧитателя с таким номером читательского билета не существует в Базе Данных Библиотеки
\n";}

else {

$res_id=mysql_fetch_array($query);

$ord_name_r=$res_id["surname"]." ".$res_id["name"]." ".$res_id["patronymic_name"];

}

$query=mysql_query("select `name_book` from `Book` join `Books` using(`num_book`) where `num_inventory`='".$num_inventory."'", $link);

if(mysql_num_rows($query)!=1){$error=$error."\tКниги с таким инвентарным номером не существует в Базе Данных Библиотеки
\n";}

else {

$res_inv=mysql_fetch_array($query);

$ord_name_b=$res_inv["name_book"];

}

$query=mysql_query("select `num_book` from `Books` where `presence`='".$num_reader."'", $link);

$num_books=mysql_num_rows($query);

if($num_books==5){$error=$error."\tЧитатель имеет на руках ".$g_limit_books." книг(и), что является максимумом разрешенного числа
\n";}

else {

$qry=mysql_query("select `num_book` from `Books` where `num_inventory`='".$num_inventory."'", $link);

$num_book=mysql_fetch_row($qry);

$book=$num_book[0];

mysql_free_result($qry);

for($i=0; $i<$num_books; $i++)

{

$res=mysql_fetch_row($query);

if($res[0]==$book)

{

$error=$error."\tУ читателя уже есть на руках аналогчная кнга
\n";

break;

}

}

}

$query=mysql_query("select `presence` from `Books` where `num_inventory`='".$num_inventory."'", $link);

$res=mysql_fetch_row($query);

if($res[0]!=0){$error=$error."\tКнига уже отдана читателю с номером читательского билета #".$res[0]."
\n";}

if(strlen($error)!=0)

{

$text=$text."Обратите внимание:
".$error;

}

else {

$date_iss=date("Y-m-d");

$date_ret=date("Y-m-d", $g_limit_days*24*60*60+mktime(23,59,59));

$dt_ret=date("jS F Y", $g_limit_days*24*60*60+mktime(23,59,59));

mysql_query("insert into `Orders` values(null, '$num_reader','$num_inventory', '$date_iss', '$date_ret', '-1')", $link);

mysql_query("update `Books` set `presence`='$num_reader' where `num_inventory`='$num_inventory'", $link);

$num_books=$num_books+1;

$text=$text."Была создана запись: читатель ".$ord_name_r." желает взять книгу \"".$ord_name_b."\".

Это ".$num_books."-я взятая кнга из ".$g_limit_books." максимально разрешенных на данный момент.
Требуется вернуть книгу до ".$dt_ret.".



Назад\">
";

}

}

if(!isset($date_iss))

{

$text=$text."

Номер читательского билета:\n

\n

Инвентарный номер книги:\n

\n

Назад\">

\n";

}

}

if(strcmp($action, $action3)==0)

{

$text="

Возврат книги в библиотеку


\n";

if(isset($sub))

{

$query=mysql_query("select `surname`, `name`, `patronymic_name` from `Readers` where `num_reader`='".$num_reader."'", $link) or die(mysql_errno($link).mysql_error($link));

if(mysql_num_rows($query)!=1){$error=$error."\tЧитателя с таким номером читательского билета не существует в Базе Данных Библиотеки
\n";}

else {

$res_id=mysql_fetch_array($query);

$ord_name_r=$res_id["surname"]." ".$res_id["name"]." ".$res_id["patronymic_name"];

$query=mysql_query("select `name_book`, `num_book` from `Book` join `Books` using(`num_book`) where `num_inventory`='".$num_inventory."'", $link);

if(mysql_num_rows($query)!=1){$error=$error."\tКниги с таким инвентарным номером не существует в Базе Данных Библиотеки
\n";}

else {

$res_inv=mysql_fetch_array($query);

$book_id=$res_inv["num_book"];

$ord_name_b=$res_inv["name_book"];

$query=mysql_query("select `num_book` from `Books` where `num_inventory`='".$num_inventory."' and `presence`='$num_reader'", $link);

if(mysql_num_rows($query)!=1){$error=$error."\tКнига \"".$ord_name_b."\" с инвентарным номером #".$num_inventory." не записана на читателя \"".$ord_name_r."\"
\n";}

}

}

if(strlen($error)!=0)

{

$text=$text."Обратите внимание:
".$error;

}

else {

$qry=mysql_query("select UNIX_TIMESTAMP(`date_return`) from `Orders` where `num_inventory`='$num_inventory' and `num_reader`='$num_reader' order by `num_order` desc", $link);

$dt_ret=mysql_fetch_row($qry);

$ret=time()-($dt_ret[0]+24*60*60-1);

if($ret>0)

{

$ret=$ret/(24*60*60);

$returned=floor($ret)+1;

}

else {$returned=0;}

$date_return=date("Y-m-d");

mysql_query("update `Orders` set `date_return`='$date_return', `returned`='$returned' where `num_reader`='$num_reader' and `num_inventory`='$num_inventory'", $link);

mysql_query("update `Books` set `presence`='0' where `num_inventory`='$num_inventory'", $link);

if($returned>0)$miss=" с опазданием в ".$returned." дня/дней/день";

$text=$text."Была создана запись: читатель ".$ord_name_r." сдал в библиотеку книгу \"".$ord_name_b."\"".$miss."


Назад\">
";

}

}

if(!isset($returned))

{

$text=$text."\n

Номер читательского билета:\n

\n

инвентарный номер книги:\n

\n

Назад\">

\n";

}

}

if(!strcmp($action, $action4))

{

if(!isset($book_id))

{

$txt="Впишите номер книги, которую хотите удалить
\n

\n

Да\">\n

\n";

}

else {

if(strcmp($in, "Удалить"))

{

$query=mysql_query("select `num_inventory` from `Books` where `num_book`='$book_id'", $link);

$nums_inv=mysql_num_rows($query);

if($nums_inv>0)

{

$txt="Номер книги, которую хотите удалить #".$book_id."<br><br>Выбиерете инвентарные номера<br>\n

\n";

while($res=mysql_fetch_row($query))

{

$txt=$txt."\n";

}

$txt=$txt."

\n

\n

\n

Удалить\">

\n";

}

else $txt="Книги с номером #".$book_id." не существует в БД";

}

else {

$count_b=$nums_inv-count($inv);

for($i=0; $i

{

mysql_query("delete from `Books` where `num_inventory`='$inv[$i]'", $link);

mysql_query("delete from `Orders` where `num_inventory`='$inv[$i]'", $link);

}

mysql_query("update `Book` set `amount`='$count_b' where `num_book`='$book_id'", $link);

if($count_b==0)

{

mysql_query("delete from `Book` where `num_book`='$book_id'", $link);

mysql_query("delete from `AreaOfKnowledgeBook` where `num_book`='$book_id'", $link);

}

$txt="Были удален книги, которые вы отметили";

}

}

$text="

Удаление книги из БД".$txt."

Назад
\n";

}

if(!strcmp($action, $action6))

{

if(!strcmp($in, "Ввести"))

{

$aok=trim($aok);

if(strlen($aok)==0){$error="Строка пусая, требуется ее заполнить
\n";}

else {

$query=mysql_query("select `num_aok` from `AreaOfKnowledge` where name_aok like '$aok'", $link) or die(mysql_errno($link).mysql_error($link));

if(mysql_num_rows($query)>0)

{

$error=$error."В базе уже существует область знаний ".$aok."
\n";

}

}

if(strlen($error)!=0){$error="Ошибки ввода:
".$error;}

else {

mysql_query("insert into `AreaOfKnowledge` values(null, '$aok')", $link);

$error="

Область знаний ".$aok." удачно добавлена

";

}

}

if(!strcmp($in, "Удалить"))

{

$query=mysql_query("select `num_book`, `name_book` from `AreaOfKnowledgeBook` join `Book` using(`num_book`) where num_aok='$aok'", $link) or die(mysql_errno($link).mysql_error($link)); if(mysql_num_rows($query)>0)

{

$error="Невозможно удалить, поскольку по этой области знаний имеются книги:
";

while($ar_aok=mysql_fetch_row($query))

{

$error=$error."".$ar_aok[1]."
\n";

}

}

else {

mysql_query("delete from `AreaOfKnowledge` where `num_aok`='$aok'", $link);

$error="

Область знаний удачно удалена

";

}

}

$query=mysql_query("select `num_aok`, `name_aok` from `AreaOfKnowledge`", $link);

$num_rows=mysql_num_rows($query);

$sel_area="\n";

for($i=0; $i<$num_rows; $i++)

{

$array=mysql_fetch_row($query);

$sel_area=$sel_area."";

}

$sel_area=$sel_area."\n";

$text=$text."\n

Выбирете жанр, который хотите удалить

".$sel_area."

\n

Удалить\">

\n

\n


Введите новую область знаний:
\n

\n

\n

\n

Ввести\">

".$error."\n

\n

Назад
";

}

}

}

else {

$text="

Страница доступна только библиотекарю. Зайти под Библиотекарем можно нажав на кнопку \"Войти\"

\n

Войти\">
\n

\n";

}

require ("inc/page.inc");

$homepage = new page();

$homepage ->SetTitle("Библиотека: Хоз. часть");

$homepage -> SetContent($text);

$homepage -> Display();

?>


Нравится материал? Поддержи автора!

Ещё документы из категории информатика:

X Код для использования на сайте:
Ширина блока px

Скопируйте этот код и вставьте себе на сайт

X

Чтобы скачать документ, порекомендуйте, пожалуйста, его своим друзьям в любой соц. сети.

После чего кнопка «СКАЧАТЬ» станет доступной!

Кнопочки находятся чуть ниже. Спасибо!

Кнопки:

Скачать документ