SHARE
TWEET

Untitled

a guest May 22nd, 2019 58 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. struct Studente {
  6.     char nc[30];
  7.     int matricola;
  8.     short esami;
  9.     float media;
  10.     short crediti;
  11.     short voto;
  12. };
  13. typedef struct Studente studente;
  14.  
  15. void inserisci_utente(studente x[])
  16. {
  17.     int i,n;
  18.     FILE *fp;
  19.     fp=fopen("studenti1.dat","ab");
  20.     if(!feof(fp)) {
  21.         printf("\nQuanti utenti vuoi inserire : ");
  22.         scanf("%d", &n);
  23.         for (i=0; i<n;i++){
  24.             printf("\nInserisci il nome e cognome studente : ");
  25.             fflush(stdin);
  26.             gets(x[i].nc);
  27.             printf("Inserisci la matricola  : ");
  28.             fflush(stdin);
  29.             scanf("%d", &x[i].matricola);
  30.             printf("Inserisci numero esami superati : ");
  31.             scanf("%d", &x[i].esami);
  32.             printf("Inserisci media esami : ");
  33.             scanf("%f",&x[i].media);
  34.             printf("Inserisci crediti ottenuti :  ");
  35.             scanf("%d",&x[i].crediti);
  36.         }
  37.     }
  38.     else{
  39.         printf("\nERRORE FILE NON CREATO ");
  40.         exit(1);
  41.     }
  42.     fwrite(&x,sizeof(studente),1,fp);
  43.     fclose(fp);
  44. }
  45. int  ricerca(int matricola, studente x[] , short ns)
  46. {
  47.     int i=0,trovato=0;
  48.     while (trovato=0 && i<ns ){
  49.         if (x[i].matricola==matricola){
  50.             trovato++;
  51.             return i;
  52.         }
  53.         else {
  54.             trovato=0;
  55.             i++;
  56.             return -1;
  57.         }
  58.     }
  59. }
  60. void aggiorna_utente(studente x[])
  61. {
  62.     FILE *fp,*fp1,*fp2;
  63.     studente y[100];
  64.     int n_agg,i;
  65.     int esito;
  66.     int n_voto,n_crediti;
  67.     int matricola;
  68.     short indice_trovato,ns=0;
  69.    
  70.     fp=fopen("esameprog2.dat","ab");
  71.     fp1=fopen("studenti1.dat","rb");
  72.  
  73.     while (!feof(fp1)) //finche non e' finito il file degli studenti
  74.     {
  75.         /*legge uno alla volta gli studenti dal file*/
  76.         fread(&x[ns], sizeof(studente), 1, fp1);
  77.         ns++; /*incrementa il contatore del numero degli studenti presenti*/
  78.     }
  79.     printf("\nQuanti utenti vuoi aggiornare? : ");
  80.     scanf("%d", &n_agg);
  81.     for (i=0; i<n_agg; i++){
  82.         printf("\nInserire la matricola dello studente da aggiornare : ");
  83.         fflush(stdin);
  84.         scanf("%d", &matricola);
  85.         indice_trovato=ricerca(matricola,x,ns-1);//a causa dell'incremento automatico faccio numero -1
  86.         if(indice_trovato>=0){ //trovato
  87.             printf("\nInserire il nuovo voto ottenuto : ");
  88.             scanf("%d", &n_voto);
  89.             printf("Inserire crediti ottuneti : ");
  90.             scanf("%d", &n_crediti);
  91.             y[i].matricola=matricola;
  92.             y[i].crediti=n_crediti;
  93.             y[i].voto=n_voto;
  94.             x[indice_trovato].crediti=+n_crediti;
  95.             x[indice_trovato].esami++;
  96.             x[indice_trovato].media=( ( (x[indice_trovato].media * (x[indice_trovato].esami-1)) +
  97.                                 n_voto) / x[indice_trovato].esami);
  98.         }
  99.         else {
  100.             printf("\nUTENTE NON TROVATO");
  101.         }
  102.        
  103.     }
  104.     fwrite(&y,sizeof(studente),1,fp);
  105.     fp2=fopen("studenti2.dat","wb");
  106.     while(!feof(fp2)){         
  107.         //DOBBIAMO COPIARE I FILE ALL'INTERNO DI FP1 IN FP2
  108.         fwrite(&x,sizeof(studente),1,fp2);
  109.     }
  110.     fclose(fp);
  111.     fclose(fp1);
  112.     fclose(fp2);
  113. }
  114.  
  115. void stampa()
  116. {
  117.     FILE *fp;
  118.     fp=fopen("studenti2.dat","rb");
  119.     char buffer[1000];
  120.     int buffer_indice;
  121.     while(!feof(fp)){
  122.         fgets(buffer,1000,fp);
  123.         printf("%s",buffer);
  124.     }
  125. }
  126. int main()
  127. {
  128.     int scelta;
  129.     int i;
  130.     studente x[100];     
  131.     do{
  132.         printf("\nPremi:\n1. Per inserire un nuovo utente\n2. Per aggiornare le informazioni\n3. Per visualizzare il file completo\n4. Per terminare il programma \n");
  133.         scanf("%d",&scelta);
  134.         switch(scelta){
  135.             case 1: inserisci_utente(x);break;
  136.             case 2: aggiorna_utente(x); break;
  137.             case 3: stampa(); break;
  138.         }
  139.     }while (scelta != 4);
  140. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top