Advertisement
Dany1858

inf. compito 2 appello 2015 (da finire)

Jun 16th, 2015
582
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.93 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <malloc.h>
  4. #include <string.h>
  5.  
  6.         /*define*/
  7. #define N 20
  8.  
  9.             /*strutture*/
  10. struct atleti{
  11.     int pettorali;
  12.     char nazione[4];
  13.     char cognome[16];
  14.     char nome[16];
  15.         struct atleti *next;
  16. };
  17.  
  18.  
  19.             /*funzioni*/
  20. int menu(struct atleti *);
  21. struct atleti *carica(int *);
  22. void cerca(struct atleti *);
  23. void risultati(int);
  24. void podio(struct atleti *);
  25.  
  26.  
  27.             /*main*/
  28. int main()
  29. {
  30.             /*inizializzazioni*/
  31.     struct atleti *p=NULL;
  32.     int n;
  33.    
  34.  
  35.             /*corpo del main*/
  36.     while(1){
  37.     switch(menu(p)){
  38.          case 0: return 0;
  39.          case 1:{ p=carica(&n); break;}
  40.          case 2:{ cerca(p); break;}
  41.          case 3:{ podio(p); break;}
  42.     }}
  43. }
  44.  
  45.         /*Funzione menu'*/
  46. int menu(struct atleti *p)
  47. {
  48.         int opz=-1;
  49.         system("cls"); printf("\n");
  50.         while(opz<0 || opz>3){
  51.              if(p==NULL) printf("\n1. carica database\n");
  52.              else printf("\n1. database gia' caricato\n");
  53.              printf("\n2. cerca atleta\n\n3. vincitore\n\n0. esci\t");
  54.              scanf("%d", &opz); if(opz<0 || opz>3){ system("cls");
  55.              printf("!!!Inserire opzione corretta!\n");}}
  56.         return opz;
  57. }
  58.  
  59.         /*Funzioni*/
  60. struct atleti *carica(int *n)
  61. {
  62.     FILE *atleta;
  63.     struct atleti *p=NULL; struct atleti *pc;
  64.     struct atleti px;
  65.     int m;
  66.    
  67.     atleta=fopen("atleti.txt", "r");
  68.     if(atleta==NULL){ printf("\n!!!Errore apertura file atleti.txt\n"); getchar(); return NULL;}
  69.     else{
  70.         fscanf(atleta, "%d\n", &(*n));
  71.         printf("N= %d\n", *n);
  72.         while(1){
  73.             m=fscanf(atleta, "%d%s%s%s\n", &px.pettorali, px.nazione, px.cognome, px.nome);
  74.             if(m<0){ printf("\n!Fine lettura file"); getchar(); getchar(); break;}
  75.             else{
  76.                  printf("Attleta: %2d (pettorali), nazionalita': %3s, cognome: %10s, nome: %8s\n", px.pettorali, px.nazione, px.cognome, px.nome);
  77.                 if(p==NULL){ p=(struct atleti *)malloc(sizeof(struct atleti)); p->next=NULL; pc=p;}
  78.                 else{ p->next=(struct atleti *)malloc(sizeof(struct atleti)); p=p->next; p->next=NULL;}
  79.                 p->pettorali=px.pettorali; strcpy(p->nazione, px.nazione); strcpy(p->cognome, px.cognome); strcpy(p->nome, px.nome);
  80.             }
  81.         }
  82.     }
  83.     fclose(atleta);
  84.     return pc;
  85. }
  86.  
  87. void cerca(struct atleti *p)
  88. {
  89.     char cognome[16];
  90.     char nome[16];
  91.     int n;
  92.    
  93.     printf("inserire cognome atleta\t");
  94.     scanf("%s", cognome); cognome[15]='\n'; //evita errori di overflow
  95.     printf("inserire nome atleta\t");
  96.     scanf("%s", nome); nome[15]='\n'; //evita errori di overflow
  97.     while(p!=NULL && p!=-1){
  98.              printf("%s %s", cognome, p->cognome);
  99.         if(strcmp(cognome, p->cognome)==0){
  100.             if(strcmp(nome, p->nome)==0){printf("%s %s", nome, p->nome);
  101.                 n=p->pettorali; risultati(n); p=-1;
  102.             }
  103.             else p=p->next;}
  104.         else p=p->next;
  105.         if(p==NULL){ printf("\nErrore, attleta non trovato"); getchar(); getchar();}
  106.     }
  107. }
  108.  
  109. void risultati(int n)
  110. {
  111.     int i;
  112.     float j;
  113.     char v;
  114.     FILE *salto;
  115.    
  116.     salto=fopen("salti.txt", "w");
  117.     if(salto==NULL){ printf("\n!!!Errore apertura file salti.txt\n"); getchar();}
  118.     printf("\nAttleta %d\n", n);
  119.     for(i=0; i<3; i++){
  120.         printf("\nInserire, in centimetri, il salto numero %d\t", i);
  121.         scanf("%f", &j); getchar();
  122.         printf("\nIl salto e' valido? V o N\t");
  123.         scanf("%c", &v);
  124.         fprintf(salto, "%d %c ", n, v);
  125.         if(v=='V') fprintf(salto, "%.2f\n", j);
  126.         else fprintf(salto, "\n");}
  127.     fclose(salto);
  128. }
  129.  
  130. void podio(struct atleti *p)
  131. {
  132.     FILE *salto;
  133.     char v; char vv=0; char vvv=0;
  134.     float j; float jj=0.0;
  135.     int k, kk, n;
  136.  
  137.  
  138.     salto=fopen("salti.txt", "r");
  139.     if(salto==NULL){ printf("\n!!!Errore apertura file salti.txt\n"); getchar();getchar();}
  140.     else{
  141.         while(1){
  142.             n=fscanf(salto, "%d %c ", &k, &v);
  143.             if(n<0){ printf("\nfine lettura file"); getchar(); break;}
  144.             else{
  145.                 if(v=='V') fscanf(salto, "%f", &j);
  146.                 if(j<jj){ kk=k; jj=j;
  147.                 }
  148.             }
  149.         }
  150.         printf("il vincitore รจ %d, con distanza %.2f cm.", k, j);  getchar();
  151.     }
  152.     fclose(salto);
  153. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement