Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as C++ by qqq ( 7 years ago )
#include <stdio.h>
#include <string.h>


typedef struct {
	char name[40];
	char city[40];
	int timeZone;
	int numberOfTerminals;
	char terminals[100];
} airport;

typedef struct {
	char airline[5];
	int number;
	int from;
	int to;
	int hour;
	int minute;
	int duration;
	int currentDelay;
	char depTerminal;
	int depGate;
} flight;


void departures (int hh, int mm,
				const char airportName[],
				const char airportCity[],
				const airport airportData[],
				const flight flightSched[])
{
	// Check hour and minute
	if ( ! ( (0 <= hh && hh <= 23) && (0 <= mm && mm <= 59) ) )
		printf("Incorrect Time\n");

	// Find number of departure airport
	size_t i = 0, depNum = 0;
	for( ; i < 100; ++ i )
	{
		if( ! strcmp( airportData[ i ]. name, airportName )
			&&
			! strcmp( airportData[ i ].city, airportCity ) )
		{
			depNum = i;
			break;
		}
	}

	// Print header
	printf( "Flight Departure - %s %s airport - Local Time: ", airportCity, airportName );



		// Calculate local time and treat negative time zone
		int localHour = ( hh + airportData[ depNum ]. timeZone ) % 24;

		if( localHour < 0)
			localHour = 24 + localHour;

		//Print local time
		if( localHour < 10 )	putchar( '0' );

		printf( "%i:", localHour );

		if( mm < 10 )		putchar( '0' );

		printf( "%i\n", mm );


	printf( "%s %10s %23s %5s %6s %7s\n", "Time", "Flight", "Destination", "Ter", "Gate", "Delay" );



	// Find flights for current departure airport
	for( i = 0 ; i < 100; ++ i )
	{
		if( flightSched[ i ]. from == depNum
			&&
			flightSched[ i ]. from != flightSched[ i ]. to )
		{

			// Compare departure time with GMT

			if ( 60 * flightSched[ i ]. hour + flightSched[ i ]. minute >= 60 * localHour + mm	  )
			{

				// Print departure time
				if( flightSched[ i ]. hour < 10 )	putchar( '0' );

				printf( "%i:", flightSched[ i ]. hour );

				if( flightSched[ i] . minute < 10 )		putchar( '0' );

				printf( "%i", flightSched[ i ]. minute );


				// Form and print name of the destination airport
				char destStr[ 80 ];
				strcpy( destStr, airportData[ flightSched[ i ]. to ]. city );
				strcat( destStr, "-"  );
				strcat( destStr, airportData[ flightSched[ i ]. to ]. name );

				printf( "%7s%i %23s %4c", flightSched[ i ]. airline,
											flightSched[ i ]. number,
											destStr,
											flightSched[ i ]. depTerminal );
				// Print Gate and Delay if any
				if ( flightSched[ i ]. depGate > 0 )
					printf("%8i", flightSched[ i ].depGate);
				else printf("%8c", ' ');

				if ( flightSched[ i ]. currentDelay > 0 )
					printf("%7im\n", flightSched[ i ]. currentDelay );
				else
					printf("%7c\n", ' ');

			}

		}

	}

	putchar( '\n' );

}

int main()
{
	// create arrays for data
	airport airportList[ 100 ];
	flight flightList[ 100 ];

	// Open file airports.txt for reading
	FILE *in1;
	in1 = fopen( "airports.txt", "r" );

	if( in1 == NULL )
	{
		printf( "Problem opening file 1." );
		return 1;
	}

	// For indexing
	size_t i = 0;
	do {

		fscanf( in1, "%s", airportList[ i ]. city );


		// Processing timezone
		int tzone;
		// skip space char
		char inp = getc( in1 );
		inp = getc( in1 );

		if( inp == '+')
		{
			fscanf( in1, "%i", &tzone);
			airportList[i]. timeZone = tzone;
		}

		else if ( inp == '-' )
		{
			fscanf( in1, "%i", &tzone);
			airportList[ i ]. timeZone = -tzone;
		}
		else
			airportList[ i ]. timeZone = 0;


		fscanf( in1, "%s", airportList[ i ]. name );


		// Read airport terminals
		size_t nTerminals = 0;
		char ch;
		do {
			// To skip spaces
			ch = getc( in1 );
			if( ch == ' ' ) continue;
			if( ch == '\n' ) break;
			if( ch == EOF ) break;

			airportList[ i ]. terminals[ nTerminals ] = ch;

			++ nTerminals;

		} while (ch != EOF);

		airportList[ i ]. numberOfTerminals = nTerminals;

		++ i;
	} while ( ! feof( in1 ) );

	// Number of read airports
	size_t airportListN = i;

	// Finish reading airports.txt
	fclose(in1);


// Reading schedule.txt

	FILE *in2;
	in2 = fopen( "schedule.txt", "r" );

	if( in2 == NULL )
	{
		printf( "Problem opening file 2." );
		return 1;
	}

	// For indexing
	i = 0;
	do {
		// Reading airline
		flightList[i].airline[0] = getc( in2 );
		flightList[i].airline[1] = getc( in2 );
		flightList[i].airline[2] = '\0';

		fscanf( in2, " %i", &flightList[ i ]. number );

		// Reading destination and arrival airport names
		char city1[ 40 ],
			name1[ 40 ],
			city2[ 40 ],
			name2[ 40 ];
		_Bool depPresent = 0, arrPresent = 0;
		fscanf( in1, "%s %s - %s %s", city1, name1, city2, name2 );

		size_t j;
		for( j = 0; j < airportListN; ++ j )
		{
			// Checking condition: both airports are present in airportList
			if( ! strcmp( airportList[ j ]. city, city1)
					&&
				! strcmp( airportList[ j ]. name, name1) )
			{
				flightList[ i ]. from = j;
				depPresent = 1;
			}
			if( ! strcmp( airportList[ j ]. city, city2)
					&&
				! strcmp( airportList[ j ]. name, name2) )
			{
				flightList[ i ]. to = j;
				arrPresent = 1;
			}
		}

		// Reading time
		int depTime;
		fscanf( in2, "%i %i\n", &depTime, &flightList[ i ]. duration );

		int depHour = depTime / 100,
			depMin = depTime % 100;

		flightList[ i ]. hour = depHour;
		flightList[ i ]. minute = depMin;

		// If at least one airport isn't present in list - skip
		if( ! (arrPresent && depPresent) )
			continue;

		// Checking departure time conditions
		if( ! ( ( 0 <= depHour && depHour <= 23)
				&&
				( 0 <= depMin && depMin <= 59 ) ) )
			continue;

		++ i;

	} while ( ! feof( in2 ) );

	// Finish reading schedule.txt
	fclose(in2);

	// Open file 3 for reading
	FILE *in3;
	in3 = fopen( "rtFlights.txt", "r" );

	if( in3 == NULL )
	{
		printf( "Problem opening file 3." );
		return 1;
	}

	do {

		char airline[5];
		int number, delay;
		fscanf( in3, "%s %i %i", airline, &number, &delay );

		// look for flight with corresponding airline and number
		size_t i;
		for( i = 0; i < 100; ++ i )
		{
			if( ! strcmp( airline, flightList[ i ].airline ) && number == flightList[ i ].number )
			{
				flightList[ i ]. currentDelay = delay;
				break;
			}
		}


	} while ( ! feof( in3 ) );

	// Finish reading rtFlights.txt
	fclose(in3);


	// Open file rtGates.txt for reading
	FILE *in4;
	in4 = fopen( "rtGates.txt", "r" );

	if( in4 == NULL )
	{
		printf( "Problem opening file 4." );
		return 1;
	}

	do {

		char airline[5];
		int number;
		char term;
		int gate;
		fscanf( in3, "%s %i %c %i", airline, &number, &term, &gate );

		// look for flight with corresponding airline and number
		size_t i;
		for( i = 0; i < 100; ++ i )
		{
			if( ! strcmp( airline, flightList[ i ].airline ) && number == flightList[ i ].number )
			{
				flightList[ i ]. depTerminal = term;
				flightList[ i ]. depGate = gate;
				break;
			}
		}


	} while ( ! feof( in4 ) );

	// Finish reading rtGates.txt
	fclose(in4);



	// Print departures table
	for( i = 0; i < airportListN; ++ i )
	{
		departures( 1, 0,
					airportList[ i ]. name,
					airportList[ i ]. city,
					airportList,
					flightList);
	}

	return 0;

}

 

Revise this Paste

Your Name: Code Language: