Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.03 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4. #include <string.h>
  5. typedef struct {char codice[6];
  6.                 char *cognome,*nome,*categoria;
  7.                 int num,giorno,mese,anno;} anagrafica;
  8. typedef enum{stampa_a,ordina_data,ordina_codice,ordina_cognome,
  9.   stampa_categoria,ore_settimanali,ricerca_codice,ricerca_cognome,fine} comando_e; //azione_criterio
  10.  
  11. comando_e leggiComando(void);
  12. void stampaAnagrafica(anagrafica *p,int N);
  13. void sLower(char string[],int dimensione);
  14. void ordinaParole_codice(anagrafica **p,int N);
  15. int trova_categorie(anagrafica *p,int N,int lung, char listacategorie[][lung]);
  16. void stampaPerCategorie(anagrafica *p,int N,int lung, char lista_categorie[][lung],int lunghezzaeffettiva);
  17. int main(){
  18.   int i,N,decisione=0;
  19.   char nome[25],cognome[25],categoria[25];
  20.   anagrafica *p, **pcodice;
  21.   FILE *fp;
  22.   comando_e tmp;
  23.   fp=fopen("atleti.txt","r");
  24.   if(fp==NULL){
  25.     printf("Il file non e' stato aperto correttamente.\n");
  26.     return(-1);}
  27.   fscanf(fp,"%d",&N);
  28.   p=(anagrafica*)malloc(N*sizeof(anagrafica));
  29.   if(p==NULL){
  30.     printf("La struct non e' stata generata correttamente.\n");
  31.     return(EXIT_FAILURE);
  32.   }
  33.   for(i=0;i<N;i++){
  34.       fscanf(fp,"%s %s %s %s %d/%d/%d %d",p[i].codice,cognome,nome,categoria,&p[i].giorno,&p[i].mese,&p[i].anno,&p[i].num);
  35.       p[i].nome=strdup(nome);
  36.       p[i].cognome=strdup(cognome);
  37.       p[i].categoria=strdup(categoria);
  38.     }
  39.     fclose(fp);
  40.     for(i=0;i<N;i++){
  41.       printf("%s %s\n",(*pcodice[i]).nome,(*pcodice[i]).cognome);
  42.     }
  43.     while(decisione==0){ //fine
  44.       tmp=leggiComando();
  45.       switch (tmp){
  46.         case 0:
  47.         stampaAnagrafica(p,N);
  48.         break;
  49.         case 2:
  50.         pcodice=(anagrafica**)malloc(N*(sizeof(anagrafica*)));
  51.         if(pcodice==NULL){
  52.           printf("Il vettore per l'ordinamento per codice non e' stato allocato correttamente.\n");
  53.           return(EXIT_FAILURE);}
  54.         for(i=0;i<N;i++){
  55.           pcodice[i]=&p[i];
  56.         }
  57.         ordinaParole_codice(pcodice,N);
  58.         for(i=0;i<N;i++){
  59.           printf("%s\n",(*pcodice[i]).codice);
  60.         }
  61.         break;
  62.         case 8:
  63.         printf("\nHai deciso di chiudere il programma.\n");
  64.         decisione=1;
  65.         break;
  66.         default:
  67.         break;}}
  68.         return 0;}
  69.  
  70.  
  71. comando_e leggiComando(void){
  72. comando_e tmp;
  73. tmp=0;
  74. int i=0;
  75. char comando[24];
  76. char lista_comandi[9][24]={"stampa_a","ordina_data","ordina_codice","ordina_cognome","stampa_categoria","ore_settimanali","ricerca_codice","ricerca_cognome","fine"};
  77. printf("\nInserisci un comando tra:\n1)stampa_a;\n2)ordina_data;\n3)ordina_codice;\n4)ordina_cognome;\n5)stampa_categoria;\n6)ore_settimanali;\n7)ricerca_codice;\n8)ricerca_cognome\n9)fine.\n");
  78. scanf("%s",comando);
  79. sLower(comando,strlen(comando));
  80. while(tmp<9){
  81. if((strcmp(lista_comandi[i],comando))==0){
  82.         break;}
  83.         tmp++;
  84.         i++;}
  85.         return tmp;}
  86.  
  87. void sLower(char string[],int dimensione){
  88.   int i;
  89.   for(i=0;(i<dimensione)&&(string[i]!='\0');i++){
  90.     if((isalpha(string[i])!=0)&&(islower(string[i])==0)){
  91.       string[i]=tolower(string[i]);
  92.         }
  93.     }
  94.     return;}
  95.  
  96. void stampaAnagrafica(anagrafica *p,int N){
  97.   int n,i;
  98.   FILE* output;
  99.   char S[20];
  100.   printf("\nHai deciso di stampare dei contenuti dell'Anagrafica.");
  101.   printf("Dove vuoi stamparlo?\n 1)File o a 2)video?\n");
  102.   scanf("%d",&n);
  103.   if(n==1){
  104.     printf("In che file vuoi stamparlo?\n");
  105.     scanf("%s",S);
  106.     output=fopen(S,"w");
  107.     if(output==NULL){
  108.       printf("Il file non e' stato aperto correttamente\n");
  109.       return;
  110.             }
  111.      for(i=0;i<N;i++){
  112.     fprintf(output,"%s %s %s %s %d/%d/%d %d",p[i].codice,p[i].cognome,p[i].nome,p[i].categoria,p[i].giorno,p[i].mese,p[i].anno,p[i].num);}}
  113.   else{
  114.     for(i=0;i<N;i++){
  115.       printf("%s %s %s %s %d/%d/%d %d\n",p[i].codice,p[i].cognome,p[i].nome,p[i].categoria,p[i].giorno,p[i].mese,p[i].anno,p[i].num );
  116.             }}
  117.       return;}
  118.          
  119. void ordinaParole_codice(anagrafica **p,int N){
  120.   int i,j;
  121.   anagrafica *chiave;
  122.   for(i=1;i<N;i++){
  123.     j=i-1;
  124.     chiave=p[i];
  125.     while((j>=0)&&(strcmp((*chiave).codice,(*p[j]).codice)<0)){
  126.       p[j+1]=p[j];
  127.       j--;
  128.       }
  129.       p[j+1]=chiave;
  130.       }
  131.   return;}
  132.  
  133. int trova_categorie(anagrafica *p,int N,int lung, char listacategorie[][lung]){
  134.   int i,j,trovato=0,k=0;
  135.   for(i=0;i<N;i++){
  136.     for(j=0;j<k;j++){
  137.       if(strcmp(p[i].categoria,listacategorie[j])==0){
  138.         trovato=1;
  139.       }}
  140.     if(trovato==0){
  141.       strcpy(listacategorie[k],p[i].categoria);
  142.       k++;
  143.     }
  144.     trovato=0;
  145.   }
  146.   listacategorie[k][0]='0';
  147.   return k;
  148. }
  149.  
  150. void stampaPerCategorie(anagrafica *p,int N,int lung, char lista_categorie[][lung],int lunghezzaeffettiva){
  151.   int i,j;
  152.   printf("\n");
  153.   for(i=0;i<lunghezzaeffettiva;i++){
  154.     printf("%s\n",lista_categorie[i]);
  155.     for(j=0;j<N;j++){
  156.       if(strcmp(p[j].categoria,lista_categorie[i])==0){
  157.         printf("%s %s\n",p[j].cognome,p[j].nome );
  158.       }
  159.     }
  160.       printf("\n");
  161.  
  162.   }
  163.   return;
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement