#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<locale.h>
#define N 50

//Структуры данных

struct dir_actors_prod
{
    char actor[N];
    char director[N];    
    char producer[N];   
};

struct film
{
    int budget;   
    int cash;
    int time;
    int year;
    int num_a;
    int num_d;
    int num_p;
    char country[N];
    char name[N];
    char rating[N];
    char type[N];
    dir_actors_prod actors[N];
    dir_actors_prod directors[N];
    dir_actors_prod producers[N];    
    film *next;   
};

//Прототипы функций

void Create(film **films); //добавление в очередь информации о фильме
void ShowList(film *films);//просмотр очереди
void WriteInFile(film *films,FILE *myfile);//запись очереди в файл
void ReadFromFile(film **films,FILE *myfile);//чтение из файла в очередь
void YearSort(film *films);//поиск фильмов по году
void TypeSort(film *films);//поиск фильмов по жанру
void CountrySort(film *films);//поиск фильмов по стране
void RatingSort(film *films);//поиск фильмов по рейтингу
void DirectorSort(film *films);//поиск фильмов по режиссеру
void ActorSort(film *films);//поиск фильмов по актеру
void ShowAllActors(film *films);//показ всех актеров по всем фильмам
void WriteOneInFile(film *films,FILE *potok);//запись одного фильма в файл
void Delete(film **h);//удаление информации по фильму из очереди

//Головная функция

int main()
{
    setlocale(LC_CTYPE,"Russian");
    film *films = NULL;
    FILE *myfile = fopen("info.txt","a+");
    while(1)
    {
        printf("==========================ИНФОРМАЦИОННАЯ СИСТЕМА КИНОТЕ");
        printf("АТРА=====================\n");
        puts("Выберите операцию:");
        puts(" 1 - Добавить фильм в инф. систему");
        puts(" 2 - Просмотр всех фильмов");
        puts(" 3 - Поиск фильмов по году");
        puts(" 4 - Поиск фильмов по жанру");
        puts(" 5 - Поиск фильмов по стране");
        puts(" 6 - Поиск фильмов по рейтингу");
        puts(" 7 - Поиск фильмов по режиссеру");
        puts(" 8 - Поиск фильмов по актеру");
        puts(" 9 - Просмотр всех актеров по всем фильмам");
        puts(" d - Удаление любого фильма из файла");
        puts(" 0 - Выйти");
        fflush(stdin);
        switch(getch())
        {
            case '1' :  //Добавить фильм в файл
                        ReadFromFile(&films,myfile);
                        Create(&films);
                        fclose(myfile);
                        myfile = fopen("info.txt","w+");
                        WriteInFile(films,myfile);
                        fclose(myfile);                        
                        break;
            case '2' :  //Просмотр всех фильмов из файла
                        free(films);
                        films = NULL;
                        myfile = fopen("info.txt","a+");
                        ReadFromFile(&films,myfile);
                        ShowList(films);
                        fclose(myfile);
                        free(films);
                        films = NULL;
                        break;
            case '3' :  //Поиск фильмов по году
                        free(films);
                        films = NULL;
                        myfile = fopen("info.txt","a+");
                        ReadFromFile(&films,myfile);                
                        YearSort(films);
                        fclose(myfile);
                        free(films);
                        films = NULL;
                        break;
            case '4' :  //Поиск фильмов по определенному жанра
                        free(films);
                        films = NULL; 
                        myfile = fopen("info.txt","a+");
                        ReadFromFile(&films,myfile); 
                        TypeSort(films);
                        fclose(myfile);
                        free(films);
                        films = NULL;
                        break;
            case '5' :  //Поиск фильмов по стране
                        free(films);
                        films = NULL;
                        myfile = fopen("info.txt","a+");
                        ReadFromFile(&films,myfile);
                        CountrySort(films);
                        fclose(myfile);
                        free(films);
                        films = NULL;
                        break;
            case '6' :  //Поиск фильмов по рейтингу
                        free(films);
                        films = NULL;
                        myfile = fopen("info.txt","a+");
                        ReadFromFile(&films,myfile);
                        RatingSort(films);
                        fclose(myfile);
                        free(films);
                        films = NULL;
                        break; 
            case '7' :  //Поиск фильмов по режиссеру
                        free(films);
                        films = NULL;
                        myfile = fopen("info.txt","a+");
                        ReadFromFile(&films,myfile);
                        DirectorSort(films);
                        fclose(myfile);
                        free(films);
                        films = NULL;
                        break;
            case '8' :  //Поиск фильмов по актеру
                        free(films);
                        films = NULL;
                        myfile = fopen("info.txt","a+");
                        ReadFromFile(&films,myfile);
                        ActorSort(films);
                        fclose(myfile);
                        free(films);
                        films = NULL;
                        break;
            case '9' :  //Показ всех актеров по всем фильмам
                        free(films);
                        films = NULL;
                        myfile = fopen("info.txt","a+");
                        ReadFromFile(&films,myfile);
                        ShowAllActors(films);
                        fclose(myfile);
                        free(films);
                        films = NULL;
                        break;
            case 'd' :  //удаление любого фильма из файла
                        free(films);
                        films = NULL;
                        myfile = fopen("info.txt","a+");
                        ReadFromFile(&films,myfile);
                        fclose(myfile);
                        Delete(&films);
                        myfile = fopen("info.txt","w");
                        WriteInFile(films,myfile);
                        fclose(myfile);
                        free(films);
                        films = NULL;
                        break;                                                                                                              
            case '0' :  return 0;                      
        }
    } 
system("pause");    
}

//Функция добавления в очередь информации о фильме

void Create(film **films)
{
    system("cls");
    film *films_copy;
    do{
        if(!(films_copy = (film *)calloc(1,sizeof(film))))
        {
            puts("===Нет свободной памяти===");
            return;
        }
        //Непосредственно ввод данных
        printf("Введите название фильма:");
        fflush(stdin);
        gets(films_copy->name);
        strcat(films_copy->name,"\n");
        printf("Введите год выпуска фильма:");
        scanf("%d",&films_copy->year);
        printf("Введите жанр фильма:");
        fflush(stdin);
        gets(films_copy->type);
        strcat(films_copy->type,"\n");
        printf("Введите страну:");
        fflush(stdin);
        gets(films_copy->country);
        strcat(films_copy->country,"\n");
        printf("Введите бюджет фильма:");
        scanf("%d",&films_copy->budget);
        printf("Введите сборы в мире:");
        scanf("%d",&films_copy->cash);
        printf("Введите рейтинг:(*-ми(макс *****)):");
        fflush(stdin);
        gets(films_copy->rating);
        strcat(films_copy->rating,"\n");
        printf("Введите количество режиссеров:");
        scanf("%d",&films_copy->num_d);
        printf("  ====Ввод режиссеров====\n\n");
        for(int i=0;i<films_copy->num_d;i++)
        {
            printf("        Введите имя %d -го режиссера:",i+1);
            fflush(stdin);
            gets(films_copy->directors[i].director);
            strcat(films_copy->directors[i].director,"\n");
        }
        printf("Введите кол-во актеров:");
        scanf("%d",&films_copy->num_a);
        printf("  ====Ввод актеров====\n\n");
        for(int i=0;i<films_copy->num_a;i++)
        {
            printf("        Введите %d -го актера:",i+1);
            fflush(stdin);
            gets(films_copy->actors[i].actor);
            strcat(films_copy->actors[i].actor,"\n");
        }
        printf("Введите кол-во продюссеров:");
        scanf("%d",&films_copy->num_p);
        printf("  ====Ввод продюссеров====\n\n");
        for(int i=0;i<films_copy->num_p;i++)
        {
            printf("        Введите %d -го продюссера:",i+1);
            fflush(stdin);
            gets(films_copy->producers[i].producer);
            strcat(films_copy->producers[i].producer,"\n");
        }
        //Тут заканчивается непосредственно ввод данных        
        if(!*films) *films = films_copy;//если очередь не создана
        else
        {
            films_copy->next = *films;
            *films = films_copy;
        }
        puts("Продолжить ввод фильмов?(y/n)");
        fflush(stdin);
      }while(getch() == 'y');
}

//Функция просмотра всех фильмов из файла

void ShowList(film *films)
{
    system("cls");
    if(!films)
    {
        puts("Очередь пуста!");
        return;
    }
    printf("\n==============================СПИСОК ФИЛЬМОВ========");
    printf("===========================\n\n");
    do{
        if(films->name[0] != '\0'){
        printf("Название фильма:%s",films->name);
        printf("Год выпуска:%d\n",films->year);
        printf("Жанр фильма:%s",films->type);
        printf("Страна:%s",films->country);
        printf("Бюджет:%d дол.\n",films->budget);
        printf("Сборы в мире:%d дол.\n",films->cash);
        printf("Рейтинг:%s",films->rating);
        printf("Режиссеры:\n");
        for(int i=0;i<films->num_d;i++) 
        printf("   %s",films->directors[i].director);
        printf("Актеры:\n");
        for(int i=0;i<films->num_a;i++) 
        printf("   %s",films->actors[i].actor);
        printf("Продюссеры:\n");
        for(int i=0;i<films->num_p;i++) 
        printf("   %s",films->producers[i].producer);
        printf("\n===================================================");
        printf("============================\n\n");}
        films = films->next;
      }while(films);
      system("pause");
      system("cls");
}

//Функция записи очереди в файл

void WriteInFile(film *films,FILE *myfile)
{
    if(!films)
    {
        puts("\nЗапись в файл невозможна!\n");
        return;
    }
    do{
        if(films->name[0] != '\0')
        {
            fputs(films->name,myfile);
            fprintf(myfile,"%d\n",films->year);
            fputs(films->type,myfile);
            fputs(films->country,myfile);
            fprintf(myfile,"%d\n",films->budget);
            fprintf(myfile,"%d\n",films->cash);
            fputs(films->rating,myfile);
            fprintf(myfile,"%d\n",films->num_d);
            for(int i=0;i<films->num_d;i++) 
            fputs(films->directors[i].director,myfile);
            fprintf(myfile,"%d\n",films->num_a);
            for(int i=0;i<films->num_a;i++) 
            fputs(films->actors[i].actor,myfile);
            fprintf(myfile,"%d\n",films->num_p);
            for(int i=0;i<films->num_p;i++) 
        fputs(films->producers[i].producer,myfile);
        }
        films = films->next;        
      }while(films);  
}

//Функция чтения из файла в очередь

void ReadFromFile(film **films,FILE *myfile)
{
    film *films_copy;
    rewind(myfile);
    do{
        if(!(films_copy = (film *)calloc(1,sizeof(film))))
        {
            puts("Нет свободной памяти!");
            return;
        }        
        fgets(films_copy->name,N,myfile);//считываем имя из файла
        fscanf(myfile,"%d\n",&films_copy->year);//год выпуска
        fgets(films_copy->type,N,myfile);//жанр
        fgets(films_copy->country,N,myfile);//страна
        fscanf(myfile,"%d\n",&films_copy->budget);//бюджет
        fscanf(myfile,"%d\n",&films_copy->cash);//сборы в мире
        fgets(films_copy->rating,N,myfile);//рейтинг
        fscanf(myfile,"%d\n",&films_copy->num_d);
        for(int i=0;i<films_copy->num_d;i++)
        fgets(films_copy->directors[i].director,N,myfile);
        fscanf(myfile,"%d\n",&films_copy->num_a);
        for(int i=0;i<films_copy->num_a;i++)
        fgets(films_copy->actors[i].actor,N,myfile);
        fscanf(myfile,"%d\n",&films_copy->num_p);
        for(int i=0;i<films_copy->num_p;i++)
        fgets(films_copy->producers[i].producer,N,myfile);
        if(!*films) *films = films_copy;
        else
        {
            films_copy->next = *films;
            *films = films_copy;
        }
      }while(!feof(myfile));    
}

//Функция поиска фильмов по заданному году

void YearSort(film *films)
{
    FILE *potok;
    int y_flag;
    int year;
    char *name = (char *)malloc(N*sizeof(char));
    system("cls");
    printf("Записать рез-ты поиска в файл?(0-нет/1-да):");
    scanf("%d",&y_flag);
    if(y_flag == 1)
    {        
        printf("Введите имя файла:");
        fflush(stdin);
        gets(name);
        strcat(name,".txt");
        potok = fopen(name,"w");
    }
    else y_flag == 0;
    system("cls");
    if(!films)
    {
        puts("Очередь пуста!");
        return;
    }
    printf("Введите год:");
    scanf("%d",&year);
    system("cls");
    printf("\n==============================СПИСОК ФИЛЬМОВ %d-го года==");
    printf("=====================\n\n",year);
    do{
        if(films->name[0] != '\0' && year == films->year){
        printf("Название фильма:%s",films->name);
        printf("Год выпуска:%d\n",films->year);
        printf("Жанр фильма:%s",films->type);
        printf("Страна:%s",films->country);
        printf("Бюджет:%d дол.\n",films->budget);
        printf("Сборы в мире:%d дол.\n",films->cash);
        printf("Рейтинг:%s",films->rating);
        printf("Режиссеры:\n");
        for(int i=0;i<films->num_d;i++) 
        printf("   %s",films->directors[i].director);
        printf("Актеры:\n");
        for(int i=0;i<films->num_a;i++) 
        printf("   %s",films->actors[i].actor);
        printf("Продюссеры:\n");
        for(int i=0;i<films->num_p;i++) 
        printf("   %s",films->producers[i].producer);
        printf("\n================================================");
        printf("===============================\n\n");
        if(y_flag == 1) WriteOneInFile(films,potok);
        }       
        films = films->next;
      }while(films);     
      system("pause"); 
}

//Функция сортировки по определенному жанру

void TypeSort(film *films)
{
    FILE *potok;
    int y_flag;
    int flag;
    char *type = (char *)malloc(N*sizeof(char));
    char *copy = (char *)malloc(N*sizeof(char));
    char *name = (char *)malloc(N*sizeof(char));
    system("cls");
    printf("Записать рез-ты поиска в файл?(0-нет/1-да):");
    scanf("%d",&y_flag);
    if(y_flag == 1)
    {
        printf("Введите имя файла:");
        fflush(stdin);
        gets(name);
        strcat(name,".txt");
        potok = fopen(name,"w");
    }
    else y_flag == 0;
    if(!films)
    {
        puts("Очередь пуста!");
        return;
    }
    printf("Ввести свой жанр/выбрать из популярных(0/1):");
    scanf("%d",&flag);
    if(flag == 0)
    {
        system("cls");
        printf("Введите жанр:");
        fflush(stdin);
        gets(type);
        strcpy(copy,type);
        strcat(type,"\n");
    }
    else if(flag == 1)
    {
        system("cls");
        puts("Выберите жанр:\n");
        puts(" 1 - Action\n 2 - Fantasy\n 3 - Sport\n 4 - Drama");
        fflush(stdin);
        switch(getch())
        {
            case '1' : strcpy(copy,"Action");
                       strcpy(type,"Action\n");   break;
            case '2' : strcpy(copy,"Fantasy");
                       strcpy(type,"Fantasy\n");  break;
            case '3' : strcpy(copy,"Sport");
                       strcpy(type,"Sport\n");    break;
            case '4' : strcpy(copy,"Drama");
                       strcpy(type,"Drama\n");    break;
        }       
    }
    system("cls");
    printf("\n==============================СПИСОК ФИЛЬМОВ(Жанр:%s)====");
    printf("===================\n\n",copy);
    do{
        if(films->name[0] != '\0' && !strcmp(films->type,type))
        {
            printf("Название фильма:%s",films->name);
            printf("Год выпуска:%d\n",films->year);
            printf("Жанр фильма:%s",films->type);
            printf("Страна:%s",films->country);
            printf("Бюджет:%d дол.\n",films->budget);
            printf("Сборы в мире:%d дол.\n",films->cash);
            printf("Рейтинг:%s",films->rating);
            printf("Режиссеры:\n");
            for(int i=0;i<films->num_d;i++) 
            printf("   %s",films->directors[i].director);
            printf("Актеры:\n");
            for(int i=0;i<films->num_a;i++) 
            printf("   %s",films->actors[i].actor);
            printf("Продюссеры:\n");
            for(int i=0;i<films->num_p;i++) 
            printf("   %s",films->producers[i].producer);
            printf("\n===========================================");
            printf("====================================\n\n");
           if(y_flag == 1) WriteOneInFile(films,potok);
        }
        films = films->next;
      }while(films);
      system("pause");
}

//Функция поиска фильмов по стране

void CountrySort(film *films)
{
    FILE *potok;
    int y_flag;
    char *country = (char *)malloc(N*sizeof(char));
    char *name = (char *)malloc(N*sizeof(char));
    system("cls");
    printf("Записать рез-ты поиска в файл?(0-нет/1-да):");
    scanf("%d",&y_flag);
    if(y_flag == 1)
    {
        printf("Введите имя файла:");
        fflush(stdin);
        gets(name);
        strcat(name,".txt");
        potok = fopen(name,"w");
    }
    else y_flag == 0;
    printf("Введите страну для поиска:");
    fflush(stdin);
    gets(country);    
    if(!films)
    {
        puts("Очередь пуста!");
        return;
    }
    system("cls");
    printf("\n==============================СПИСОК ФИЛЬМОВ(Страна:%s)==");
    printf("=====================\n\n",country);
    strcat(country,"\n");
    do{
        if(films->name[0] != '\0' && !strcmp(films->country,country)){
        printf("Название фильма:%s",films->name);
        printf("Год выпуска:%d\n",films->year);
        printf("Жанр фильма:%s",films->type);
        printf("Страна:%s",films->country);
        printf("Бюджет:%d дол.\n",films->budget);
        printf("Сборы в мире:%d дол.\n",films->cash);
        printf("Рейтинг:%s",films->rating);
        printf("Режиссеры:\n");
        for(int i=0;i<films->num_d;i++) 
        printf("   %s",films->directors[i].director);
        printf("Актеры:\n");
        for(int i=0;i<films->num_a;i++) 
        printf("   %s",films->actors[i].actor);
        printf("Продюссеры:\n");
        for(int i=0;i<films->num_p;i++) 
        printf("   %s",films->producers[i].producer);
        printf("\n=====================================================");
        printf("==========================\n\n");
        if(y_flag == 1) WriteOneInFile(films,potok);
        }
        films = films->next;
      }while(films);
      system("pause");
}

//Функция поиска фильмов по рейтингу

void RatingSort(film *films)
{
    FILE *potok;
    int y_flag;
    char *rating = (char *)malloc(N*sizeof(char));
    char *name = (char *)malloc(N*sizeof(char));
    system("cls");
    printf("Записать рез-ты поиска в файл?(0-нет/1-да):");
    scanf("%d",&y_flag);
    if(y_flag == 1)
    {
        printf("Введите имя файла:");
        fflush(stdin);
        gets(name);
        strcat(name,".txt");
        potok = fopen(name,"w");
    }
    else y_flag == 0;
    printf("Введите рейтинг фильма для поиска:");
    fflush(stdin);
    gets(rating);
    if(!films)
    {
        puts("Очередь пуста!");
        return;
    }
    system("cls");
    printf("\n==============================СПИСОК ФИЛЬМОВ(Рейтинг:%s)===");
    printf("====================\n\n",rating);
    strcat(rating,"\n");
    do{
        if(films->name[0] != '\0' && !strcmp(films->rating,rating)){
        printf("Название фильма:%s",films->name);
        printf("Год выпуска:%d\n",films->year);
        printf("Жанр фильма:%s",films->type);
        printf("Страна:%s",films->country);
        printf("Бюджет:%d дол.\n",films->budget);
        printf("Сборы в мире:%d дол.\n",films->cash);
        printf("Рейтинг:%s",films->rating);
        printf("Режиссеры:\n");
        for(int i=0;i<films->num_d;i++) 
        printf("   %s",films->directors[i].director);
        printf("Актеры:\n");
        for(int i=0;i<films->num_a;i++) 
        printf("   %s",films->actors[i].actor);
        printf("Продюссеры:\n");
        for(int i=0;i<films->num_p;i++) 
        printf("   %s",films->producers[i].producer);
        printf("\n======================================================");
        printf("=========================\n\n");
        if(y_flag == 1) WriteOneInFile(films,potok);
        }
        films = films->next;
      }while(films);
      system("pause");
}

//Функция поиска фильмов по режиссеру

void DirectorSort(film *films)
{
    FILE *potok;
    int y_flag;
    char *director = (char *)malloc(N*sizeof(char));
    char *name = (char *)malloc(N*sizeof(char));
    system("cls");
    printf("Записать рез-ты поиска в файл?(0-нет/1-да):");
    scanf("%d",&y_flag);
    if(y_flag == 1)
    {
        printf("Введите имя файла:");
        fflush(stdin);
        gets(name);
        strcat(name,".txt");
        potok = fopen(name,"w");
    }
    else y_flag == 0;
    printf("Введите имя режиссера для поиска фильмов:");
    fflush(stdin);
    gets(director);
    if(!films)
    {
        puts("Очередь пуста!");
        return;
    }
    system("cls");
    printf("\n==============================СПИСОК ФИЛЬМОВ(Режиссер:%s)=");
    printf("======================\n\n",director);
    strcat(director,"\n");
    do{
        for(int i=0;i<films->num_d;i++)
        {
            if(films->name[0] != '\0' && 
            !strcmp(films->directors[i].director,director))
            {
                printf("Название фильма:%s",films->name);
                printf("Год выпуска:%d\n",films->year);
                printf("Жанр фильма:%s",films->type);
                printf("Страна:%s",films->country);
                printf("Бюджет:%d дол.\n",films->budget);
                printf("Сборы в мире:%d дол.\n",films->cash);
                printf("Рейтинг:%s",films->rating);
                printf("Режиссеры:\n");
                for(int i=0;i<films->num_d;i++) 
                printf("   %s",films->directors[i].director);
                printf("Актеры:\n");
                for(int i=0;i<films->num_a;i++) 
                printf("   %s",films->actors[i].actor);
                printf("Продюссеры:\n");
                for(int i=0;i<films->num_p;i++) 
                printf("   %s",films->producers[i].producer);
                printf("\n============================================");
                printf("===================================\n\n");
                if(y_flag == 1) WriteOneInFile(films,potok);
            }
        }
        films = films->next;
      }while(films);
      fclose(potok);
      system("pause");
}

//Функция поиска фильмов по определенному актеру

void ActorSort(film *films)
{
    FILE *potok;
    int y_flag;
    char *actor = (char *)malloc(N*sizeof(char));
    char *name = (char *)malloc(N*sizeof(char));
    system("cls");
    printf("Записать рез-ты поиска в файл?(0-нет/1-да):");
    scanf("%d",&y_flag);
    if(y_flag == 1)
    {
        printf("Введите имя файла:");
        fflush(stdin);
        gets(name);
        strcat(name,".txt");
        potok = fopen(name,"w");
    }
    else y_flag == 0;
    printf("Введите имя актера для поиска фильмов:");
    fflush(stdin);
    gets(actor);
    if(!films)
    {
        puts("Очередь пуста!");
        return;
    }
    system("cls");
    printf("\n==============================СПИСОК ФИЛЬМОВ(Актер:%s)===",actor);
    printf("====================\n\n",actor);
    strcat(actor,"\n");
    do{
        for(int i=0;i<films->num_a;i++)
        {
            if(films->name[0] != '\0' && 
            !strcmp(films->actors[i].actor,actor))
            {
                printf("Название фильма:%s",films->name);
                printf("Год выпуска:%d\n",films->year);
                printf("Жанр фильма:%s",films->type);
                printf("Страна:%s",films->country);
                printf("Бюджет:%d дол.\n",films->budget);
                printf("Сборы в мире:%d дол.\n",films->cash);
                printf("Рейтинг:%s",films->rating);
                printf("Режиссеры:\n");
                for(int i=0;i<films->num_d;i++) 
                printf("   %s",films->directors[i].director);
                printf("Актеры:\n");
                for(int i=0;i<films->num_a;i++) 
                printf("   %s",films->actors[i].actor);
                printf("Продюссеры:\n");
                for(int i=0;i<films->num_p;i++) 
                printf("   %s",films->producers[i].producer);
                printf("\n============================================");
                printf("===================================\n\n");
                if(y_flag == 1) WriteOneInFile(films,potok);
            }
        }
        films = films->next;
      }while(films);
      system("pause");
}

//Функция показа всех актеров по всем фильмам

void ShowAllActors(film *films)
{
    if(!films)
    {
        puts("Очередь пуста!");
        return;
    }
    system("cls");
    printf("\n==============================СПИСОК ВСЕХ АКТЕРОВ======");
    printf("=================\n\n");
    do{
        if(films->name[0] != '\0')
        {
            for(int i=0;i<films->num_a;i++) 
            printf("   %s",films->actors[i].actor);
        }        
        films = films->next;
      }while(films);
      system("pause");
      system("cls");
}

//Функция записи информации по 1-му фильму в файл

void WriteOneInFile(film *films,FILE *potok)
{
        fputs(films->name,potok);
        fprintf(potok,"%d\n",films->year);
        fputs(films->type,potok);
        fputs(films->country,potok);
        fprintf(potok,"%d\n",films->budget);
        fprintf(potok,"%d\n",films->cash);
        fputs(films->rating,potok);
        fprintf(potok,"%d\n",films->num_d);
        for(int i=0;i<films->num_d;i++) 
        fputs(films->directors[i].director,potok);
        fprintf(potok,"%d\n",films->num_a);
        for(int i=0;i<films->num_a;i++) 
        fputs(films->actors[i].actor,potok);
        fprintf(potok,"%d\n",films->num_p);
        for(int i=0;i<films->num_p;i++) 
        fputs(films->producers[i].producer,potok);   
}

//Функция удаления из очереди

void Delete(film **h)
{
   system("cls"); 
   char *st = (char *)malloc(N*sizeof(char));
   printf("Введите название фильма для удаления:");
   fflush(stdin);
   gets(st);
   strcat(st,"\n"); 
   film *f,*pr;
   if (!(*h)->next && // в очереди только один элемент
   (!strcmp((*h)->name,st) || *st=='\0'))
   {
      free(*h);
      *h=NULL; // очередь пуста
      return;
   }
   pr=*h;
   f=pr; // далее f предыдущий к pr элемент
   while(pr)
   {
      if (!strcmp(pr->name,st)) // найден элемент со строкой st
      {
         if (pr==*h) {*h=pr->next; free(pr); f=pr=*h;}
         else
         {
            f->next=pr->next; // обходим элемент pr
            free(pr); // удаляем элемент pr очереди
            pr=f->next; // выбор следующего элемента очереди pr
         }
      }
      else {f=pr; pr=pr->next;} // переход к следующему элементу
   }
   puts("\n\n===Фильм удален!!!===\n\n"); 
   system("pause");  
}
Соседние файлы в папке MY TR(variant 19)