Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.44 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement