#include <stdio.h>
#include <conio.h>
#include <stdio.h>
#include "valid.c"struct pop_detail
{  int no;
   char p_name[10];
   int p_age;
   int p_sexcode;
   char address[30];
};
 void getWriteFileName(char *);
 void getReadFileName(char *);
 void enterData();
 int getSexCode();
 void getTotalCount();
 void getName(char *);
 void getAddress(char *);
 FILE *fp, *rpt;
 int flag=1;
 int count=0;
 int adult_count=0;
 char filename[14];
 struct pop_detail pop_cur;
 void main()
 {
    char option;
    clrscr();
    printf("\nDo you want to create the data file type 'y' for yes and 'n' for no.");
    scanf("%c", &option);
    fflush(NULL);
      if( option == 'y' || option == 'Y')
       getWriteFileName(filename);
      elseif( option == 'n' || option == 'N')
       {   getReadFileName(filename);
       getTotalCount();
       }
    getch();
 }
 void enterData()
 {
    printf("\nEnter data ..... Use value 9999 for record no to terminate data entry.");
    while(flag)
    {
    //printf("\nEnter employee no. : ");//scanf("%d", &pop_cur.no);
    getPosInteger("Enter record no. : ", &pop_cur.no);
    fflush(NULL);
    printf("\nEnter Person name : ");
       //scanf("%[^\n]", pop_cur.p_name);
    getName(pop_cur.p_name);
    fflush(NULL);
    //printf("\nEnter employee age : ");//scanf("%d", &pop_cur.p_age);
    getPosInteger("Enter Person age : ", &pop_cur.p_age);
    fflush(NULL);
    printf("\nEnter Person sex (1 Male / 2 Female)  : ");
    pop_cur.p_sexcode = getSexCode();
    //printf("Sex code : %d", pop_cur.p_sexcode);
    fflush(NULL);
    printf("\nEnter Person Address : ");
    getAddress(pop_cur.address);
    fflush(NULL);
    fprintf(fp,"%-4d %-10s %-2d %1d %s", pop_cur.no, pop_cur.p_name, pop_cur.p_age, pop_cur.p_sexcode, pop_cur.address);
    flag++;
      /*if(pop_cur.no != 9999)
    {   printf("\nEnter 1 to continue and 0 to exit.");
        scanf("%d", &flag);
        fflush(NULL);
    }
    else flag=0;
       */
if(pop_cur.no == 9999)
    flag = 0;
      else
     fprintf(fp,"\n");
    }
    fclose(fp);
    //printf("\nTotal number of adult is : %d", adult_count);
 }
    void getName(char *str)
    {
    int count1=0;
    char *getstr;
    char readch='\0';
    int errorflag = 0;
       fflush(NULL);
       getstr = str;
       while(1)
       {
        scanf("%c", &readch);
        if( readch == '\n')
           break;
        if( isalpha(readch) == 0)
        {   printf("\nInvalid entry. Enter characters only.\nEnter name again :");
            errorflag = 1;
            break;
        }
        else
            *getstr = readch;
        count1++;
        getstr++;
        if( count1 >= 10 )
          break;
       }
       fflush(NULL);
       if(errorflag)
          getName(pop_cur.p_name);
       *getstr='\0';
    }
    void getAddress(char *str)
    {
    int count1=0;
    char *getstr;
    char readch='\0';
       fflush(NULL);
       getstr = str;
       while(1)
       {
        scanf("%c", &readch);
        if( readch == '\n')
           break;
        else
            *getstr = readch;
        count1++;
        getstr++;
        if( count1 >= 30 )
          break;
       }
       fflush(NULL);
       *getstr='\0';
    }
   int getSexCode()
   {
     int code;
     int rval;
     rval =scanf("%d", &code);
     fflush(NULL);
     if( ( rval == 0) ||   ( ( code != 1) && (code != 2)  ) )
     {
    printf("\n Invalid sex code entered. Enter 1 for male and 2 for female. :");
    code = getSexCode();
     }
      return code;
   }
   void getWriteFileName(char *fname)
   {
     printf("Enter Output File name maxium 14 character : ");
     scanf("%s", fname);
     if( ( fp = fopen(fname, "wt") ) == NULL  )
     {  fclose(fp);
    printf("\nInvalid file name entered.");
     }
     else
    enterData();
  }
   void getReadFileName(char *fname)
   {
     printf("Enter Input File name maxium 14 character : ");
     scanf("%s", fname);
     if( ( fp = fopen(fname, "r+t") ) == NULL  )
     {  fclose(fp);
    printf("\nInvalid file name entered.");
     }
   }
    void getTotalCount()
    {  flag =0;
       adult_count=0;
       if( ( rpt = fopen("prog10.rpt", "w+t") ) == NULL  )
       {  fclose(fp);
      printf("\nInvalid file name entered.");
      exit(1);
       }
       while( feof(fp) == 0 )
       {
      fscanf(fp, "%d %10s %d %d %[^\n]", &pop_cur.no, pop_cur.p_name, &pop_cur.p_age, &pop_cur.p_sexcode, pop_cur.address);
      printf("%-4d %-10s %-2d %1d %-30s\n", pop_cur.no, pop_cur.p_name, pop_cur.p_age, pop_cur.p_sexcode, pop_cur.address);
      fprintf(rpt,"%-4d %-10s %-2d %1d %-30s\n", pop_cur.no, pop_cur.p_name, pop_cur.p_age, pop_cur.p_sexcode, pop_cur.address);
         if(pop_cur.p_age >= 18)
           adult_count++;
       }
      fclose(fp);
      printf("\nTotal number of adult is : %d", adult_count);
    }
    /******************************  Input ********************************************/
    Do you want to create the data file type 'y'for yes and 'n'for no.y
    Enter Output File name maxium 14 character : output.txt
    Enter data ..... Use value 9999 for record no to terminate data entry.
    Enter record no. : 1
    Enter Person name : chintan
    Enter Person age : 27
    Enter Person sex (1 Male / 2 Female)  : 1
    Enter Person Address : sabarmati
    /*********    Output    ********
       1    Jayesh    22 1 sabarmati
       2    nilay      22 1 vastrapur
       9999 ket        22 2 maninagar
     *********************************/