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

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

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

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

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

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

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

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

На тему:

“Ремонт часов”

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1) Мастера;

2) Клиенты;

3) Услуги;

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

5) Заказ;

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

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

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

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

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

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

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

Имя атрибутаОписание атрибута
1Код МастераУникальный код мастера
2ФИО МастераФамилия, Имя, Отчество мастера
3Код КлиентаУникальный код клиента
4ФИО КлиентаФамилия, Имя, Отчество клиента
5Тел КлиентаТелефон клиента
6Адрес КлиентаАдрес клиента
7Код УслугиУникальный код услуги
8Наимен УслугиНаименование услуги
9Стоимость УслугиСтоимость услуги
10Код Зап ЧастиУникальный код запасной части
11Наимен Зап ЧастиНаименование запасной части
12Стоимость Зап ЧастиСтоимость
13Код ЗаказаУникальный код заказа
14Код КлиентаУникальный код клиента
15Марка ЧасовМарка часов

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

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

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

1) Мастера;

2) Клиенты;

3) Услуги;

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

5) Заказ;

//————————–Шаг 1:—————————————————————————————————————————–

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

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

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

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

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

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

//——————————————————————————————-

———————————————————————

//————————–Шаг 2:——————————————————–

———————————————————————

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

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

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

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

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

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

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

//——————————————————————————————-

———————————————————————

//————————–Шаг 3:——————————————————–

———————————————————————

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

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

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

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

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

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

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

//——————————————————————————————-

———————————————————————

//————————–Шаг 4:——————————————————–

———————————————————————

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

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

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

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

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

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

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

//——————————————————————————————-

——————————————

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

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

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

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

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

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

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

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

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

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

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

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

Имя отношения (таблицы)
Имя атрибутаИмя поляТип данныхОписание
Клиент
КодКлиентаKodKlientaBigint(3)+ *Уникальный код клиента
ФИОКлиентаFIOKlientaVarchar(45)ФИО клиента
АдресКлиентаAdresKlientaVarchar(45)Адрес клиента
ТелКлиентаBigint(9)Телефон клиента
Мастера
КодМастераKodMasteraBigint(3)+ *Уникальный код мастера
ФИОМастераFIOMasteraVarchar(45)ФИО мастера
Услуги
КодУслугиKodServiceBigint(3)+*Уникальный код услуги
ВидУслугиNameServiceVarchar(45)Вид услуги
СтоимостьCenaServiceInt(9)Стоимость услуги
Запасные части
КодЗапЧастиKodZapChastiBigint(3)+ *Уникальный код детали
ВидЗапЧастиNameZapChastiVarchar(45)Вид детали
СтоимостьCenaZapChastiInt(9)Стоимость детали
Заказ
КодЗаказаKodZakazaBigint(3)+ *Уникальный кодзаказа
КодКлиентаKodKlientaBigint(3)Код клиента
МаркаЧасовMarkaChasovVarchar(45)Марка часов клиента
ЗаказМастер
КодЗаказаKodZakazaBigint(3)Уникальный код заказа
КодМастераKodMasteraBigint(3)Уникальный код мастера
ЗаказУслуги
КодЗаказаKodZakazaBigint(3)Уникальный код заказа
КодУслугиKodServiceBigint(3)Уникальный код суслуги
ЗаказЗапЧасти
КодЗаказаKodZakazaBigint(3)Уникальный код заказа
КодЗапЧастиKodZapChastiBigint(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);”>

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

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

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

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

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

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

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

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

2) Функция “услуги”

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

3) Функция “О нас”

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

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

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

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

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

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

Приложение 1

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

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

——————–

Addzakaz. php

<!DOCTYPEHTMLPUBLIC “-//W3C//DTDHTML 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>————————————————————————————————————————


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