void menuAddFlight(char* passMsg) { Flight flight = { NULL, NULL, 0, 0 }; programHeader(); printf("Dodawanie lotu:\n\n"); if (_inputFlight(&flight)) { if (flight.from == NULL) { sprintf(passMsg, "Nie mozna dodac lotu. Lotnisko wylotu nie istnieje w bazie.\n"); } if (flight.to == NULL) { sprintf(passMsg, "Nie mozna dodac lotu. Lotnisko przylotu nie istnieje w bazie.\n"); } else if (NULL != findFlightByAllData(DB_HANDLE, flight.from, flight.to, flight.departure, flight.duration)) { sprintf(passMsg, "Nie mozna dodac lotu. Lot z (%s, %s) do (%s, %s) o %hu:%02hu juz istnieje.\n", flight.from->name, flight.from->country, flight.to->name, flight.to->country, getHour(&flight.departure), getMinutes(&flight.departure)); } else { addFlight(DB_HANDLE, flight.from, flight.to, flight.departure, flight.duration); sprintf(passMsg, "Lot z (%s, %s) do (%s, %s) o %hu:%02hu zostal dodany.\n", flight.from->name, flight.from->country, flight.to->name, flight.to->country, getHour(&flight.departure), getMinutes(&flight.departure)); } } else { sprintf(passMsg, "Nie mozna dodac lotu. Niepoprawne/niepelne dane.\n"); } menuPrintAllFlights(passMsg); }
/* Given a flight system with airports, and a file of schedules for those airports, add flight times to the system. */ void parseSchedule(flightSys_t* s, FILE* schedule) { char* newAirportPrefix = "AIRPORT: "; size_t prefixLen = strlen(newAirportPrefix); airport_t* curAirport = NULL; /* curAirport is the airport we are currently adding a schedule for. In other words, it is the source airport. The while loop parses the file line by line and sets a new curAirport when a line that starts with "STATION: " is found. It'll also echo the schedule of the previous airport. Otherwise, it treats the current line as a new entry in the schedule of the curAirport and calls addFlight. */ char line[MAX_LINE_LEN]; while(fgets(line, MAX_LINE_LEN, schedule)) { if(!strcmp(line,"\n")) continue; else if(strncmp(line,newAirportPrefix,prefixLen) == 0){ if(curAirport) printSchedule(curAirport); //done with previous schedule so print it stripNewLine(line); char* srcName = line+prefixLen; curAirport = getAirport(s,srcName); if(curAirport) printf("Adding schedule for airport %s\n",srcName); else printf("Cannot find airport %s\n",srcName); } else if (curAirport) { char dstName[MAX_LINE_LEN]; char departureStr[MAX_LINE_LEN]; char arrivalStr[MAX_LINE_LEN]; char priceStr[MAX_LINE_LEN]; if(4!=sscanf(line,"%s %s %s $%s",dstName,departureStr,arrivalStr, priceStr)) { //parses the line as destination airport name, departure time, arrival time, and price printf("Skipping line: %s\n",line); continue; } airport_t* dst = getAirport(s,dstName); if(dst==NULL) { printf("Cannot find airport %s\n",dstName); continue; } timeHM_t arrival; timeHM_t departure; int cost; char* endptr; cost = (int) strtol(priceStr,&endptr,10); if(!stringToTime(arrivalStr, &arrival) || !stringToTime(departureStr, &departure) || *endptr) { printf("Skipping line: %s\n",line); continue; } addFlight(curAirport,dst,&departure,&arrival, cost); } } if(curAirport) printSchedule(curAirport); }
void ProjectSpace::deserialize( std::vector<int> data ) { int size = data.size(); mTime = data[0]; mFlightsPoints.clear(); mPointsArray.clear(); int i = 1; //mPointsArray.reserve(size); while( i < size ) { int x = data[i]; int y = data[i+1]; Cell p(x,y); int flightsNum = data[i+2]; i+=3; for(int j = 0; j<flightsNum; j++) { addFlight(data[i+j],p); } i+=flightsNum; } }
int main(void) { struct flights flight[500],tempflight; struct maxflights maxflight[500],tempmax; // двумерен масив за броене на компаниите int k = 0; // броя въведени компании int i,j; //loops int found = 0; do { printf("Въведете брой полети: "); scanf("%d", &n); } while (n<1 || n>500); for(i=0;i<n;i++) { addFlight(&flight[i]); // sled wywejdane na noviq polet, pretyrswame masiva s kompaniite i wijdame ima li wywedeni poleti za tazi kompaniq // ako ima - increase-wame count-a s edno // ako nqma namereni, dobawqme nov i increase-wame k; for(j=0;j<k;j++) { if(strcmp(flight[i].company,maxflight[j].company)==0) { maxflight[j].count++; found = 1; break; } } if(k==0||(found==0&&k>0)) { strcpy(maxflight[k].company,flight[i].company); maxflight[k].count=1; k++; //increase-wame k s 1 } found = 0; //zanulqwame found } // т.1 печатаме цялата информация въведена за полетите for(i=0;i<n;i++) { getFlight(&flight[i]); } // т.2 сортиране на масива с полетите по име на дестинация int total_promo_price = 0; // сума на всички промо цени for(i=0;i<n;i++) { for(j=0;j<n-1;j++) { if(strcmp(flight[j].destination,flight[j+1].destination)>0) { tempflight=flight[j]; flight[j]=flight[j+1]; flight[j+1]=tempflight; } } total_promo_price += flight[i].promo_price; } printf("Сортирани по азбучен ред полети: \n"); for(i=0;i<n;i++) { getFlight(&flight[i]); } printf("Средна промо цена: %d / %d \n", total_promo_price, n); printf("%3.2lf\n", (float)total_promo_price/n); // т.3 списък на полетите до Париж и Лондон от 08.2011 подредени по дата на полета struct flights newflight[500]; int nn=0; for(i=0;i<n;i++) { if( (strcmp(flight[i].destination,"parij")==0 || strcmp(flight[i].destination,"london")==0) && ((flight[i].month==8) && (flight[i].year==2011)) ) { newflight[nn]=flight[i]; nn++; } } // сортиране на полетите до париж и лондон от август 2011 for(i=0;i<nn;i++) { for(j=0;j<nn-1;j++) { if(newflight[j].day>newflight[j+1].day) { tempflight=newflight[j]; newflight[j]=newflight[j+1]; newflight[j+1]=tempflight; } } } printf("Сортирани по дата полети от август месец за Париж и Лондон\n"); // печатаме по заложения от условието начин for(i=0;i<nn;i++) { printf("%d.%d.%d. %s %s %d eur.\n", newflight[i].day, newflight[i].month, newflight[i].year, newflight[i].destination, newflight[i].company, newflight[i].price); } // т.4 Авиокомпанията с най-много полети и средната отстъпка за тях + 3-те най ниски цени и тяхните направления // от самото въвеждане на полетите имаме масив с големина k, в който имаме запис за всяка компания и колко полета има, сортираме го така че в 0-левия запис да стане тази с най-много полети for(i=0;i<k;i++) { for(j=0;j<k-1;j++) if(maxflight[j].count<maxflight[j+1].count) { tempmax=maxflight[j]; maxflight[j]=maxflight[j+1]; maxflight[j+1]=tempmax; } } // след като вече имаме компанията с най-много полети в maxflight[0].company претърсваме целия масив за компанията и вадим отстъпката за всеки полет int avg_promo = 0; for(i=0;i<n;i++) { if(strcmp(flight[i].company,maxflight[0].company)==0) { avg_promo += (flight[i].price-flight[i].promo_price); } } // делим на полетите за компанията и вадим средна отстъпка printf("Средна отстъпка за полетите на %s e %3.2lf\n", maxflight[0].company, (float)avg_promo/maxflight[0].count); // т.4.2 // сортираме целия масив по промо цените в възходящ ред for(i=0;i<n;i++) { for(j=0;j<n-1;j++) { if(flight[j].promo_price>flight[j+1].promo_price) { tempflight=flight[j]; flight[j]=flight[j+1]; flight[j+1]=tempflight; } } } // и вадим първите 3 резултата printf("Трите полета с най-ниска промо цена\n"); for(i=0;i<3;i++) { getFlight(&flight[i]); } return 0; };