Проектирование информационной системы 'Администратор гостиницы'

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    520,27 Кб
  • Опубликовано:
    2015-04-06
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Проектирование информационной системы 'Администратор гостиницы'















Проектирование информационной системы «Администратор гостиницы»

1. Системный анализ предметной области

База данных системы должна содержать:

·        Данные о классах номеров

·        Список номеров

·        Данные о клиентах

·        Данные о заселении клиентов

·        Возможность выписывать счета на оплату

·        Возможность поиска клиентов.

Базовые сущности:

Гостиничные номера:

·        Название номера

·        Класс номера

·        Этаж

·        Количество мест

·        Стоимость проживания.

Список клиентов:

·        Фамилия И.О.

·        Паспортные данные

Регистрация проживания:

·        Заезжающий клиент

·        Номер

·        Дата приезда

·        Дата отъезда

. Нормализация

Первая нормальная форма

Таблица находится в первой нормальной форме, если она удовлетворяет следующим требованиям:

·        Не содержит полей с несколькими значениями

·        Ключевое поле не имеет пустот

В нашем случае в таблице клиентов паспортные данные клиентов могут содержать номер серию дату выдачи и место выдачи поэтому необходимо разбить это поле на : p_nomer, p_serial, p_data, p_point.

Для выполнения второго условия необходимо ввести ключевые поля.

Проанализируем:


Вторая нормальная форма:

Таблица находится во второй нормальной форме, если она удовлетворяет следующим требованиям:

·        Таблица приведена к 1НФ

·        Поля, которые зависят от части первичного ключа должны бить выведены в состав отдельных таблиц

·        Все таблицы должны быть связаны между собой

В рассматриваемом примере таблицы уже приведены к 1НФ, то есть одно из требований выполнено.

В таблице Numbers поле CostDay зависит от поля Klass, поэтому надо создать отдельную таблицу содержащую классы номеров.

Для выполнения третьего условия необходимо назначить внешние ключи:

·        Связываем таблицы Numbers и Klass по полю Klass

·        Связываем таблицы Reestr и Numbers по полю Numer

·        Связываем таблицы Reestr и Klients по полю Klient

Третья нормальная форма:

Таблица находится в третьей нормальной форме, если она удовлетворяет следующим требованиям:

·        Таблица приведена к 2НФ

·        Не должно быть транзитивных зависимостей между не ключевыми полями

В итоге база данных принимает вид:


Таблица 1 Физическое проектирование базы данных.

name

type

Key

extra

Таблица классов номеров (Num_klass)

Id

integer

primary key

auto_increment

Name

varchar (20)



CostDay

float



Список гостиничных номеров(Numbers)

Id

integer

primary key

auto_increment

Numer



Klass

integer

Foreign key

REFERENCES Num_klass (id)

stage

integer



places

integer



Таблица клиентов(Klients)

Id

integer

primary key

auto_increment

FIO

varchar(50)



p_point

varchar(50)



p_nomer

Integer



p_serial

Integer



p_data

date



Таблица регистрационных действий(Reestr)

Id

integer

primary key

auto_increment

klient

integer

Foreign key

REFERENCES klients (id)

numer

integer

Foreign key

REFERENCES numbers (id)

data_p

date



data_ot

date




. Реализация структуры базы данных в СУБД MySQL

1. Запросы на создание таблиц:

create table Num_klass (integer primary key auto_increment,varchar(20),float

);table Numbers (integer primary key auto_increment,varchar(10) unique,integer,integer,integer,FOREIGN KEY ( klass ) REFERENCES Num_klass (id)

);table klients (integer primary key auto_increment, varchar(50),

pasport varchar(50)

);

create table reestr (integer primary key auto_increment,integer,integer,_p date,_ot date,FOREIGN KEY ( numer ) REFERENCES numbers (id),FOREIGN KEY ( klient ) REFERENCES klients (id)

);

2. Запросы на добавление данных

into num_klass(name,costday)values("Vip",10000);into num_klass(name,costday)values("Luxe",8000);into num_klass(name,costday)values("Premium",6000);into num_klass(name,costday)values("Less",4000);into num_klass(name,costday)values("Budget",2000);into Numbers(numer,klass,stage,places)values("1408",1,5,2);into Numbers(numer,klass,stage,places)values("1407",2,4,3);into Numbers(numer,klass,stage,places)values("1406",3,3,4);into Numbers(numer,klass,stage,places)values("1405",4,2,5);into Numbers(numer,klass,stage,places)values("1404",5,1,6);into Klients(FIO,pasport)values("Ivanov V.V.","qw2467");into Klients(FIO,pasport)values("Petrov A.V.","evta89490");into Klients(FIO,pasport)values("Sidorov V.A.","khskj3546");into Klients(FIO,pasport)values("Putin V.V.","qlkj53050");into Klients(FIO,pasport)values("Geyts Bil","f*jio967");into Reestr(klient,numer,data_p,data_ot)values(1,1,130101,130621);into Reestr(klient,numer,data_p,data_ot)values(2,2,130201,130321);into Reestr(klient,numer,data_p,data_ot)values(2,2,130401,130621);into Reestr(klient,numer,data_p,data_ot)values(3,3,130101,130621);into Reestr(klient,numer,data_p,data_ot)values(4,4,130301,130510);into Reestr(klient,numer,data_p,data_ot)values(4,4,130521,130621);into Reestr(klient,numer,data_p,data_ot)values(5,5,130101,130202);into Reestr(klient,numer,data_p,data_ot)values(5,5,130203,130303);into Reestr(klient,numer,data_p,data_ot)values(5,5,130310,130509);into Reestr(klient,numer,data_p,data_ot)values(5,5,130521,130621);

. Запросы на выборку данных.

Выбрать из справочной таблицы наименования и отсортировать их по двум произвольным имеющемуся в таблице признакам

Select * from klients order by fio,pasport;


Select Numer ,places from numbers order by stage;


Выбрать из указанной таблицы те записи, которые удовлетворяют условию отбора (where).

Select * from reestr where data_ot<CURRENT_DATE;

Select * from reestr where klient in (1,2,3);


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

select k.fio, r.data_p from reestr r inner join klients k on k.id= r.numer;


select k.name, n.numer from numbers n inner join num_klass k on k.id= n.klass;


Привести примеры 2-3 запросов с использованием агрегатных функций.

select count(numer) from numbers;



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

select          k.fio,          n.numer, r.data_p, r.data_ot from reestr r join klients k on k.id=r.klientjoin numbers n on n.id=r.numer(r.data_ot>Current_date) and (r.data_p<=Current_date);


Привести пример вложенных запросов

select * from Numbers n where places > (count(numer) from reestr r where (r.numer=n.id)and (r.data_ot>CURRENT_DATE));


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

запрос триггер программный

select * from (select k.fio, count(r.klient)as kol from reestr r left join klients k on k.id=r.klient group by k.fio) b b.kol>2;


Реализовать процедуру

Delimiter //procedure myproc (out t integer(11))DETERMINISTICSECURITY INVOKER‘’count(name) t from klients;;

//

Реализовать триггер

Create trigger ins_user after insert on reestr for each row set new.createdate = Current_date; ;

Реализовать функцию

Create function getKlient (search_id int)tinytextn tinytext;name into n from clients where id=search_id;n;;

//

Внешний вид

Рис 1. Главное окно.

Рис 2. Регистрация нового клиента.

Рис 3. Добавление нового номера.

Рис 4. Выписать счет на оплату.

Приложение

Программный код WEB-страниц

Index.php (см. рис 1)

<?include "base.php";

$r=ComandEnc("reestr",$_REQUEST);(isset($_REQUEST[send_mod]))

{$curid = $_REQUEST[id]; "<HTML><HEAD>

<META HTTP-EQUIV='Refresh' CONTENT='0; URL=invoice.php?id=$curid'>

</HEAD></HTML>"; }?>

<html>

<head>

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

<title>Операции с номерами</title>

<link rel="stylesheet" type="text/css" href="cs.css">

</head>

<body>

<form action="index.php" method="post" name="input_num"> 

<table>

<tr>

<td>

<table border="1" cellpadding="0" cellspacing="0">

<tr><td colspan="2" align="center"><strong>Регистрация заселения</strong>

<input type="hidden" name="id" value=<? echo($r[0]) ?>>

</td></tr>

<tr><td width="150">Клиент :</td>

<td>

<?GetPickData("select * from Klients","",1,"klient",$r[1]);?>

<a href ="klients.php">Новый клиент</a>

</td></tr>

<tr><td width="150">Номер :</td>

<td><? GetPickData("select * from Numbers n where places > (select count(numer) from reestr r (r.numer=n.id)and (r.data_ot>CURRENT_DATE)); ","* from Numbers n where places <= (select count(numer) from reestr r (r.numer=n.id)and (r.data_ot>CURRENT_DATE));",1,"numer",$r[2]);?>

<a href ="AddNum.php">Новый номер</a> <br>    </td> </tr>

<tr><td width="150">Дата приезда :</td>

<td><input type="text" name="data_p" maxlength="30" value=<? echo($r[3])?> ></td></tr>

<tr><td width="150">Дата отъезда :</td>

<td><input type="text" name="data_ot" maxlength="30" value=<? echo($r[4])?> ></td>

</tr> <tr>

<td colspan="2" align="center"><input type="submit" name="prev" value="<<<" />

<input type="submit" name="next" value=">>>" /><input type="submit" name="add" value="Добавить"></td>

</tr> <tr><td colspan="2" align="center">

<input type="submit" name="insert_data" value="Сохранить" />

<input type="submit" name="delete_data" value="Удалить" />

<input type="submit" name="send_mod" value="Счет на оплату" />

<td colspan=4> Список проживающих клиентов</td></tr><tr>

<td colspan = 4> <input type="text" name="edit_search">

<input>

</td> </tr><tr><td>Клиент</td><td>Номер</td><td>Дата приезда</td>

<td>Дата отъезда</td></tr>

<?if (isset($_REQUEST[search]))

{$sql="select k.fio, n.numer, r.data_p, r.data_ot from reestr r left join klients k on k.id=r.klient left join numbers n on n.id=r.numer where (r.data_ot>Current_date) and (r.data_p<=Current_date)and(k.fio like \"$_REQUEST[edit_search]%\" )";

}else

$sql="select k.fio,         n.numer, r.data_p,        r.data_ot from reestr r left join klients k on k.id=r.klient left join numbers n on n.id=r.numer where (r.data_ot>Current_date) and (r.data_p<=Current_date)";($sql , 0);?></td>

</tr></table></form></body></html>.php

<?php_reporting(0);(!isset($db))

{ $hostname = "localhost";

$username = "root";

$password = ""; _connect($hostname, $username, $password) or die ("Ошибка коннекта!!");

$db="Hot_admin";_select_db($db) or die (mysql_error());_query("SET NAMES 'cp1251'");_query("SET CHARACTER SET 'cp1251'");}CheckDup($tbl,$field, $value){

$res=mysql_query("SELECT * FROM $tbl where $field = $value");(mysql_fetch_row($res)){1;}{0;}}GetRow($sql){mysql_fetch_row(mysql_query($sql));}RowToForm($tbl,$id)

{$db=$GLOBALS['db'];

$list_f = mysql_list_fields($db , $tbl);

$name_f = mysql_field_name($list_f , 0);

$Cur=mysql_fetch_row(mysql_query("select * from $tbl where $name_f = $id;"));$Cur;}getNext($tbl,$cur)

{$db=$GLOBALS['db'];

$list_f = mysql_list_fields($db, $tbl);

$name_f = mysql_field_name($list_f,0);

$res=mysql_query("SELECT $name_f FROM $tbl WHERE $name_f>$cur ORDER BY $name_f ASC LIMIT 1");($next=mysql_fetch_row($res)){RowToForm($tbl,$next[0]);}return RowToForm($tbl,$cur);}getPrev($tbl,$cur){

$db=$GLOBALS['db'];

$list_f = mysql_list_fields($db, $tbl);

$name_f = mysql_field_name($list_f,0);

$res=mysql_query("SELECT $name_f FROM $tbl WHERE $name_f<$cur ORDER BY $name_f DESC LIMIT 1");($prev=mysql_fetch_row($res)){RowToForm($tbl,$prev[0]);}RowToForm($tbl,$cur);}insert($tbl)

{ $db=$GLOBALS['db'];

$list_f = mysql_list_fields($db, $tbl);

$n = mysql_num_fields($list_f);

$name_f = mysql_field_name($list_f,0);

$value = $_POST[$name_f];(CheckDup($tbl,$name_f,$value))    {

$sql = "Update $tbl SET ";

$wh=$where= " where $name_f = $value";        }{

$wh=" where $name_f in (select max($name_f) from $tbl)";

$sql = "INSERT INTO $tbl SET "; }($i = 0; $i < $n; $i++)  {

$name_f = mysql_field_name($list_f,$i);($name_f!="id")    {

$value = $_POST[$name_f];

$j = $i + 1;

$sql = $sql.$name_f." = '$value'";($j <> $n) $sql = $sql.", ";}       }(isset($where)){

$sql.=$where;}_query($sql) or die(mysql_error());

$res=mysql_query("select * from $tbl $wh");mysql_fetch_row($res);}View($tbl, $NeedHead){(!stristr(strtoupper($tbl),"SELECT")) {($NeedHead)

{echo "<b>$Tbl</b><table border=1>";

$result=mysql_query("describe $tbl;");"<tr>";($myrow = mysql_fetch_row($result)){"<td>$myrow[0]</td>";   }"</tr>";}

$result=mysql_query("select * from $tbl;");       }{         $result=mysql_query($tbl);}($myrow = mysql_fetch_row($result))

{echo "<tr>";for ($i=0; $i<count($myrow); $i++)       {"<td>$myrow[$i]</td>";         }echo "</tr>";}"</table><p>";mysql_close();}delete_record($tbl,$id)

{$db=$GLOBALS['db'];

$list_f = mysql_list_fields($db, $tbl);

$name_f = mysql_field_name($list_f,0);

$sql = "Delete from $tbl where $name_f = $id";

$result=mysql_query($sql)or die (mysql_error());

$res=mysql_query("select * from $tbl where $name_f in (select min($name_f) from $tbl) ");return mysql_fetch_row($res);}GetPickData($sqlActive,$sqlDisable,$field,$name,$selection)

{        echo "<select name=\"$name\" >";

$res=mysql_query($sqlActive);($row = mysql_fetch_row($res))

{if ($selection==$row[0])

{echo "<option selected value=\"$row[0]\">$row[$field]</option>";      }else"<option value=\"$row[0]\">$row[$field]</option>";       }($sqlDisable!=""){

$res=mysql_query($sqlDisable);($row = mysql_fetch_row($res)){($selection==$row[0])         {echo "<option disabled selected value=\"$row[0]\">$row[$field]</option>";         }else"<option disabled value=\"$row[0]\">$row[$field]</option>";         }}"</select>";}ComandEnc ($tbl){(isset($_REQUEST[insert_data]))

{$Num=insert($tbl);}(isset($_REQUEST[view_data])){View($tbl , 1);}(isset($_REQUEST[delete_data])){(isset($_REQUEST[id])){$v=$_REQUEST[id];($v=="")         {$v=0;}}else $v = 0; $Num=delete_record($tbl , $v);}(isset($_REQUEST[next])){(isset($_REQUEST[id])){$v=$_REQUEST[id];($v=="")         {$v=0;}}else $v = 0;$Num=getNext($tbl,$v);}(isset($_REQUEST[prev])){(isset($_REQUEST[id])){$v=$_REQUEST[id];($v=="")         {$v=0;}}else $v = 0;$Num=getPrev($tbl,$v);}(isset($_REQUEST[add])){$Num="";}$Num;}?>_Numer.php (см. рис 3)

<?include "base.php";

$Num=ComandEnc("Numbers");?>

<html><head>

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

<title>Справочники</title>

<link rel="stylesheet" type="text/css" href="cs.css">

</head><body>

<a href ="index.php">На главную</a>

<table border="1" cellpadding="0" cellspacing="0">

<form action="addnum.php" method="post">

<tr><td colspan="2" align="center">       <strong>Информация по номеру</strong>

</td> </tr>

<tr><td width="150">Номер :</td>

<td><input type="text" name="Numer" maxlength="10" value=<?echo($Num[1])?> ></td></tr>

<tr><td width="150">Класс номера :</td>      <td>

<?GetPickData("select * from Num_klass","",1,"Klass",$Num[2]);?></td>     </tr>

<tr><td width="150">Этаж :</td>

<td><input type="text" name="stage" maxlength="30" value=<?echo($Num[3])?>></td></tr>

<tr><td width="150">Число мест :</td><td><input type="text" name="places" maxlength="30" value=<? echo($Num[4])?> ></td></tr>

<tr><td colspan="2" align="center">

<input type="submit" name="prev" value="<<<" />

<input type="submit" name="next" value=">>>" />

<input type="submit" name="add" value="Добавить" /></td></tr><tr>

<td colspan="2" align="center">

<input type="submit" name="insert_data" value="Сохранить" />

<input type="submit" name="delete_data" value="Удалить" />            

</td> </tr> </form></table>

<table border=1><tr><td>№</td><td>Номер двери</td><td>Класс номера</td>

<td>Этаж</td><td>Колчество мест</td><?View("Numbers" , 0);?>   

</body></html>.php (см. рис 2)

<?include "base.php";$r=ComandEnc("klients");?>

<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /><title>Операции с номерами</title>

<link rel="stylesheet" type="text/css" href="cs.css">

</head><body>

<a href ="index.php">На главную</a>

<form action="klients.php" method="post" name="input_gost">

<table border="1" cellpadding="0" cellspacing="0"><tr>

<td colspan="2" align="center"><strong>Регистрация гостя </strong>

<input type="hidden" name="id" value=<? echo($r[0]) ?>>

</td></tr><tr><td width="150">Фамилия И.О. :</td><td>

<input type="text" name="FIO" maxlength="20" value=<? echo($r[1])?> >

</td></tr><tr><td width="150">Данные документа :</td>

<td><input type="text" name="pasport" maxlength="30" value=<? echo($r[2])?>></td></tr><tr>          <td colspan="2" align="center">

<input type="submit" name="prev" value="<<<" />

<input type="submit" name="next" value=">>>" />

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

</td></tr><tr><td colspan="2" align="center">

<input type="submit" name="insert_data" value="Сохранить" />

<input type="submit" name="delete_data" value="Удалить" />

</td> </tr> </table><table border=1><tr><td>№</td><td>Фамилия И.О.</td>

<td>Даные</td> <?View("klients" , 0);?>         </form></body></html>.php (см. рис 4)

<?include "base.php";

$r=GetRow("select r.data_p,r.data_ot,(r.data_ot-r.data_p)as kol,kl.costday from reestr r Numbers n on n.id= r.numernum_klass kl on kl.id=r.numer" );?>

<html><head> <title>"Счет на оплату"</title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <style>{ width: 210mm; margin-left: auto; margin-right: auto; border: 1px #efefef solid; font-size: 11pt;}.invoice_bank_rekv { border-collapse: collapse; border: 1px solid; }.invoice_bank_rekv > tbody > tr > td, table.invoice_bank_rekv > tr > td { border: 1px solid; }.invoice_items { border: 1px solid; border-collapse: collapse;}.invoice_items td, table.invoice_items th { border: 1px solid;}

</style></head><body>

<div style="font-weight: bold; font-size: 16pt; padding-left:5px;">

Счет № <? echo($_GET[id]) ?> от <? echo (date( 'd.m.Y'))?></div>

<br/><table width="100%"> <tr><td style="width: 30mm;">

<div style=" padding-left:2px;">Поставщик: </div></td> <td>

<div style="font-weight:bold; padding-left:2px;"> ____________________________________________</div></td></tr><tr>

<td style="width: 30mm;">

<div style=" padding-left:2px;">Покупатель: </div></td><td>

<div style="font-weight:bold; padding-left:2px;"> _____________________________________________</div></td></tr></table>

<table>

<thead><tr><th>Дата приезда</th>

<th >Дата отъезда</th>

<th>Количество дней</th>

<th>Цена за день</th>

<th>Сумма</th></tr><tr>

<td style="width:27mm; font-weight:bold; text-align:left;"><?echo($r[0])?></td>

<td style="width:27mm; font-weight:bold; text-align:left;"><?echo($r[1])?></td>

<td style="width:27mm; font-weight:bold; text-lign:right;"><?echo($r[2])?></td>

<td style="width:27mm; font-weight:bold; text-align:right;"><? echo($r[3])?>

</td>

<td style="width:27mm; font-weight:bold; text-align:right;"> <?echo($r[3]*$r[2])?></td></tr></thead><tbody ></tbody></table>

<table border="0" width="100%" cellpadding="1" cellspacing="1"><tr>

</tr></table><br /><div>

Всего на сумму <?echo ($r[3]*$r[2])?> рублей.<br />

<br /><br />

<div style="background-color:#000000; width:100%; font-size:1px; height:2px;">&nbsp;</div><br/>

<br/>

<div>Главный бухгалтер ______________________ (Фамилия И.О.)</div><br/>

<div style="width: 85mm;text-align:center;">М.П.</div>

<br/><div style="width:800px;text-align:left;font-size:10pt;">Счет действителен к оплате в течении трех дней.</div></body></html>.css{ font: 12px Georgia; color: #666666; }{ font-size: 16px; text-align: center; }{ width: 400px; border-collapse: collapse; margin: 0px auto; background: #E6E6E6; }{ padding: 3px; }{ width: 150px; border: solid 1px #CCCCCC; }.tbl{width:100%; border:0; background: #ffffff;}.small { width: 50px; border: solid 1px #CCCCCC; }.smily { width: 10px; border: solid 1px #CCCCCC; }

Список литературы

1.  Самоучитель MySQL 5. автор М.Кузнецов

2.      Сайт, посвященный СУБД MySQL

.        Разработка на языке PHP

.        Электронная энциклопедия

Похожие работы на - Проектирование информационной системы 'Администратор гостиницы'

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!