/* 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