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

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

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

Системный анализ предметной области База данных системы должна содержать: Для выполнения третьего условия необходимо назначить внешние ключи: 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. Привести примеры 2−3 запросов с использованием агрегатных функций. Res=mysql_query («select * from $tbl where $name_f in (select min… Читать ещё >

Проектирование информационной системы «Администратор гостиницы» (реферат, курсовая, диплом, контрольная)

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

1. Системный анализ предметной области База данных системы должна содержать:

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

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

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

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

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

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

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

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

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

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

· Этаж

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

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

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

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

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

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

· Номер

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

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

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

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

· Ключевое поле не имеет пустот В нашем случае в таблице клиентов паспортные данные клиентов могут содержать номер серию дату выдачи и место выдачи поэтому необходимо разбить это поле на: 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

varchar (10) unique

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

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

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

create table Num_klass (

id integer primary key auto_increment,

Name varchar (20),

CostDay float

);

create table Numbers (

id integer primary key auto_increment,

Numer varchar (10) unique,

Klass integer,

stage integer,

places integer,

CONSTRAINT FOREIGN KEY (klass) REFERENCES Num_klass (id)

);

create table klients (

id integer primary key auto_increment,

FIO varchar (50),

pasport varchar (50)

);

create table reestr (

id integer primary key auto_increment,

klient integer,

numer integer,

data_p date,

data_ot date,

CONSTRAINT FOREIGN KEY (numer) REFERENCES numbers (id),

CONSTRAINT FOREIGN KEY (klient) REFERENCES klients (id)

);

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

insert into num_klass (name, costday) values («Vip», 10 000);

insert into num_klass (name, costday) values («Luxe», 8000);

insert into num_klass (name, costday) values («Premium», 6000);

insert into num_klass (name, costday) values («Less», 4000);

insert into num_klass (name, costday) values («Budget», 2000);

insert into Numbers (numer, klass, stage, places) values («1408», 1,5,2);

insert into Numbers (numer, klass, stage, places) values («1407», 2,4,3);

insert into Numbers (numer, klass, stage, places) values («1406», 3,3,4);

insert into Numbers (numer, klass, stage, places) values («1405», 4,2,5);

insert into Numbers (numer, klass, stage, places) values («1404», 5,1,6);

insert into Klients (FIO, pasport) values («Ivanov V.V.» ," qw2467″);

insert into Klients (FIO, pasport) values («Petrov A.V.» ," evta89490″);

insert into Klients (FIO, pasport) values («Sidorov V.A.» ," khskj3546″);

insert into Klients (FIO, pasport) values («Putin V.V.» ," qlkj53050″);

insert into Klients (FIO, pasport) values («Geyts Bil» ," f*jio967″);

insert into Reestr (klient, numer, data_p, data_ot)values (1,1,130 101,130621);

insert into Reestr (klient, numer, data_p, data_ot)values (2,2,130 201,130321);

insert into Reestr (klient, numer, data_p, data_ot)values (2,2,130 401,130621);

insert into Reestr (klient, numer, data_p, data_ot)values (3,3,130 101,130621);

insert into Reestr (klient, numer, data_p, data_ot)values (4,4,130 301,130510);

insert into Reestr (klient, numer, data_p, data_ot)values (4,4,130 521,130621);

insert into Reestr (klient, numer, data_p, data_ot)values (5,5,130 101,130202);

insert into Reestr (klient, numer, data_p, data_ot)values (5,5,130 203,130303);

insert into Reestr (klient, numer, data_p, data_ot)values (5,5,130 310,130509);

insert into Reestr (klient, numer, data_p, data_ot)values (5,5,130 521,130621);

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

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

Select * from klients order by fio, pasport;

Select Numer, places from numbers order by stage;

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

Select * from reestr where data_ot

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 max (costday) from num_klass;

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

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);

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

select * from Numbers n where places > (

select 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

where b. kol>2;

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

Delimiter //

Create procedure myproc (out t integer (11))

NOT DETERMINISTIC

SQL SECURITY INVOKER

COMMENT `'

Begin

Select count (name) t from klients;

End;

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

Create trigger ins_user after insert on reestr for each row set

begin

set new. createdate = Current_date;

end;

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

Create function getKlient (search_id int)

Returns tinytext

Begin

Declare n tinytext;

Select name into n from clients where id=search_id;

Return n;

End;

Внешний вид Рис 1. Главное окно.

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

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

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

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

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

$r=ComandEnc («reestr» ,$_REQUEST);

if (isset ($_REQUEST[send_mod]))

{$curid = $_REQUEST[id];

echo «

"; }?>
Регистрация заселения

Клиент :

Новый клиент

Номер : (select count (numer) from reestr r

where (r.numer=n.id)and (r.data_ot>CURRENT_DATE)); «,»

select * from Numbers n where places <= (select count (numer) from reestr r

where (r.numer=n.id)and (r.data_ot>CURRENT_DATE));", 1," numer" ,$r[2]);?>

Новый номер

Дата приезда :
Дата отъезда :

{$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)" ;

View ($sql, 0);?>

Список проживающих клиентов

КлиентНомерДата приездаДата отъезда

Base.php

error_reporting (0);

if (!isset ($db))

{ $hostname = «localhost» ;

$username = «root»;

$password = «»;

mysql_connect ($hostname, $username, $password) or die («Ошибка коннекта!!»);

$db="Hot_admin" ;

mysql_select_db ($db) or die (mysql_error ());

mysql_query («SET NAMES 'cp1251'»);

mysql_query («SET CHARACTER SET 'cp1251'»);}

function CheckDup ($tbl,$field, $value){

$res=mysql_query («SELECT * FROM $tbl where $field = $value»);

if (mysql_fetch_row ($res)){

return 1;}

else{

return 0;}}

function GetRow ($sql){

return mysql_fetch_row (mysql_query ($sql));}

function 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;»));

return $Cur;}

function 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»);

if ($next=mysql_fetch_row ($res)){

return RowToForm ($tbl,$next[0]);}

else return RowToForm ($tbl,$cur);}

function 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»);

if ($prev=mysql_fetch_row ($res)){

return RowToForm ($tbl,$prev[0]);}

else

return RowToForm ($tbl,$cur);}

function 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];

if (CheckDup ($tbl,$name_f,$value)) {

$sql = «Update $tbl SET «;

$wh=$where= «where $name_f = $value»; }

else{

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

$sql = «INSERT INTO $tbl SET «; }

for ($i = 0; $i < $n; $i++) {

$name_f = mysql_field_name ($list_f,$i);

if ($name_f≠"id") {

$value = $_POST[$name_f];

$j = $i + 1;

$sql = $sql.$name_f." = '$value'" ;

if ($j <> $n) $sql = $sql.", «;} }

if (isset ($where)){

$sql.=$where;}

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

$res=mysql_query («select * from $tbl $wh»);

return mysql_fetch_row ($res);}

Function View ($tbl, $NeedHead){

if (!stristr (strtoupper ($tbl)," SELECT")) {

if ($NeedHead)

{echo «$Tbl

» ;

$result=mysql_query («describe $tbl;»);

echo «

» ;

while ($myrow = mysql_fetch_row ($result)){

echo «

»; }

echo «

» ;}

$result=mysql_query («select * from $tbl;»); }

else{ $result=mysql_query ($tbl);}

while ($myrow = mysql_fetch_row ($result))

{echo «

» ;for ($i=0; $i

echo «

»; }echo «» ;}

echo «

$myrow[0]
$myrow[$i]

» ;mysql_close ();}

function 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);}

function GetPickData ($sqlActive,$sqlDisable,$field,$name,$selection)

{ echo «» ;}

function ComandEnc ($tbl){

if (isset ($_REQUEST[insert_data]))

{$Num=insert ($tbl);}

if (isset ($_REQUEST[view_data])){View ($tbl, 1);}

if (isset ($_REQUEST[delete_data])){

if (isset ($_REQUEST[id])){$v=$_REQUEST[id];

if ($v=="") {$v=0;}}else $v = 0; $Num=delete_record ($tbl, $v);}

if (isset ($_REQUEST[next])){

if (isset ($_REQUEST[id])){$v=$_REQUEST[id];

if ($v=="") {$v=0;}}else $v = 0;$Num=getNext ($tbl,$v);}

if (isset ($_REQUEST[prev])){

if (isset ($_REQUEST[id])){$v=$_REQUEST[id];

if ($v=="") {$v=0;}}else $v = 0;$Num=getPrev ($tbl,$v);}

if (isset ($_REQUEST[add])){$Num="" ;}

return $Num;}?>

Add_Numer.php (см. рис 3)

$Num=ComandEnc («Numbers»);?>

На главную

Информация по номеру

Номер :
Класс номера :

Этаж :
Число мест :

Номер двериКласс номераЭтажКолчество мест

Klients.php (см. рис 2)

На главную

Регистрация гостя

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

Данные документа :

Фамилия И.О.Даные

Invoice.php (см. рис 4)

$r=GetRow («select r. data_p, r. data_ot,(r.data_ot-r.data_p)as kol, kl. costday from reestr r

join Numbers n on n. id= r. numer

join num_klass kl on kl. id=r.numer");?>

body { width: 210 mm; margin-left: auto; margin-right: auto; border: 1px #efefef solid; font-size: 11pt;}

table.invoice_bank_rekv { border-collapse: collapse; border: 1px solid; }

table.invoice_bank_rekv > tbody > tr > td, table. invoice_bank_rekv > tr > td { border: 1px solid; }

table.invoice_items { border: 1px solid; border-collapse: collapse;}

table.invoice_items td, table. invoice_items th { border: 1px solid;}

Счет № от

Поставщик:

____________________________________________

Покупатель:

_____________________________________________

Дата приездаДата отъездаКоличество днейЦена за деньСумма

Всего на сумму рублей.

Руководитель ______________________ (Фамилия И.О.)

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

М.П.

Счет действителен к оплате в течении трех дней.

Cs.css

body { font: 12px Georgia; color: #666 666; }

h3 { font-size: 16px; text-align: center; }

table { width: 400px; border-collapse: collapse; margin: 0px auto; background: #E6E6E6; }

td { padding: 3px; }

input { width: 150px; border: solid 1px #CCCCCC; }

table.tbl{width:100%; border:0; background: #ffffff;}

input.small { width: 50px; border: solid 1px #CCCCCC; }

input.smily { width: 10px; border: solid 1px #CCCCCC; }

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

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

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

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

Показать весь текст
Заполнить форму текущей работой