Скачиваний:
39
Добавлен:
04.04.2013
Размер:
728.06 Кб
Скачать

Проектирование генератора прайс-листа

Генератор должен формировть прайс-лист для выбранной группы товаров на основе информации, содержащейся в базе данных.

Предлагается реализовать интерфейс, содержащий вертикальное меню, каждый пункт которого является ссылкой на прайс-лист соответствующей группы товаров. Следует так же предусмотреть область для вывода названия группы товаров и таблицы прайс-листа.

На основе эскиза опишем шаблон интерфейса на языке HTML.

<html>

<head>

<title>Прайс-лист</title>

</head>

<body>

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

<tr>

<td width="25%" valign="top">

<table width="100%" cellpadding="0" cellspacing="5">

<tr>

<td><b>Разделы</b></td>

</tr>

<? echo $menu; ?>

</table>

</td>

<td valign="top">

<table width="100%" cellpadding="0" cellspacing="5">

<tr>

<td colspan="3"><font size="5"><u><? echo $productname;?></u></font>

<br><br></td>

</tr>

<tr>

<td><b>Изделие</b></td>

<td><b>Цена USD</b></td>

<td><b>Цена РУБ</b></td>

</tr>

<? echo $list; ?>

</table>

</td>

</tr>

</table>

</body>

</html>

Данный шаблон представляет собой таблицу с двумя ячейками. В левую ячейку вложена таблица, содержащая пункты меню. В правой ячейке отображается название группы товаров и прайс-лист.

Создадим файл pricelist.php, в котором будет храниться представленный выше шаблон, а так же код программы, написанной на языкеPHP.

В шаблон подставляются значения переменных $menu(меню, сформированное на основе групп товаров, зарегистрированных в базе данных), $productname(название текущей группы товаров) и $list(прайс-лист текущей группы товаров). Рассмотрим блок инструкций на языкеPHP, формирующий значения перечисленных выше переменных.

<?

$menu='';

$list='';

$minpid=0;

$productname='';

$fp=fopen("usd","r");

$rubl=fgets($fp);

fclose($fp);

mysql_connect("localhost","","");

mysql_select_db("mybase");

$q=mysql_query("select * from products order by pid");

$firstproduct=1;

while($r=mysql_fetch_array($q)) {

if ($firstproduct) {

$minpid=$r["pid"];

$firstproduct=0;

}

$menu.='<tr><td><a href="pricelist.php?pid='.$r["pid"].'">'.$r["description"].'</a></td></tr>';

}

if (!isset($pid)) $pid=$minpid;

$q=mysql_query("select description from products where pid=$pid");

if (mysql_num_rows($q)>0) {

$r=mysql_fetch_array($q);

$productname=$r["description"];

}

$q=mysql_query("select * from models where pid=$pid");

while($r=mysql_fetch_array($q))

$list.='<tr><td>'.$r["firm"].' '.$r["model"].'</td><td>'.$r["price"].'</td><td>'.$r["price"]*$rubl.'</td></tr>';

?>

Сразу после запуска скрипт инициализирует начальные значения переменных $menu, $list, $minpid, $productname . Далее из файла usdсчитывается значение переменной $rubl, после чего устанавливается соединение с ервером баз данных и выбирается активная (текущая) база данных.

На следующем этапе формируется меню. Скрипт посылает запрос на выборку всех разделов из базы данных. Первое значение идентификатора раздела из результирующего набора запоминается в переменной $minpid(оно может пригодиться в дальнейшем). Каждый элемент меню помещается в отдельную ячейку таблицы и представляет собой ссылку на скриптpricelist.phpс параметромpid, значение которого равно идентификатору соответствующего раздела (группы товаров) из базы данных.

После того, как меню сформировано, система проверяет, инициализировано ли значение переменной $pid(при первом запуске скрипта значение переменная не инициализирована). Если переменная $pidна момент проверки не имеет значения (т.е. не создана), ей присваивается значение переменной $minpid. Переменная $pidсодержит идентификатор текущего раздела (группы товаров).

Далее скрипт запрашивает у базы данных название текущего раздела и инициализирует и присваивает его переменной $productname. Проверка наличия раздела в базе данных осуществляется для того, чтобы избежать ошибок (в случае, если в базе данных отсутствуют разделы, значение $pid=0 и имя раздела $productnameсохраняет начальное значение "пустая строка").

На последнем этапе работы генератор посылает базе данных запрос на выборку всех наименований (изделий), принадлежащих текущему разделу (группе товаров). Полученные данные форматируются в виде таблицы, каждая запись которой состоит из следующих полей: изделие (информация о фирме-производителе и модели изделия), цена usd(цена в долларах США) и цена руб (цена в рублях, вычисляемая на основании цены в долларах и текущего курса).

После того, как все данные обработаны, значения переменных $menu, $list, $productname подставляются в шаблон. Сформированный прайс-лист возвращается пользователю в виде html-страницы.

Ниже приведен текст программы, генерирующей прайс-листы.

<?

$menu='';

$list='';

$minpid=0;

$productname='';

$fp=fopen("usd","r");

$rubl=fgets($fp);

fclose($fp);

mysql_connect("localhost","","");

mysql_select_db("mybase");

$q=mysql_query("select * from products order by pid");

$firstproduct=1;

while($r=mysql_fetch_array($q)) {

if ($firstproduct) {

$minpid=$r["pid"];

$firstproduct=0;

}

$menu.='<tr><td><a href="pricelist.php?pid='.$r["pid"].'">'.$r["description"].'</a></td></tr>';

}

if (!isset($pid)) $pid=$minpid;

$q=mysql_query("select description from products where pid=$pid");

if (mysql_num_rows($q)>0) {

$r=mysql_fetch_array($q);

$productname=$r["description"];

}

$q=mysql_query("select * from models where pid=$pid");

while($r=mysql_fetch_array($q))

$list.='<tr><td>'.$r["firm"].' '.$r["model"].'</td><td>'.$r["price"].'</td><td>'.$r["price"]*$rubl.'</td></tr>';

?>

<html>

<head>

<title>Прайс-лист</title>

</head>

<body>

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

<tr>

<td width="25%" valign="top">

<table width="100%" cellpadding="0" cellspacing="5">

<tr>

<td><b>Разделы</b></td>

</tr>

<? echo $menu; ?>

</table>

</td>

<td valign="top">

<table width="100%" cellpadding="0" cellspacing="5">

<tr>

<td colspan="3"><font size="5"><u><? echo $productname; ?></u></font><br><br></td>

</tr>

<tr>

<td><b>Изделие</b></td>

<td><b>Цена USD</b></td>

<td><b>Цена РУБ</b></td>

</tr>

<? echo $list; ?>

</table>

</td>

</tr>

</table>

</body>

</html>