codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_CHARS 50
#define MAX_ELEM 200
#define FILE_PRED "registro_cont.txt"
struct studente {
char nome[MAX_CHARS];
char cognome[MAX_CHARS];
} io={"Pinco","Pallino"};
struct contribuenti {
char nome[MAX_CHARS];
char cognome[MAX_CHARS];
char codice_fiscale[16];
char indirizzo[MAX_CHARS];
double reddito;
};
//PROTOTIPI
int inserisci (struct contribuenti elenco_contribuenti[], int n);
int media_reddito (struct contribuenti elenco_contribuenti[], int n);
int visualizza (struct contribuenti elenco_contribuenti[], int n);
int salva_elenco (struct contribuenti elenco_contribuenti[], int n);
int cerca_codice_fiscale (struct contribuenti elenco_contribuenti[], int n);
int cerca_reddito(struct contribuenti elenco_contribuenti[], int n);
//Inizio programma
int main(int argc, char *argv[])
{
struct contribuenti elenco_contribuenti[MAX_ELEM]; //Stampa i dati dell'autore
printf(" Autore del programma:\n");
printf("------------------------------\n");
printf(" Nome: %s\n Cognome: %s\n",io.nome,io.cognome);
printf("------------------------------\n");
int scelta;
int n=0;
do {
printf("\nScegli dall'elenco l'opzione che desideri fare.\n"); //Menù principale
printf(" 1: Aggiungere nuovo individuo\n");
printf(" 2: Calcola il reddito medio dell'elenco\n");
printf(" 3: Visualizza la lista\n");
printf(" 4: Salva elenco su un file\n");
printf(" 5: Cerca per codice fiscale\n");
printf(" 6: Cerca per fascia di reddito\n");
printf(" 0: Uscita\n\n");
printf("Scelta: ");
scanf("%d", &scelta);
switch(scelta){
case 1:{
n=inserisci (elenco_contribuenti,n);
break;}
case 2:{
FILE*fp=fopen(FILE_PRED,"r");
if(fp==NULL) {printf("C'e' stato un errore\n");}
while (feof(fp)==0)
{
fscanf(fp,"%s %s %s %s %lf", elenco_contribuenti[n].nome,elenco_contribuenti[n].cognome,elenco_contribuenti[n].codice_fiscale,elenco_contribuenti[n].indirizzo,elenco_contribuenti[n].reddito);
n++;
}
int media=media_reddito(elenco_contribuenti, n);
break;}
case 3:{
n=visualizza (elenco_contribuenti,n);
break;}
case 4:{
n=salva_elenco (elenco_contribuenti,n);
break;
}
case 5:{
n=cerca_codice_fiscale (elenco_contribuenti,n);
break;
}
case 6:{
n=cerca_reddito (elenco_contribuenti,n);
break;
}
case 0:{exit(0);
break;}
}
}
while(scelta!=0);
system("pause");
return 0;
}
int inserisci (struct contribuenti elenco_contribuenti[], int n) { //Serve per inserire un nuovo individuo
if (n>=MAX_ELEM)
printf("Non puoi aggiungere altri individui\n");
printf("\nNon iserire spazi e/o lettere accentate\n");
printf("\nInserisci nome: ");
scanf("%s",elenco_contribuenti[n].nome);
printf("\nInserisci cognome: ");
scanf("%s",elenco_contribuenti[n].cognome);
printf("\nInserisci codice fiscale: ");
scanf("%s",elenco_contribuenti[n].codice_fiscale);
printf("\nInserisci indirizzo: ");
scanf("%s",elenco_contribuenti[n].indirizzo);
printf("\nInserisci reddito: ");
scanf("%lf",elenco_contribuenti[n].reddito);
printf("\n\n");
FILE*fp=fopen(FILE_PRED,"a");
if(fp==NULL) {
printf("Impossibile salvare!\n");
}
else {
fprintf(fp,"%s %s %s %s %lf\n",elenco_contribuenti[n].nome,elenco_contribuenti[n].cognome,elenco_contribuenti[n].codice_fiscale,elenco_contribuenti[n].indirizzo,elenco_contribuenti[n].reddito);
printf("-----------SALVATO----------\n\n");
fclose(fp);
}
return n;
}
int media_reddito (struct contribuenti elenco_contribuenti[], int n) { //Serve per calcolare la media dei redditi
int i;
double media=0.0;
for (i=0; i<n; i++)
media=media+elenco_contribuenti[i].reddito;
media=media/n;
return media;
}
int visualizza (struct contribuenti elenco_contribuenti[], int n) { //Serve per visualizzare la lista dell'elenco
int i;
int scelta;
FILE*fp=fopen(FILE_PRED,"r");
if(fp==NULL) {
printf("C'e' stato un errore nella lettura del file\n");
return (scelta);
}
else {
printf("Ecco la lista degli individui presenti in elenco:\n");
printf(" %s %s %s %s %lf\n",elenco_contribuenti[i].nome,elenco_contribuenti[i].cognome,elenco_contribuenti[i].codice_fiscale,elenco_contribuenti[i].indirizzo,elenco_contribuenti[i].reddito);
return i;
}
fclose(fp);
}
int salva_elenco (struct contribuenti elenco_contribuenti[], int n) { //Serve per salvare i dati su un file
int i;
int scelta;
char caratteri [MAX_CHARS];
printf("Inserisci il nome del file su cui vuoi salvare (.txt): ");
scanf("%s",caratteri);
FILE*fp=fopen(caratteri,"w");
if(fp==NULL) {
printf("Errore nel salvataggio\n");
return (scelta);
}
else {
for(i=0;i<n;i++) {
fprintf(fp,"%s %s %s %s %lf\n",elenco_contribuenti[i].nome,elenco_contribuenti[i].cognome,elenco_contribuenti[i].codice_fiscale,elenco_contribuenti[i].indirizzo,elenco_contribuenti[i].reddito);
}
}
printf("----------SALVATO----------\n");
fclose(fp);
}
int cerca_codice_fiscale (struct contribuenti elenco_contribuenti[], int n) { //Serve per cercare un individuo in base al codice fiscale
int i;
char cerca[MAX_CHARS];
printf("Inserisci il codice fiscale: ");
scanf("%s",cerca);
printf("\n");
for(i=0;i<n;i++) {
if(strcmp(cerca,elenco_contribuenti[i].codice_fiscale)==0)
printf("%s %s %s %s %lf",elenco_contribuenti[i].nome,elenco_contribuenti[i].cognome,elenco_contribuenti[i].codice_fiscale,elenco_contribuenti[i].indirizzo,elenco_contribuenti[i].reddito);
}
}
int cerca_reddito(struct contribuenti elenco_contribuenti[], int n) { //Serve per cercare un individuo in base al reddito
int i;
int trovati=0;
int min;
int max;
printf("Inserire il reddito minimo: ");
scanf("%d",&min);
printf("\nInserire il reddito massimo: ");
scanf("%d",&max);
printf("\nRisultati trovati: \n");
for(i=0;i<n;i++) {
if(elenco_contribuenti[i].reddito > min && elenco_contribuenti[i].reddito < max) {
printf("%s %s %s %s %lf",elenco_contribuenti[i].nome,elenco_contribuenti[i].cognome,elenco_contribuenti[i].codice_fiscale,elenco_contribuenti[i].indirizzo,elenco_contribuenti[i].reddito);
trovati++;
}
}
return (trovati);
}
I punti dell'esercizio sono quelli delle "printf" del menù principale.