RR

Run Settings
LanguageC
Language Version
Run Command
/** * file rr_kozynets.c * author Козинець Т.М. гр. 515, варіант 4 * date 22.05.2025 * brief Розрахункова робота * * База даних перельотів */ #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Flight { char departure[50]; char destination[50]; int flightNumber; char planeType[30]; int seatCount; struct Flight *next; } Flight; Flight* loadFlights(const char *filename) { FILE *file = fopen(filename, "rb"); if (!file) return NULL; Flight *head = NULL, *last = NULL; Flight temp; while (fread(&temp, sizeof(Flight) - sizeof(Flight*), 1, file)) { Flight *newNode = (Flight*)malloc(sizeof(Flight)); memcpy(newNode, &temp, sizeof(Flight) - sizeof(Flight*)); newNode->next = NULL; if (!head) head = newNode; else last->next = newNode; last = newNode; } fclose(file); return head; } void saveFlights(const char *filename, Flight *head) { FILE *file = fopen(filename, "wb"); if (!file) return; while (head) { fwrite(head, sizeof(Flight) - sizeof(Flight*), 1, file); head = head->next; } fclose(file); } void addFlight(Flight **head) { Flight *newNode = (Flight*)malloc(sizeof(Flight)); printf("Enter departure: "); scanf("%s", newNode->departure); printf("Enter destination: "); scanf("%s", newNode->destination); printf("Enter flight number: "); scanf("%d", &newNode->flightNumber); printf("Enter plane type: "); scanf("%s", newNode->planeType); printf("Enter seat count: "); scanf("%d", &newNode->seatCount); newNode->next = *head; *head = newNode; } void deleteFlight(Flight **head, int flightNumber) { Flight *curr = *head, *prev = NULL; while (curr && curr->flightNumber != flightNumber) { prev = curr; curr = curr->next; } if (!curr) { printf("Flight not found.\n"); return; } if (!prev) *head = curr->next; else prev->next = curr->next; free(curr); } void editFlight(Flight *head, int flightNumber) { while (head && head->flightNumber != flightNumber) head = head->next; if (!head) { printf("Flight not found.\n"); return; } printf("New departure: "); scanf("%s", head->departure); printf("New destination: "); scanf("%s", head->destination); printf("New plane type: "); scanf("%s", head->planeType); printf("New seat count: "); scanf("%d", &head->seatCount); } void viewFlights(Flight *head) { while (head) { printf("Flight %d: %s -> %s, Plane: %s, Seats: %d\n", head->flightNumber, head->departure, head->destination, head->planeType, head->seatCount); head = head->next; } } void findByDestination(Flight *head, const char *dest) { while (head) { if (strcmp(head->destination, dest) == 0) printf("Flight %d, Plane: %s\n", head->flightNumber, head->planeType); head = head->next; } } void findByPlaneType(Flight *head, const char *type) { while (head) { if (strcmp(head->planeType, type) == 0) printf("Flight %d: %s -> %s, Seats: %d\n", head->flightNumber, head->departure, head->destination, head->seatCount); head = head->next; } } void freeList(Flight *head) { while (head) { Flight *tmp = head; head = head->next; free(tmp); } } int checkLicenseKey(const char *key) { return strncmp(key, "01AF", 4) == 0; } void loadConfig(char *filename, char *key) { FILE *conf = fopen("config.txt", "r"); if (!conf) { printf("config.txt not found!\n"); exit(1); } fscanf(conf, "DB = %s\nKEY = %s", filename, key); fclose(conf); } int main() { char filename[100], key[20]; loadConfig(filename, key); if (!checkLicenseKey(key)) { printf("Invalid license key!\n"); return 1; } Flight *head = loadFlights(filename); int choice; while (1) { printf("\nMenu:\n1. Add\n2. Delete\n3. Edit\n4. View all\n5. Find by destination\n6. Find by plane type\n7. Exit\n"); scanf("%d", &choice); if (choice == 1) addFlight(&head); else if (choice == 2) { int num; printf("Flight number: "); scanf("%d", &num); deleteFlight(&head, num); } else if (choice == 3) { int num; printf("Flight number: "); scanf("%d", &num); editFlight(head, num); } else if (choice == 4) viewFlights(head); else if (choice == 5) { char dest[50]; printf("Destination: "); scanf("%s", dest); findByDestination(head, dest); } else if (choice == 6) { char type[30]; printf("Plane type: "); scanf("%s", type); findByPlaneType(head, type); } else break; } saveFlights(filename, head); freeList(head); return 0; }
Editor Settings
Theme
Key bindings
Full width
Lines