//Lorenzini Alessandro //Programma di gestione CODA //librerie #include #include #include //costanti #define N 30 //variabili globali struct elementi { int nr; char cognome[N]; char nome[N]; struct elementi *succ; }; struct elementi dato; struct elementi *nuovo; struct elementi *testa; struct elementi *corrente; struct elementi *eliminato; int gb; //grandezza elemento int gp; //grandezza puntatore //procedure globali int menu() { int scelta; //visualizzazione menu printf("\nGESTIONE CODA\n"); printf("1. Visualizzazione\n"); printf("2. Inserimento\n"); printf("3. Eliminazione\n"); printf("4. Carica dati\n"); printf("5. Salva dati\n"); printf("0. Fine Sessione\n"); printf("Scelta: "); scanf("%d", &scelta); getchar(); return (scelta); }//menu void inizializzazione() { testa=NULL; gb=sizeof(struct elementi); gp=sizeof(struct elementi *); }//inizializzazione void visualizzazione() { corrente = testa; if(corrente==NULL) printf("CODA vuota!!\n"); while(corrente!=NULL) { printf("%3d ", corrente->nr); printf("%s ", corrente->cognome); printf("%s\n", corrente->nome); corrente = corrente->succ; } }//visualizzazione void inserimento() { //creo il nuovo elemento nuovo=(struct elementi *)malloc(sizeof(struct elementi)); //inserisco i dati nell'elemento printf("Numero registro: "); scanf("%d", &(nuovo->nr)); printf("Cognome: "); scanf("%s", nuovo->cognome); nuovo->cognome[29]='\0'; printf("Nome: "); scanf("%s", nuovo->nome); nuovo->nome[29]='\0'; nuovo->succ = NULL; //inserisco l'elemento nella coda corrente = testa; if(corrente==NULL) { testa = nuovo; } else { while(corrente->succ!=NULL) corrente = corrente->succ; corrente->succ = nuovo; } }//inserimento void eliminazione() { eliminato = testa; if(eliminato!=NULL) { printf("Elimino dalla coda\n"); printf("%3d ", eliminato->nr); printf("%s ", eliminato->cognome); printf("%s\n", eliminato->nome); //sposto testa all'elemento successivo testa = testa->succ; free(eliminato); } else printf("CODA vuota!! Impossibile eliminare!!\n"); }//eliminazione void carica() { FILE *fl; fl=fopen("registro.dat","rb"); //printf("ok"); if(fl==NULL) printf("\nErrore di apertura file registro.dat\n"); else { //cerco la fine della coda corrente = testa; if(corrente!=NULL) { while(corrente->succ!=NULL) corrente = corrente->succ; } //leggo il file da cima a fondo while(fread(&dato,gb,1,fl)!=0) { //creo il nuovo elemento nuovo=(struct elementi *)malloc(sizeof(struct elementi)); //inserisco i dati nell'elemento nuovo->nr = dato.nr; strcpy(nuovo->cognome,dato.cognome); strcpy(nuovo->nome,dato.nome); nuovo->succ = NULL; //inserisco l'elemento nella coda if(corrente==NULL) { testa=nuovo; corrente=nuovo; } else { corrente->succ = nuovo; corrente = corrente->succ; } } fclose(fl); } }//carica void salva() { FILE *fs; fs = fopen("registro.dat","ab"); if(fs==NULL) printf("\nErrore di apertura file registro.dat\n"); else { //salvo nel file l'intera coda corrente = testa; if(corrente==NULL) printf("CODA vuota!!\n"); while(corrente!=NULL) { fwrite(corrente,gb,1,fs); corrente=corrente->succ; } fclose(fs); } } //principale int main() { //inizializzazione inizializzazione(); //programma int scelta; do { scelta=menu(); switch(scelta) { case 0: printf("Fine Sessione\n"); break; case 1: visualizzazione(); break; case 2: inserimento(); break; case 3: eliminazione(); break; case 4: carica(); break; case 5: salva(); break; default: printf("Scelta errata!!\n"); break; }//switch }while(scelta!=0); return 0; }//main