Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- struct Studente {
- char nc[30];
- int matricola;
- short esami;
- float media;
- short crediti;
- short voto;
- };
- typedef struct Studente studente;
- void inserisci_utente(studente x[])
- {
- int i,n;
- FILE *fp;
- fp=fopen("studenti1.dat","ab");
- if(!feof(fp)) {
- printf("\nQuanti utenti vuoi inserire : ");
- scanf("%d", &n);
- for (i=0; i<n;i++){
- printf("\nInserisci il nome e cognome studente : ");
- fflush(stdin);
- gets(x[i].nc);
- printf("Inserisci la matricola : ");
- fflush(stdin);
- scanf("%d", &x[i].matricola);
- printf("Inserisci numero esami superati : ");
- scanf("%d", &x[i].esami);
- printf("Inserisci media esami : ");
- scanf("%f",&x[i].media);
- printf("Inserisci crediti ottenuti : ");
- scanf("%d",&x[i].crediti);
- }
- }
- else{
- printf("\nERRORE FILE NON CREATO ");
- exit(1);
- }
- fwrite(&x,sizeof(studente),1,fp);
- fclose(fp);
- }
- int ricerca(int matricola, studente x[] , short ns)
- {
- int i=0,trovato=0;
- while (trovato=0 && i<ns ){
- if (x[i].matricola==matricola){
- trovato++;
- return i;
- }
- else {
- trovato=0;
- i++;
- return -1;
- }
- }
- }
- void aggiorna_utente(studente x[])
- {
- FILE *fp,*fp1,*fp2;
- studente y[100];
- int n_agg,i;
- int esito;
- int n_voto,n_crediti;
- int matricola;
- short indice_trovato,ns=0;
- fp=fopen("esameprog2.dat","ab");
- fp1=fopen("studenti1.dat","rb");
- while (!feof(fp1)) //finche non e' finito il file degli studenti
- {
- /*legge uno alla volta gli studenti dal file*/
- fread(&x[ns], sizeof(studente), 1, fp1);
- ns++; /*incrementa il contatore del numero degli studenti presenti*/
- }
- printf("\nQuanti utenti vuoi aggiornare? : ");
- scanf("%d", &n_agg);
- for (i=0; i<n_agg; i++){
- printf("\nInserire la matricola dello studente da aggiornare : ");
- fflush(stdin);
- scanf("%d", &matricola);
- indice_trovato=ricerca(matricola,x,ns-1);//a causa dell'incremento automatico faccio numero -1
- if(indice_trovato>=0){ //trovato
- printf("\nInserire il nuovo voto ottenuto : ");
- scanf("%d", &n_voto);
- printf("Inserire crediti ottuneti : ");
- scanf("%d", &n_crediti);
- y[i].matricola=matricola;
- y[i].crediti=n_crediti;
- y[i].voto=n_voto;
- x[indice_trovato].crediti=+n_crediti;
- x[indice_trovato].esami++;
- x[indice_trovato].media=( ( (x[indice_trovato].media * (x[indice_trovato].esami-1)) +
- n_voto) / x[indice_trovato].esami);
- }
- else {
- printf("\nUTENTE NON TROVATO");
- }
- }
- fwrite(&y,sizeof(studente),1,fp);
- fp2=fopen("studenti2.dat","wb");
- while(!feof(fp2)){
- //DOBBIAMO COPIARE I FILE ALL'INTERNO DI FP1 IN FP2
- fwrite(&x,sizeof(studente),1,fp2);
- }
- fclose(fp);
- fclose(fp1);
- fclose(fp2);
- }
- void stampa()
- {
- FILE *fp;
- fp=fopen("studenti2.dat","rb");
- char buffer[1000];
- int buffer_indice;
- while(!feof(fp)){
- fgets(buffer,1000,fp);
- printf("%s",buffer);
- }
- }
- int main()
- {
- int scelta;
- int i;
- studente x[100];
- do{
- 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");
- scanf("%d",&scelta);
- switch(scelta){
- case 1: inserisci_utente(x);break;
- case 2: aggiorna_utente(x); break;
- case 3: stampa(); break;
- }
- }while (scelta != 4);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement