Fondamenti di programmazione

Corso php a cura del prof. Pietro De Paolis

Leggiamo la intera tabella dello stipendio

Nella precedente lezione avevamo visto come ricavare lo stipendio annuo lordo di un docente di scuola secondaria superiore Ora vogliamo completare il discorso considerando tutti i dipendenti della scuola, come nella seguente tabella presa dal contratto:

anni di servizioCollaboratore scolastico Collaboratore scolastico dei servizi Assistenti amministrativi Coordinatore amm.e tecnico Dir. servizi gen. ed amm. e amm. Docente sc. materna ed elem. Docente diplomato istituti sec. II° Docente scuola media Docente laureato istituti sec. II°
  da 0 a 2
 13659.90
 14010.01
 15302.38
 17495.96
 20230.62
 17582.23
 17582.23
 19082.50
 19082.50
 da 3 a 8
 13925.18
 14268.28
 15646.28
 17968.93
 20819.59
 18057.22
 18057.22
 19609.37
 20163.59
 da 9 a 14
 14896.91
 15223.27
 16874.38
 19425.88
 22664.73
 19520.02
 19520.02
 21331.19
 21893.39
 da 15 a 20
 15784.44
 16120.67
 18037.47
 21127.37
 24774.81
 21228.70
 21228.70
 23313.53
 24027.25
 da 21 a 27
 16668.09
 17031.95
 19207.56
 22778.93
 27053.50
 22887.02
 23701.35
 25238.19
 26745.11
 da 28 a 34
 17334.59
 17677.28
 20040.76
 24408.24
 29394.78
 24523.25
 25323.78
 27126.29
 28525.83
 da 35 a
 17801.67
 18159.30
 20679.35
 25621.63
 31672.27
 25741.51
 26556.37
 28525.83
 29945.29

 

Ci servono, per questo, due menu a tendina uno per la scelta del tipo di dipendente e l'altro per la scelta degli anni di servizio. Quello per la scelta degli anni di servizio lo abbiamo già fatto. Il listato in html era il seguente:

<html>

<body background="sfondo2.jpg">

Programma per il calcolo dello stipendio mensile lordo di un docente laureato di scuola superiore.<br>

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

<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>

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

</form>

<body>

</html>

 

Listato di stipendio3.php

 

e lo avevamo salvato come stipendio3.php. Il secondo menu a tendina può essere il seguente:

<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. 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>

A questo secondo menu a tendina diamo il nome di personale

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

in tal modo la variabile che contiene la scelta dell'utente sarà  personale in html e successivamente sarà $personale in php.

Mettiamo i valori nelle 10 opzioni:

<option value="0">SCEGLI PERSONALE</option>

dove il valore 0 sarà quando l'utente omette la scelta; mentre gli altri valori vanno da 1 a 9 come le nove colonne della tabella. In tal modo il numero contenuto in $personale sarà proprio il numero di colonna della tabella. Uniamo, allora, a stipendio3.php il secondo menu a tendina ed otteniamo:

<html>

<body background="sfondo2.jpg">

Programma per il calcolo dello stipendio lordo.<br>

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

 

<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. 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>

 

<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>

<br><br>

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

</form>

<body>

</html>

 

Listato di stipendio6.php

 

che salviamo come stipendio6.php

Notiamo che quando l'utente schiaccia il tasto

 viene richiamato con:

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

il modulo stipendio7.php che ancora non abbiamo scritto.

Lettura del file degli stipendi

Ora dobbiamo dapprima prepare un file testo che contiene tutti gli stipendi e sostituirlo con quello precedente, che era stipendi.txt, in modo che contenga gli stipendi di tutto il personale. In pratica occorre modificare la tabella e copiarla in un file testo. Un modo può essere questo:

Collaboratore scolastico

Collaboratore scolastico dei servizi

Assistenti amministrativi

Coordinatore amm.e tecnico

Dir. servizi gen. ed amm. e amm.

Docente sc. materna ed elem.

Docente diplomato istituti sec. II°

Docente scuola media

Docente laureato istituti sec. II°

da 0 a 2

13659.90

14010.01

15302.38

17495.96

20230.62

17582.23

17582.23

19082.50

19082.50

da 3 a 8

13925.18

14268.28

15646.28

17968.93

20819.59

18057.22

18057.22

19609.37

20163.59

da 9 a 14

14896.91

15223.27

16874.38

19425.88

22664.73

19520.02

19520.02

21331.19

21893.39

da 15 a 20

15784.44

16120.67

18037.47

21127.37

24774.81

21228.70

21228.70

23313.53

24027.25

da 21 a 27

16668.09

17031.95

19207.56

22778.93

27053.50

22887.02

23701.35

25238.19

26745.11

da 28 a 34

17334.59

17677.28

20040.76

24408.24

29394.78

24523.25

25323.78

27126.29

28525.83

da 35 a

17801.67

18159.30

20679.35

25621.63

31672.27

25741.51

26556.37

28525.83

29945.29

FINE

 

File di testo degli stipendi: stipendi05.txt

Copiamo il file e salviamolo come stipendi05.txt .

Notiamo alcuni particolari del file stipendi05.txt che è stato organizzato in modo da essere letto e poi memorizzato in una matrice che chiameremo $matrice[$t]. La tabella iniziale ha 10 colonne e 8 righe. La prima riga riporta il tipo di ciascun personale della scuola e la prima colonna riporta gli anni di servizio, che sono validi per tutte le colonne. Se leggo il file dall'inizio e lo memorizzo in $matrice[$t] ottengo per esempio che l'elemento $matrice[01] contiene "collaboratore scolastico"; l'elemento $matrice[11] contiene lo stipendio di 13659,90 relativo sempre al collaboratore scostico con anni di servizio da 0 a 2; l'elemento $matrice[21] contiene lo stipendio di 13925,18 relativo sempre al collaboratore scostico con anni di servizio da 3 a 8; e così via; in pratica il primo numero dell'emento della matrice mi indica la riga ed il secondo numero mi indica la colonna, se contiamo righe e colonne partendo da zero.

Andiamo ora a preparare il listato di stipendio7.php che dovrà leggere il file e memorizzarlo nella matrice. Partiamo da stipendio5.php che era:

<html>

<body background="sfondo2.jpg">

<?php

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

$anniservizio = $_GET['anniservizio'];

 

// leggo il file stipendi.txt

$nomefile = "stipendi.txt";

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

for ($t=1; $t<8; $t++) {

                                $matrice1[$t] = fgets ($fp, 4096);

                                $matrice2[$t] = fgets ($fp, 4096);

                                };

fclose($fp);

 

// stampo i risultati

print ("Lo stipendio annuo lordo è € $matrice2[$anniservizio] <br>");

if ($anniservizio == 0) print ("Non hai indicato gli anni di servizio. Torna indietro! <br>");

?>

<body>

</html>

 

Listato di stipendio5.php

 

 e modifichiamolo opportunamente in questo modo:

<html>

<body background="sfondo2.jpg">

<?php

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

$personale = $_GET['personale'];

$anniservizio = $_GET['anniservizio'];

 

// 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);

$tre = $anniservizio.$personale;

$uno = $anniservizio."0";

// stampo i risultati

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

if ($anniservizio == 0) print ("Non hai indicato gli anni di servizio. Torna indietro! <br>");

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

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

print ("Lo stipendio annuo lordo è € $matrice[$tre] <br>");

?>

<body>

</html>

 

Listato di stipendio7.php

 

e salviamolo come stipendio7.php.

Notiamo alcuni particolari.

Unione di variabili

Se ho due variabili le posso unire tra di loro usando il punto tra le due variabili.

Esempio

$tre = $anniservizio.$personale;

Il contenuto di $anniservizio viene unito al contenuto di $personale e memorizzzato in $tre. Nel nostro caso lo usiamo per formare l'indice della matrice. Se infatti in $anniservizio vi è 1 e in $personale vi è 1, ottengo come unione 11. Stiamo attenti che l'unione è diversa dalla somma. Infatti se avessi sommato 1+1 avrei ottenuto 2.

Se eseguiamo stipendio6.php otteniamo:

che ci permette di calcolare lo stipendio annuo lordo di tutto il personale della scuola.

Gestione degli errori

In fase di scrittura del nostro programma dobbiamo cercare di prevedere tutte le situazioni che si possono verificare in fase di esecuzione. Se guardiamo la nostra prima pagina del programma stipendio6.php:

notiamo che l'utente potrebbe omettere di effettuare una o entrambe delle due selezioni previste. In tal caso noi abbiamo previsto con la istruzione:

<option value="0">SCEGLI PERSONALE</option>

che il valore di $personale sia "0" e con la istruzione:

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

che il valore di $anniservizio sia "0".

Contemporaneamnte in stipendio7.php. abbiamo previsto con le istrzuioni:

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

if ($anniservizio == 0) print ("Non hai indicato gli anni di servizio. Torna indietro! <br>");

una prima gestione degli errori. Tuttavia notiamo che il programma fa delle operazioni inutili in caso di errore, infatti continua a leggere il file stipendi05.txt e fa le stampe, perdendo del tempo inutilmente. Occorrerebbe, invece, bloccare la esecuzione del programma. La questione del tempo è importante; un buon programmatore deve ridurre al minimo il numero di istruzioni che servono ad eseguire il programma e deve scegliere sempre il modo più veloce, evitando di far perdere del tempo prezioso al computer. Vediamo, quindi, come modificare il listato di stipendio7.php nel seguente:

<html>

<body background="sfondo2.jpg">

<?php

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

$personale = $_GET['personale'];

$anniservizio = $_GET['anniservizio'];

// gestione degli errori

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;

                                };

 

// 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);

$tre = $anniservizio.$personale;

$uno = $anniservizio."0";

// stampo i risultati

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

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

print ("Lo stipendio annuo lordo è € $matrice[$tre] <br>");

?>

<body>

</html>

 

Listato di stipendio7.php

 

notiamo le due if che fanno il controllo degli errori:

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;

                                };

in esse compare una nuova istruzione php e cioè exit.

Exit ci consente di bloccare il programma nel punto in cui si trova senza eseguire le istruzioni successive. Salviamo il nuovo listato di stipendio7.php ed eseguiamo nuovamente stipendio6.php per vederne gli effetti.

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