Advertisement
Guest User

Untitled

a guest
Nov 17th, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.39 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <malloc.h>
  4. #include <string.h>
  5.  
  6. typedef struct L{
  7.     char codice[6];
  8.     char *cognome;
  9.     char *nome;
  10.     char *categoria;
  11.     char data[11];
  12.     int ore;
  13. }lista;
  14.  
  15. int LeggiFile(lista *A);
  16. void StampaVideo(lista *A, int dim);
  17. void StampaFile(lista *A, int dim);
  18. void OrdinaNascita(lista **A, int dim);
  19. void OrdinaCodice(lista **A, int dim);
  20. void OrdinaCognome(lista **A, int dim);
  21. void Categoria(lista *A, int dim);
  22. void MonteOre(lista **A, int dim);
  23. void RicercaCodice(lista *A, int dim);
  24. void RicercaCognome(lista *A, int dim);
  25. int ricercaBinaria(lista *S, int dim, char *chiave, int n);
  26. int MinDate(lista *s, int a, int b);
  27.  
  28. int main()
  29. {
  30.     int N, scelta=0;
  31.     lista *atleta;
  32.  
  33.     N=LeggiFile(atleta);
  34.  
  35.     while(scelta!=-1){
  36.         printf("0 Stampa a video i dati anagrafici;\n1 Stampa su file i dati anagrafici;\n2 Ordina per data di nascita;\n3 Ordina per codice atleta;\n4 Ordina per cognome;\n5 Stampa atleti per categoria;\n6 Aggiornamento ore settimanali;\n7 Ricerca atleta per codice;\n8 Ricerca per cognome.");
  37.         printf("\nInserire -1 per terminare l'immissione.");
  38.         printf("\n\nScegliere un numero: ");
  39.         scanf("%d", &scelta);
  40.         switch(scelta){
  41.             case -1:
  42.                 printf("\n\nFine immissione.\n\n");
  43.                 break;
  44.             case 0:
  45.                 StampaVideo(atleta, N);
  46.                 break;
  47.             case 1:
  48.                 StampaFile(atleta, N);
  49.                 break;
  50.             case 2:
  51.                 OrdinaNascita(&atleta, N);
  52.                 break;
  53.             case 3:
  54.                 OrdinaCodice(&atleta, N);
  55.                 break;
  56.             case 4:
  57.                 OrdinaCognome(&atleta, N);
  58.                 break;
  59.             case 5:
  60.                 Categoria(atleta, N);
  61.                 break;
  62.             case 6:
  63.                 MonteOre(&atleta, N);
  64.                 break;
  65.             case 7:
  66.                 RicercaCodice(atleta, N);
  67.                 break;
  68.             case 8:
  69.                 RicercaCognome(atleta, N);
  70.                 break;
  71.             default:
  72.                 printf("\n\nImmissione non valida. Riprovare.\n\n");
  73.         }
  74.     }
  75.     return 0;
  76. }
  77.  
  78. int LeggiFile(lista *A){
  79.     int n, i=0;
  80.     char nome[26], cognome[26], categoria[26];
  81.     FILE *fp;
  82.     if((fp=fopen("atleti.txt", "r"))==NULL){
  83.         printf("Errore.\n");
  84.         exit(EXIT_FAILURE);
  85.     }
  86.     fscanf(fp,"%d",&n);
  87.     A=(lista*)malloc(n*(sizeof(lista)));
  88.     while(fscanf(fp,"%s %s %s %s %s %d", A[i].codice, cognome, nome, categoria, A[i].data, &A[i].ore)!=EOF){
  89.         A[i].cognome=(char*)malloc((strlen(cognome)+1)*sizeof(char));
  90.         A[i].nome=(char*)malloc((strlen(nome)+1)*sizeof(char));
  91.         A[i].categoria=(char*)malloc((strlen(categoria)+1)*sizeof(char));
  92.         printf("%s %s %s %s %s %d\n",A[i].codice, cognome, nome, categoria, A[i].data, A[i].ore);
  93.         i++;
  94.     }
  95.     printf("\n\n");
  96.     fclose(fp);
  97.     return(n);
  98. }
  99.  
  100. void StampaVideo(lista *A, int dim){
  101.     int i=0;
  102.     while(i<dim){
  103.         printf("%s %s %s\n", A[i].cognome, A[i].nome, A[i].data);
  104.         i++;
  105.     }
  106. }
  107.  
  108. void StampaFile(lista *A, int dim){
  109.     FILE *fp;
  110.     int i=0;
  111.     char file[20];
  112.  
  113.     printf("Inserisci il nome del file: ");
  114.     scanf("%s", file);
  115.     if((fp=fopen(file, "w"))==NULL){
  116.         printf("Errore.\n");
  117.         return;
  118.     }
  119.  
  120.     while(i<dim){
  121.         fprintf(fp, "%s %s %s\n", A[i].cognome, A[i].nome, A[i].data);
  122.         i++;
  123.     }
  124.     fclose(fp);
  125. }
  126.  
  127. int MinDate(lista *s, int a, int b){
  128.     int x;
  129.     for(x=10; x<=0; x--){
  130.         if(s[a].data[x]>s[b].data[x]){
  131.             return 1;
  132.         }
  133.         if(s[a].data[x]>s[b].data[x]){
  134.             return -1;
  135.         }
  136.     }
  137.     return 0;
  138. }
  139.  
  140. void OrdinaNascita(lista **A, int dim){
  141.     int i,j, min;
  142.     char temp[11];
  143.  
  144.     for(i=0;i<dim; i++){
  145.         min=i;
  146.         for(j=i+1;j<=dim; j++)
  147.             if(MinDate(*A, j, min)<0)
  148.                 min=j;
  149.         strcpy(temp,(*A[i]).data);
  150.         strcpy((*A[i]).data, (*A[i]).data);
  151.         strcpy((*A[i]).data, temp);
  152.     }
  153. }
  154.  
  155. void OrdinaCodice(lista **A, int dim){
  156.     char tmp[6];
  157.     int i, j;
  158.     for(i=0; i<dim; i++){
  159.         for(j=0; j<dim-i; j++){
  160.             if(strcmp((*A[j]).codice,(*A[j+1]).codice)>0){
  161.                 strcpy(tmp,(*A[j]).codice);
  162.                 strcpy((*A[j]).codice,(*A[j+1]).codice);
  163.                 strcpy((*A[j+1]).codice,tmp);
  164.             }
  165.         }
  166.     }
  167.     for(i=0; i<dim; i++){
  168.         printf("%s %s %s %s %s %d", (*A[i]).codice, (*A[i]).cognome, (*A[i]).nome, (*A[i]).categoria, (*A[i]).data, (*A[i]).ore);
  169.     }
  170. }
  171.  
  172. void OrdinaCognome(lista **A, int dim){
  173.     char tmp[26];
  174.     int i, j;
  175.     for(i=0; i<dim; i++){
  176.         for(j=0; j<dim-i; j++){
  177.             if(strcmp((*A[j]).cognome,(*A[j+1]).cognome)>0){
  178.                 strcpy(tmp,(*A[j]).cognome);
  179.                 strcpy((*A[j]).cognome,(*A[j+1]).cognome);
  180.                 strcpy((*A[j+1]).cognome,tmp);
  181.             }
  182.         }
  183.     }
  184.     for(i=0; i<dim; i++){
  185.         printf("%s %s %s %s %s %d", (*A[i]).codice, (*A[i]).cognome, (*A[i]).nome, (*A[i]).categoria, (*A[i]).data, (*A[i]).ore);
  186.     }
  187. }
  188.  
  189. void Categoria(lista *A, int dim){
  190.     char *cat;
  191.     int i;
  192.  
  193.     printf("Si scelga la categoria: ");
  194.     scanf("%s", cat);
  195.     cat=(char *)malloc((strlen(cat)+1)*sizeof(char));
  196.     for(i=0; i<dim; i++){
  197.         if(strcasecmp(cat, A[i].categoria)==0)
  198.             printf("%s %s %s %s %s %d", A[i].codice, A[i].cognome, A[i].nome, A[i].categoria, A[i].data, A[i].ore);
  199.     }
  200. }
  201.  
  202. void MonteOre(lista **A, int dim){
  203.     int i;
  204.     char R;
  205.  
  206.     for(i=0; i<dim; i++){
  207.         printf("%s %s %s\tVuoi aggiornare il monte ore per questo atleta?(Y/N)", (*A[i]).codice, (*A[i]).cognome, (*A[i]).nome);
  208.         scanf("%c",&R);
  209.         if(R=='Y'){
  210.             printf("Inserire monte ore aggiornato: ");
  211.             scanf("%d", &(*A[i]).ore);
  212.             printf("%s %s %s %s %s %d", (*A[i]).codice, (*A[i]).cognome, (*A[i]).nome, (*A[i]).categoria, (*A[i]).data, (*A[i]).ore);
  213.         }
  214.     }
  215. }
  216.  
  217. int ricercaBinaria(lista *S, int dim, char *chiave, int n){
  218.     int m, l, r;
  219.  
  220.     l=0;
  221.     r=dim-1;
  222.     while(l<=r){
  223.         m=(l+r)/2;
  224.         if(strcmp(chiave, S[m].codice)==0)
  225.             return (m);
  226.         else if(strcmp(chiave, S[m].codice)==-1)
  227.             l=m+1;
  228.         else
  229.             r=m-1;
  230.     }
  231.     return(-1);
  232. }
  233.  
  234. void RicercaCodice(lista *A, int dim){
  235.     char cerca[6];
  236.     int q;
  237.     printf("Quale codice si vuole cercare? ");
  238.     scanf("%s", cerca);
  239.     q=ricercaBinaria(A, dim, cerca, 6);
  240.     if(q==-1)
  241.         printf("Atleta non trovato.\n");
  242.     else{
  243.         printf("Atleta trovato:\n");
  244.         printf("%s %s %s %s %s %d", A[q].codice, A[q].cognome, A[q].nome, A[q].categoria, A[q].data, A[q].ore);
  245.     }
  246. }
  247.  
  248. void RicercaCognome(lista *A, int dim){
  249.     char *cerca;
  250.     int i, j;
  251.     printf("Quale cognome si vuole cercare (anche parziale)? ");
  252.     scanf("%s", cerca);
  253.     cerca=(char*)malloc((strlen(cerca)+1)*sizeof(char));
  254.     for(i=0; i<dim; i++){
  255.         j=0;
  256.         while(j<strlen(cerca)){
  257.             if(A[i].cognome[j]!=cerca[j])
  258.                 break;
  259.             else
  260.                 j++;
  261.         }
  262.         if(j==strlen(cerca))
  263.             printf("%s %s %s %s %s %d", A[i].codice, A[i].cognome, A[i].nome, A[i].categoria, A[i].data, A[i].ore);
  264.     }
  265. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement