Программная реализация предметной области "Ремонт часов"

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

Федеральное государственное образовательное учреждение высшего профессионального образования «Чувашский государственный университет им. И.Н. Ульянова»

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

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

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











Пояснительная записка



к курсовой работе

на тему:



«Ремонт часов»





Выполнил: студент ИВТ 13-06

	Димитриев А. А

	Проверил: Буланкина Е.Ю











Чебоксары – 2009 г.


Задание



Необходимо выполнить анализ предметной области «Ремонт часов», провести ее нормализацию и реализовать программно. При этом обязательно использование СУБД MySQL, языка HTML, технологии PHP и ADO и на выбор скриптовые языки VBScript или JavaScript.



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



Нормализация базы данных

Дано описание предметной области:

Ремонт часов.

Автоматизировать систему заказа часовой мастерской. О заказе известно: марка часов, клиент (ФИО, адрес, телефон), мастера, которые выполняют заказ, описание услуг и запасных частей заказа. Необходимо иметь информацию о расценках мастерской. Если клиент приносит сразу несколько часов в ремонт, то они оформляются разными заказами.

Описание функций базы данных:

Система должна хранить данные о мастерах: код мастера, ФИО мастера.

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

Система должна хранить данные о запасных частях: код детали, вид детали, стоимость.

Перечень сущностей БД:

Мастера;

Клиенты;

Услуги;

Запасные части;

Заказ;

Описание сущностей БД:

1) Мастера. Это сущность. О нам известно код мастера, ФИО мастера. 

		 Клиенты. Это сущность. О клиенте нам известно код клиента, ФИО клиента, адрес и телефон клиента.

		 Услуги. Это сущность. Об услуге нам известно код услуги, наименование услуги, стоимость. 

		 Запасные Части. Это сущность. О запасных частях нам известно код, наименование и стоимость детали. 

		 Заказ. Это сущность. О заказе нам известно марка часов, клиент (ФИО, адрес, телефон), мастера, которые выполняют заказ, описание услуг и запасных частей заказа.



Перечень и описание атрибутов БД

№

Имя атрибута

Описание атрибута

1

Код Мастера

Уникальный код мастера

2

ФИО Мастера

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

3

Код Клиента

Уникальный код клиента

4

ФИО Клиента

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

5

Тел Клиента

Телефон клиента

6

Адрес Клиента

Адрес клиента

7

Код Услуги

Уникальный код услуги

8

Наимен Услуги

Наименование услуги

9

Стоимость Услуги

Стоимость услуги

10

Код Зап Части

Уникальный код запасной части

11

Наимен Зап Части

Наименование запасной части

12

Стоимость Зап Части

Стоимость

13

Код Заказа

Уникальный код заказа

14

Код Клиента

Уникальный код клиента

15

Марка Часов

Марка часов



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



Нормализация базы данных с использованием модели ER-диаграмм

Построение ER-диаграммы

Мастера;

Клиенты;

Услуги;

Запасные части;

Заказ;



//--------------------------Шаг 1:-----------------------------------------------------------------------------------------------------------------------------



Определим модальность связи. 

«Мастер не обязательно выполняет Заказ» (модальность связи со стороны сущности Мастер «не обязательно»). 

«Заказ обязательно выполняется Мастером» (модальность связи со стороны сущности Заказ «обязательно»). 

Определим кардинальность связи. 

«Один Мастер может выполнять несколько Заказов”»(кардинальность со стороны сущности Заказ «Много»).

«Над одним Заказом могут работать несколько Мастеров» (кардинальность со стороны сущности Мастер «Много»).





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

---------------------------------------------------------------------

//--------------------------Шаг 2:--------------------------------------------------------

---------------------------------------------------------------------



Если клиент приносит сразу несколько часов в ремонт, то они оформляются разными заказами.

Определим модальность связи.

Клиент обязательно оформляет Заказ (модальность связи со стороны сущности Клиент обязательно). 

«У Заказа обязательно имеется Клиент» (модальность связи со стороны сущности Заказ «обязательно»). 

Определим кардинальность связи. 

«Клиент может принести сразу несколько часов, то они оформляются разными Заказами» (кардинальность со стороны сущности Заказ «Много»).

«Один Заказ оформляется только на одного Клиента» (кардинальность со стороны сущности Клиент «Один»).





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

---------------------------------------------------------------------

//--------------------------Шаг 3:--------------------------------------------------------

---------------------------------------------------------------------



О заказе известно: марка часов, клиент(ФИО, адрес, телефон), мастера, которые выполняют заказ, описание услуг и запасных частей заказа.

Определим модальность связи. 

«В Заказе обязательно присутствуют Услуги» (модальность связи со стороны сущности Заказ «обязательно»). 

«Услуга не обязательно присутствует в Заказе» (модальность связи со стороны сущности Услуги «не обязательно»). 

Определим кардинальность связи. 

«В один Заказ может входить несколько видов Услуг» (кардинальность со стороны сущности Услуги «Много»).

«Одни и те же Услуги могут входить в разные Заказы» (кардинальность со стороны сущности Заказ «Много»).




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

---------------------------------------------------------------------

//--------------------------Шаг 4:--------------------------------------------------------

---------------------------------------------------------------------



О заказе известно: марка часов, клиент(ФИО, адрес, телефон), мастера, которые выполняют заказ, описание услуг и запасных частей заказа.

Определим модальность связи. 

"В Заказе не обязательно имеются Запасные части" (модальность связи со стороны сущности Заказ "не обязательно"). 

"Запасные части не обязательно имеются в Заказе" (модальность связи со стороны сущности Запасные части "не обязательно"). 

Определим кардинальность связи. 

«В один Заказ могут входить несколько Запасных частей» (кардинальность со стороны сущности Запасные части «Много»).

«Одни те же виды Деталей(запасные части) могут входить в разные Заказы» (кардинальность со стороны сущности Заказ "Много").





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

------------------------------------------

	

	
Окончательная диаграмма имеет вид:

	



Отношения после нормализации



Клиент (Код Клиента, ФИО Клиента, Адрес Клиента, Тел Клиента);

Мастер (Код Мастера, ФИО Мастера);

Услуги (Код Услуги, Вид Услуги, Стоимость);

Зап Части (Код Зап Части, Наимен Зап Части, Стоимость);

Заказ (Код Заказа, Код Клиента, Марка Часов);

Заказ Мастер (Код Заказа, Код Мастера);

Заказ Услуги (Код Заказа, Код Услуги);

Заказ Зап Части (Код Заказа, Код Зап Части);

	

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

	

	Таблица 2. Сводная таблица имен отношений, атрибутов, таблиц, полей и типов данных базы данных «Ремонт Часов» после нормализации методом ER-диаграмм

Имя отношения (таблицы)

Имя атрибута

Имя поля

Тип данных

Описание

Клиент

КодКлиента

KodKlienta

bigint(3)+ *

Уникальный код клиента

ФИОКлиента

FIOKlienta

varchar(45)

ФИО клиента

АдресКлиента

AdresKlienta

varchar(45)

Адрес клиента

ТелКлиента

 TelKlienta

bigint(9)

Телефон клиента

Мастера

КодМастера

KodMastera 

bigint(3)+ *

Уникальный код мастера

ФИОМастера

FIOMastera

varchar(45)

ФИО мастера

Услуги

КодУслуги

KodService

bigint(3)+*

Уникальный код услуги

ВидУслуги

NameService

varchar(45)

Вид услуги

Стоимость

CenaService

int(9)

Стоимость услуги

Запасные части

КодЗапЧасти

 KodZapChasti

bigint(3)+ *

Уникальный код детали

ВидЗапЧасти

NameZapChasti

varchar(45)

Вид детали

Стоимость

CenaZapChasti

int(9)

Стоимость детали

Заказ

КодЗаказа

KodZakaza

bigint(3)+ *

Уникальный код заказа

КодКлиента

KodKlienta

bigint(3)

Код клиента

МаркаЧасов

MarkaChasov

varchar(45)

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

ЗаказМастер

КодЗаказа

KodZakaza

bigint(3)

Уникальный код заказа

КодМастера

KodMastera

bigint(3)

Уникальный код мастера

ЗаказУслуги

КодЗаказа

 KodZakaza 

bigint(3)

Уникальный код заказа

КодУслуги

KodService

bigint(3)

Уникальный код суслуги

ЗаказЗапЧасти

КодЗаказа

KodZakaza 

bigint(3)

Уникальный код заказа

КодЗапЧасти

KodZapChasti

bigint(3)

Уникальный код детали



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



В данной выполненной курсовой работе по дисциплине «Базы данных» был спроектирован сайт «Ремонт часов».

Были использованы такие языки программирования сайтов, как, PHP, HTML, JavaScript, MySQL.

В разработанном приложении использовались функции:

1) mysql_connect - Открывает соединение с сервером MySQL. 

Описание: resource mysql_connect ( [string server [, string username [, string password [, bool new_link [, int client_flags]]]]] ). Возвращает указатель на соединение с MySQL в случае успешного выполнения, или FALSE при неудаче.



Пример использования mysql_connect()



<?php$link = mysql_connect("localhost", "mysql_user", "mysql_password") or die("Could not connect: " . mysql_error()); print ("Connected successfully"); mysql_close($link);?> 

2) mysql_select_db - Выбирает базу данных MySQL.

Описание: bool mysql_select_db ( string database_name [, resource link_identifier] )

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки. 



Пример использования mysql_select_db()



<?php $lnk = mysql_connect('localhost', 'mysql_user', 'mysql_password') or die ('Not connected : ' . mysql_error()); // сделать foo текущей базой данных mysql_select_db('foo', $lnk) or die ('Can\'t use foo : ' . mysql_error()); ?> 

3) mysql_query - Посылает запрос MySQL. mysql_query() посылает запрос активной базе данных сервера, на который ссылается переданный указатель.



Пример: mysql_query("select NazvanSudna from Suda", $conn);



4) mysql_fetch_array - Обрабатывает ряд результата запроса, возвращая ассоциативный массив, численный массив или оба. 

Описание: array mysql_fetch_array ( resource result [, int result_type] )

Возвращает массив с обработанным рядом результата запроса, или FALSE, если рядов больше нет.



Пример: $row11 = mysql_fetch_array($query11);



Во многих файлах применялась функция IsInputEmpty(), определяющая заполнены ли поля для ввода.



<script language="javascript">

<!--

 function IsInputEmpty(val1)

{

if ((val1.length==0))

{

alert("Заполните, пожалуйста, все поля!");

return false;

};

return true;

};

-->

</script>

<form action="" method=post onSubmit="return IsInputEmpty(this.FKlienta.value);">



Тестирование. Результаты тестирования



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

	При помощи Ява Скрипта:






Пока поле не будет заполнено программа дальше работать не будет.



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





Главная страница сайта index1.htm



1) Главная страница содержит 4 гиперссылок: основная из них «Заказ» адресуется на страницу addzakaz.php.

При оформлении заказа нужно заполнить шесть полей: Фамилия Клиента, Имя Клиента, Отчество Клиента, Телефон Клиента, Адрес Клиента, Марка часов; а также нужно выбрать Мастеров для выполнения заказа, Услуги и Запасные части из имеющегося списка. При занесении новой записи данные поступают в таблицы: Klient, Zakaz, ZakazMaster, ZakazService, ZakazZapChasti.







Функция «услуги»





Позволяет просмотреть предоставляемые услуги



Функция «О нас»







Позволяет просмотреть информацию о сервисном центре.



4) Функция “Добавить/удалить” позволяет добавить в базу данных нового мастера, услуги, запасные части или удалить из списка. После выбора этой функции пользователю необходимо выбрать одну из 3 ссылок.








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



		Колисниченко Д.Н. Самоучитель PHP 5. – Издание 2-е – СПб.:Наука и Техника, 2005.

		Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5 на примерах. – СПб.: БХВ – Петербург, 2005.

		Кузнецов С.Д. PHP 4.0. Руководство пользователя. – М.: Майор, 2001.

	


Приложение 1



Исходный текст приложения



//--------------Основная функция----------------------------------------------------

--------------------

addzakaz.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 

Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<title>Оформление заказа</title>

<meta content="text/html; charset=windows-1251" http-equiv="Content-Type" />

<meta http-equiv="Content-Language" content="ru-RU" />

<meta name="language" content="russian ru русский" />

<style type="text/css">

<!--

style1 {

font-family: "Times New Roman", Times, serif;

font-size:18px;

 color:#3399FF;

}

-->

</style>

<body style="color: rgb(0, 0, 0); background-color: rgb(255, 253, 225);">

</head>

<body>

<table width="780" border="0" cellspacing="0" cellpadding="0">

<tr>

<td align="center" class="style1"><strong>[<span class="style1"><a href="index.htm" class="style1">на главную</a> | <a href="javascript:history.go(-1)" class="style1"> назад</a></span>]</strong>

</td>

</tr>

</table>

<p>&nbsp;</p>

<p><span class="style1"><font size="6" face="Monotype Corsiva">Оформление заказа</font></span></p>

<hr style="color: #C0C0C0" align="left" width="780">

<p>&nbsp;</p>

<p align="left">

<?

$conn = mysql_connect("localhost", "root", "");

mysql_select_db("RemontChasov", $conn);

if($_SERVER['REQUEST_METHOD']!=='POST')

{ 

echo '<p><strong>Введите данные клиента:</strong></p>';

echo '<table><form action='.$_SERVER['PHP_SELF'].' method=post>';

 echo '<table width="400" border="0">

 <td>

<tr>

<td><div align="left">Фамилия</div></td>

<td><input type=text name=FKlienta></td>

</tr>

<tr>

<td><div align="left">Имя</div></td>

<td><input type=text name=IKlienta></td>

</tr>

<tr>

<td><div align="left">Отчество</div><p>&nbsp;</p></td>

<td><input type=text name=OKlienta><p>&nbsp;</p></td>

</tr>

<tr>

<td><div align="left">Телефон</div></td>

<td><input type=text name=TelKlienta></td>

</tr>

<tr>

<td><div align="left">Адрес</div></td>

<td><input type=text name=AdresKlienta></td>

</tr>

<tr>

<td><div align="left">Марка часов</div></td>

<td><input type=text name=MarkaChasov></td>

</tr>

</td>

<td>

'; 

echo ' </table>

<p><div align="left"><input name="submit" type=submit value=" Далее "></div></p>

</form><br>';

}

if (isset($FKlienta) && isset ($IKlienta) && isset ($OKlienta)&& isset ($MarkaChasov)&& strlen($FKlienta)!=0 && strlen($IKlienta)!=0 && strlen($OKlienta)!=0&& strlen($MarkaChasov)!=0)

{	 

echo ' <table><form action=nextaddzakaz.php method="post" >

<input type=hidden name=fklienta value='.$FKlienta.'>

<input type=hidden name=iklienta value='.$IKlienta.'>

<input type=hidden name=oklienta value='.$OKlienta.'>

<input type=hidden name=telklienta value='.$TelKlienta.'>

<input type=hidden name=adresklienta value='.$AdresKlienta.'>

<input type=hidden name=markachasov value='.$MarkaChasov.'>

if($_SERVER['REQUEST_METHOD']=='POST')

{ 

echo ' <table width="300" border="0">

<tr>

<td><div align="left"><strong>№</strong></div></td>

<td><div align="left"><strong>Мастер</strong></div></td>

<td width=20></td>

</tr>';

$query7 = mysql_query("Select * from Master", $conn);

while ($row7 = mysql_fetch_array($query7))

{ 

echo '<tr>

<td><div align="left">'.$row7['KodMastera'].'</div></td>		 

<td><div align="left">'.$row7['FIOMastera'].'</div></td>

<td><input type=checkbox name=kodmastera[] value='.$row7['KodMastera'].'></td>

</tr>';

}

echo ' </table>';

echo '<p>&nbsp;</p>';

echo '<table border="0">';

echo ' 

<tr><td

width="300"><p><div align=left><strong>Услуги</strong></div></p>

<select name=service size=7 multiple>';

$query8 = mysql_query("Select NameService from Service", $conn);

while ($row8 = mysql_fetch_array($query8))

{

echo '<option value=1># '.$row8['NameService'].'</option>	

}

echo '</select></td>';

echo ' <td width="300"><p><div align=center><strong>Запасные части</strong></div></p>

<select name=zapchasti size=7 multiple>';

$query9 = mysql_query("Select NameZapChasti from ZapChasti", $conn);

while ($row9 = mysql_fetch_array($query9))

{

echo '<option value=1># '.$row9['NameZapChasti'].'</option>	 ';

}

echo '</select></td>';

echo '</tr></table>';



echo ' </table>

<p align="left">

<input name="submit" type=submit value=" Добавить "></p> '; 

}

echo ' </form><br>'; 

}

?> 

</p>

<table width="780" border="0" cellspacing="0" cellpadding="0">

<tr>

<td align="center" class="style1"><strong>[<a href="index.htm" class="style1">на главную</a> | <a href="javascript:history.go(-1)" class="style1"> назад</a>]</strong>

</td>

</tr>

</table>

</body>

</html>

nextaddzakaz.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<title>Заказ</title>

<meta content="text/html; charset=windows-1251" http-equiv="Content-Type" />

<meta http-equiv="Content-Language" content="ru-RU" />

<meta name="language" content="russian ru русский" />

<style type="text/css">

<!--

style1 {

font-family: "Times New Roman", Times, serif;

font-size:18px;

color:#3399FF;

}

-->

</style>

<body style="color: rgb(0, 0, 0); background-color: rgb(255, 253, 225);">

</head>

<body>

<table width="780" border="0" cellspacing="0" cellpadding="0">

<tr>

<td align="center" class="style1"><strong>[<span class="style1"><a href="index.htm" class="style1">на главную</a> |

<a href="javascript:history.go(-1)" class="style1"> назад</a></span>]</strong>

</td>

</tr>

</table>

<p>&nbsp;</p>

<p><span class="style1"><font size="6" face="Monotype Corsiva">Оформление заказа</font></span></p>

<hr style="color: #C0C0C0" align="left" width="780">

<p>&nbsp;</p>

<p><strong>Оформление заказа</strong></p>

<p align="left">

<?

$conn = mysql_connect("localhost", "root", "");

mysql_select_db("RemontChasov", $conn);

if( isset($_POST['kodmastera']))

{

$FIOKlienta = $_POST['fklienta'].' '.$_POST['iklienta'].' $_POST['oklienta'];

mysql_query("INSERT INTO Klient (KodKlienta, FIOKlienta, TelKlienta, AdresKlienta ) VALUES('', '$FIOKlienta', '{$_POST['telklienta']}', '{$_POST['adresklienta']}')", $conn);

$KodKlienta = mysql_insert_id();

mysql_query("INSERT INTO Zakaz (KodZakaza, KodKlienta, MarkaChasov) VALUES ('', '$KodKlienta', '{$_POST['markachasov']}' )", $conn);

$idZakaza = mysql_insert_id();

$res=count($kodmastera); 

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

{

mysql_query("INSERT INTO ZakazMaster (KodZakaza, KodMastera) VALUES ('$idZakaza', '{$_POST['kodmastera'][$i]}')", $conn);

}

echo(mysql_error());

$query0 = mysql_query("Select FIOMastera from Master where KodMastera='{$_POST['kodmastera']}'", $conn);

$row0 = mysql_fetch_array($query0);

echo 'ФИО клиента: '.$FIOKlienta.'<br>';

echo 'Телефон клиента: '.$_POST['telklienta'].'<br>';

echo 'Адрес клиента: '.$_POST['adresklienta'].'<br>';

echo 'Марка часов: '.$_POST['markachasov'].'<br>';

echo 'Мастера, выполняющие заказ: '.$row0['FIOMastera'].'<br>';

}

?> 

</p>

<table width="780" border="0" cellspacing="0" cellpadding="0">

<tr>

<td align="center" class="style1"><strong>[<a href="index.htm" class="style1">на главную</a> | <a href="javascript:history.go(-1)" class="style1"> назад</a>]</strong>

</td>

</tr>

</table>

</body>

</html>------------------------------------------------------------------------------------------------------------------------