Kontrola aktivity - OSY (aj s kodom)

Created: 2008-12-04 - 09:00

Zadanie

Vytvorte program na kontrolu aktivity studentov na serveri student. Kazdemu neaktivnemu studentovi sa budu pridelovat trestne body:
- trestny bod sa priratava za kazdu minutu, kedy bol student neaktivny
- ak sa prihlasil niekolko minut po zacati cvika (napr. o 7:50), tak sa mu priratava rozdiel medzi zaciatkom a jeho prihlasenim (konkretne 20 minut)
- cize trestny bod sa priratava nezavisle od toho ako dany student pracuje, ak napr.: pracoval niekolko minut bez prerusenia, potom prestal na 10 minut, potom pracoval zase niekolko minut, potom prestal na minutu, tak celkovy pocet trestnych minut bude 11

Zistovat cas necinnosti sa da pomocou prikazu w a stlpca IDLE (time). Skript je potrebne vytvorit a zaslat petovi do zaciatku dalsieho cvika vo stvrtok (takze v stredu vecer najneskor).
+ treba osetrit viacnasobne prihlasenie jedneho uzivatela - vtedy sa berie minimum z tych dvoch hodnot


#!/usr/bin/php -q
<?php

/* autor : Pavol Rajzák */

//funkcia na zistovanie trestnych bodov za oneskorene prihlasenie
function oneskorenyLogin($login){
$cas = split(":",$login);
$hod = $cas[0];
$min = $cas[1];
if($hod==7){
	if($min>30)
		return $min-30;
	else 
		return 0;
}
else if($hod==8){
	return 30+$min; 
}
else
	return 0;
}

if(!defined("STDIN")) {
	define("STDIN", fopen('php://stdin','r'));
}

$cnt = 0;
$suborSDatmi = "dataStvrtok.txt";

if(file_exists($suborSDatmi)){
	$data = fopen($suborSDatmi,"r+");
        while(!feof($data)){
	        $riadok = fgets($data,4096);
		$riadok = trim($riadok);
                $rozdelene = split("\t",$riadok);
                if(count($rozdelene)>1){
       	        	$poleHodnot[$rozdelene[0]]=$rozdelene[1];
			$poleLoginov[$rozdelene[0]]=$rozdelene[2];
			$jePrihlaseny[$rozdelene[0]]=false;
                }
	}
}
else
	$data = fopen($suborSDatmi,'w');

while(!feof(STDIN)){
	$riadok = fgets(STDIN, 4096);
	if($cnt>1){
		$rozdelene = split(" +",$riadok);
		if(count($rozdelene)>2){

			$meno = $rozdelene[0];
			$idle = $rozdelene[4];
			$login = $rozdelene[3];

			if(filesize($suborSDatmi)>0){
				if(isset($poleHodnot[$meno])){
                                	$trestneBody = $poleHodnot[$meno];
				}
				else{
					$trestneBody = 0; // ak sa prihlasi niekto novy
					$poleLoginov[$meno] = $login;
				}
			}
			else{
				$trestneBody = 0; // ak bol subor len teraz vytvoreny
				$poleLoginov[$meno] = $login;
			}
			
			$jePrihlaseny[$meno] = true;

                        if($idle[strlen($idle)-1]!="s"){
				$trestneBody++;
			}
			if(isset($poleIdle[$meno])){
				$old = $poleIdle[$meno];
				if(substr($old,-1)!='s' && substr($idle,-1)=='s')
					$trestneBody--;
				else if(substr($old,-1)=='s' && substr($idle,-1)!='s')
					$trestneBody--;
				else if(substr($old,-1)!='s' && substr($idle,-1)!='s')
					$trestneBody--;
			}

			$poleIdle[$meno] = $idle;

			$poleHodnot[$meno] = $trestneBody;
			
			echo $meno."\t idle:".$idle."\t trestne"; 
			echo "body:".$poleHodnot[$meno]."+".oneskorenyLogin($poleLoginov[$meno])."\t login:".$poleLoginov[$meno]."\n";
		}
	}
$cnt++;
}
fclose($data);

foreach ($jePrihlaseny as $meno => $je){
	if(!$je)
		$poleHodnot[$meno] +=1;
}

$data = fopen($suborSDatmi,"w");

$cnt = 0;
foreach ($poleHodnot as $meno => $trestneBody) {
	fwrite($data,$meno);
	fwrite($data,"\t");
	fwrite($data,$trestneBody."\t".$poleLoginov[$meno]."\t oneskorenie prihlasenia:".oneskorenyLogin($poleLoginov[$meno]));
	if($cnt!=count($poleHodnot)-1)
		fwrite($data,"\n");
	$cnt++;
}
fclose($data);


?>