Fondamenti di programmazione

Corso php a cura del prof. Pietro De Paolis

Modifiche al programma secondo le ore

Orario settimanale

Per quanto riguarda i docenti sappiamo che l'orario settimanale, cioè le ore di insegnamento presso la scuola di ciascun docente sono 18 ore per la scuola secondaria  e 24 ore per la scuola primaria e la scuola dell'infanzia. Esistono dei casi di docenti che fanno un orario settimanale ridotto sia perché a tempo parziale, cioè non insegnano per tutte le ore previste dal contratto e sia perché sono supplenti, e quindi non insegnano per l'orario settimanale completo.

In questi casi tutti gli emolumenti sia lo stipendio che la retribuzione professionale docente devono essere ridotte in base ad una proporzione.

Esempio

Calcolare lo stipendio lordo base di un docente della scuola secondaria superiore che presta servizio per sole 10 ore la settimana, invece delle 18 ore previste.

Occorre prendere lo stipendio mensile lordo che è pari a € 1.051,91, dividerlo per 18 e moltiplicarlo per 10:

Analogamente occorre fare, sia per la indennità integrativa speciale e sia per la retribuzione professionale docente.

Dobbiamo, ora, preparare un menu a tendina del tipo:

 

Memorizzeremo i valori nella variabile php $ore e html ore.

Modifichiamo, quindi, il listato di stipendio6.php aggiungendo il comando select seguente:

<select size="1" name="ore" >

<option value="0">SCEGLI ORE SETTIMANALI</option>

<option value="1">1</option>

<option value="2" >2</option>

<option value="3">3</option>

<option value="4" >4</option>

<option value="5">5</option>

<option value="6" >6</option>

<option value="7">7</option>

<option value="8" >8</option>

<option value="9" >9</option>

<option value="10">10</option>

<option value="11" >11</option>

<option value="12">12</option>

<option value="13" >13</option>

<option value="14">14</option>

<option value="15" >15</option>

<option value="16">16</option>

<option value="17" >17</option>

<option value="18" >18</option>

<option value="19" >19</option>

<option value="20">20</option>

<option value="21" >21</option>

<option value="22">22</option>

<option value="23" >23</option>

<option value="24">24</option>

</select>

 

Notiamo che nella variabile $ore verrà memorizzato un numero che rappresenta appunto le ore settimanali; il valore 0 indica che l'utente non ha fatto la scelta; e questo può essere una causa di errore, che vedremo successivamente, in quanto il docente deve obbigatoriamente indicare il suo orario settimanale; mentre il personale non docente lavora su orario intero, secondo il nostro programma semplificato.

Il listato completo è:

<html>

<body background="sfondo2.jpg">

<font face="Verdana" color="#FF00FF" size="5" >Programma per il calcolo dello stipendio lordo.</font><br>

<font face="Verdana" size="4">Anno solare 2005

<form action="stipendio10.php" name="modulo1">

<table border="1" width="100%">

<tr><td><font color="#FF0000" size="4">Tipo di personale</td><td><font color="#FF0000" size="4">Anni di servizio</td></tr>

<tr>

<td>

<select size="1" name="personale" ><option value="0">SCEGLI PERSONALE</option><option value="1">COLLABORATORE SCOLASTICO</option>

<option value="2" >COLLABORATORE SCOL. DEI SERVIZI</option>

<option value="3">ASSISTENTI AMMINISTRATIVI</option>

<option value="4" >COORDINATORE AMM. E TECNICO</option>

<option value="5">DIRETTORE SERV. GEN. ED AMMIN. E AMMIN.</option>

<option value="6" >DOCENTE SCUOLA MATERNA- ELEMENTARE</option>

<option value="7">DOCENTE DIPLOMATO SECONDARIA 2°</option>

<option value="8" >DOCENTE SCUOLA MEDIA</option>

<option value="9" >DOCENTE LAUREATO - SECONDARIA 2°</option>

</select>

</td>

<td>

<select size="1" name="anniservizio" >

<option value="0">SCEGLI ANNI DI SERVIZIO</option>

<option value="1">DA 0 A 2</option>

<option value="2" >DA 3 A 8</option>

<option value="3">DA 9 A 14</option>

<option value="4">DA 15 A 20</option>

<option value="5">DA 21 A 27</option>

<option value="6">DA 28 A 34</option>

<option value="7">DA 35 IN POI</option>

</select>

</td>

</tr>

<tr><td><font color="#FF0000" size="4">Ore settimanali per i docenti</td><td></td></tr>

</tr><tr><td>

<select size="1" name="ore" >

<option value="0">SCEGLI ORE SETTIMANALI</option>

<option value="1">1</option>

<option value="2" >2</option>

<option value="3">3</option>

<option value="4" >4</option>

<option value="5">5</option>

<option value="6" >6</option>

<option value="7">7</option>

<option value="8" >8</option>

<option value="9" >9</option>

<option value="10">10</option>

<option value="11" >11</option>

<option value="12">12</option>

<option value="13" >13</option>

<option value="14">14</option>

<option value="15" >15</option>

<option value="16">16</option>

<option value="17" >17</option>

<option value="18" >18</option>

<option value="19" >19</option>

<option value="20">20</option>

<option value="21" >21</option>

<option value="22">22</option>

<option value="23" >23</option>

<option value="24">24</option>

</select>

</td><td></td></tr>

</table>

<br>

<br>

<input type="Submit" value="CALCOLA LO STIPENDIO MENSILE">

</form>

<body>

</html>

 

listato di stipendio6.php

Salviamolo come stipendio6.php ed eseguiamolo; otteniamo:

Gestione degli errori per il numero di ore

L'utente può commettere diversi errori sul numero di ore; consideriamo i seguenti errori:

1 - Omissione del numero di ore se si tratta di un personale docente; in tal caso $ore =0 e lo correggiamo con:

if (($ore == 0)&&($personale>5)) {

print ("Non hai indicato le ore settimanali di servizio. Torna indietro! <br>");

exit;

};

2 - Un docente di scuola secondaria indica un numero di ore settimanali superiore a 18, cosa riservata solo ai docenti della scuola primaria e dell'infanzia; lo correggiamo con:

if (($ore >18)&&($personale>6)) {

print ("Le ore non possono essere più di 18. Torna indietro! <br>");

exit;

};

Il listato di stipendio10.php diventa:

<html>

<body background="sfondo2.jpg">

<?php

print ("Programma per calcolare lo stipendio mensile lordo.<br><br>");

// carico i valori nelle variabili php

$personale = $_GET['personale'];

$anniservizio = $_GET['anniservizio'];

$ore = $_GET['ore'];

// controllo errori di scelta dell'utente

if ($personale == 0) {

print ("Non hai indicato il tipo di personale. Torna indietro! <br>");

exit;

};

if ($anniservizio == 0) {

print ("Non hai indicato gli anni di servizio. Torna indietro! <br>");

exit;

};

if (($ore == 0)&&($personale>5)) {

print ("Non hai indicato le ore settimanali di servizio. Torna indietro! <br>");

exit;

};

if (($ore >18)&&($personale>6)) {

print ("Le ore non possono essere più di 18. Torna indietro! <br>");

exit;

};

// leggo il file stipendi05.txt

$nomefile = "stipendi05.txt";

$fp = fopen($nomefile, "r");

for ($t=1; $t<81; $t++) $matrice[$t] = fgets ($fp, 4096);

fclose($fp);

// leggo file dell'indennità

$nomefile = "indennita.txt";

$fp = fopen($nomefile, "r");

for ($t=1; $t<81; $t++) $matrice2[$t] = fgets ($fp, 4096);

fclose($fp);

$tre = $anniservizio.$personale;

$uno = $anniservizio."0";

// faccio dei calcoli

$mensile= ($matrice[$tre]-$matrice2[$personale])/12;

$integrativa = $matrice2[$personale]/12;

// stampo i risultati

print ("Personale: $matrice[$personale] <br>");

print ("Anni di servizio: $matrice[$uno] <br>");

print ("Lo stipendio mensile lordo depurato della Indennità Integrativa speciale è € $mensile <br>");

print ("La indennità integrativa speciale lorda da sommare allo stipendio mensile è € $integrativa <br>");

// calcolo il compenso individuale accessorio

if ($personale<5) {

if ($personale<3) $cia=48.25;

if (($personale==3)||($personale==4)) $cia=52.83;

print ("Il compenso individuale accessorio è € $cia <br>");

$imponibile = ($mensile + $integrativa + $cia);

print ("Totale competenze lorde mensili: € $imponibile <br>");

};

if ($personale==5) {

$imponibile = ($mensile + $integrativa);

print ("Totale competenze lorde mensili: € $imponibile <br>");

};

if ($personale>5) {

if($anniservizio<4) $rpd=154.82;

if(($anniservizio>3)&&($anniservizio<6)) $rpd=190.65;

if($anniservizio>5) $rpd=239.17;

$imponibile = ($mensile + $integrativa + $rpd);

print ("La retribuzione professionale docenti è € $rpd <br>");

print ("Totale competenze lorde mensili: € $imponibile <br>");

 

};

?>

<body>

</html>

 

listato di stipendio10.php

 

Eseguiamo di nuovo stipendio6.php e mettiamo i valori errati in modo da controllare se stipendio10.php  risponde in modo adeguato.

Modifica nel calcolo in base alle ore

Ora lo stipendio dei docenti va ridotto in base al numero di ore come nella formula che abbiamo visto prima; per fare questo dapprima mettiamo il valore normale di ore in base al tipo di docente in una variabile che chiamiamo $normale e cioè:

if ($personale==6) $normale=24;

if ($personale>6) $normale=18;

Poi modifichiamo il calcolo di $mensile, $integrativa e $rpd in base alle ore in questo modo:

$mensile2=($mensile/$normale)*$ore;

$integrativa2=($integrativa/$normale)*$ore;

$rpd2=($rpd/$normale)*$ore;

