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