Диплом: Автоматизация сервисного обслуживания клиентов Rollbery

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
Рисунок 14.
2.3.2. Характеристика базы данных
Составим физическую и на ее основе логическую модели базы данных
– структуру таблиц и связей между ними.
Рассмотрим связанные между собой сущности в модели «сущность-
связь» (рисунок 15).
Рисунок 15.
Виды товаров содержат типы товаров. Например, вид товара «горячие
блюда» содержит типы товара «горячие закуски», «супы», «ланчи» и др.
Типы товара содержат наименования товара. Например, тип товара «суши»
содержит «суши мидии», «суши угорь», «суши морской гребешок» и др.
Менеджеры оформляют заказы на продажу и доставку товара. Товар
поставляют курьеры. Клиенты оформляют заказы совместно с
менеджерами.
На основе модели «сущность-связь» построим логическую модель
базы данных (рисунок 16).
Рисунок 16.
Один вид товара содержит много типов, но один тип может
относиться только к одному виду товара. Данные сущности находятся в
отношении один ко многим. Один тип товара содержит много его
наименований, но один товар может относиться только к одному типу.
Менеджеры оформляют заказы с клиентами по покупке и доставке
товара. Один менеджер может оформить заказ по покупке нескольких
товаров и один товар может быть оформлен в нескольких заказах. Точно
также один клиент может заказать несколько товаров и один товар может
быть заказан несколькими клиентами. Аналогично курьер может поставить
несколько товаров и один товар могут поставлять несколько курьеров. Все
перечисленные сущности связаны отношениями много ко многим. Поэтому
здесь нужны связующие таблицы. Создадим одну связующую таблицу
ЗАКАЗЫ как для таблиц КЛИЕНТЫ, КУРЬЕРЫ, МЕНЕДЖЕРЫ и
ОБОРУДОВАНИЕ. Таким образом, родительская таблица КЛИЕНТЫ и
дочерняя таблица ЗАКАЗЫ отношением один-ко-многим. Один клиент
может сделать несколько заказов, но один заказ принадлежит только
одному клиенту. Точно также относятся таблицы КУРЬЕРЫ и ЗАКАЗЫ,
МЕНЕДЖЕРЫ и ЗАКАЗЫ и ТОВАРЫ и ЗАКАЗЫ. Первичный ключ
родительской таблицы номер_клиента будет связан с вторичным (или
внешним) ключом дочерней таблицы.
С учетом вышесказанного добавим связующие таблицы, распределим
атрибуты соответствующим образом и построим физическую модель
данных. Физическая модель базы данных представлена на рисунке 17.
Рисунок 17.
Создание таблиц, редактирование, запросы – все реализуется
средствами структурированного языка запросов SQL.
Создание базы данных и таблиц осуществляется с помощью команды
CREATE. При сохздании базы данных указывается кодировка.
create database if not exists two_sticks default character set utf8;
Можно воспользоваться для удобства утилитой PHPMyAdmin.
Создание базы данных представлено на рисунке 18.
Рисунок 18.
Чтобы создать родительскую таблицу, необходимо наличие
первичного ключа. Пример создания родительской таблицы klients
представлен ниже.
create table if not exists klients
(id_kl int not null auto_increment,
name_kl varchar(70),
phone_kl varchar(20),
address varchar(100),
mail_kl varchar(20),
passport varchar(20),
primary key (id_q))
engine=innodb;
Предложение engine=innodb служит для возможности обеспечения
ссылочной целостности.
Для создания дочерней таблицы кроме первичных ключей
необходимо также наличие вторичных индексов, которые бы связывали две
таблицы и обеспечивали возможность удаления, обновления данных
дочерних таблиц при соответственном удалении или обновлении данных
родительских таблиц. Рассмотрим создание дочерней таблицы на примере
таблицы products.
create table if not exists products
(id_eq int not null auto_increment,
id_typ integer not null,
name_eq varchar(100),
specif varchar(200),
count integer,
price integer,
description varchar(250),
primary key (id_eq),
foreign key (id_typ) references type (id_typ) on delete cascade
on update cascade)
engine=innodb;
Создание таблиц возможно также с помощью утилиты PHPMyAdmin
(рисунок 19).
Рисунок 19.
Чтобы заполнить таблицы данными, используется команда INSERT
TABLE. На рисунке 20 представлено использование данной команды.
Рисунок 20.
Для редактирования данных таблицы и их удаления используются
команды UPDATE и DELETE.
Чтобы добавить данные в таблицу программно на этапе исполнения,
используется SQL запрос совместно с PHP функцией. Например, с
помощью следующего программного кода реализуется добавление заказа в
таблицу orders.
public function insert_order_db($id_kl,$id_man,$id_eq,$id_typ)
{
$query = "INSERT INTO backet (id_kl,id_man,id_eq,id_typ)
VALUES(?,?,?,?);";
$st = $this->db->prepare($query);
$st->bind_param('iiii',$id_kl,$id_man,$id_eq,$id_typ);
if(!$st->execute())
{
die('Error : ('. $this->db->errno .') '. $this->db->error);
}
$st->close();
}
Здесь используются входные параметры, так как эти данные будет
вводить пользователь, и они будут меняться.
Изменение данных также реализуется на этапе исполнения
программы, когда администратор редактирует, например, название товара,
статус заказа или др. Ниже приведен пример редактирования статуса заказа
таблицы orders.
public function update_order_db($status,$id_ord)
{
$query = "UPDATE orders SET status=? WHERE id_ord=?;";
$st = $this->db->prepare($query);
$st->bind_param('si', $status,$id_ord);
if(!$st->execute())
{
print 'Error : ('. $this->db->errno .') '. $this->db->error;
}
$st->close();
}
Очистка покупательской корзины происходит с помощью удаления
записей из таблицы. Пример кода удаления записей из таблицы backet
приведен ниже.
public function del_order_db($id_kind)
{
$query = "DELETE from backet WHERE id_kind=?;";
$st = $this->db->prepare($query);
$st->bind_param('i', $id_kind);
if(!$st->execute())
{
print 'Error: ('. $this->db->errno .') '. $this->db->error;
}
$st->close();
}
Выборка данных из таблиц осуществляется с помощью SQL команды
SELECT.
Приведем примеры различных запросов.
Выборка данных из одной таблицы с условиями точного совпадения с
помощью параметрического запроса представлена ниже.
select id_man, name_man,login,password from managers where login=? and
password=?;
С помощью данного запроса просматривается таблица menegers на
наличие записи с таким же логином и паролем, какие ввел пользователь при
авторизации.
Далее показана выборка из нескольких связанных таблиц с
несколькими условиями выборки, с сортировкой по имени клиента и с
параметром.
SELECT id_ord, klients.id_kl as id_kl, name_kl as name_kl,nom, name_man,
products.id_eq as id_eq,name_eq,specif,price,status, data, count, address,
klients.phone_kl as phone,types.id_typ,description
FROM orders,klients,products,managers,types WHERE klients.id_kl=orders.id_kl
and products.id_eq=orders.id_eq and managers.id_man=orders.id_man and
types.id_typ=products.id_typ and nom=".$nom."
order by name_kl;
В следующем примере производится расчет стоимости покупки
данного клиента по заказу. Используется запрос с применением агрегатной
функции SUM().
select SUM(price) as count
from orders, klients
where klients.id_kl=orders.id_kl and klients.id_kl=?;
Для выборки всех заказов данного менеджера используется запрос с
группировкой и агрегатной функцией SUM().
SELECT id_ord, klients.id_kl as id_kl, name_kl as name,nom, status, data,
sum(price* orders.count) as s FROM orders,klients,products WHERE
klients.id_kl=orders.id_kl and products.id_eq=orders.id_eq and
id_man=".$id_man." group by nom;
Для реализации покупательской корзины была создана таблица backet,
в которую, как во временный буфер сохраняются товары, выбранные
клиентом. Был создан сложный запрос с вложенным подзапросом.
select id_eq, name_eq, specif, price, id_typ
from products where id_eq in (select id_eq from backet where
id_kl=".$id_kl." and id_man=".$id_man.");
С помощью данного запроса выбираются из таблицы products по
номерам те товары, которые находятся в корзине и соответствуют
требуемому клиенту и менеджеру.
В корзине могут содержаться товары, соответствующие разным
менеджерам и клиентам и из разных заказов. Это следует учитывать при
удалении товаров из корзины. После нажатия кнопки КУПИТЬ все
купленные данным клиентом товары должны поступить в соответствующий
заказ таблицы orders. Номер данного заказа рассчитывается как
максимальный номер заказа из таблицы orders плюс один. Затем все
выбранные пользователем товары сохраняются в таблицу orders, а из
корзины они соответственно удаляются. Вся последовательность данных
операций описана в нижеприведенной процедуре.
public function empti_backet_db($id_kl, $id_man)
{
$query="select max(nom)+1 as max from orders;";
$st = $this->db->prepare($query);
$st->execute();
$st->bind_result($max);
$i=0;
while($st->fetch())
{
$max=$max;
$i++;
}
$st->close();
$i=0;
while ($i<$n)
{
$q = "INSERT INTO orders (id_kl,id_man,id_eq,nom,status,count,data)
VALUES(?,?,?,?,'принят',?,curdate());";
$st1 = $this->db->prepare($q);
$st1->bind_param('iiiii',$id_kl,$id_man,$row[$i]['id_eq'],$max,$count);
if (!$st1->execute())
{
die('Error : ('. $this->db->errno .') '. $this->db->error);
}
$st1->close();
$i++;
}
$query = "DELETE from backet WHERE id_kl=? and $id_man=?;";
$st = $this->db->prepare($query);
$st->bind_param('ii', $id_kl,$id_man);
if(!$st->execute())
{
print 'Error: ('. $this->db->errno .') '. $this->db->error;
}
$st->close();
}
2.3.3 Структурная схема пакета
Поскольку основным программным продуктом разрабатываемым в данном
проекте является программа служба, обрабатывающая заявки, дерево
функций писано для нее.

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
IPO - инструмент финансирования деятельности организации. На примере ПАО «Нефтяная компания «Лукойл»
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)