Доброго времени суток.
Установил SchoolNuke (система тестирования). Написана на php.
В принципе всё нормально, но непонятно расчитываются оценки. Вернее, расчитываются дважды, один раз неправильно, второй - правильно. Хочу это всё поправить, но в php не силён. Прошу помощи.
Обратите внимание на нижнюю таблицу: оценка в поле "Оцен." (завышено) ВЫШЕ оценки в поле "Уровень способностей" (реально).
Вопрос в следующем: Как сделать, чтобы было одинаковое значение, как в поле "Уровень способностей"?
В принципе, с полем "Уровень способностей" я более-менее разобрался, а вот поле "Оцен." никак победить не могу...
Полностью файл, ответственный за расчёт оценок -
здесь (по моему мнению)
Я так понимаю этот кусок отвечает за поле "Уровень способностей"
$result = $db->sql_query("SELECT AVG(rating) FROM ".$table['log']." WHERE journal ='".$journal."' AND rating > '0' ");
$row = $db->sql_fetchrow ($result);
$itog = round ($row['AVG(rating)']);
$result = $db->sql_query("SELECT SUM(new_rating) FROM ".$table['log']." WHERE journal ='".$journal."'");
$row = $db->sql_fetchrow ($result);
$value = $row['SUM(new_rating)'];
$result = $db->sql_query("SELECT SUM(max_rating) FROM ".$table['log']." WHERE journal ='".$journal."'");
$row = $db->sql_fetchrow ($result);
$max_value = $row['SUM(max_rating)'];
$new_itog = round($value*100/$max_value);
if (99 < $new_itog) { $new_result = 'Наивысший уровень [ 5+ ]'; }
elseif ( 94 < $new_itog) { $new_result = 'Очень высокий уровень [ 5 ]'; }
elseif ( 90 < $new_itog) { $new_result = 'Высокий уровень [ 5- : 4+ ]'; }
elseif ( 84 < $new_itog) { $new_result = 'Выше среднего уровня [ 4+ ]'; }
elseif ( 74 < $new_itog) { $new_result = 'Чуть выше среднего уровня [ 4 ]'; }
elseif ( 49 < $new_itog) { $new_result = 'Средний уровень [ 3 ]'; }
elseif ( 44 < $new_itog) { $new_result = 'Чуть ниже среднего уровня [ 2+ : 3- ]'; }
elseif ( 24 < $new_itog) { $new_result = 'Ниже среднего уровня [ 2 : 2+ ]'; }
elseif ( 9 < $new_itog) { $new_result = 'Низкий уровень [ 1+ : 2- ]'; }
else { $new_result = 'Очень низкий уровень [ 1 ]'; }
$db->sql_query("UPDATE ".SN_JOURNAL_TABLE." SET result = '".$itog."',percent= '".$new_itog."', new_result= '".$new_result."' WHERE journal_id='".$journal."'"); //заносим оценку в базу сесии
$lev = $level['allow']+1;
$db->sql_query("UPDATE ".SN_ALLOW_TABLE." SET allows = '".$lev."' WHERE allow_id='".$level['id_allow']."'");
$go_exit = true;
а этот кусок - за поле "Оцен."
if ($complex == "C") { $max_rating = 2; }
elseif ($complex == "B") { $max_rating = 1.6; }
else { $max_rating = 1; }
if ($reply_user == $reply || $attempt >= 3) { // если ответ верный переходим к следующему вопросу
$exit = true;
$true_false = true;
$ocen = 6 - $attempt;
if (($reply_user != $reply && $attempt == 3) ||($attempt > 3)) {$ocen = 2; $winup=true; $true_false = false;}
if ($complex == "C") {
switch ($ocen) {
case 5: $new_rating = 2; break;
case 4: $new_rating = 1.5; break;
case 3: $new_rating = 1; break;
default: $new_rating = 0;}
}elseif ($complex == "B") {
switch ($ocen) {
case 5: $new_rating = 1.6; break;
case 4: $new_rating = 1.2; break;
case 3: $new_rating = 0.8; break;
default: $new_rating = 0;}
}else{
switch ($ocen) {
case 5: $new_rating = 1; break;
case 4: $new_rating = 0.75; break;
case 3: $new_rating = 0.5; break;
default: $new_rating = 0;}
}
P.S. Как вариант, может кто подскажет как поле "Оцен." вообще убрать. Тогда можно поле "Уровень способностей" переименовать в "Оценка" и там выставляется оценка на любой вкус и цвет запросто.