Описание основных алгоритмов разрабатываемого программного обеспечения 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Описание основных алгоритмов разрабатываемого программного обеспечения



На сайте системы проведения интернет-аукционов реализована функция выставления лотов и оплаты через сайт. Блок-схема алгоритма выставления лотов и оплаты приведена на рис. 3.1. При входе пользователя на страницу выставления лота система проверяет, зарегистрирован пользователь на сайте или нет. Если нет, то выводится сообщение о невозможности выставления лотов незарегистрированным пользователям и предлагается перейти на страницу регистрации. Для регистрации необходимо ввести имя пользователя, логин, пароль, e-mail и нажать кнопку «Регистрация». В случае если одно из полей ввода данных не было заполнено или было заполнено не верно, то выводится сообщение об ошибке. Если данные были введены и прошли проверку в базе данных, то осуществляется вход в систему и копия регистрационных данных высылается ему на e-mail.

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

Рисунок 3.1 – Алгоритм выставления и оплаты лота через сайт

Листинг добавления пользователя в базу данных при регистрации:

if ($isPostBack){

 

$username = $modx->db->escape($modx->stripTags(trim($_POST['username'])));

$fullname = $modx->db->escape($modx->stripTags($_POST['fullname']));

$email = $modx->db->escape($modx->stripTags($_POST['email']));

$password = $modx->db->escape($modx->stripTags($_POST['password']));

$country = $modx->db->escape($modx->stripTags($_POST['country']));

$state = $modx->db->escape($modx->stripTags($_POST['state']));

$zip = $modx->db->escape($modx->stripTags($_POST['zip']));

$formcode = $_POST['formcode'];

 

// проверка существования имени

if($username=="") {

$output = webLoginAlert("Введите имя!").$tpl;

return;

}

else {

$sql = "SELECT id FROM ".$modx->getFullTableName("web_users")." WHERE username='$username'";

if(!$rs = $modx->db->query($sql)){

$output = webLoginAlert("An error occured while attempting to retreive all users with username $username.").$tpl;

return;

}

$limit = $modx->db->getRecordCount($rs);

if($limit>0) {

$output = webLoginAlert("Имя пользователя используется!").$tpl;

return;

}

}

 

// валидация почты

if($email=='' ||!preg_match("/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/i", $email)){

$output = webLoginAlert("E-mail не валидный!").$tpl;

return;

}

 

// проверка на существование почты

$sql = "SELECT internalKey FROM ".$modx->getFullTableName("web_user_attributes")." WHERE email='$email'";

if(!$rs = $modx->db->query($sql)){

$output = webLoginAlert("An error occured while attempting to retreive all users with email $email.").$tpl;

return;

}

$limit = $modx->db->getRecordCount($rs);

if($limit>0) {

$row=$modx->db->getRow($rs);

if($row['internalKey']!=$id) {

$output = webLoginAlert("Email is already in use!").$tpl;

return;

}

}

 

// занесение в БД

$sql = "INSERT INTO ".$modx->getFullTableName("users")." (username, password)

VALUES('".$username."', md5('".$password."'));";

$rs = $modx->db->query($sql);}

Листинг добавления лота в базу данных:

if ($isPostBack){

if($_POST['Title']==''&& $_POST['Price']=='' &&$_POST['Data_start']=='' && $_POST['Contact']==''){

echo "Заполните все обязательные поля";

}

else{

$data['user_id'] = $modx->userLoggedIn();

$data['Title'] = $modx->db->escape($modx->stripTags(trim($_POST['Title'])));

$data['Small_descr'] = $modx->db->escape($modx->stripTags(trim($_POST['Small_descr'])));

$data['Status'] = $modx->db->escape($modx->stripTags(trim($_POST['Status'])));

$data['Price'] = $modx->db->escape($modx->stripTags(trim($_POST['Price'])));

$data['Min_Price'] = $modx->db->escape($modx->stripTags(trim($_POST['Min_Price'])));

$data['Data_start'] = $modx->db->escape($modx->stripTags(trim($_POST['Data_start'])));

$data['Data_end'] = $modx->db->escape($modx->stripTags(trim($_POST['Data_end'])));

$data['Category_ID'] = $modx->db->escape($modx->stripTags(trim($_POST['Category_ID'])));

$data['Contact'] = $modx->db->escape($modx->stripTags(trim($_POST['Contact'])));

$data['Location'] = $modx->db->escape($modx->stripTags(trim($_POST['Location'])));}

// занесение в БД

$modx->insert($modx->getFullTableName("lots"),$data);

 

Для проведения торгов по лоту был разработан соответствующий алгоритм. Блок-схема алгоритма представлена на рисунке 3.2. Принять участие в торгах может только зарегистрированный пользователь. После прохождение процедуры регистрации пользователь может принять участие в торгах по лоту.

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

Рисунок 3.2 – Алгоритм проведения торгов по лоту

Листинг добавления ставки по лоту:

$table_bet_lot = $modx->getFullTableName('bet_lot');

$table_tmp = $modx->getFullTableName('site_tmplvar_contentvalues');

$txt=$modx->userLoggedIn();// информация о юзере

$id_lot=$modx->documentIdentifier;//номер лота

$tvPr = $modx->getTemplateVarOutput(array("price"),$docid=$id_lot);//текущая цена

if($_POST['bet']!=''){

if($tvPr['price']<$_POST['bet']){

// вставили в таблицу для ставок

$data['user_id'] = $modx->db->escape($txt['id']);

$data['lot_id'] = $modx->db->escape($id_lot);

$data['price']=$modx->db->escape($_POST['bet']);

$data['price']=$modx->db->escape($_POST['bet']);

$modx->db->insert($data,$table_bet_lot);

//апдейт в свойстве товара

$data1['value']=$modx->db->escape($_POST['bet']);

$modx->db->update($data1,$table_tmp,'tmplvarid=1 AND contentid='.$id_lot);

echo '<p>Ставка успешно сделана</p>';}

else{

echo '<p>Текущая ставка выше.</p>';

}

}

Для наглядного представления об общем количестве торгов и лотов был реализован плагин для подсчета статистики завершившихся аукционов в соответствии с тем были ли лоты успешно проданы или остались без внимания. Блок-схема алгоритма подсчета статистики представлен на рисунке 3.3.

Рисунок 3.3 – Алгоритм подсчета статистики

Листинг ведения статистики:

<?php

 

$stat_type = isset($_GET['stat'])? $_GET['stat']: 1;

$stat_time = isset($_GET['time'])? $_GET['time']: 1;

 

$stat_data = array();

$stat_text = '';

 

switch($stat_type){

case 1:

$q_where = $stat_time == 1? "date + INTERVAL 30 DAY > NOW()": "";

//Всего

$o_total = $modx->db->getRow($modx->db->query("SELECT COUNT(*) AS cnt, SUM(price) AS price FROM ".$modx->getFullTableName('statistic').($q_where? ' WHERE '.$q_where: '')));

//Выполнен

$o_executed = $modx->db->getRow($modx->db->query("SELECT COUNT(*) AS cnt, SUM(price) AS price FROM ".$modx->getFullTableName('statistic')." WHERE `status` = '4'".($q_where? ' AND '.$q_where: '')));

//Отменен

 

 

$stat_data = array(

array("Выполнено",($o_total['cnt']>0? round($o_executed['cnt'] / $o_total['cnt'],2) * 100: 0),$o_executed['cnt']),

array("Отменено",($o_total['cnt']>0? round($o_cancelled['cnt'] / $o_total['cnt'],2) * 100: 0),$o_cancelled['cnt']),

 

);

$stat_colors_q = $modx->db->getValue($modx->db->select("value",$modx->getFullTableName('statistic'),"setting = 'conf_colors'"));

$stat_colors = explode('~',$stat_colors_q);

$stat_text = '

<br />

Всего заказов: <b>'.$o_total['cnt'].'</b>, на сумму: <b>'.$o_total['price'].'</b> руб.<br />

Сумма выполненных заказов: <b>'.(isset($o_executed['price'])? $o_executed['price']: 0).'</b> руб.<br />

Сумма отмененных заказов: <b>'.(isset($o_cancelled['price'])? $o_cancelled['price']: 0).'</b> руб.

';

break;

case 2:

 

break;

}



Поделиться:


Последнее изменение этой страницы: 2016-09-19; просмотров: 185; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.59.100.42 (0.028 с.)