Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef char FName[30];
typedef char LName[30];
typedef struct PassengerInfo
{
FName firstname;
LName lastname;
struct PassengerInfo *Link;
} FlightData;
typedef FlightData *FlightPointer;
FlightData *Passenger, *PassengerData;
void Book(FlightData **PassengerData, char *first, char *last)
{
FlightData *Passenger, *Locate;
// Allocate new nodes for Passenger with firstname & lastname and Link == NULL
Passenger = (FlightData*)malloc(sizeof(FlightData));
strcpy(Passenger->firstname, first);
strcpy(Passenger->lastname, last);
Passenger->Link = NULL;
// Check to see if PassengerData is empty.
if ((*PassengerData) == NULL)
{
*PassengerData = Passenger;
}
else
{
// Locate last node
Locate = *PassengerData;
while (Locate->Link != NULL)
{
Locate = Locate->Link;
}
// Link node to end of list.
Locate->Link = Passenger;
}
}
void Cancel(FlightData **PassengerData, char *first, char *last)
{
FlightData *CurrentNode, *Temporary;
CurrentNode = NULL;
Temporary = NULL;
// Do nothing if PassengerData is empty
if ((*PassengerData) == NULL)
{
printf("\nThere are no passengers booked for this flight.\n");
}
if(strcmp(((*PassengerData)->firstname), first) == 0)
{
if(strcmp(((*PassengerData)->lastname), last) == 0)
{
Temporary = (*PassengerData);
(*PassengerData) = (*PassengerData)->Link;
free(Temporary);
printf("\nBooking has been cancelled for %s, %s.\n", last, first);
}
}
// Initialize pointers and make them point to first node.
CurrentNode = (*PassengerData);
while(CurrentNode->Link != NULL)
{
if(strcmp((CurrentNode->Link->firstname), first) != 0)
{
CurrentNode = CurrentNode->Link;
}
}
if(CurrentNode->Link == NULL && (strcmp((CurrentNode->Link->firstname), first) != 0))
{
printf("\nThat passenger is not booked for this flight.\n");
}
Temporary = CurrentNode->Link;
CurrentNode->Link = CurrentNode->Link->Link;
free(Temporary);
printf("\nBooking has been cancelled for %s, %s.\n", last, first);
}
FlightData *Confirm(char *first, char *last, FlightData *PassengerData)
{
FlightData *Passenger;
Passenger = PassengerData;
while (Passenger != NULL)
{
if (strcmp((Passenger->firstname), first) == 0)
{
if(strcmp((Passenger->lastname), last) == 0)
{
printf("\n%s, %s is booked on this flight.\n", last, first);
break;
}
else
{
Passenger = Passenger->Link;
}
}
}
if(Passenger == NULL)
{
printf("\n%s, %s is not booked on this flight\n", last, first);
}
}
void Display(FlightData *PassengerData)
{
FlightData *Passenger;
printf("\nPassenger List: \n");
Passenger = PassengerData;
while (Passenger != NULL)
{
printf("\n%s, %s\n", Passenger->firstname, Passenger->lastname);
Passenger = Passenger->Link;
}
}
int main(void)
{
FILE* ifp;
FlightData *PassengerData;
PassengerData = NULL;
char first[30];
char last[30];
char action[15];
char filein[25];
char* remove;
printf("Please enter the name of the file to be read.\n");
fgets(filein, sizeof(filein), stdin);
if((remove = strchr(filein, '\n')) != NULL)
{
*remove = '\0';
}
ifp = fopen(filein, "r");
while (!feof(ifp))
{
fscanf(ifp, "%s\n", &action);
if (strcmp(action, "BOOK") == 0)
{
fscanf(ifp, "%s %s", &first, &last);
Book(&PassengerData, first, last);
}
else if (strcmp(action, "CANCEL") == 0)
{
fscanf(ifp, "%s %s", &first, &last);
Cancel(&PassengerData, first, last);
}
else if (strcmp(action, "CONFIRM") == 0)
{
fscanf(ifp, "%s %s", &first, &last);
Confirm(first, last, PassengerData);
}
else if (strcmp(action, "DISPLAY") == 0)
{
Display(PassengerData);
}
}
system("pause");
return 0;
}