/*Questo programma permette di creare un file di testo (ingresso.txt), 
  leggere il file creato, 
  elaborare il file creato scrivendo in un altro file (uscita.txt). L'elaborazione 
  consiste nella conversione di tutti i caratteri minuscoli in maiuscoli e viceversa.
*/

#include <stdio.h>
#include <string.h>

#define FILEIN	"ingresso.txt"
#define FILEOUT "uscita.txt"
#define FFLUSH while(getchar()!='\n')


typedef struct {
	char stringa[128]; 
	int numero;
} t_record;

FILE *f_in = NULL, *f_out = NULL;
t_record elemento;
unsigned short scelta,i;
char s;

int main(void) {
	
	
  do {
  	printf("\n1) Creazione File ");
  	printf("\n2) Lettura File ");
  	printf("\n3) Elaborazione File ");
  	printf("\n4) Fine ");
  	printf("\nInserisci la Scelta  ");
    scanf("%hu",&scelta);
    
    switch(scelta){
	   case 1:f_in = fopen(FILEIN, "w");
              do{
                      FFLUSH;
					  printf("\nInserisci una stringa ");
					  gets(elemento.stringa);
					  printf("\nInserisci un numero ");
					  scanf("%d",&elemento.numero);
					  fprintf(f_in,"%s %d\n",elemento.stringa,elemento.numero);
					  FFLUSH;
					  printf("\nContinui ? (s/n)  ");
					  scanf("%c",&s);
              } while (s!='n'&&s!='N');
                    
              fclose(f_in);
              break;               
               
	   case 2: printf("\nLettura File Ingresso\n");
	           f_in = fopen(FILEIN, "r");
	           if (f_in == NULL) printf("\nIl file %s non esiste ", FILEIN);
	           else 
			      while (fscanf(f_in, "%s%d", elemento.stringa, &elemento.numero) == 2) 
					    printf("%s %d\n", elemento.stringa, elemento.numero);
	           fclose(f_in);
               printf("\nLettura File Uscita\n");
			   f_out = fopen(FILEOUT, "r");
	           if (f_out == NULL) printf("\nIl file %s non esiste ", FILEOUT);
	           else 
			      while (fscanf(f_out, "%s%d", elemento.stringa, &elemento.numero) == 2) 
					    printf("%s %d\n", elemento.stringa, elemento.numero);
	           fclose(f_out);
               break;               
	/*
	** La funzione fscanf restituisce il numero di record letti con successo. Se si suppone
	** che il file di ingresso sia correttamente scritto il ciclo termina quando non sono presenti
	** piu' record.
	*/
	   case 3: f_in = fopen(FILEIN, "r");
	           if (f_in == NULL) printf("\nIl file %s non esiste ", FILEIN);
	           else {
	           	  f_out = fopen(FILEOUT, "w");
			      while (fscanf(f_in, "%s%d", elemento.stringa, &elemento.numero) == 2){
                     for (i=0;elemento.stringa[i]!='\0';i++)
					    if (elemento.stringa[i]>='a' && 
						    elemento.stringa[i]<='z')
						      elemento.stringa[i]-='a'-'A';
						else if (elemento.stringa[i]>='A' && 
						         elemento.stringa[i]<='Z')
						            elemento.stringa[i]+='a'-'A';
					 
					 fprintf(f_out,"%s %d\n", elemento.stringa, elemento.numero);
			      } 
 	              fclose(f_in);
	              fclose(f_out);
	           }
               break;               

    }
  } while (scelta<4);
  return 0;  
}
