Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "airport_manager.h"
- void InitializeAirline(Airline *airline, int maxAirportsN){
- airline -> airports = (Airport**) calloc(maxAirportsN, sizeof(Airport*));
- airline -> numAirports = 0;
- airline -> maxAirports = maxAirportsN;
- }
- int AddAirport(Airline *airline, const char* name)
- {
- Airport* tptr = FindAirport(airline, name);
- if( tptr == NULL)
- {
- Airport* new_port = (Airport *)malloc(sizeof(Airport));
- new_port-> name = malloc(sizeof(char) * (strlen(name) + 1));
- new_port -> numDestinations = 0;
- new_port -> destinations = malloc(sizeof(Airport*));
- strcpy(new_port -> name , name);
- if(airline -> maxAirports <= airline -> numAirports)
- {
- airline -> maxAirports *= 2;
- airline -> airports = realloc( airline -> airports, sizeof(Airport*) * (airline -> maxAirports));
- }
- airline -> airports[airline-> numAirports] = new_port;
- airline -> numAirports++;
- return 1;
- }
- return 0;
- }
- Airport *FindAirport(Airline *airline, const char *name){
- for( int i = 0; i < airline -> numAirports; i++ ){
- Airport* ptr = airline -> airports[i];
- if(strcmp(ptr -> name, name) == 0) {
- return ptr;
- }
- }
- return NULL;
- }
- int AddFlight(Airline *airline, const char* origin_name, const char* dest_name){
- Airport * origin = FindAirport(airline, origin_name);
- Airport * dest = FindAirport(airline, dest_name);
- if( origin == NULL || dest == NULL){
- return 0;
- }
- else if( strcmp( origin_name, dest_name) == 0){
- return 0;
- }
- else{
- for (int i = 0; i < origin -> numDestinations; i++){
- if(strcmp(origin_name, origin -> destinations[i] -> name) == 0){
- return 0;
- }
- }
- origin -> numDestinations++;
- origin -> destinations = realloc( origin -> destinations, (origin -> numDestinations)* (sizeof(Airport*) ));
- // origin -> destinations[origin->numDestinations] = (Airport *) malloc(sizeof(Airport));
- // origin -> destinations[origin->numDestinations]->name = malloc(sizeof(char) * (strlen(dest_name) + 1));
- // strcpy(origin -> destinations[origin -> numDestinations] -> name , dest_name);
- origin -> destinations[(origin -> numDestinations) -1] = dest;
- return 1;
- }
- return 0;
- } // Part 4
- int PrintFlightsFromAirport(Airline *airline, const char *origin_name){
- Airport * origin = FindAirport(airline, origin_name);
- if(origin == NULL){
- return 0;
- }
- else {
- for(int i = 0; i < origin -> numDestinations; i++){
- printf("%s\n", origin -> destinations[i] -> name);
- }
- }
- return 1;
- } // Part 5
- int PrintFlightsToAirport(Airline *airline, const char *dest_name){
- Airport * dest = FindAirport(airline, dest_name);
- if(dest == NULL){
- return 0;
- }
- else {
- for(int i = 0; i < airline -> numAirports; i++){
- Airport * ptr = airline -> airports[i];
- for(int j = 0; j < ptr -> numDestinations; j++ ){
- Airport * tptr = ptr -> destinations[j];
- if(strcmp(tptr -> name, dest_name) == 0){
- printf("%s\n", ptr -> name);
- }
- }
- }
- }
- return 1;
- } // Part 6
- void PrintAirlineAsMatrix(Airline *airline){
- for(int i = 0; i < airline -> numAirports; i++){
- Airport* ptr = airline -> airports[i];
- for(int k = 0; k < airline -> numAirports; k++){
- Airport * temp = airline -> airports[k];
- if(i == k){
- printf("0");
- continue;
- }
- else if(HasDirectFlight(airline, ptr -> name , temp-> name )){
- printf("1");
- }
- else{
- printf("0");
- }
- }
- printf("\n");
- }
- }
- int HasDirectFlight(Airline *airline, const char *origin_name, const char *dest_name){
- Airport * origin = FindAirport(airline, origin_name);
- Airport * dest = FindAirport(airline, dest_name);
- if( origin == NULL || dest == NULL){
- return 0;
- }
- else if(strcmp(origin_name, dest_name) == 0){
- return 0;
- }
- else{
- for (int i = 0; i < origin -> numDestinations; i++){
- if(strcmp(dest_name, origin -> destinations[i] -> name) == 0){
- return 1;
- }
- }
- return 0;
- }
- } // Part 8
- int HasOneStopFlight(Airline *airline, const char *origin_name, const char *dest_name)
- {
- Airport * origin = FindAirport(airline, origin_name);
- Airport * dest = FindAirport(airline, dest_name);
- Airport * first;
- if( origin == NULL || dest == NULL){
- return 0;
- }
- else if(strcmp(origin_name, dest_name) == 0){
- return 0;
- }
- else if(HasDirectFlight(airline, origin_name , dest_name) == 1){
- return 0;
- }
- else{
- for (int i = 0; i < origin -> numDestinations; i++){
- first = origin -> destinations[i];
- if(HasDirectFlight(airline, first -> name, dest_name) == 1){
- return 1;
- }
- }
- }
- return 0;
- } // Part 9
- void DeleteAirline(Airline *airline){
- for(int i =0; i < airline -> numAirports; i++){
- free(airline -> airports[i]-> destinations);
- free(airline -> airports[i]-> name);
- free(airline -> airports[i]);
- airline -> airports[i] = NULL;
- }
- free(airline -> airports);
- } // Part 10
- void GuaranteeOneStop(Airline *airline){
- Airport * origin;
- Airport * dest;
- if(airline == NULL){
- return;
- }
- for(int i = 0; i < airline -> numAirports; i++){
- origin = airline -> airports[i];
- for(int j = 0; j < airline -> numAirports; j++ ){
- dest = airline -> airports[j];
- if(HasDirectFlight(airline, origin -> name, dest -> name) == 1 || HasOneStopFlight(airline, origin -> name, dest -> name) == 1){
- continue;
- }
- else{
- AddFlight(airline,origin -> name, dest -> name );
- }
- }
- }
- } // Part 11 extra credit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement