codice:
#include <stdio.h>#include <string.h>
#include <stdlib.h>
typedef struct {
char nome[20];
char cognome[30];
char paese[30];
char nazionalita[30];
int matricola;
int voto_programmazione;
int voto_analisi;
int voto_algebra;
int voto_algoritmi;
int voto_architetture;
}studente;
int aggiungi_studente (studente *stud, int n)
{
printf("Inserisci nome studente %d: ", n+1);
scanf("%20s", &stud[n].nome);
printf("Inserisci cognome studente %d: ", n+1);
scanf("%30s", &stud[n].cognome);
printf("Inserisci paese studente %d: ", n+1);
scanf("%30s", &stud[n].paese);
printf("Inserisci nazionalita\' studente %d: ", n+1);
scanf("%30s", &stud[n].nazionalita);
printf("Inserisci matricola studente %d: ", n+1);
scanf("%d", &stud[n].matricola);
do{
printf("Inserisci voto di programmazione dello studente %d (se il voto non \212 presente inserire 31): ", n+1);
scanf("%d", &stud[n].voto_programmazione);
} while(stud[n].voto_programmazione<18 || stud[n].voto_programmazione>31 );
do{
printf("Inserisci voto di analisi matematica dello studente %d (se il voto non \212 presente inserire 31): ", n+1);
scanf("%d", &stud[n].voto_analisi);
} while(stud[n].voto_analisi<18 || stud[n].voto_analisi>31 );
do{
printf("Inserisci voto di algebra e geometria dello studente %d (se il voto non \212 presente inserire 31): ", n+1);
scanf("%d", &stud[n].voto_algebra);
} while(stud[n].voto_algebra<18 || stud[n].voto_algebra>31 );
do{
printf("Inserisci voto di algoritmi e strutture dati dello studente %d (se il voto non \212 presente inserire 31): ", n+1);
scanf("%d", &stud[n].voto_algoritmi);
} while(stud[n].voto_algoritmi<18 || stud[n].voto_algoritmi>31 );
do{
printf("Inserisci voto di architetture degli elaboratori dello studente %d (se il voto non \212 presente inserire 31): ", n+1);
scanf("%d", &stud[n].voto_architetture);
} while(stud[n].voto_architetture<18 || stud[n].voto_architetture>31 );
return 1;
}
void visualizza_studenti (studente *stud,int n)
{
int i;
for(i=0;i<n;i++)
{
printf("\n\nStudente %d:",i+1);
printf("\nNome: %s",stud[i].nome);
printf("\nCognome: %s",stud[i].cognome);
printf("\nPaese: %s",stud[i].paese);
printf("\nNazionalita\': %s",stud[i].nazionalita);
printf("\nMatricola: %d",stud[i].matricola);
if(stud[i].voto_programmazione==31)
printf("\nL\' esame di programmazione non \212 ancora stato superato!");
else
printf("\nVoto programmazione: %d",stud[i].voto_programmazione);
if(stud[i].voto_analisi==31)
printf("\nL\' esame di analisi matematica non \212 ancora stato superato!");
else
printf("\nVoto analisi matematica: %d",stud[i].voto_analisi);
if(stud[i].voto_algebra==31)
printf("\nL\' esame di algebra e geometria non \212 ancora stato superato!");
else
printf("\nVoto algebra e geometria: %d",stud[i].voto_algebra);
if(stud[i].voto_algoritmi==31)
printf("\nL\' esame di algoritmi e strutture dati non \212 ancora stato superato!");
else
printf("\nVoto algoritmi e strutture dati: %d",stud[i].voto_algoritmi);
if(stud[i].voto_architetture==31)
printf("\nL\' esame di architetture degli elaboratori non \212 ancora stato superato!");
else
printf("\nVoto architetture degli elaboratori: %d",stud[i].voto_architetture);
}
}
int cancella_studente (studente *stud,int n)
{
int i, x;
printf("Quale studente si vuole cancellare dall\'archivio?");
scanf("%d",&x);
for(i=x-1;i<n;i++)
{
strcpy(stud[i].nome,stud[i+1].nome);
strcpy(stud[i].cognome,stud[i+1].cognome);
strcpy(stud[i].paese,stud[i+1].paese);
strcpy(stud[i].nazionalita,stud[i+1].nazionalita);
stud[i].matricola==stud[i+1].matricola;
stud[i].voto_programmazione==stud[i+1].voto_programmazione;
stud[i].voto_analisi==stud[i+1].voto_analisi;
stud[i].voto_algebra==stud[i+1].voto_algebra;
stud[i].voto_algoritmi==stud[i+1].voto_algoritmi;
stud[i].voto_architetture==stud[i+1].voto_architetture;
}
n--;
return n;
}
void ricerca_studente (studente *stud,int n)
{
int mat, i;
printf("Inserire la matricola dello studente da cercare: ");
scanf("%d",&mat);
for(i=0;i<n;i++)
if(stud[i].matricola==mat)
{
printf("Lo studente cercato \212 in posizione %d.",i+1);
printf("I voti dello studente %s %s sono: ",stud[i].nome,stud[i].cognome);
if(stud[i].voto_programmazione==31)
printf("\nL\' esame di programmazione non \212 ancora stato superato!");
else
printf("\nVoto programmazione: %d",stud[i].voto_programmazione);
if(stud[i].voto_analisi==31)
printf("\nL\' esame di analisi matematica non \212 ancora stato superato!");
else
printf("\nVoto analisi matematica: %d",stud[i].voto_analisi);
if(stud[i].voto_algebra==31)
printf("\nL\' esame di algebra e geometria non \212 ancora stato superato!");
else
printf("\nVoto algebra e geometria: %d",stud[i].voto_algebra);
if(stud[i].voto_algoritmi==31)
printf("\nL\' esame di algoritmi e strutture dati non \212 ancora stato superato!");
else
printf("\nVoto algoritmi e strutture dati: %d",stud[i].voto_algoritmi);
if(stud[i].voto_architetture==31)
printf("\nL\' esame di architetture degli elaboratori non \212 ancora stato superato!");
else
printf("\nVoto architetture degli elaboratori: %d",stud[i].voto_architetture);
return;
}
printf("Non esiste nessuno studente in archivio corrispondente alla matricola inserita!");
return ;
}
void ricerca_esame (studente *stud, int n)
{
int i,cod;
printf("Cod 1=Programmazione\nCod2=Analisi matematica\nCod3=Algoritmi e strutture dati\nCod 4=Algebra e geometria\nCod 5=Architetture degli elaboratori\n");
do{
printf("Inserisci il codice corrispondente all'esame da cercare: ");
scanf("%d",&cod);
}while(cod<1 || cod>5);
if (cod==1)
{
printf("Lista degli studenti che non hanno sostenuto l'esame di programmazione");
for(i=0;i<n;i++)
if(stud[i].voto_programmazione==31)
printf("%s %s",stud[i].nome,stud[i].cognome);
}
if (cod==2)
{
printf("Lista degli studenti che non hanno sostenuto l'esame di analisi matematica");
for(i=0;i<n;i++)
if(stud[i].voto_analisi==31)
printf("%s %s",stud[i].nome,stud[i].cognome);
}
if (cod==3)
{
printf("Lista degli studenti che non hanno sostenuto l'esame di algoritmi e strutture dati");
for(i=0;i<n;i++)
if(stud[i].voto_algoritmi==31)
printf("%s %s",stud[i].nome,stud[i].cognome);
}
if (cod==4)
{
printf("Lista degli studenti che non hanno sostenuto l'esame di algebra e geometria");
for(i=0;i<n;i++)
if(stud[i].voto_algebra==31)
printf("%s %s",stud[i].nome,stud[i].cognome);
}
if (cod==5)
{
printf("Lista degli studenti che non hanno sostenuto l'esame di architetture degli elaboratori");
for(i=0;i<n;i++)
if(stud[i].voto_architetture==31)
printf("%s %s",stud[i].nome,stud[i].cognome);
}
}
void main()
{
studente *stud;
int n=0, cod;
printf("Cod 1: Aggiungi studente.\nCod 2: Visualizza studente.\nCod 3: Cancella studente.\nCod 4: Ricerca studente per matricola.\nCod 5: Ricerca studenti che non hanno dato un esame inserito.\n");
do{
printf("Inserisci il codice corrispondente alla funziuone da eseguire: \n");
scanf("%d",&cod);
}while(cod<=0 || cod>9);
stud=(studente*)malloc(1*sizeof(studente));
if(stud==NULL)
{
printf("Allocazione non riuscita!");
return;
}
do{
switch (cod)
{
case 1: if (aggiungi_studente(stud,n)==1)
n++;
stud=(studente*)realloc(stud,(n+1));
if(stud==NULL)
{
printf("Allocazione non riuscita!");
return;
}
break;
case 2: visualizza_studenti (stud,n);
break;
case 3: cancella_studente(stud,n);
break;
case 4: ricerca_studente (stud,n);
break;
case 5: ricerca_esame (stud,n);
break;
}
do{
printf("\nInserisci un altro codice (per uscire inserire 0): \n");
scanf("%d",&cod);
}while(cod<0 || cod>9);
}while(cod!=0);
return;
}