Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_NAME 30

void InputFile (char* input_file);
void BookingSystem (char* input_file);

struct passenger
{
   char name[2*MAX_NAME + 1];
   int flydate;           //Flight date
   int seat;
   struct passenger *next;
};

int seats[31][8];

typedef struct passenger passenger;

passenger* AddNode (char *name, int flydate, passenger *head);
passenger* DeleteNode(char *name, int flydate, passenger *head);
//passenger* passengerInfo(FILE *input_stream, int passengers_registered, int exam_number, passenger *head);
//void passengerDisplay (passenger *head, int exam_number);
void fill_seats();
int seat_alloc(int flydate);
void seat_taken(int i, int j);
void seat_returned(int i, int j);
void ConfirmBook(char *name, int flydate, passenger *head);
void PList(int date, passenger *head);
void Display (passenger *head);
void SeatList(int date);


int main ()

{

    char input_file[BUFSIZ];

    InputFile(input_file);

    BookingSystem(input_file);

	getchar();
    getchar();

	return 0;
}

void InputFile (char* input_file)
{

	printf("Enter the name of the file containing the booking information.\n");
    scanf("%s", input_file);   //Retrieving filename from user

    return;
}

void BookingSystem (char* input_file) //Collect necessary information from file and use it for booking system
{
     FILE *input_stream;

     char *file = input_file;

     //Variables to hold information from input file
     int command;
     int date;
     char dest[31];
     char fname[31];
     char lname[31];
     char *name;

     int counter = 0;

     passenger *head = NULL;           //Creation of Head for Sorted Linked List
     head = malloc(sizeof(passenger));
     head = NULL;

     //Filling seats
     fill_seats();

     if ( (input_stream = fopen(input_file, "r")) == NULL )
     {
        printf("Could not open file.\n\n");
        return;
     }

     puts("");
     while ( !(feof(input_stream)))
     {

           fscanf(input_stream, "%d", &command);
           counter++;

           if ( counter % 3 == 0 )
           {
              counter = 0;
              puts("");
           }

           switch ( command )
           {
                  case 1: fscanf(input_stream, "%s", dest);
                          fscanf(input_stream, "%d", &date);
                          fscanf(input_stream, "%s", lname);
                          fscanf(input_stream, "%s", fname);

                          strcpy(lname + strlen(lname), " ");
                          name = strcat(lname, fname);

                          head = AddNode(name, date, head);
                          break;

                  case 2: fscanf(input_stream, "%s", dest);
                          fscanf(input_stream, "%d", &date);
                          fscanf(input_stream, "%s", lname);
                          fscanf(input_stream, "%s", fname);

                          strcpy(lname + strlen(lname), " ");
                          name = strcat(lname, fname);

                          head = DeleteNode(name, date, head);
                          break;

                  case 3: fscanf(input_stream, "%s", dest);
                          fscanf(input_stream, "%d", &date);
                          fscanf(input_stream, "%s", lname);
                          fscanf(input_stream, "%s", fname);

                          strcpy(lname + strlen(lname), " ");
                          name = strcat(lname, fname);

                          ConfirmBook(name, date, head);
                          break;

                  case 4: fscanf(input_stream, "%s", dest);
                          fscanf(input_stream, "%d", &date);

                          PList(date, head);
                          break;

                          default: printf("Not handled yet.\n");
                          break;

                  case 5: fscanf(input_stream, "%s", dest);
                          fscanf(input_stream, "%d", &date);

                          SeatList(date);
                          break;

                  case 6: printf("Good Bye!");
                          fclose(input_stream);
                          return;


           }

     }

        fclose(input_stream);

        return;
}

passenger* AddNode (char *name, int flydate, passenger *head)
{
     passenger *node, *temp;
     temp = head;
     node = malloc(sizeof(passenger));

     if ( !seat_alloc(flydate) )
     {
        printf("\nSorry, All seats booked  for  flight ZM101 for date %d.\n", flydate);

        return head;
     }

       node->seat = seat_alloc(flydate);

       seat_taken(flydate, node->seat);

       node->flydate = flydate;

     strcpy(node->name,name);

     if ( head == NULL )  //In case the list is empty
     {
         node->next = NULL;
         head = node;
         printf("%s booked on ZM101 May %d seat %d.\n", node->name, node->flydate, node->seat);
         return head;
     }

     if ( head->next == NULL ) //Case when there is only one node present
     {
        if ( (strcmp(name, head->name) == -1) )
        {
            node->next = head;
            head = node;
            printf("%s booked on ZM101 May %d seat %d.\n", node->name, node->flydate, node->seat);
            return head;
        }

        else
        {
            head->next = node;
            node->next = NULL;
            printf("%s booked on ZM101 May %d seat %d.\n", node->name, node->flydate, node->seat);
            return head;
        }
     }

     if ( (strcmp(name, head->name) == -1) )  //Case where the addition is lexically greater than the head
     {
        node->next = head;
        head = node;
        printf("%s booked on ZM101 May %d seat %d.\n", node->name, node->flydate, node->seat);
        return head;
     }

     else
     {

         while ( (strcmp(name, temp->next->name) != -1) && (temp->next != NULL) )
         {
             if ( temp == NULL) break;
             temp = temp->next;
         }

         if ( (temp->next == NULL) && (strcmp(name, temp->next->name) == -1) )
         {
            node->next = temp->next;
            temp = node;
            printf("%s booked on ZM101 May %d seat %d.\n", node->name, node->flydate, node->seat);
            return head;
         }

         if ( temp->next == NULL )
         {
            temp->next = node;
            node->next = NULL;
            printf("%s booked on ZM101 May %d seat %d.\n", node->name, node->flydate, node->seat);
            return head;
         }

         if ( strcmp(name, temp->next->name) == -1 )
         {
             node->next = temp->next;
             temp = node;

             printf("%s booked on ZM101 May %d seat %d.\n", node->name, node->flydate, node->seat);
             return head;
         }
      }
}



passenger* DeleteNode(char *name, int flydate, passenger *head)
{
           passenger *temp;
           temp = head;

           if ( (strcmp(name, head->name) == 0) && head->flydate == flydate )   //Head Deletion
           {
              head = head->next;
              printf("Booking canceled for %s on ZM101 May %d seat %d.\n", temp->name, temp->flydate, temp->seat);
              seat_returned(flydate, temp->seat);
              free(temp);
              return head;
           }

           if( head->next == NULL ) //One Node
           {
               if ( (strcmp(name, head->name) == 0) && head->flydate == flydate )
               {
                  head = NULL;
                  printf("Booking canceled for %s on ZM101 May %d seat %d.\n", temp->name, temp->flydate, temp->seat);
                  free(temp);
                  seat_returned(flydate, temp->seat);
                  return head;
               }

               printf("Reservation not found, could not be canceled.\n");
               return head;
            }



           while ( temp->next != NULL && ((strcmp(name, temp->next->name) != 0) && (temp->next->flydate != flydate) ) )
           {
                 temp = temp->next;
           }

           if (temp->next == NULL )
           {
              if ( (strcmp(name, temp->name) == 0) && (temp->flydate == flydate) )
              {
                 temp = NULL;
                 printf("Booking canceled for %s on ZM101 May %d seat %d.\n", temp->name, temp->flydate, temp->seat);
                 seat_returned(flydate, temp->seat);
                 return head;
               }

               printf("Reservation not found, could not be canceled.\n");
               return head;
            }

            if ( (strcmp(name, temp->next->name) == 0) && (temp->next->flydate == flydate) )
            {
               temp = temp->next->next;
               free(temp->next);
               printf("Booking canceled for %s on ZM101 May %d seat %d.\n", temp->next->name, temp->next->flydate, temp->next->seat);
               seat_returned(flydate, temp->seat);
               return head;
            }

            printf("Reservation not found, could not be canceled.\n");
            return head;

}

int seat_alloc(int flydate)
{
    int i;

    for ( i = 0; i < 8; i++ )
    {
        if ( seats[flydate-1][i] != 0 )
           return seats[flydate-1][i];
    }

    return 0; //Cycled through all seats, and all of them are zero
}

void fill_seats()
{
     int i, j;
     int x = 1;
     int k = 0;


     for ( i = 0; i < 31; i++ )
         for ( j = 0; j < 8; j++ )
         {
             seats[i][j] = x;
             x++; //Continue to increment x in order to fill up seats properly
             k++; //Counter to know when to reset x to one again

             if ( k % 8 == 0 )
              x = 1;
          }
}

void seat_taken(int i, int j)
{
     seats[i-1][j-1] = 0;

     return;
}

void seat_returned(int i, int j)
{
     seats[i-1][j-1] = j;

     return;
}

void ConfirmBook(char *name, int flydate, passenger *head)
{
    while ( head != NULL )
    {
          if ( (strcmp(name, head->name) == 0) && (flydate == head->flydate) )
          {
             printf("Yes, booking confirmed for %s for flight ZM101 for May %d.\n", name, flydate);
             return;
          }

          head = head->next;
     }

     printf("No, booking is not confirmed for %s for flight ZM101 for May %d.\n", name, flydate);
     return;
}

void PList(int date, passenger *head)
{
     printf("\nPassenger list for ZM101     May %d\n", date);

     while ( head != NULL )
     {
           if ( head->flydate == date )
           {
              printf("\t%s %d\n", head->name, head->seat);
           }

           head = head->next;
      }

      printf("\n");
}

void Display (passenger *head)
{
     while ( head != NULL )
     {
           printf("%s %d %d", head->name, head->flydate, head->seat);
           head = head->next;
      }
}

void SeatList(int date)
{
     printf("Seat list for May %d [%d %d ", date, seats[date-1][0], seats[date-1][1]);
     printf("%d %d ", seats[date-1][2], seats[date-1][3]);
     printf("%d %d %d %d]\n", seats[date-1][4],seats[date-1][5], seats[date-1][6], seats[date-1][7]);
}
I can't figure out the problem with this code. I suspect it to be in the bold parts.

Any ideas or hints, or anything in particular is greatly appreciated.