Dopo queste modifiche stipendio10.php diventa:

<html>

<body background="sfondo2.jpg">

<font face="Verdana" color="#FF00FF" size="5" >Programma per il calcolo dello stipendio lordo.</font><br>

<font face="Verdana" size="4">Anno solare 2005<br><br>

<?php

// carico i valori nelle variabili php

$personale = $_GET['personale'];

$anniservizio = $_GET['anniservizio'];

$ore = $_GET['ore'];

if ($personale==6) $normale=24;

if ($personale>6) $normale=18;

// controllo errori di scelta dell'utente

if ($personale == 0) {

print ("Non hai indicato il tipo di personale. Torna indietro! <br>");

exit;

};

if ($anniservizio == 0) {

print ("Non hai indicato gli anni di servizio. Torna indietro! <br>");

exit;

};

if (($ore == 0)&&($personale>5)) {

print ("Non hai indicato le ore settimanali di servizio. Torna indietro! <br>");

exit;

};

if (($ore >18)&&($personale>6)) {

print ("Le ore non possono essere più di 18. Torna indietro! <br>");

exit;

};

// leggo il file stipendi05.txt

$nomefile = "stipendi05.txt";

$fp = fopen($nomefile, "r");

for ($t=1; $t<81; $t++) $matrice[$t] = fgets ($fp, 4096);

fclose($fp);

// leggo file dell'indennità

$nomefile = "indennita.txt";

$fp = fopen($nomefile, "r");

for ($t=1; $t<81; $t++) $matrice2[$t] = fgets ($fp, 4096);

fclose($fp);

$tre = $anniservizio.$personale;

$uno = $anniservizio."0";

// faccio dei calcoli

$mensile= ($matrice[$tre]-$matrice2[$personale])/12;

$integrativa = $matrice2[$personale]/12;

// stampo i risultati

print ("Personale: $matrice[$personale] <br>");

print ("Anni di servizio: $matrice[$uno] <br>");

// calcolo il compenso individuale accessorio

if ($personale<5) {

if ($personale<3) $cia=48.25;

if (($personale==3)||($personale==4)) $cia=52.83;

print ("Lo stipendio mensile lordo depurato della Indennità Integrativa speciale è € $mensile <br>");

print ("La indennità integrativa speciale lorda da sommare allo stipendio mensile è € $integrativa <br>");

print ("Il compenso individuale accessorio è € $cia <br>");

$imponibile = ($mensile + $integrativa + $cia);

print ("Totale competenze lorde mensili: € $imponibile <br>");

};

if ($personale==5) {

print ("Lo stipendio mensile lordo depurato della Indennità Integrativa speciale è € $mensile <br>");

print ("La indennità integrativa speciale lorda da sommare allo stipendio mensile è € $integrativa <br>");

$imponibile = ($mensile + $integrativa);

print ("Totale competenze lorde mensili: € $imponibile <br>");

};

if ($personale>5) {

if($anniservizio<4) $rpd=154.82;

if(($anniservizio>3)&&($anniservizio<6)) $rpd=190.65;

if($anniservizio>5) $rpd=239.17;

$mensile2=($mensile/$normale)*$ore;

$integrativa2=($integrativa/$normale)*$ore;

$rpd2=($rpd/$normale)*$ore;

$imponibile = ($mensile2 + $integrativa2 + $rpd2);

print ("Servizio di ore: $ore su orario normale di $normale ore.<br>");

print ("Lo stipendio mensile lordo depurato della Indennità Integrativa speciale è € $mensile2 <br>");

print ("La indennità integrativa speciale lorda da sommare allo stipendio mensile è € $integrativa2 <br>");

print ("La retribuzione professionale docenti è € $rpd2 <br>");

print ("Totale competenze lorde mensili: € $imponibile <br>");

 

};

?>

<body>

</html>

 

listato di stipendio10.php

Eseguiamo di nuovo stipendio6.php e vediamo se effettua la riduzione in base alle ore. Otteniamo:

In effetti riduce tutti gli importi in proporzione alle ore.

Osservazione

Ci stiamo accorgendo che il nostro programma diventa complesso e lungo da scrivere; potrebbe succedere, in fase di scrittura, che commettiamo degli errori che potrebbero portare alla perdita del programma intero scritto; questo può avvenire sia in caso di mancanza temporanea ed improvvisa dell'energia elettrica, proprio nell'istante di salvataggio del programma, e sia in fase di esecuzione del programma, qualora si bloccasse il sistema operativo Windows.

E' buona norma, quindi, dopo aver scritto un programma lungo farsi una copia o sullo stesso computer o su un CD a parte, in modo da tenerlo per eventuali imprevisti.

 

 

Corso di programmazione in PHP

Dizionario php

 

prof. Pietro De Paolis

Indice Scuola Elettrica - generico


Scuola Elettrica



 

Altre applicazioni


Mappa per tipo di scuola

 

Indice di tutte le pagine del sito


Guida per navigare


Richiesta informazioni


Scuola Elettrica