Sei sulla pagina 1di 6

Un’azienda vuole gestire in modalità informatica alcune informazioni dei suoi dipendenti.

Ogni dipendente è
descritto dalle seguenti caratteristiche:

Codice (10 caratteri)

Dirigente (S/N)

Anno di prima assunzione

Livello (valore da 1 a 7)

Ferie rimanenti

Stipendio

Si deve prevedere un menu ripetibile con le seguenti opzioni:

Acquisizione: prevede l’inserimento di un nuovo dipendente. Devono essere inserite le sole informazioni
necessarie e si deve ordinare in base al codice.

Licenziamento/pensionamento: si preveda di cancellare le informazioni di un dipendente che licenzia o va


in pensione. Viene fornito il codice ed in caso di pensionamento anche l’anno attuale: in questo caso si deve
verificare che il dipendente abbia fatto almeno 40 anni di lavoro.

Modifica: prevede di modificare il livello e/o lo stipendio e/o le ferie di un dipendente di cui è fornito il
codice ed il dato utile all’aggiornamento (livello e stipendio per sostituzione, ferie per decremento).

Dirigenti: si deve costruire un vettore contenente il codice, l’anno di prima assunzione e lo stipendio dei
dirigenti. Si deve visualizzare il vettore ottenuto.

Analisi per ferie: si devono visualizzare Codice e Livello dei dipendenti che hanno ferie superiori ad un
valore fornito dall’utente.

Inizio anno: si deve sommare alle ferie di tutti i dipendenti un valore fornito dall’utente.

Si deve scrivere un programma in Ansi C utilizzando vettori di strutture ed un’impostazione modulare:


almeno 5 funzioni di cui almeno 3 con il passaggio parametri per indirizzo e 2 con il return. Per
l’ordinamento si deve usare l’algoritmo bubblesort e per la ricerca, dove possibile, il metodo dicotomico.
#include<stdio.h>

#include<string.h>

struct dipendente{

char cod[11], dirigente;

int anno, livello, ferie;

float stipendio;

};

struct acq_struct()

struct dipendente n;

scanf("%s",n.cod);

do{

scanf("%s"n.dirigente);

}while(n.dirigente!='S'&&n.dirigente!='N');

scanf("%d",&n.anno);

scanf("%d",&n.ferie);

scanf("%d",&n.livello);

scanf("%f",&n.stipendio);

return n;

struct nuovo{

char cod[11];

float stipendio;

int anno;

};

void bubble(int N,struct dipendenete *D);

struct dipendente aux;

int flag,i;
do{

flag=0;

for(i=0;i<N-1;i++)

if(strcmp(D[N].cod,D[N+1].cod)>0)

aux=D[N];

D[N]=D[N+1];

D[N+1]=aux;

flag=1;

}while(flag==1);

int ricerca(char *codi, struct dipendente *D, int N)

int I=0,M,F;

do{

M=(I+F)/2;

if(strcmp(D[M].cod,codi)==0)

return M;

else

if(strcmp(D[M].cod, codi>0)

F=M-1;

else

I=M+1;

}while(I<=F);

return -1;

}
int main()

struct dipendente D[100];

int scelta, i, N;

do{

printf("menu");

do{

scanf("%d",&scelta);

}while(scelta>7||scelta<1);

switch(scelta)

case 1:

{if(N<100)

D[N]=acq_struct()

N++;

bubble(N,D);

}else

printf("vettore pieno");

break;

case 2:

char codi[11],

int pos;

scanf("%s",cod);

pos=ricerca(codi,D,N)

if(pos=-1)

printf("codice non trovato");

else
if(pos=N)

n--;

else

for(i=pos;i<N;i++)

D[i]=D[i+1];

}n--}

case 3:

int nlivello, nstipendio, vacanze,pos, risp;

char codice[11];

pos=ricerca(codice,D,N);

do{

printf("modificare livello? 1 si 2 no");

scafn("%d",&risp);

}while(risp<1||risp>2);

if(risp=1)

scanf("%d",nlivello);

D[pos].livello=nlivello

} ...

case 4:

struct nuovo w[100];

int k=0;

for(i=0;i<k;i++)

if(D[i].livello=='s');
{

strcpy(w[k].cod,D[i].cod);

w[k].anno=D[i].anno;

w[k].stipendio=D[i].stipendio;

k++;

for(i=0;i<k;i++)

printf("codice %s \nanno %d \nstpendio %f ", w[i].cod, w[i].anno,


w[i].stipendio);

case 5:

}while(scelta!=7)