PHP: считаем средний балл и успеваемость
Очередной "пятиминутный" скрипт в учебных целях, хотя может и пригодиться :) Рассчитывает по заданному количеству "пятёрок", "четвёрок", "троек" и "двоек" общее количество оценок, средний балл, а также абсолютную (без троек) и качественную (без двоек) успеваемость, выраженную, как это принято, в процентах.
Cделано полностью по моему шаблону, на всякий случай привожу полный исходник скрипта, и, конечно, ссылку на онлайн-версию:
Сервис "Расчёт среднего балла и успеваемости" в работе онлайн
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <title>Средний балл и успеваемость</title> </head> <body> <?php function trimall($string) { return preg_replace("/(^\s*)|(\s*$)/","",preg_replace("/\s+/"," ",trim($string))); } function magic ($path) { @ini_set('magic_quotes_runtime', '0'); @ini_set('magic_quotes_sybase', '0'); return (@get_magic_quotes_gpc()=='1' ? stripslashes($path) : $path); } function cnt ($k2,$k3,$k4,$k5,$all) { $av = round ((5*$k5+4*$k4+3*$k3+2*$k2)/$all,2); $ua = round (($k5+$k4+$k3)/$all*100,2); $uq = round (($k5+$k4)/$all*100,2); return '<tr> <td>Всего оценок:</td><td>'.$all.'</td> </tr><tr> <td>Средний балл:</td><td>'.$av.'</td> </tr><tr> <td>Абсолютная успеваемость, %:</td><td>'.$ua.'</td> </tr><tr> <td>Качественная успеваемость, %:</td><td>'.$uq.'</td> </tr>'; } $params = array ('k2','k3','k4','k5','k0','action'); foreach ($params as $num=>$var) { if (!empty($_POST[$var])) $$var = intval(abs(trimall(htmlspecialchars(magic($_POST[$var]))))); else if (!empty($_GET[$var])) $$var = intval(abs(trimall(htmlspecialchars(magic($_GET[$var]))))); else $$var = 0; } echo ' <script type="text/javascript"> function clearme() { document.f1.k5.value = ""; document.f1.k4.value = ""; document.f1.k3.value = ""; document.f1.k2.value = ""; document.f1.k0.value = ""; } </script> <noscript><div align="center"><small> Кнопка "Очистить" недоступна, т.к. в вашем браузере выключен Javascript</small></div></noscript> <form name="f1" method="post" action="'.$_SERVER['PHP_SELF'].'"> <table align="center" border="0" cellpadding="4" cellspacing="0"> <caption>Введите количество оценок:</caption> <tr> <td align="right">Отлично (5):</td> <td> <input type="text" name="k5" maxlength="2" size="3" value="'.$k5.'"> </td> </tr> <tr> <td align="right">Хорошо (4):</td> <td> <input type="text" name="k4" maxlength="2" size="3" value="'.$k4.'"> </td> </tr> <tr> <td align="right">Удовлетворительно (3):</td> <td> <input type="text" name="k3" maxlength="2" size="3" value="'.$k3.'"> </td> </tr> <tr> <td align="right">Неудовлетворительно (2):</td> <td> <input type="text" name="k2" maxlength="2" size="3" value="'.$k2.'"> </td> </tr> <tr> <td align="right">Всего в группе (необязательно):</td> <td> <input type="text" name="k0" maxlength="2" size="3" value="'.$k0.'"> </td> </tr> <tr> <td> <input type="button" value="Очистить" onclick="clearme();"> </td> <td> <input type="hidden" name="action" value="1"> <input type="submit" value="Отправить"> </td> </tr> </table> </form>'; if (!empty($action)) { $all = $k5+$k4+$k3+$k2; $res = ''; if ($all>0) { $res .= '<tr><td colspan="2"><b>В процентах от количества присутствующих:</b></td></tr>'; if ($k0>=$all) { $ps = round ($all/$k0*100,2); $res .= '<tr><td>Общее количество в группе:</td><td>'.$k0.'</td></tr>'. '<tr><td>Присутствовало:</td><td>'.$all.'</td></tr>'. '<tr><td>Процент присутствующих:</td><td>'.$ps.'</td></tr>'; if ($k0>$all) { $res .= '<tr><td>Отсутствовало:</td><td>'.($k0-$all).'</td></tr>'. '<tr><td>Процент отсутствующих:</td><td>'.(100-$ps).'</td></tr>'; } } $res .= cnt ($k2,$k3,$k4,$k5,$all); if ($k0>=$all) { $res .= '<tr><td colspan="2"><b>В процентах от общего количества:</b> <br>(<i>отсутствующие считаются как "неудовлетворительно"</i>) </td></tr>'; $res .= cnt ($k2+($k0-$all),$k3,$k4,$k5,$k0); } else if ($k0>0) $res .= '<tr><td colspan="2"><b>Указано неверное общее количество</b> ('.$k0.'<'.$all.')</td></tr>'; } else $res = '<tr><td colspan="2">Не найдено хотя бы одной оценки!</td></tr>'; echo ' <table align="center" border="0" cellpadding="4" cellspacing="0"> <caption>Результаты расчёта</caption>'.$res.'</table>'; } ?> </body></html>
P.S. Updated! По просьбам трудящихся, добавлено поле "Всего в группе" и расчёт как от общего количества получивших оценки, так и от количества человек в группе (отсутствующие считаются как "неудовлетворительно"). Отчёт и интерфейс оставлены максимально тупыми, ведь это скрипт для преподавателей и студентов :)
скриншот приложения в работе
25.02.2016, 13:53 [8168 просмотров]