Создание сайта знакомств
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное образовательное учреждение высшего профессионального образования «Чувашский государственный университет им. И.Н. Ульянова»
Факультет информатики и вычислительной техники
Кафедра «Информационно-вычислительных систем»
Дисциплина «Базы данных»
Пояснительная записка
к курсовой работе
Выполнил: студент ИВТ 12-04
Константинов Д.С.
Проверил: Буланкина Е.Ю.
Чебоксары – 2006 г.
Содержание
Задание.
Анализ. Предметная область.
1.1 Описание предметной области
1.2 Перечень и описание функций приложения обработки базы данных.
1.3 Перечень и описание сущностей и атрибутов базы данных.
Проектирование. Нормализация базы данных. Схема данных.
2.1 Пошаговое описание нормализации базы данных (методом ER-диаграмм).
2.2 Схема данных.
2.3 Перечень и описание таблиц и их полей (с указанием типов данных и ограничений) в сводной таблице.
Программная часть. Руководство программиста.
Тестирование. Результаты тестирования. Набор тестовых данных, обязательно включающий в себя "критические точки", и результаты операций над ними.
Сопровождение. Руководство пользователя.
Список использованной литературы
Приложение 1. Исходный текст приложения.
Задание
Необходимо провести нормализацию предметной области «Сайт знакомств» и программно реализовать, использую СУБД MySQL, язык HTML, технологии PHP и ADO, на выбор скриптовые языки VBScript или JavaScript.
1. Анализ. Предметная область
1.1 Описание предметной области
Дано описание предметной области:
Сайт знакомств
На сайте знакомств регистрируются пользователи ищут наиболие подходящих для себя пользователей и переписываются с ними. Сайт должен обеспечивать поиск претендентов по параметрам, поддерживать переписку пользователей, и рейтинг пользователей.
1.2 Перечень и описание функций приложения обработки базы данных
Описание функций базы данных
Система должна обеспечивать поиск претендентов
Система должна поддерживать поиск сообщений
Система должна поддрживать удаление сообщений
Система должна поддерживать удаление пользователя
Система должна поддерживать изменение параметров пользователя
Система должна обеспечивать регистрацию пользователя
1.3 Перечень и описание сущностей и атрибутов базы данных
Выделили следующие сущности:
Пользователи-в ней находятся данные по пользователям
Письма-в ней находятся данные переписки
Фотографии- ссылки на фото пользователей
Перечень и описание всех атрибутов базы данных «Сайт знакомств»
Таблица 1
№
Имя атрибута
Описание
1.
Ник
Ник пользователя
2.
Пароль
Пароль пользователя
3.
Мыло
Эл. Ящик пользователя
4.
ДатаРег
Дата регистрации
5.
ДатаРожд
Дата рождения
6.
Глав
Главная фотография
7.
КолПросм
Кол-во просмотров анкеты пользователя
8.
ВремяЗаход
Время последнего захода
9.
Муж
Пол пользователя
10.
Рейтинг
Рейтинг пользователя
11
Сообщен
Тело сообщения
12
ОтКого
От кого сообщение
13
КодФото
Уникальный код фотографии
14
ДатаПослан
Когда было послано сообщение
15
ИмяФото
Имя фотографии
16
КодПисьма
Уникальный код письма
17
Кому
Кому было послано сообщение
18
Прочит
Прчитано илинет
2. Проектирование. Нормализация базы данных. Схема данных
2.1 Пошаговое описание нормализации базы данных (методом ER-диаграмм)
Определим сущности:
Пользователи
Письма
Фотографии
Шаг 1. Каждый пользователь может имеет несколько писем. По этому со стороны пользователя модальность необязательно координальность много. Каждое письмо обязательно должно иметь двух пользователей. По этому со стороны переписки модальность обязательно координальность много.
Итак, получим ER-диаграмму, представленную на рис. 1:
Письма КодПисьма
Пользователи Nik
Рис. 1
Шаг 2. Каждый пользователь может имеет несколько фотографий. По этому со стороны пользователя модальность необязательно координальность много. Каждая фотография обязательно должно иметь только одного пользователя. По этому со стороны фотографии модальность обязательно координальность 1.
Итак, получим ER-диаграмму, представленную на рис. 2:
Пользователи Nik Фотографии КодФото
Итак, получим ER-диаграмму, представленную на рис. 3:
Письма КодПисьма
Пользователи Nik
Принадлежат
Фотографии КодФото
Подробное описание нормализации каждой связи.
Шаг 1. Связь Имеют. Кардинальность связи многие ко многим. Требуются три отношения по одному для каждой сущности и одно для связи. Получим отношения:
Пользователи (Ник, Пароль, Мыло, ДатаРег, ДатаРожд, КолПросм, ВремяЗаход, Муж, Рейтинг)
Письма (КодПисьма, Сообщен, ОтКого, ДатаПослан, Кому )
ПользоватПисьма(КодПисьма, Ник)
Шаг 2. Связь Принадлежат. Кардинальность связи один ко многим и модальность со стороны М-связной сущности "обязательно". Требуются два отношения по одному для каждой сущности. При этом ключ сущности будет первичным ключом для соответствующего отношения, и ключ односвязной сущности должен быть добавлен как атрибут (внешний ключ) в отношение, отводимое для М-связной сущности.
Получим отношения:
Пользователи (Ник, Пароль, Мыло, ДатаРег, ДатаРожд, КолПросм, ВремяЗаход, Муж, Рейтинг)
Фото(КодФото, Глав, ИмяФото,Ник)
2.2 Схема данных
После нормализации получили следующие отношения:
Пользователи (Ник, Пароль, Мыло, ДатаРег, ДатаРожд, КолПросм, ВремяЗаход, Муж, Рейтинг)
Письма (КодПисьма, Сообщен, ОтКого, ДатаПослан, Кому )
ПользоватПисьма(КодПисьма, Ник)
Фото(КодФото, Глав, ИмяФото,Ник)
2.3 Перечень и описание таблиц и их полей (с указанием типов данных и ограничений) в сводной таблице
Таблица 2. Сводная таблица атрибутов и отношений базы данных «Сайт знакомств» после нормализации методом ER-диаграмм
Имя отношения (таблицы)
Имя атрибута
Имя поля
Тип д-х
Описание
Пользователи (Polzovateli)
Ник
Nik
tinitext
Ник пользователя
Пароль
Parol
tinitext
Пароль пользователя
Мыло
Milo
tinitext
Эл. Ящик пользователя
ДатаРожд
DataRozhd
date
Дата рождения пользователя
ДатаРег
DataReg
date
Дата регистр. пользователя
КолПросм
KolProsm
mediumint
Кол-во просмотров анкеты пользователя
ВремЗаход
VremZahod
datetime
Время последнего захода пользователя
Муж
Muzh
set
Пол пользователя
Рейтинг
Reiting
mediumint
Рейтинг пользователя
Письма(Soobshen)
КодПисьма
KodPisma
int
Уникальный код письма
ОтКого
OtKogo
tinytext
Чье письмо
ДатаПослан
DataPoslan
datetime
Дата послания письма
Сообщен
Sobshen
text
Тело письма
Прочит
Prochit
Set(1,0)
Прочитано или нет
Кому
Komu
tinytext
Кому письмо
Фотографии(Foto)
КодФото
KodFoto
int
Уникальный код фотографии
Ник
Nik
tinytext
Кому принадлежит фото
ИмяФото
ImaFoto
tinytext
Имя фотографии
Глав
Glav
set
Главная ли фотография
ПользоватПисьма(PolzovatPisma)
Ник
Nik
tinitext
Ник пользователя
КодПисьма
KodPisma
int
Уникальный код письма
Программная часть. Руководство программиста
Сайт состоит из 7 скриптов каждый из которых выполняет определенные функции.
INDEX –с него запускается сайт содержит проверку пароля и Ника и ссылки на другие страницы включая регистрацию.
DOBAVFOTO-скрипт осуществляет добавление, удаление, и выбор главной фотографии т.е в нем осущиствлена вся работа с фотографиями
POISK-скрипт ищет претендентов на переписку по запросу пользователя
POSILKAPISEM-скрипт осуществляет отправку сообщений
PROSMOTRANKET-скрипт осуществляет просмотр своей и чужой анкеты
PROSMOTRSOBSHEN-скрипт осуществляет просмотр отправленных и принятых сообщений
REGISTRACIYA-скрипт осуществляет регистрацию пользователей
Тестирование. Результаты тестирования.
Никаких сбоев при выполнении тестирования не обнаружены. Все работает исправно.
Сопровождение. Руководство пользователя
Незарегестрированым пользователям не обходимо зарегестрироваться для этого необходимо перейти по ссылке «зарегестрироваться». Для зарегестрированых пользователей нужно вести свой ник и пароль и переходить по ссылкам.
Ссылки:
Поиск-осуществляет поиск пользователей
Просмотр анкеты- просмотр своей анкеты
Просмотр сообщений- просмотр отправленных и принятых сообщений
Отправка сообщений-отправка сообщений пользователям
Список использованной литературы
Колисниченко Д.Н. Самоучитель PHP 5. – Издание 2-е – СПб.:Наука и Техника, 2005.
Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5 на примерах. – СПб.: БХВ – Петербург, 2005.
Кузнецов С.Д. PHP 4.0. Руководство пользователя. – М.: Майор, 2001.
Приложение 1. Исходный текст приложения
include_once "PodkluchaemsyaKBaze.php";
if(isset($_REQUEST['Ok']))
{
//======================Проверка на заполнение всех полей
if(($_REQUEST['adres']!=="")&&($_REQUEST['NomProekt']!=="")&&($_REQUEST['Postroen']!==""))
{
$Adres=$_REQUEST['adres'];
$NomProekt=$_REQUEST['NomProekt'];
if($_REQUEST['Postroen']==='Да')
{$Postroen=1;}
if($_REQUEST['Postroen']==='Нет')
{$Postroen=0;}
//===========================проверка на наличие в базе
$rez=mysql_query("SELECT * FROM Dom WHERE AdresDoma='".$Adres."'");
if(mysql_num_rows($rez))
{echo "<br><h3>Дом уже находиться в базеh3><br>";}
else
{
//==========================Вносим в базу
mysql_query("INSERT INTO Dom SET AdresDoma='".$Adres."', NomerProekta='".$NomProekt."', Postroika='".$Postroen."'") or die(mysql_error());
echo "Дом добавлен
";
}
}
else
{
echo " <br><h3>Вы заполнили не все поля попробуйте ещеh3>";
}
}
include_once "PodkluchaemsyaKBaze.php";
//=====================Выводим адреса домов
$rez=mysql_query("SELECT AdresDoma FROM Dom");
for($data=array();$row=mysql_fetch_assoc($rez);$data[]=$row)
{
echo "";
}
?>
if(isset($_REQUEST['Ok']))
{
//=====================Проверка на заполнение всех полей
if(($_REQUEST['Adres']!=="")&&($_REQUEST['NomerKv']!=="")&&($_REQUEST['KolKomnat']!=="")&&($_REQUEST['Klas']!=="")&&($_REQUEST['etazh']!==""))
{
$Adres=$_REQUEST['Adres'];
$NomKv=$_REQUEST['NomerKv'];
$KolKomnat=$_REQUEST['KolKomnat'];
$Klas=$_REQUEST['Klas'];
$Etazh=$_REQUEST['etazh'];
$Ploshad=$_REQUEST['Ploshad'];
$rez=mysql_query("SELECT KodDoma FROM Dom WHERE AdresDoma='".$Adres."'");
for($data=array();$row=mysql_fetch_assoc($rez);$data[]=$row)
{
$KodDoma=$row['KodDoma'];
}
//=====================Проверка на наличие квартиры в базе
$rez=mysql_query("SELECT * FROM Kvartira WHERE KodDoma='".$KodDoma."' AND NomerKvartiri='".$NomKv."'");
if(mysql_num_rows($rez))
{echo "<br><h3>Квартира уже находиться в базеh3><br>";}
else
{
//=============================Вносим в базу
mysql_query("INSERT INTO Kvartira SET KodDoma='".$KodDoma."', NomerKvartiri='".$NomKv."', Metrazh='".$Ploshad."', KolichestvoKomnat='".$KolKomnat."', KlasKvartiri='".$Klas."', Etazh='".$Etazh."'") or die(mysql_error());
echo "<br><h3 color=\"black\">Квартира добавленah3>";
}
}
else
{
echo " <br><h3>Вы заполнили не все поля попробуйте ещеh3>";
}
}
include_once "PodkluchaemsyaKBaze.php";
if(isset($_REQUEST['Ok']))
{
//=====================Проверка на заполнение всех полей
if(($_REQUEST['FIO']!=="")&&($_REQUEST['Adres']!=="")&&($_REQUEST['Dolzhnost']!=="")&&($_REQUEST['Brigada']!==""))
{
$Adres=$_REQUEST['Adres'];
$FIO=$_REQUEST['FIO'];
$Dolzhnost=$_REQUEST['Dolzhnost'];
$Brigada=$_REQUEST['Brigada'];
//=====================Проверка на наличие рабочего в базе
$rez=mysql_query("SELECT * FROM Rabochiy WHERE FIORabochego='".$FIO."' AND Adres='".$Adres."'");
if(mysql_num_rows($rez))
{echo "<br><h3>Рабочий уже находиться в базеh3><br>";}
else
{
//=============================Вносим в базу
mysql_query("INSERT INTO Rabochiy SET FIORabochego='".$FIO."', Adres='".$Adres."', Dolzhnost='".$Dolzhnost."', Brigada='".$Brigada."'") or die(mysql_error());
echo "Рабочий добавлен
";
}
}
else
{
echo " <br><h3>Вы заполнили не все поля попробуйте ещеh3>";
}
}
include_once "PodkluchaemsyaKBaze.php";
//==================Выводим адреса домов
$rez=mysql_query("SELECT AdresDoma FROM Dom");
for($data=array();$row=mysql_fetch_assoc($rez);$data[]=$row)
{
echo "";
}
?>
if(isset($_REQUEST['Ok']))
{
$Adres=$_REQUEST['Adres'];
$NomKv=$_REQUEST['NomerKv'];
$KolKomnat=$_REQUEST['KolKomnat'];
$Klas=$_REQUEST['Klas'];
$Etazh=$_REQUEST['etazh'];
$Ploshad=$_REQUEST['Ploshad'];
//=====================Создание запроса
$zap="SELECT * FROM Kvartira WHERE ";
$hren=0;
if($_REQUEST['NomerKv']!=="")
{$zap=$zap."NomerKvartiri='".$NomKv."'"; $hren=1;}
if($_REQUEST['KolKomnat']!=="")
{
if($hren===1)
{$zap=$zap." AND ";}
$zap=$zap." KolichestvoKomnat='".$KolKomnat."'";
$hren=1;
}
if($_REQUEST['Klas']!=="")
{
if($hren===1)
{$zap=$zap." AND ";}
$zap=$zap." KlasKvartiri='".$Klas."'";
$hren=1;
}
if($_REQUEST['etazh']!=="")
{
if($hren===1)
{$zap=$zap." AND ";}
$zap=$zap." Etazh='".$Etazh."'";
$hren=1;
}
if($_REQUEST['Ploshad']!=="")
{
if($hren===1)
{$zap=$zap." AND ";}
$zap=$zap." Ploshad='".$Ploshad."'";
$hren=1;
}
if($_REQUEST['Adres']!=="")
{
//==========================Ищем код дома по его адресу
$rez=mysql_query("SELECT KodDoma FROM Dom WHERE AdresDoma='".$Adres."'");
for($data=array();$row=mysql_fetch_assoc($rez);$data[]=$row)
{
$KodDoma=$row['KodDoma'];
}
if($hren===1)
{$zap=$zap." AND ";}
$zap=$zap." KodDoma='".$KodDoma."'";
}
//=======================Подаем созданый запрос
$rez=mysql_query($zap);
if(!mysql_num_rows($rez))
{
echo "<br><h3>По запросу ничего не найденоh3><br>";
}
else
{
//=======================Вывод результатов поиска в таблице
echo " echo " for($data=array();$row=mysql_fetch_assoc($rez);$data[]=$row) { //==================================Ищем адрес дома по его коду $rezult=mysql_query("SELECT AdresDoma FROM Dom WHERE KodDoma='".$row['KodDoma']."'"); for($datas=array();$rows=mysql_fetch_assoc($rezult);$data[]=$rows) { $AdresDoma=$rows['AdresDoma']; } echo " } echo ""; } } include_once "PodkluchaemsyaKBaze.php"; echo ""; echo " echo " $rez=mysql_query("SELECT * FROM Pokupka"); for($data=array();$row=mysql_fetch_assoc($rez);$data[]=$row) { $KodKlienta=$row['KodKlienta']; $KodKvartiri=$row['KodKvartiri']; $rez1=mysql_query("SELECT * FROM Klient WHERE KodKlienta='".$KodKlienta."'"); for($data1=array();$row1=mysql_fetch_assoc($rez1);$data1[]=$row1) { $FIO=$row1['FIO']; } $rez2=mysql_query("SELECT * FROM Kvartira WHERE KodKvartiri='".$KodKvartiri."'"); for($data2=array();$row2=mysql_fetch_assoc($rez2);$data2[]=$row2) { $rezult=mysql_query("SELECT AdresDoma FROM Dom WHERE KodDoma='".$row2['KodDoma']."'"); for($datas=array();$rows=mysql_fetch_assoc($rezult);$data[]=$rows) { $AdresDoma=$rows['AdresDoma']; } echo " } } echo " "; if(isset($_REQUEST['Ok'])) { $data=array(); $data=$_REQUEST['ima']; foreach ($data as $v=>$k) { mysql_query("DELETE FROM Pokupka WHERE KodKlienta='".$v."' AND KodKvartiri='".$k."'"); echo "<br><h3> Удалилиh3>"; } } //------------Начало открытии базы-------------- $user="root"; $pass=""; $db="Oleg"; mysql_connect("Oleg",$user,$pass) or die("Could not connect: ".mysql_error()); mysql_select_db($db) or die("Could not select database: ".mysql_error()); //-----------Конец открытию базы-------------------- //===========================Здесь пишутся(в браузере) все рабочии include_once "PodkluchaemsyaKBaze.php"; $rez=mysql_query("SELECT FIORabochego FROM Rabochiy"); for($data=array();$row=mysql_fetch_assoc($rez);$data[]=$row) { echo ""; } ?> //========================Здесь пишутся(в браузере) все адреса домов и квартир $rez=mysql_query("SELECT AdresDoma, NomerKvartiri FROM Dom D ,Kvartira K WHERE D.KodDoma=K.KodDoma"); for($data=array();$row=mysql_fetch_assoc($rez);$data[]=$row) { echo ""; } ?> if(isset($_REQUEST['Ok'])) { $Rabochiy=$_REQUEST['Rabochiy']; $Adres=$_REQUEST['Kvartira']; $massiv=array(); //===============вычисляет регулярное выражение разделяет улицу и номер дома от номера квартиры preg_match('/([a-z]+[\D][0-9.]+)@([a-z0-9.]+)/is',$Adres,$massiv); //======================================Находим код дома $rez=mysql_query("SELECT KodDoma FROM Dom WHERE AdresDoma='".$massiv[1]."'"); for($data=array();$row=mysql_fetch_assoc($rez);$data[]=$row) { $KodDoma=$row['KodDoma']; } //=======================================По коду дома на ходим код квартиры $rez=mysql_query("SELECT KodKvartiri FROM Kvartira WHERE KodDoma='".$KodDoma."' AND NomerKvartiri='".$massiv[2]."'"); for($data=array();$row=mysql_fetch_assoc($rez);$data[]=$row) { $KodKvartiri=$row['KodKvartiri']; } //=======================================Находим код рабочего $rez=mysql_query("SELECT KodRabochego FROM Rabochiy WHERE FIORabochego='".$Rabochiy."'"); for($data=array();$row=mysql_fetch_assoc($rez);$data[]=$row) { $KodRabochego=$row['KodRabochego']; } //===================================Закрепляем рабочего за квартирой mysql_query("INSERT INTO Stoyka SET KodRabochego='".$KodRabochego."', KodKvartiri='".$KodKvartiri."'"); echo " } include_once "PodkluchaemsyaKBaze.php"; //=======================Выводим адреса домов $rez=mysql_query("SELECT AdresDoma FROM Dom"); for($data=array();$row=mysql_fetch_assoc($rez);$data[]=$row) { echo ""; } ?> Квартира include_once "PodkluchaemsyaKBaze.php"; if(isset($_REQUEST['Ok'])) { //======================Проверка на заполнение всех полей if(($_REQUEST['Adres']!=="")&&($_REQUEST['Kvartira']!=="")&&($_REQUEST['FIO']!=="")&&($_REQUEST['AdrKlient']!=="")) { $Adres=$_REQUEST['Adres']; $Kvartira=$_REQUEST['Kvartira']; $FIO=$_REQUEST['FIO']; $AdrKlient=$_REQUEST['AdrKlient']; //=============================Ищем код дома по его адресу $rez=mysql_query("SELECT KodDoma FROM Dom WHERE AdresDoma='".$Adres."'"); for($data=array();$row=mysql_fetch_assoc($rez);$data[]=$row) { $KodDoma=$row['KodDoma']; } //==========================Проверяем а есть ли такая квартира $rez=mysql_query("SELECT KodKvartiri FROM Kvartira WHERE KodDoma='".$KodDoma."' AND NomerKvartiri='".$Kvartira."'"); if(!mysql_num_rows($rez)) { echo "<br><h3>Квартира не существует ведите данные правильноh3>"; } else { //===========================Ищем код квартиры по адресу и номеру квартиры $rez=mysql_query("SELECT KodKvartiri FROM Kvartira WHERE KodDoma='".$KodDoma."' AND NomerKvartiri='".$Kvartira."'"); for($data=array();$row=mysql_fetch_assoc($rez);$data[]=$row) { $KodKvartiri=$row['KodKvartiri']; } //==========================Проверка есть ли в нашей базе этот клиент если нет добовляем его $rez=mysql_query("SELECT KodKlienta FROM Klient WHERE FIO='".$FIO."' AND AdresKlienta='".$AdrKlient."'"); if(!mysql_num_rows($rez)) { mysql_query("INSERT INTO Klient SET FIO='".$FIO."', AdresKlienta='".$AdrKlient."'"); } //==============================Ищем код клиента для дальнейшего ввода в базу покупка $rez=mysql_query("SELECT KodKlienta FROM Klient WHERE FIO='".$FIO."' AND AdresKlienta='".$AdrKlient."'"); for($data=array();$row=mysql_fetch_assoc($rez);$data[]=$row) { $KodKlienta=$row['KodKlienta']; } //=========================Проверяем есть ли заявки на эту квартиру $rez=mysql_query("SELECT KodKlienta FROM Pokupka WHERE KodKvartiri='".$KodKvartiri."'"); if(mysql_num_rows($rez)) { echo "<br><h3>Квартира уже зОбитаh3>"; } //=============================Если заявок нет вносим этого клиента в базу Покупка else { mysql_query("INSERT INTO Pokupka SET KodKlienta='".$KodKlienta."', KodKvartiri='".$KodKvartiri."'"); echo "<br><h3>Заявка внесена в базуh3>"; } } } else { echo "<br><h3>Заполните все поляh3>"; } } ?> Чтобы скачать документ, порекомендуйте, пожалуйста, его своим друзьям в любой соц. сети. После чего кнопка «СКАЧАТЬ» станет доступной! Кнопочки находятся чуть ниже. Спасибо! Кнопки:Адрес Квартира Площадь Кол-во комнат Класс квартиры Этаж "; ".$AdresDoma." ".$row['NomerKvartiri']." ".$row['Metrazh']." ".$row['KolichestvoKomnat']." ".$row['KlasKvartiri']." ".$row['Etazh']." ";
Адрес Квартира Площадь Кол-во комнат Класс квартиры Этаж Владелец "; ".$AdresDoma." ".$row2['NomerKvartiri']." ".$row2['Metrazh']." ".$row2['KolichestvoKomnat']." ".$row2['KlasKvartiri']." ".$row2['Etazh']." ".$FIO." "; Рабочий закреплен
";
Нравится материал? Поддержи автора!
Ещё документы из категории информатика: