Главная страница

курсач. Г ичных webприложений


Скачать 2.94 Mb.
НазваниеГ ичных webприложений
Анкоркурсач
Дата15.05.2022
Размер2.94 Mb.
Формат файлаdocx
Имя файлаkursovaya_2_00.docx
ТипОбзор
#529937
страница2 из 4
1   2   3   4
Таблица 3 - Таблица БД motherboard (Продолжение)





Model

Varchar(55)

Модель

Img

Varchar(55)

Путь к директории с
изображением

материнской платы

description

text

Описание материнской

платы

Price

Float

Средняя цена

материнской платы




Таблица motherboard_slots предназначена для хранения всех имеющихся слотов различных видеокарт.
Таблица 4 – Таблица БД motherboard_slots





Наименование поля

Тип

Назначение

Id

Int(11)

Уникальный ключ

Name_slot

Varchar(55)

Наименование слота







Таблица Соотнош_Мат_Разъем предназначена для взаимосвязи таблицы 3 и таблицы 4, т.е., хранит соотношение материнской платы, уникальный ключ, который передается и различных слотов, уникальный ключ которых так же передается и их количество.
Таблица 5- Таблица БД Соотнош_Мат_Разъем





Наименование поля

Тип

Назначение

Id

Int(11)

Уникальный ключ








Таблица 5- ТаблицаБД Соотнош_Мат_Разъем (Продолжение)





Id_mat

Varchar(55)

Передается

уникальный ключ
материнской платы

Id_slot

Varchar(55)

Передается
уникальный ключ слота

Kol

Varchar(55)

Количество слотов с
данным ключом






Таблица RAM предназначена для хранения данных об оперативной памяти. Название таблицы в базе данных – `RAM`.
Таблица 6 - Таблица БД RAM





Наименование поля

Тип

Назначение

Id

Int(11)

Уникальный ключ

Firma

Varchar(55)

Наименование фирмы

Model

Varchar(55)

Модель

Memory

Int(11)

Кол-во памяти в Гб

Img

Varchar(55)

Путь к директории с
изображением

оперативной памяти

description

Text

Описание ОЗУ

Price

Float

Средняя цена
оперативной памяти

















Таблица power_supply предназначена для хранения данных о блоке питания.


Таблица 7 – Таблица БД power_supply





Наименование поля

Тип

Назначение

Id

Int(11)

Уникальный ключ

Firma

Varchar(55)

Наименование фирмы

Model

Varchar(55)

Модель

Kol_vt

Float

Количество Вт в БП

Img

Varchar(55)

Путь к директории с изображением
блока питания

Description

Text

Описание БП

Price

Float

Средняя цена блока питания


















Таблица hard_drive предназначена для хранения данных о жестком

диске.
Таблица 8 – Таблица БД hard_drive





Наименование поля

Тип

Назначение

Id

Int(11)

Уникальный ключ

Firma

Varchar(55)

Наименование фирмы

Model

Varchar(55)

Модель

volume

Float

Объем памяти в Мб

Img

Varchar(55)

Путь к директории с
изображением

Description

Text

Описание HDD

Price

Float

Средняя цена
процессора













Таблица body – предназначена для хранения данных о корпусе.



Таблица 9 – Таблица БД body





Наименование поля

Тип

Назначение

Id

Int(11)

Уникальный ключ

Firma

Varchar(55)

Наименование фирмы

Model

Varchar(55)

Модель

Img

Varchar(55)

Путь к директории с

изображением корпуса

description

Text

Описание Системного

блока

Price

Float

Средняя цена корпуса














Таблица BuildPC предназначена для хранения данных о финальной сборке.
Таблица 10 – Таблица БД BuildPC





Наименование поля

Тип

Назначение

Id

Int(11)

Уникальный ключ

Body_id

Int(11)

Передается уникальный

ключ корпуса

Video_card_id

Int(11)

Передается уникальный

ключ видеокарты

CPU_id

Int(11)

Передается уникальный

ключ процессора

RAM_id

Int(11)

Передается уникальный

ключ оперативной
памяти












Таблица 10 – Таблица БД BuildPC (Продолжение)





Power_supply_id

Int(11)

Передается уникальный

ключ блока питания

Motherboard_id

Int(11)

Передается уникальный

ключ материнской
платы

Hard_drive_id

Int(11)

Передается уникальный
ключ жесткого диска

Img

Varchar(55)

Путь к директории с
изображением

корпуса(Используется
и для общей сборки)

Description

Text

Описание
возможностей сборки

для пользователя

Price

Float

Общая средняя цена

сборки















Таблица build_position предназначена для хранения всех имеющихся сборок с их координатами.
Таблица 11- Таблица БД build_position





Наименование поля

Тип

Назначение

Id

Int(11)

Уникальный ключ

Build_id

Int(11)

Передается

уникальный ключ
сборки

x

Int(11)

Координата по оси х

y

Int(11)

Координата по оси Y














2.2 Реализация приложения
Для реализации были использованы язык: php[4] ,js[5].

В директории сайта имеется файл “index.php” в котором описана верстка

сайта.

По нажатию на одну из клавиш Отправить” зависимости от способа подбора, который выбрал пользователь), данные отправляются методом POST на страницу “result.php”, на которой происходит взаимосвязь с базой данных и обработка данных которые отправил пользователь. Основные строчки кода представлены ниже.

В данной ситуации есть 2 варианта развития событий:

1) Пользователь выбрал фирму, которую он предпочитает, и цену,

которую считает приемлемой.

2) Пользователь ответил на вопросы, и подбор будет происходить

исходя из его ответов.

Рассмотрим первый вариант:

// Если была послана форма с Ценой и фирмами.
if ( isset($_POST['firmsAndModels']) ) {

// Определяем какая серия видеокарты выбрана
$postFirms = $_POST['choose-firms-video'];

if ( $postFirms == 1) {

$seria = 'any';

} else if ( $postFirms == 2 ) {

$seria = 'NVIDIA';

} else if ( $postFirms == 3) {

$seria = 'AMD';

};



После чего те же самые действия проделываем для определения фирмы производителя процессора.

$cpuFirm = $_POST['choose-firms-CPU'];
if ( $cpuFirm == 1) {

$cpu = 'any';

} else if ( $cpuFirm == 2 ) {

$cpu = 'Intel';

} else if ( $cpuFirm == 3) {

$cpu = 'AMD';

};

После чего делается SQL-запрос к базе данных, который находит все

видеокарты данной серии. Если же был выбран селектор на значении «Любая», то выбираются все имеющиеся видеокарты.

if ( $seria != 'any') {

$query = $db->query("SELECT `id` FROM `video_card` WHERE

`seria` = '$seria';");

} else {

$query = $db->query("SELECT `id` FROM `video_card`;");

}

Следующий блок кода, заносит данные об первичном ключе

выбранной/ых видеокарт в массив. Это сделано для того, чтобы лишний раз не обращаться к базе данных.

$i = 0;

while($row = $query->fetch()) {
$videoList[$i] = $row['id'];
$i++;

}


Далее происходит подбор по такой же системе, можно выделить только проверку на существование сборки в данном ценовом диапазоне.

Так в следующими строчками кода задается диапазон цены, выбранной пользователем. Где EPS заранее заданная константа, которая определяет величину интервала между минимальной и максимальной ценой.

$price = $_POST['pred_price'];
$minPrice = $price - EPS;
$maxPrice = $price + EPS;
И уже используя найденный интервал, используем его для

нахождения сборки с заданной ценой, делаем это с помощью следующего запроса.

$query = $db->query("SELECT * FROM `BuildPC` WHERE `Summary` < $maxPrice AND `Summary` > $minPrice;");

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

После произведенных действий, необходимо соотнести все условия и найти такую сборку, которая бы всем им удовлетворяла. Для этого необходимо пройтись по всем 3 условиям. Для этого был использован цикл while.

// проверка на наличие такой сборки
$i = 0;

$build = array();

while( $i <= count($priceList) - 1 ) {

$j = 0;

while ($j <= count($cpuList) - 1) {
$l = 0;

while ($l <= count($videoList) - 1) {

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

if ( $cpuList[$j] == $priceList[$i]['CPU_id'] and $videoList[$l] == $priceList[$i]['video_card_id'] ) {

После чего закрываются все циклы, увеличивается значение переменных, отвечающие за номер шага. И так пока не будут просмотрены все варианты.

Во втором случае код будет выглядеть так, т.е. если была послана форма с вопросами:

} else if ( isset($_POST['quest']) ){

Необходимо установить координаты. В данном приложении

координатами являются ответы на вопросы, где номер вопросы это Ось, а номер ответа – числовое значение.

$x1 = $_POST['forWhat'];

$y1 = $_POST['cost'];

Вариант просматривать координаты сразу через SQL-запрос, является не

самым удобным. Проще собрать все координаты сразу одним запросом:
$query = $db->query("SELECT `build_id`,`x`,`y` FROM

`build_position`;");

Запишем их в массив:

$i = 0;

while($row = $query->fetch()) {
$pos[$i]['build_id'] = $row['build_id'];
$pos[$i]['x'] = $row['x'];
$pos[$i]['y'] = $row['y'];

$i++;

};




И работая с массивом, можно легко найти минимальное значение расстояния между точками. Для этого достаточно сначала присвоить минимальное значение первому элементу:

$min = sqrt( pow(($x1-$pos[0]['x']),2) + pow(($y1-$pos[0]['y']),2) );
$resPosX = $pos[0]['x'];

$resPosY = $pos[0]['y'];

$buildId = $pos[0]['build_id'];

После чего достаточно в цикле просмотреть все оставшиеся и, в случае

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

$i = 1;

while ( $i <= count($pos) - 1) {

$length = sqrt( pow(($x1-$pos[$i]['x']),2) + pow(($y1-$pos[$i]['y']),2) );
if ( $length < $min) {

$min = $length;

$resPosX = $pos[$i]['x'];

$resPosY = $pos[$i]['y'];

$buildId = $pos[$i]['build_id'];

}

$i++;

}

Далее достаточно просто выбрать из базы данных первичный ключ сборки, который был найден в предыдущем блоке кода. Делает выборку следующий запрос:

$query = $db->query("SELECT * FROM `BuildPC` WHERE `id` = '$buildId';");


Можно заметить, что для обоих случаев наименование переменных одинаково, это требуется для того, чтобы не вводить лишние условия и проверки, а также не акцентировать внимание на том, какой способ подбора был выбран. Далее происходит вывод информации с базы данных, все делается практическим одинаковыми запросами. Код представлен ниже.

Например, программа ничего не смогла найти по заданным значением, тогда будет выведено советующее сообщение. Код описан ниже.

if (empty($build)) { ?>

1   2   3   4


написать администратору сайта