Longest and Shortest Route Code in C++

Source.cpp #include #include #include #include #include #define BIKE_SIZE 4000 typedef struct Trip_struct { char membershipType[12]; int startStationId, endStationId, bikeId, duration, startHr, startMin; }Trip; typedef struct station_struct { int id; int count; // number of trips in a day }Station; typedef struct Bike_struct { char maintenanceFlag; int bikeId, endStationId; int numTrips, totalDuration; float totalMinutes; int startStationId; }Bike; void printMainMenu() { printf("Main menu:\n"); printf("\t1- Read Trip data\n"); printf("\t2- Run Metrics\n"); printf("\t3- Print Menu\n"); printf("\t4- Flag bikes for Maintenance\n"); printf("\t5- Update bike inventory\n"); printf("\t6- Quit\n"); printf("Enter Your choice: "); } void printMetricMenu() { printf("Metric menu:\n"); printf("\t1- Choose a metric to print\n"); printf("\t2- Return to main menu\n"); printf("Enter Your choice: "); } void printMetricSubMenu() { printf("Metric submenu:\n"); printf("\t1- Average number of trips per hour\n"); printf("\t2- The hour with largest number of trips\n"); printf("\t3- A report of the count of trips in each hour\n"); printf("\t4- Average duration of the trips (in both milliseconds and minutes)\n"); printf("\t5- The trip with the longest duration (in both milliseconds and minutes)\n"); printf("\t6- The 5 busiest starting stations (that had the largest number of trips in the day)\n"); printf("\t7- The 5 busiest ending stations (that had the largest number of trips in the day)\n"); printf("\t8- The percentage of trips in each membership type\n"); printf("\t9- The 10 bikes with the longest duration in minutes\n"); printf("\t10- The 10 bikes with the longest duration last station\n"); printf("\t11- The 10 bikes with the most trips\n"); printf("\t12- The bikes were used for 2 or less trips\n"); printf("\t13- ids and number of trips of the start station of the bikes were used for 2 or less trips\n"); printf("Enter Your choice: "); } void printPrintMenu() { printf("Print menu:\n"); printf("\t1- Print all trip data\n"); printf("\t2- Print all bike inventory\n"); printf("\t3- Print the CEO report\n"); printf("\t4- Print on Bike\n"); printf("\t5- Return to main menu\n"); printf("Enter Your choice: "); } int max(int x,int y) { if(x>y){ return x; } return y; } int tripComp(const void *p, const void *q) { int count1 = (*(const Trip*)p).bikeId; int count2 = (*(const Trip*)q).bikeId; return count1 - count2; } int greaterThan(int lhour, int lmin, int rhour, int rmin) { if (lhour > rhour) { return 1; } if (lhour < rhour) { return -1; } else { if (lmin > rmin) { return 1; } else if (lmin < rmin) { return -1; } } return 0; } void readTripData(char*filename,Trip **trips,int *n,Bike*bikes) { // preparing trip array FILE*f = fopen(filename, "r"); if (f == NULL) { printf("File does not exist.\n"); return; } fscanf(f,"%d", n); if (*trips != NULL) { free(*trips); } *trips =(Trip*) malloc((*n)*sizeof(Trip)); for (int i = 0; i < *n; i++) { fscanf(f,"%s %d %d %d %d %d %d", (*trips)[i].membershipType, &(*trips)[i].startStationId, &(*trips)[i].endStationId, &(*trips)[i].bikeId, &(*trips)[i].duration, &(*trips)[i].startHr, &(*trips)[i].startMin); } fclose(f); /// preparing bike array for (int i = 0; i < BIKE_SIZE; i++) { bikes[i].maintenanceFlag = 0; bikes[i].numTrips = 0; bikes[i].totalDuration = 0; bikes[i].totalMinutes = 0; bikes[i].bikeId = 0; } qsort((void*)(*trips), *n, sizeof(Trip), tripComp); int j = 0; bikes[j].bikeId = (*trips)[0].bikeId; for (int i = 0; i < *n; i++) { if (bikes[j].bikeId != (*trips)[i].bikeId) { j++; bikes[j].bikeId = (*trips)[i].bikeId; } } j = 0; int hour = -1,min = -1; int shour = 2e9, smin = 2e9; for (int i = 0; i < *n; i++) { if (bikes[j].bikeId != (*trips)[i].bikeId) { j++; hour = -1, min = -1; shour = 2e9, smin = 2e9; } bikes[j].numTrips++; bikes[j].totalDuration += (*trips)[i].duration; bikes[j].totalMinutes += (float)((*trips)[i].duration)/60000.0; if (greaterThan((*trips)[i].startHr, (*trips)[i].startMin, hour, min) > 0) { hour = (*trips)[i].startHr; min = (*trips)[i].startMin; bikes[j].endStationId = (*trips)[i].endStationId; } if (greaterThan(shour, smin, (*trips)[i].startHr, (*trips)[i].startMin) > 0) { shour = (*trips)[i].startHr; smin = (*trips)[i].startMin; bikes[j].startStationId = (*trips)[i].startStationId; } } } void averageTripPerHour(char* filename,Trip*trips,int size) { // TODO if (strcmp(filename, "none") == 0) { printf("The average trip per hour: %f\n", size/24.0); } else { FILE*f = fopen(filename, "w+"); if (f == NULL) { printf("File does not exist.\n"); return; } fprintf(f,"The average trip per hour: %f\n", size/24.0); fclose(f); } } void largestHourOfTrips(char* filename, Trip*trips, int size) { int hours[24] = { 0 }; int maxx = -1; int max_id = -1; for (int i = 0; i < size; i++) { hours[trips[i].startHr]++; if (hours[trips[i].startHr] > maxx) { maxx = hours[trips[i].startHr]; max_id = trips[i].startHr; } } if (strcmp(filename, "none") == 0) { printf("The hour with largest number of trips: %d\n", max_id); } else { FILE*f = fopen(filename, "w+"); if (f == NULL) { printf("File does not exist.\n"); return; } fprintf(f, "The hour with largest number of trips: %d\n", max_id); fclose(f); } } void reportTripsInHour(char* filename, Trip*trips, int size) { int hours[24] = { 0 }; for (int i = 0; i < size; i++) { hours[trips[i].startHr]++; } if (strcmp(filename, "none") == 0) { fprintf(stdout, "hour:number of trips\n"); for (int i = 0; i < 24; i++) { fprintf(stdout, "%4d:%d\n", i, hours[i]); } } else { FILE*f = fopen(filename, "w+"); if (f == NULL) { printf("File does not exist.\n"); return; } fprintf(f, "hour:number of trips\n"); for (int i = 0; i < 24; i++) { fprintf(f, "%d:%d\n", i, hours[i]); } fclose(f); } } void averageDurationOfTrips(char* filename, Trip*trips, int size) { double average = 0; for (int i = 0; i < size; i++) { average += trips[i].duration; } average /= (double)size; if (strcmp(filename, "none") == 0) { printf("The Average duration of the trips (in millisecs) : %f\n", average); printf("The Average duration of the trips (in seconds) : %f\n", average/(double)1000.0); } else { FILE*f = fopen(filename, "w+"); if (f == NULL) { printf("File does not exist.\n"); return; } fprintf(f,"The Average duration of the trips (in millisecs) : %f\n", average); fprintf(f,"The Average duration of the trips (in seconds) : %f\n", average / (double)1000.0); fclose(f); } } void getLongestTrip(char* filename, Trip*trips, int size) { double max_duration = -1; for (int i = 0; i < size; i++) { max_duration = max(max_duration, trips[i].duration); } if (strcmp(filename, "none") == 0) { printf("The trip with the longest duration (in millisecs) : %f\n", max_duration); printf("The trip with the longest duration (in seconds) : %f\n", max_duration / (double)1000.0); } else { FILE*f = fopen(filename, "w+"); if (f == NULL) { printf("File does not exist.\n"); return; } fprintf(f, "The Average duration of the trips (in millisecs) : %f\n", max_duration); fprintf(f, "the trip with the longest duration (in seconds) : %f\n", max_duration / (double)1000.0); fclose(f); } } int stationComp(const void *p, const void *q) { int count1 = (*(const Station*)p).count; int count2 = (*(const Station*)q).count; return count2 - count1; } void getFiveBusiestStart(char* filename, Trip* trips, int size) { Station *stations=(Station*) malloc(size * sizeof(Station)); Station empty; empty.id = empty.count = 0; for (int i = 0; i < size; i++) { stations[i] = empty; } for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (stations[j].id == 0) { stations[j].id = trips[i].startStationId; stations[j].count++; break; } else if (stations[j].id == trips[i].startStationId) { stations[j].count++; break; } } } qsort((void*)stations, size, sizeof(Station), stationComp); if (strcmp(filename, "none") == 0) { printf("The 5 busiest starting stations are:\n"); for (int i = 0; i < 5; i++) { printf("\t%d- id:%d, count:%d\n",i+1,stations[i].id,stations[i].count); } } else { FILE*f = fopen(filename, "w+"); if (f == NULL) { printf("File does not exist.\n"); return; } fprintf(f,"The 5 busiest starting stations are:\n"); for (int i = 0; i < 5; i++) { fprintf(f,"\t%d- id:%d, count:%d\n", i + 1, stations[i].id, stations[i].count); } fclose(f); } } void getFiveBusiestEnd(char* filename, Trip*trips, int size) { Station *stations = (Station*)malloc(size * sizeof(Station)); Station empty; empty.id = empty.count = 0; for (int i = 0; i < size; i++) { stations[i] = empty; } for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (stations[j].id == 0) { stations[j].id = trips[i].endStationId; stations[j].count++; break; } else if (stations[j].id == trips[i].endStationId) { stations[j].count++; break; } } } qsort((void*)stations, size, sizeof(Station), stationComp); if (strcmp(filename, "none") == 0) { printf("The 5 busiest ending stations are:\n"); for (int i = 0; i < 5; i++) { printf("\t%d- id:%d, count:%d\n", i + 1, stations[i].id, stations[i].count); } } else { FILE*f = fopen(filename, "w+"); if (f == NULL) { printf("File does not exist.\n"); return; } fprintf(f, "The 5 busiest ending stations are:\n"); for (int i = 0; i < 5; i++) { fprintf(f, "\t%d- id:%d, count:%d\n", i + 1, stations[i].id, stations[i].count); } fclose(f); } } void precentageInEachMembership(char * filename, Trip*trips, int size) { int causual = 0, registered = 0; for (int i = 0; i < size; i++) { if (trips[i].membershipType[0] == 'C') causual++; else registered++; } if (strcmp(filename, "none") == 0) { printf("The percentage of trips in Casual membership type: %f\n", (double)causual / (double)size); printf("The percentage of trips in Registered membership type: %f\n",(double)registered/(double)size); } else { FILE*f = fopen(filename, "w+"); if (f == NULL) { printf("File does not exist.\n"); return; } fprintf(f,"The percentage of trips in Casual membership type: %f\n", (double)causual / (double)size); fprintf(f,"The percentage of trips in Registered membership type: %f\n", (double)registered / (double)size); fclose(f); } } int bikeDurationComp(const void*a,const void*b) { return ((Bike*)b)->totalDuration - ((Bike*)a)->totalDuration; } void bike_longest10_Duration(char* filename,Bike* bikes) { qsort((void*)bikes, BIKE_SIZE, sizeof(Bike), bikeDurationComp); if (strcmp(filename, "none") == 0) { printf("Bikes with longest duration:\n ID:Duration\n"); for (int i = 0; i < 10; i++) { printf("%6d:%d\n", bikes[i].bikeId, bikes[i].totalDuration); } } else { FILE*f = fopen(filename, "w+"); if (f == NULL) { printf("File does not exist.\n"); return; } fprintf(f,"Bikes with longest duration:\n ID:Duration\n"); for (int i = 0; i < 10; i++) { fprintf(f,"%6d:%d\n", bikes[i].bikeId, bikes[i].totalDuration); } fclose(f); } } void bike_longest10_endStation(char*filename,Bike* bikes) { qsort((void*)bikes, BIKE_SIZE, sizeof(Bike), bikeDurationComp); if (strcmp(filename, "none") == 0) { printf("Bikes with longest duration:\n ID:End Station\n"); for (int i = 0; i < 10; i++) { printf("%6d:%d\n", bikes[i].bikeId, bikes[i].endStationId); } } else { FILE*f = fopen(filename, "w+"); if (f == NULL) { printf("File does not exist.\n"); return; } fprintf(f, "Bikes with longest duration:\n ID:End Station\n"); for (int i = 0; i < 10; i++) { fprintf(f, "%6d:%d\n", bikes[i].bikeId, bikes[i].endStationId); } fclose(f); } } int bikeTripsComp(const void*a, const void*b) { return ((Bike*)b)->numTrips- ((Bike*)a)->numTrips; } void bike_most10_trips(char*filename,Bike* bikes) { qsort((void*)bikes, BIKE_SIZE, sizeof(Bike), bikeTripsComp); if (strcmp(filename, "none") == 0) { printf("Top 10 Bikes in number of trips:\n ID:Number of trips\n"); for (int i = 0; i < 10; i++) { printf("%6d:%d\n", bikes[i].bikeId, bikes[i].numTrips); } } else { FILE*f = fopen(filename, "w+"); if (f == NULL) { printf("File does not exist.\n"); return; } fprintf(f, "Bikes with longest duration:\n ID:Number of trips\n"); for (int i = 0; i < 10; i++) { fprintf(f, "%6d:%d\n", bikes[i].bikeId, bikes[i].numTrips); } fclose(f); } } void bike_less2_trips(char* filename,Bike* bikes) { qsort((void*)bikes, BIKE_SIZE, sizeof(Bike), bikeTripsComp); int i = BIKE_SIZE-1; while (bikes[i--].bikeId == 0); if (strcmp(filename, "none") == 0) { printf("Bikes with less than or equal to two rides:\n ID:Number of trips\n"); for (; i >= 0; i--) { if (bikes[i].numTrips <= 2) { printf("%6d:%d\n", bikes[i].bikeId, bikes[i].numTrips); } } } else { FILE*f = fopen(filename, "w+"); if (f == NULL) { printf("File does not exist.\n"); return; } fprintf(f,"Bikes with longest duration:\n ID:Number of trips\n"); for (; i >= 0; i--) { if (bikes[i].numTrips <= 2) { fprintf(f,"%6d:%d\n", bikes[i].bikeId, bikes[i].numTrips); } } } } int intComp(const void *a, const void *b) { return *((int*)a) - *((int*)b); } int numberOfTrips(int stationId, Trip* trips,int size) { int cnt = 0; for (int i = 0; i < size; i++) { if (trips[i].startStationId == stationId) { cnt++; } } return cnt; } void bike_less2_startStation_and_trips_number(char*filename,Bike* bikes,Trip*trips,int size) { qsort((void*)bikes, BIKE_SIZE, sizeof(Bike), bikeTripsComp); int i = BIKE_SIZE - 1; int j = 0; int stations[BIKE_SIZE]; memset(stations, -1 , BIKE_SIZE*sizeof(int)); while (bikes[i--].bikeId == 0); for (; i >= 0; i--) { if (bikes[i].numTrips <= 2) { stations[j++] = bikes[i].startStationId; } } qsort(stations, BIKE_SIZE, sizeof(int),intComp); if (strcmp(filename, "none") == 0) { printf("Start stations of bikes with less than or equal to two trips\nStart Station ID:Number of trips\n"); for (int i = 0; i < BIKE_SIZE; i++) { if (stations[i] == -1) { continue; } if (i > 0 && stations[i] == stations[i - 1]) { continue; } printf("%d:%d\n", stations[i], numberOfTrips(stations[i],trips,size)); } } else { FILE*f = fopen(filename, "w+"); if (f == NULL) { printf("File does not exist.\n"); return; } fprintf(f,"Start Station ID:Number of trips\n"); for (int i = 0; i < BIKE_SIZE; i++) { if (stations[i] == 2e10) { break; } if (i > 0 && stations[i] == stations[i - 1]) { continue; } fprintf(f,"%d:%d\n", stations[i], numberOfTrips(stations[i],trips,size)); } } } void printAllTripData(char *filename,Trip*trips,int size) { if (strcmp(filename, "none") == 0) { for (int i = 0; i < size; i++) { printf("%s %d %d %d %d %d %d\n", trips[i].membershipType, trips[i].startStationId, trips[i].endStationId, trips[i].bikeId, trips[i].duration, trips[i].startHr, trips[i].startMin); } } else { FILE*f = fopen(filename, "w+"); if (f == NULL) { printf("File does not exist.\n"); return; } for (int i = 0; i < size; i++) { fprintf(f, "%s %d %d %d %d %d %d\n", trips[i].membershipType, trips[i].startStationId, trips[i].endStationId, trips[i].bikeId, trips[i].duration, trips[i].startHr, trips[i].startMin); } } } void printAllBikeInventory(char *filename, Bike* bike) { if (strcmp(filename, "none") == 0) { for (int i = 0; i < BIKE_SIZE; i++) { if (bike[i].bikeId != 0) { printf("%c %d %d %d %d %d\n", bike[i].maintenanceFlag, bike[i].bikeId, bike[i].startStationId , bike[i].endStationId, bike[i].totalDuration, bike[i].numTrips); } } } else { FILE*f = fopen(filename, "w+"); if (f == NULL) { printf("File does not exist.\n"); return; } for (int i = 0; i < BIKE_SIZE; i++) { if (bike[i].bikeId != 0) { fprintf(f, "%c %d %d %d %d %d\n", bike[i].maintenanceFlag, bike[i].bikeId, bike[i].startStationId , bike[i].endStationId, bike[i].totalDuration, bike[i].numTrips); } } } } void printCEOReport(char *filename,Trip*trips,int size,Bike*bikes) { int out, save_out; int x= 0; if (strcmp(filename, "none") != 0) { out = open(filename, O_RDWR | O_CREAT | O_APPEND, 0600); save_out = dup(fileno(stdout)); dup2(out, fileno(stdout)); filename = "none"; x=1; } averageTripPerHour(filename, trips, size); printf("----------------------------------------------------------\n"); largestHourOfTrips(filename, trips, size); printf("----------------------------------------------------------\n"); printf("Reporting trip per hour:\n"); reportTripsInHour(filename, trips, size); printf("----------------------------------------------------------\n"); averageDurationOfTrips(filename, trips, size); printf("----------------------------------------------------------\n"); getLongestTrip(filename,trips,size); printf("----------------------------------------------------------\n"); getFiveBusiestStart(filename, trips, size); printf("----------------------------------------------------------\n"); getFiveBusiestEnd(filename, trips, size); printf("----------------------------------------------------------\n"); precentageInEachMembership(filename, trips, size); printf("----------------------------------------------------------\n"); bike_longest10_Duration(filename, bikes); printf("----------------------------------------------------------\n"); bike_longest10_endStation(filename, bikes); printf("----------------------------------------------------------\n"); bike_most10_trips(filename, bikes); printf("----------------------------------------------------------\n"); bike_less2_trips(filename, bikes); printf("----------------------------------------------------------\n"); bike_less2_startStation_and_trips_number(filename, bikes, trips, size); printf("----------------------------------------------------------\n"); if (x==1) { fflush(stdout); dup2(save_out,fileno(stdout)); //close(out); close(save_out); } } void printABike(char *filename,Bike*bikes,int id) { if (strcmp(filename, "none") == 0) { for (int i = 0; i < BIKE_SIZE; i++) { if (bikes[i].bikeId == id) { printf("%c %d %d %d %d %d\n", bikes[i].maintenanceFlag, bikes[i].bikeId, bikes[i].startStationId , bikes[i].endStationId, bikes[i].totalDuration, bikes[i].numTrips); break; } } } else { FILE*f = fopen(filename, "w+"); if (f == NULL) { printf("File does not exist.\n"); return; } for (int i = 0; i < BIKE_SIZE; i++) { if (bikes[i].bikeId == id) { printf("%c %d %d %d %d %d\n", bikes[i].maintenanceFlag, bikes[i].bikeId, bikes[i].startStationId , bikes[i].endStationId, bikes[i].totalDuration, bikes[i].numTrips); break; } } } } void flagBikesForMaintainance(Bike*bikes) { qsort((void*)bikes, BIKE_SIZE, sizeof(Bike), bikeDurationComp); for (int i = 0; i < 10; i++) { bikes[i].maintenanceFlag = 1; } printf("The 10 longest duration bike's maintainance flag has been set to true"); } void deleteBike(Bike*bikes,int id,int emptyId) { bikes[id] = bikes[emptyId - 1] ; Bike empty; empty.bikeId = 0; empty.endStationId = 0; empty.maintenanceFlag = 0; empty.numTrips = 0; empty.startStationId = 0; empty.totalDuration = 0; empty.totalMinutes = 0; bikes[emptyId - 1] = empty; } void updateBikeInventory(Bike*bikes) { int choice; int emptyId = -1; int id; do { printf("Enter 1 if you need to add a bike 2 for delete: "); scanf("%d", &choice); } while (choice != 1 && choice != 2); switch (choice) { case 1: for (int i = 0; i < BIKE_SIZE; i++) { if (bikes[i].bikeId == 0) { emptyId = i; break; } } printf("Enter id: "); scanf("%d",&bikes[emptyId].bikeId); bikes[emptyId].endStationId = 0; bikes[emptyId].startStationId = 0; printf("Enter start station id"); break; case 2: printf("Enter the id to delete: "); scanf("%d", &choice); for (int i = 0; i < BIKE_SIZE; i++) { if (bikes[i].bikeId == choice) { id = i; } if (bikes[i].bikeId == 0) { emptyId = i; break; } } deleteBike(bikes, id,emptyId); break; } } int main() { int choice; int exit = 0; char filename[50]; Trip* trips = NULL; int tripsSize = 0; Bike bikes[BIKE_SIZE]; int bikeId; while (!exit) { printMainMenu(); scanf("%d", &choice); switch (choice) { case 1: printf("Enter filename for reading: "); scanf("%s", filename); readTripData(filename,&trips,&tripsSize,bikes); break; case 2: while (!exit) { printMetricMenu(); scanf("%d", &choice); switch (choice) { case 1: printMetricSubMenu(); scanf("%d", &choice); switch (choice){ case 1: printf("Enter filename for printing(\"none\" for stdout): "); scanf("%s", filename); averageTripPerHour(filename,trips,tripsSize); break; case 2: printf("Enter filename for printing(\"none\" for stdout): "); scanf("%s", filename); largestHourOfTrips(filename,trips, tripsSize); break; case 3: printf("Enter filename for printing(\"none\" for stdout): "); scanf("%s", filename); reportTripsInHour(filename, trips, tripsSize); break; case 4: printf("Enter filename for printing(\"none\" for stdout): "); scanf("%s", filename); averageDurationOfTrips(filename, trips, tripsSize); break; case 5: printf("Enter filename for printing(\"none\" for stdout): "); scanf("%s", filename); getLongestTrip(filename, trips, tripsSize); break; case 6: printf("Enter filename for printing(\"none\" for stdout): "); scanf("%s", filename); getFiveBusiestStart(filename, trips, tripsSize); break; case 7: printf("Enter filename for printing(\"none\" for stdout): "); scanf("%s", filename); getFiveBusiestEnd(filename, trips, tripsSize); break; case 8: printf("Enter filename for printing(\"none\" for stdout): "); scanf("%s", filename); precentageInEachMembership(filename, trips, tripsSize); break; case 9: printf("Enter filename for printing(\"none\" for stdout): "); scanf("%s", filename); bike_longest10_Duration(filename,bikes); break; case 10: printf("Enter filename for printing(\"none\" for stdout): "); scanf("%s", filename); bike_longest10_endStation(filename,bikes); break; case 11: printf("Enter filename for printing(\"none\" for stdout): "); scanf("%s", filename); bike_most10_trips(filename,bikes); break; case 12: printf("Enter filename for printing(\"none\" for stdout): "); scanf("%s", filename); bike_less2_trips(filename, bikes); break; case 13: printf("Enter filename for printing(\"none\" for stdout): "); scanf("%s", filename); bike_less2_startStation_and_trips_number(filename,bikes,trips,tripsSize); break; } break; case 2: exit = 1; break; } } exit = 0; break; case 3: while (!exit) { printPrintMenu(); scanf("%d", &choice); switch (choice) { case 1: printf("Enter filename for printing(\"none\" for stdout): "); scanf("%s", filename); printAllTripData(filename,trips,tripsSize); break; case 2: printf("Enter filename for printing(\"none\" for stdout): "); scanf("%s", filename); printAllBikeInventory(filename,bikes); break; case 3: printf("Enter filename for printing(\"none\" for stdout): "); scanf("%s", filename); printCEOReport(filename,trips,tripsSize,bikes); break; case 4: printf("Enter the bike id: "); scanf("%d", &bikeId); printf("Enter filename for printing(\"none\" for stdout): "); scanf("%s", filename); printABike(filename,bikes,bikeId); break; case 5: exit = 1; break; } } exit = 0; break; case 4: flagBikesForMaintainance(bikes); break; case 5: updateBikeInventory(bikes); break; case 6: exit = 1; break; } } free(trips); }