/* stra11.mar */ /* archivio dati anagrafici */ /* nome file prefissato in stringa per salvare o richiamare*/ /* possibile inserire aggiungere stampare visualizzare */ #include "stdio.h" #include "stdlib.h" #include "ctype.h" #define DIM 20 char nomefile[20]; /* definisce struttura rubrica e dichiara variabile x */ struct rubrica{ char nome[30]; char via[40]; unsigned long int cap; char citta[20]; char provincia[5]; } x[DIM]; /*dichiarazione procedure da usare */ void inserire(),inizializza(),stampa(),salva(),carica(),aggiunge(),lista(); main() { char scelta; inizializza(); clrscr(); strcpy(nomefile,"a:archivio"); for (;;) { scelta=menu(); switch(scelta) { case 'i':inserire();break; case 'e':stampa();break; case 'l':lista();break; case 'c':carica();break; case 's':salva();break; case 'a':aggiunge();break; case 'u':exit(1); } } } void inizializza() { register int t; for (t=0;t<DIM;t++) *x[t].nome='\0'; } menu() { char s[80]; clrscr(); do { printf("I=inserire record\n"); printf("A=aggiunge record\n"); printf("E=stampa elenco\n"); printf("L=lista elenco su video\n"); printf("C=carica da disco\n"); printf("S=salva su disco\n"); printf("U=fine operazione\n\n"); printf("seleziona opzione:"); gets(s); } while(!strrchr("ielcsau",tolower(*s))); return tolower(*s); } void inserire() { register int i; char cella[6]; clrscr(); for (i=0;i<DIM;i++) if(!*x[i].nome) break; if(i==DIM) { printf("lista completa\n"); delay(2000); return; } printf("record n.%d su %d\n",i+1,DIM); printf("nome..........."); gets(x[i].nome); printf("via............"); gets(x[i].via); printf("cap............"); gets(cella); x[i].cap=atol(cella); printf("citta.........."); gets(x[i].citta); printf("provincia......"); gets(x[i].provincia); puts("---------------------"); } void aggiunge() { FILE *pfile; register int i; char cella[6]; if ((pfile=fopen(nomefile,"ab"))==NULL) { printf("non possibile aprire file \n"); delay(3000); return; } for (i=0;i<DIM;i++) if(!*x[i].nome) break; if(i==DIM) { printf("lista completa\n"); delay(2000); return; } printf("record n.%d su %d\n",i+1,DIM); printf("nome..........."); gets(x[i].nome); printf("via............"); gets(x[i].via); printf("cap............"); gets(cella); x[i].cap=atol(cella); printf("citta.........."); gets(x[i].citta); printf("provincia......"); gets(x[i].provincia); puts("---------------------"); } void stampa() { register int t; clrscr(); printf("file in fase di stampa %s\n",nomefile); for (t=0;t<DIM;t++) { if(!*x[t].nome) { puts("fine lettura"); break; } if(*x[t].nome) { fprintf(stdprn,"record n.%d su %d\n\r",t+1,DIM); fprintf(stdprn,"nominativo....%s\n\r",x[t].nome); fprintf(stdprn,"indirizzo.....%s\n\r",x[t].via); fprintf(stdprn,"cap...........%d\n\r",x[t].cap); fprintf(stdprn,"citta.........%s\n\r",x[t].citta); fprintf(stdprn,"provincia.....%s\n\r",x[t].provincia); fprintf(stdprn,"%s\n\r","-------------------------"); puts("----premi return prego----"); } getch(); } } void lista() { register int t; clrscr(); printf("file in fase di stampa %s\n",nomefile); for (t=0;t<DIM;t++) { if(!*x[t].nome) { puts("fine lettura"); break; } if(*x[t].nome) { printf("record n.%d su %d\n",t+1,DIM); printf("nominativo.....%s\n",x[t].nome); printf("indirizzo......%s\n",x[t].via); printf("cap............%d\n",x[t].cap); printf("citta..........%s\n",x[t].citta); printf("provincia......%s\n",x[t].provincia); puts("----premi return prego----"); } getch(); } } void salva() { FILE *pfile; register int i; if ((pfile=fopen(nomefile,"wb"))==NULL) { printf("non possibile aprire file indicato\n"); delay(2000); return; } for (i=0;i<DIM;i++) if(*x[i].nome) if(fwrite(&x[i],sizeof(struct rubrica),1,pfile)!=1) printf("errore scrittura del file\n");delay(2000); fclose(pfile); } void carica() { FILE *pfile; register int i; if ((pfile=fopen(nomefile,"rb"))==NULL) { printf("non possibile aprire file indicato\n"); delay(2000); return; } inizializza(); for (i=0;i<DIM;i++) if(fread(&x[i],sizeof(struct rubrica),1,pfile)!=1) { if(feof(pfile)) { fclose(pfile); return; } printf("errore lettura del file\n");delay(2000); } }
I=inserire record A=aggiunge record E=stampa elenco L=lista elenco su video C=carica da disco S=salva su disco U=fine operazione seleziona opzione: seleziona opzione:A record n.3 su 20 nome...........Rossi Luigi via............verona 4 cap............33221 citta..........Treviso provincia......TV file in fase di stampa a:archivio record n.1 su 20 nominativo.....Bassi Paolo indirizzo......padova 3 cap............12345 citta..........Verona provincia......VR ----premi return prego---- file in fase di stampa a:archivio record n.1 su 20 nominativo.....Bassi Paolo indirizzo......padova 3 cap............12345 citta..........Verona provincia......VR ----premi return prego---- record n.2 su 20 nominativo.....Rossi Paolo indirizzo......Roma 12 cap............22334 citta..........Padova provincia......PD ----premi return prego---- record n.3 su 20 nominativo.....Rossi Luigi indirizzo......verona 4 cap............-32315 citta..........Treviso provincia......TV ----premi return prego----
ritorna