#include 

#include 

FILE *fin,*fout;

typedef struct studentinfo

    {

    char fname[10];

    char lname[15];

    int age;

    float gpa;

    struct studentinfo *next;

} RECORD;

RECORD *create(RECORD *);

void fill(RECORD *);

RECORD *enqueue(RECORD *);

RECORD *dequeue(RECORD *);

void display(RECORD *);

void main()

    {

    fin=fopen("Lab12inp.dat","r");

    fout=fopen("Lab12out.rst","w");

    RECORD *front=NULL;

    while(!feof(fin))

    front=create(front);

    display(front);

    front=dequeue(front);

    display(front);

    front=enqueue(front);

    display(front);

}

RECORD *create(RECORD *front)

    {

    RECORD *process,*last;

    last=process=front;

        if(front==NULL){

        front=(RECORD *)malloc(sizeof(RECORD));

        front->next=NULL;

        last=front;

    }

        else{

        while(process->next!=NULL)

        process=process->next;

        last=(RECORD *)malloc(sizeof(RECORD));

        process->next=last;

        last->next=NULL;

    }

    fill(last);

    return front;

}

void fill(RECORD *front)

    {

    fscanf(fin,"%s%s%d%f",front->fname,

    front->lname,

    &front->age,

    &front->gpa);

}

RECORD *enqueue(RECORD *front)

    {

    RECORD *process, *last;

    process=front;

    while(process->next!=NULL)

    process=process->next;

    last=(RECORD *)malloc(sizeof(RECORD));

    process->next=last;

    last->next=NULL;

    printf("\nEnter the following to create a new record:\n");

    fprintf(fout,"\nEnter the following to create a new record:\n");

    printf("First Name: ");

    scanf("%s",last->fname);

    fprintf(fout,"First Name: ");

    fprintf(fout,"%s\n",last->fname);

    printf("Last Name: ");

    scanf("%s",last->lname);

    fprintf(fout,"Last Name: ");

    fprintf(fout,"%s\n",last->lname);

    printf("Age:");

    scanf("%d",&last->age);

    fprintf(fout,"Age:");

    fprintf(fout,"%d\n",last->age);

    printf("GPA:");

    scanf("%4f",&last->gpa);

    fprintf(fout,"GPA:");

    fprintf(fout,"%4.2f\n",last->gpa);

    return front;

}

RECORD *dequeue(RECORD *front)

    {

    RECORD *tmp;

    tmp=front;

    front=front->next;

    free(tmp);

    return front;

}

void display(RECORD *front)

    {

        if(front==NULL){

        printf("The queue is empty.\n\n");

        fprintf(fout,"The queue is empty.\n\n");

    }

        else{

        printf("\nThe queue is:\n\n");

        fprintf(fout,"\nThe queue is:\n\n");

        printf("First Last \n");

        fprintf(fout,"First Last \n");

        printf("Name NameAgeQPR\n");

        fprintf(fout,"Name NameAgeQPR\n");

        printf("-------------------------------------\n\n");

        fprintf(fout,"-------------------------------------\n\n");

            while(front!=NULL){

            printf("%-10s%-15s%3d\t%5.2f\n",front->fname,

            front->lname,

            front->age,

            front->gpa);

            fprintf(fout,"%-10s%-15s%3d\t%7.2f\n",front->fname,

            front->lname,

            front->age,

            front->gpa);

            front=front->next;

        }

    }

}