БлогNot. PHP: считаем средний балл и успеваемость

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.'&lt;'.$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 просмотров]


теги: числа сервис учебное php

К этой статье пока нет комментариев, Ваш будет первым